Shining Force 2 Savestate Hacking Guide (version 1.00) by David E. Heinz (Tortoise262) Written on October 17, 2007 Questions? Comments? Anything to add? E-mail me at tortoise262@yahoo.com and make sure the subject line says something about SF2, otherwise I will delete it. ======= | INTRO | ======= I know that there are already two hacking guides to this game, so you may be wondering why I would add a third one. That's simple. There are a couple of things that stufff and taleden left out. Honestly, stufff did a fine job and I don't want to upstage him. I hacked this game long before I even knew that there were hacking guides on the internet, and one of the things I found was how to make characters fly. I emailed stufff about this several years ago, but he never replied or updated his guide and I long since forgot about it. Well I'm taking matters into my own hands now. The other two points that this guide will touch up on are a character's condition and his coordinates on the battle grid. In short, I do not intend to repeat what was already said by these two users, but to add a few more options. I am not going to go into details about how to edit save states, and I am not going to list offsets for any character other than BOWIE. It's easy enough to find the corresponding offsets for the other characters, just add 38 (56). That brings me to my final point. Any number that I mention will be in hexadecimal unless otherwise noted. Where appropriate, I may include the decimal equivalent in parentheses. Also note that this game uses Big Endian format, which means that the decimal number 256 will be expressed using two bytes as "01 00" as opposed to "00 01" Now, on to business... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Your hex editor should be displaying f (16) values in each row. This will make finding the right offsets simple. I find it helps to visualize it like this. If you want, get out a piece of graph paper and a T-square and draw the following chart, replacing the letters with an abbreviation or perhaps a little picture of what the letters represent. Or just draw some sloppy squares on a some spare stationery you stole from the office where you work, I don't care. Odd-numbered characters (BOWIE, CHESTER, KAZIN, ...) +---+---+---+---+---+---+---+---+ (BOWIE) offset = 10C78------->| A | A | A | A | A | A | A | A | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | A | A | B | C | D | D | E | E | | F | G | H | H | H | H | H | H | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | H | H | | | | | ? | ? | | | I | | I | | I | | I | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | J | J | J | J | K*| K*| L*| L*| | M | N*| O | O | | | P | P | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ Even-numbered character (SARAH, JAHA, SLADE, ...) +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | A | A | A | A | A | A | A | A | | A | A | B | C | D | D | E | E | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | F | G | H | H | H | H | H | H | | H | H | | | | | ? | ? | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | | I | | I | | I | | I | | J | J | J | J | K*| K*| L*| L*| +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ | M | N*| O | O | | | P | P | +---+---+---+---+---+---+---+---+ *: This is an area not covered by an existing save state guide for this game ===================== | (A) Character's name | ===================== The character's name in ASCII. Most hex editors will allow you to see/edit the ASCII on the right-hand side of the hex values, making it easy to find the character you want to edit. =========== | (B) Class | =========== See stufff's guide for values. =========== | (C) Level | =========== ============ | (D) Max HP | ============ =================== | (E) Current HP | =================== This value will reset to equal Max HP after a battle as long as it's not 0. ============ | (F) Max MP | ============ ================ | (G) Current MP | ================ This value will reset after a battle. ==================== | (H) Ability Scores | ==================== Each pair is a different ability. The first is ATT, then DEF, AGI, MOV The first number in each pair is the base score. The second number is the effective score including equipment and magical buffs (BOOST, ATTACK, and SLOW). It will be recalculated at the end of the character's turn, so if you want a permanent change, then change the base value (first number in the pair) When the character is promoted, MOV is reset to the default for the new class (Don't waste your Running Pimento!) ========= | (?) 03? | ========= I have no idea what this is for, but I just wanted to point out that for most characters, both values are 03. I haven't thought of any significance of that, though. =========== | (I) Items | =========== See stufff's guide for values. Add 80 (128) to equip. As for the value preceding each item, I've never seen it be anything but 00. My theory is that the programmers left the space available in case they needed to add more than 80 (128) items. Or perhaps it was an "equipped" boolean until they decided to use the +80 method. ============ | (J) Spells | ============ See stufff's guide for values. There are some really neat spells you get from dummy values, so check it out! =============== | (K) Condition | =============== These two bytes are actually a bitmap. Instead of thinking of it as a 4-digit hex number, think of it as a 16-digit binary number, or a row of 16 light switches... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A B S S A M C P P t o l i s u u o a t o o l l d r i r a s w e e d s s a c t n e l e o l k c p e d n y e d e z d d e d Maybe you'll understand it better this way: 00 00 is normal status. Add 00 01 for Paralyzed Add 00 02 for Poisoned Add 00 04 for Cursed Add 00 10 for Muddled Add 00 40 for Asleep Add 01 00 for Silenced Add 04 00 for Slow Add 10 00 for Boost Add 40 00 for Attack Some conditions seem to be covered by multiple switches, and I don't know why. I omitted repeats. At the end of the character's turn, the game recalculates whether or not he is cursed based on his equipment. Buffs such as BOOST, ATTACK, and SLOW have a specific duration of 3 turns. There must be a "turns left" value for these buffs somewhere, but I haven't found it. Also, they gradually decrease, but the magnitude of the effect is probably a function of the "turns left" value. ================= | (L) Coordinates | ================= This is the position of the character on the battle grid. The first number is the horizontal x-axis. The second number is the verticle y-axis. The upper-left corner of the map is coordinate 01 01. Count over from there. Any living character with coordinates on the playing field will be included in the turn sequence, even if he is not in your party or not active. This means that you can fight with all the characters you want! Just be warned that if there are too many sprites on the battle field, then the graphics will start getting screwy. I was excited when I read taleden's guide on how to set who is in your party and who is active, but it still didn't allow you to fight with more than 12 characters. Now you can! I did a lot of playing around with this, and there are a couple of things to point out. Changing the character's coordinates allows him to be targeted on the new square, and his flashy movement squares will generate from the new spot, but he will still act as if he's on the spot where his sprite is. The position of his sprite is somewhere else in the save state. If he can't reach his new flashy squares, he cannot move! Sucks, right? Now for the good news! When the game goes to the action screen (when someone attacks, casts a spell, or uses an item) and comes back, it will redraw the map and place your character's sprite based on the values at these offsets! Have some fun! ================ | (M) Experience | ================ ============== | (N) Mobility | ============== Ahhhh... Finally, the whole reason I wrote this guide. When going back to find the offset for mobility, I stumbled upon the condition and coordinates offsets, but this is the whole reason I even did anything. sorted by class... ARCH 80 BDBT 50 BDMN 50 BRGN 40 BRN 10 BWNT 90 GLDT 10 GLM 10 HERO 10 KNTE 20 MAGE B0 MMNK 10 MNST 60 NINJ 30 PGNT 50 PHNK 60 PHNX 50 PLDN 20 PRST C0 RBT 10 RDBN 10 RNGR 90 SDMN 10 SNIP 80 SORC B0 THIF 10 TORT 30 VICR C0 WARR 10 WFBR 30 WFMN 30 WIZ B0 sorted by value... 10 = BRN, GLDT, GLM, HERO, MMNK, RBT, RDBN, SDMN, THIF, WARR 20 = KNTE, PLDN 30 = NINJ, TORT, WFBR, WFMN 40 = BRGN 50 = BDBT, BDMN, PGNT, PHNX 60 = MNST, PHNK 80 = ARCH, SNIP 90 = BWNT, RNGR B0 = MAGE, SORC, WIZ C0 = PRST, VICR What's the significance? Some classes fly while others benefit from terrain with increased defense. For a full explanation check here: http://sf2.shiningforcecentral.com/pages/mainguide_landeffect.html Honestly, I think this person is overcomplicating a very simple issue, but the main reason I put that link there is for the chart. I'm not sure that it's 100% accurate, since mobility is based on class and nothing else, but it should be pretty close. Remember that when a character is promoted, his mobility is automatically changed to the default value of the new class, so you may have to change it again. Wanna have some fun? Try giving BOWIE the ability to fly, since he will remain on the same square once the battle ends. By doing this, you can get the treasures in Mitula's shrine and the prism flower garden. Also try sneaking behind Galam castle during battle #6. Just remember that if you end the battle on a space where you'll get stuck, you'll have to reset the game. You can also try some values that don't match up with character classes. Here are some that I've tried: 70 = Can't move, but land effect is 25%. Hmm... maybe this is the value for swimming creatures like Kraken? D0 = Huh? 6 movement points per square? OUCH! E0 = Crazy! It seems like it's harder to walk on path than on grass! Also, defense boost on squares that are normally 0. F0 = This one is really weird, and I didn't bother trying to understand it any. =========== | (O) Kills | =========== ============= | (P) Defeats | ============= ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Legal Mumbo Jumbo Feel free to distribute this guide in any form, electronic or otherwise, but it may not be altered in any way.