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.