|
Posted: 5th June 2005 21:36
|
|
|
Posts: 88 Joined: 3/6/2005 Awards:
|
Well, it's not much, I adjusted most of the actor startup values(starting stats and equipment, abilities) I switched terra's normal sprite and replaced it with her esper sprite so she's always an esper, I used a hack to switch King Edgar with General Leo, and that's about it. No storyline or monster changes as of yet. I'm not going near Final fantasy Editor with a 10 foot pole. So I need to find something else to edit text with. Anyways, here are some screenshots.
![]() ![]() ![]() ![]() Oh and if anyone can locate that hack that switched Terra's normal menu portrait with that secret one from the psx disc, I'd appreciate it if you could give me the url. I'm on a different computer now and Have no clue what site it was. This post has been edited by Bulbonius on 5th June 2005 21:36 -------------------- Ff7 current game progress:Just finished the underwater reactor, on to rocket town! |
|
Post #85490
|
|
Posted: 5th June 2005 21:53
|
|
|
Posts: 2,350 Joined: 19/9/2004 Awards:
|
There's no such thing as switching Terra's portrait with the one on a PSX disk, as it isn't in the SNES ROM. Unless you're making a PSX hack, which seems unlikely.
You CAN, however, take the PSX portrait and replace one of the portrait graphics with it. Terra's is set at 0x03711B (C3:6F1B). That's a 2 byte wide pointer to the first portrait (0x0000). There are 26 entries, and they go by character ID, so the next one is Locke (0x2003) for instance. If you want to replace another portrait than Terra's, you can change to which portrait Terra points to from here. Of course, you still have to insert the portrait yourself by replacing one. If necessary, you can find the palette at 0x037100 (C3:6F00). These are 1 byte wide IDs, so if you want Locke's palette for Terra's portrait, set the byte there to 0x01. The actual palettes are stored at 0x2D5A60 (ED:5860). You can find Terra's portrait at 0x2D1F00 (ED:1D00) and it is 0x0320 bytes in length. It's uncompressed image data, but stored in a strange way. ROM 1234B CDE5A FKPLM N6789 GHIJO Screen 12345 6789A BCDEF GHIJK LMNOP Each 8x8 tile in the ROM map to the screen like so. I'm not sure exactly how the game determines what goes where, but this has always worked out fine, so just use that as a reference. Happy hacking! Edit: Are you planning on changing sprites, events, and enemy graphics/AI? With all due brutal honesty, a hack where sprites have been switched around and text altered no longer holds any real interest, as it's so easy to do and rarely very interesting. This post has been edited by Silverlance on 5th June 2005 22:00 -------------------- "Judge not a man by his thoughts and words, but by the quality and quantity of liquor in his possession and the likelyhood of him sharing." |
|
Post #85495
|
|
Posted: 5th June 2005 22:02
|
|
|
Posts: 88 Joined: 3/6/2005 Awards:
|
Actually, I have a program called sprite editor where you just import bitmaps in to the portrait section of the game. So all i'd have to do would be to import the psx face graphic(the esper one) in to the hacking program. I can't do this though, because there's somthing wrong with the particular bitmap i had, it was too small.
So i had a plan B. Some guy made an .Isp patch where he imported the picture, but I lost the website. I don't know how you guys are able to use those hex editors, they seem so complicated to me. Edit: Yes I will be changing many more things in the future, this is a beta version. There will be a lot more enemies and Ai,i dont know how to change events though. This post has been edited by Bulbonius on 5th June 2005 22:05 -------------------- Ff7 current game progress:Just finished the underwater reactor, on to rocket town! |
|
Post #85496
|
|
Posted: 5th June 2005 22:12
|
|
|
Posts: 1,640 Joined: 21/6/2004 Awards:
|
Quote I don't know how you guys are able to use those hex editors, they seem so complicated to me. To me, using a hex editor is the only way to hack, and I think Silverlance might agree with me here. I don't feel like I'm doing any work if I just use an editor. -------------------- Is PJ |
|
Post #85499
|
|
Posted: 5th June 2005 22:24
|
|
|
Posts: 2,350 Joined: 19/9/2004 Awards:
|
Quote (Bulbonius @ 5th June 2005 17:02) I don't know how you guys are able to use those hex editors, they seem so complicated to me. Well, if you're making a hack then you SHOULD be using one right now... otherwise that's just an edit of the ROM assisted by programs other people made. A hex editor is easy to use once you've understood binary and hexadecimal. Here's a quick primer, I'll get back to the editor later. Decimal Decimal is a base 10 numbering system. That means there are 10 values a number can have: 0 1 2 3 4 5 6 7 8 9. When you've counted all the way up to the 10th value (9) and need to add another one, you simply increase the next number and start over with the current number (09 -> 10. The 0 is incremented and the 9 is reset to 0.) This, we learn in preschool. You can figure out the value of a decimal number by taking every number and decomposing them into powers of, being in a base 10 system, 10. 4812 4 x 1000 (or 10 to the 3rd power) 8 x 100 (or 10 to the 2nd power) 1 x 10 (or 10 to the 1st power) 2 x 1 (or 10 to the 0th power) This, you learn in grade school, and probably never thought much about it because it seems so simple. It is, however, the key to understanding how other numbering systems work. Binary Binary is base 2. This means every number has only 2 symbols: 0 and 1. After 1, you increase the next digit by 1 and reset the current one. Let's have a slightly more complex example than when we were reviewing base ten. 10011 + 1 -> 10012 -> 10020 -> 10100 So we add 1 to 10011. Since that first 1 is the highest value a digit can have, we reset it to 0 and add 1 to the next digit. That one is already at 1, so we rest it to 0 and increase the next digit. That one is at 0, so luckily we can stop there and increase it to 1. Starting to get the picture? How do we count in base 2 then? Just like base 10, only with powers of 2. 10011 1 x 16 (2 to the 4th power) 0 x 8 (2 to the 3rd power) 0 x 4 (2 to the 2nd power) 1 x 2 (2 to the 1st power) 1 x 1 (2 to the 0th power) 16 + 2 + 1: 19. Binary, in computer architectures, is usually sliced up into sets of 8 digits (8 bits) to represent what is called a byte. It's a good idea to memorise the powers of 2 up to the 7th (128 64 32 16 8 4 2 1) Hexadecimal Hex is base 16. This means we have 16 values for a single digit. I'm not going to give examples out for this because you should be getting the hang of this by now. A: 10 B: 11 C: 12 D: 13 E: 14 F: 15 How do we count in hex? Using powers of 16, of course! 10FF 1 x 4096 (16 to the 3rd power) 0 x 256 (16 to the 2nd power) F (15) x 16 (16 to the 1st power) F (15) x 1 (16 to the 0th power) 4096 + 240 + 15 = 4351. Hex is usually represented by preceding it with 0x. For instance, 0x10FF. Hex to Binary This deserves special mention. How can you quickly convert, say, 0xD3 into binary? Easy: split it into two. D (13): 1101 3: 0011 Then stick them together: 1101 0011. There you go. The reverse holds true. You can seperate binary into chunks of 4 to have hex. The binary value: 1011001010110101001010 Seperated into chunks of 4: (00)10 1100 1010 1101 0100 1010 In hex: 2 12© 10(A) 13(D) 4 10(A) 0x02CADA. Now, all's you have to keep in mind is that everything you see in a hex editors is a series of values. These can map to a number of things. - They can be actual numbers, such as the stats a character has or the values associated with a spell. - They can also be graphic or sound data. These, you'd need a special program to edit as no ROM hacker is insane enough to draw graphics in plain hex unless they have a LOT of time on their hands. - Text is possible, too. A value would map to a letter. For instance 0x00: A, 0x01: B, 0x02: C... - Finally, they can be commands. Often this would be assemble, where one value maps to an instruction. It could also be something the game created, for instance... 0x00: Clear screen 0x01 0x??: Display message ID ?? 0x02: Wait for confirm button 0x03 0x??: Play music ID ?? Then in the game, you'd see... 0003 FA01 0A02 This means... 0x00: we clear the screen... 0x03 0xFA: we play music ID 0xFA... 0x01 0x0A: then we display message 0x0A... 0x02: and wait for the player to press "ok." Finding out what means what often involves dumping the assembly code and seeing what it does with values at certain adresses. You can also look for stuff on your own by experimenting with certain regions or trying to find numbers that seem familiar to you. -------------------- "Judge not a man by his thoughts and words, but by the quality and quantity of liquor in his possession and the likelyhood of him sharing." |
|
Post #85502
|
|
Posted: 5th June 2005 22:32
|
|
|
Posts: 88 Joined: 3/6/2005 Awards:
|
Allright, that sort of makes sense, i'll probably end up reading that post like 5 times before I get it completely though.
Wait, in hexadecimal, the first two symbols are the action and the second two are the variable, right? This post has been edited by Bulbonius on 5th June 2005 22:32 -------------------- Ff7 current game progress:Just finished the underwater reactor, on to rocket town! |
|
Post #85503
|
|
Posted: 5th June 2005 23:06
|
|
|
Posts: 2,350 Joined: 19/9/2004 Awards:
|
Not one bit. Hexadecimal is just a numbering system, like decimal and binary. It's used with computers a lot because 1 byte = 8 bits (8 binary digits) and it's much easier translating binary to hex than to decimal because of the example I gave in my previous post. If someone wanted to, they could write a hex editor in base 10. It'd just be awkward to use.
You're probably wondering why the ROM knows that the numbers in location 'x' are, for instance, graphic data. That's because it doesn't. Not right off the bat. For all it knows, that cartridge you're sticking into your SNES could be full of random values. And, in fact, that's exactly what it is: all those numbers are COMPLETELY USELESS. Now that the shock value of that statement has settled down, you're most likely wondering what I'm getting at and if it's all so useless, what's the point? The answer is because it isn't exactly useless, but it's of no use to anyone on its own. You've probably heard of assembly language. It's a programming language that allows direct communication with the processor and so forth. Assembly is stored, like everything else, as a series of 1s and 0s in sets of 8 bits (ie, a bunch of bytes.) To give it all a meaning, the SNES chipset says that value 'x' is the instruction that does this, value 'y' is the instruction that does that, and so forth. It begins reading the assembly code and says, "Hey, ok, so you want me to read data from address 'x' and write it into my graphic processing unit? Sure, I can do that." And so, the SNES reads the previously useless bytes at address 'x' and draws it onscreen. Lo and behold, now that we're doing something specific with this data, we're getting results in the form of a sprite in the middle of the screen! Why was it useless until now? Because until the SNES is told specifically by the game, "I want you to go take "this" data and do "that" with it," the data in question could be anything. The game itself decides what to do with it. And THAT, to answer your question, is why hex isn't some kind of "action and variables" thing. If it is, it's because the game's code itself reads the data and decides, itself, that when it hits 0x00 it jumps to the code that clears the screen. When it hits 0x01 it reads another byte and jumps to the code that displays a message. So forth. In the EXAMPLE I gave you, the first byte is the action and, if applicable, the next one is the variable. But this is not necessarily so; that could just as easily have been a character's stats. 0003 FA01 0A02 Byte 1: Starting MP Byte 2: MP gain per level Byte 3: Starting HP Byte 4: HP gain per level Byte 5: Starting attack power Byte 6: Attack gain per level All of a suddent, that little string of hex values seems mighty useless without knowing what it's for, huh? The key concept you have to master is understanding that be it hex, decimal, binary, octal, or even base 42, it's just a bunch of numbers. What they mean is up to the game, and it could be anything from graphics to how enemies behave. Programs only work with values, so they have to make do with what they've got and find ways to translate, say, images into numbers. Or messages into numbers. Or even the way characters move during a scripted event into numbers. -------------------- "Judge not a man by his thoughts and words, but by the quality and quantity of liquor in his possession and the likelyhood of him sharing." |
|
Post #85512
|
|
Posted: 5th June 2005 23:23
|
|
|
Posts: 88 Joined: 3/6/2005 Awards:
|
Ok, then
F132 would mean F(15)x4096=61440 1x256=256 3x16=48 2x1=2 so F132=61746 I THINK IM LEARNING! -------------------- Ff7 current game progress:Just finished the underwater reactor, on to rocket town! |
|
Post #85515
|
|
Posted: 5th June 2005 23:34
|
|
|
Posts: 2,350 Joined: 19/9/2004 Awards:
|
Congrats, you've got it.
Now that you've gone through the tedious steps of learning hex, you can just use calc.exe in its scientific display mode to switch to and from hex. ;P But relying on programs to do things for you without the knowledge how to do it is a bad thing, so you haven't wasted the 5-10 minutes you've spent learning this. Now go out into the world, and make that hack of yours l33t. -------------------- "Judge not a man by his thoughts and words, but by the quality and quantity of liquor in his possession and the likelyhood of him sharing." |
|
Post #85518
|