CoN 25th Anniversary: 1997-2022
My Ff6 hack

Posted: 5th June 2005 21:36

*
Chocobo Knight
Posts: 88

Joined: 3/6/2005

Awards:
Member of more than ten years. Member of more than five years. 
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.

user posted image

user posted image

user posted image

user posted image

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
Top
Posted: 5th June 2005 21:53

*
Cetra
Posts: 2,350

Joined: 19/9/2004

Awards:
Member of more than five years. 
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. wink.gif

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. wink.gif With the resources available for FF6 ROM hacking, some people have done complete rehauls of the game or are working on complete remakes, so a little variety would be pretty cool smile.gif

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
Top
Posted: 5th June 2005 22:02

*
Chocobo Knight
Posts: 88

Joined: 3/6/2005

Awards:
Member of more than ten years. Member of more than five years. 
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
Top
Posted: 5th June 2005 22:12

*
Climbing Marle!
Posts: 1,640

Joined: 21/6/2004

Awards:
Member of more than ten years. Participated at the forums for the CoN's 15th birthday! Major involvement in the Final Fantasy V section of CoN. Member of more than five years. 
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. dry.gif Just a matter of personal preference, I suppose.

--------------------
Is PJ
Post #85499
Top
Posted: 5th June 2005 22:24

*
Cetra
Posts: 2,350

Joined: 19/9/2004

Awards:
Member of more than five years. 
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. wink.gif

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. wink.gif

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. wink.gif But wait, 16 values? But we only have numbers that go up to 9! Never fear, we'll just dig around in the alphabet and, after 9, use letters from A to F.

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. wink.gif

- 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
Top
Posted: 5th June 2005 22:32

*
Chocobo Knight
Posts: 88

Joined: 3/6/2005

Awards:
Member of more than ten years. Member of more than five years. 
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
Top
Posted: 5th June 2005 23:06

*
Cetra
Posts: 2,350

Joined: 19/9/2004

Awards:
Member of more than five years. 
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. wink.gif The point is, hex is not a magic code. It's just a way of representing numbers.

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. biggrin.gif There's NOTHING in that cartridge ANYONE could ever hope of finding a use for!! biggrin.gif

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? wink.gif

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. smile.gif

--------------------
"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
Top
Posted: 5th June 2005 23:23

*
Chocobo Knight
Posts: 88

Joined: 3/6/2005

Awards:
Member of more than ten years. Member of more than five years. 
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
Top
Posted: 5th June 2005 23:34

*
Cetra
Posts: 2,350

Joined: 19/9/2004

Awards:
Member of more than five years. 
Congrats, you've got it. wink.gif

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. wink.gif

Now go out into the world, and make that hack of yours l33t. tongue.gif

--------------------
"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
Top
0 User(s) are reading this topic (0 Guests and 0 Anonymous Users)
0 Members: