What do you need help on? Cancel X

BOOKMARK
Jump to:
Would you recommend this Guide? Yes No Hide
Send Skip Hide

ROM Data Guide by Dr. Fail

Version: 1.01 | Updated: 07/17/2005

                               A Guide to

                              THE 7TH SAGA

                           on  the Subject of
                                ROM Data

                               by Dr. Fail


0. Introduction
===============

0.1 Contents
============

0. Introduction

 0.1 Contents
 0.2 About this Guide
 0.3 Notes about Offsets, Byte Order, and Notation

1. ROM Data

 1.1 Format
 1.2 Table Descriptions

 0x004DF2-0x0058DE Data Table Pointer Table
 0x00623F-0x0062BC Character Statistics
 0x0062BD-0x00639C Spell Lists
 0x00639D-0x00659A Weapon Data
 0x00659B-0x006C93 Armor Data
 0x006C94-0x007017 Item Data
 0x007018-0x0072F3 Spell Data
 0x0072F4-0x008307 Monster Data
 0x008308-0x00873F Shop Data
 0x008740-0x0088E3 Apprentice Interaction Data
 0x0088E4-0x008A17 Apprentice Equipment Data
 0x008A18-0x008B17 Item Drop Sets

 0x008CC8-0x008DBA Experience Table

 0x060000-0x06FDDF Text Segment 1
 0x06FDE0-0x06FFFF (Blank)
 0x070000-0x07545F Text Segment 2

2. Other

 2.1 Legal/Disclaimers
 2.2 Thanks
 2.3 History
 2.4 Contact

0.2 About this Guide
====================

In this guide, I hope to explain what data is stored at different 
locations in the 7th Saga ROM.  Such information would be helpful to 
anyone wondering about obscure game details, looking for cheats, or 
writing hacks.  Although, why anyone would want to write a hack for 
this game in 2005, I don't know.  And, currently, there isn't enough 
information here for much besides changing statistics or overwriting 
dialog.  Maybe one day, there will be lots more stuff.  But, for trivia 
freaks and cheaters, what's here might be helpful.

Because this is a specific guide, I will not explain game concepts in 
much depth, such as the apprentice system, the idea that the 
apprentices get stronger as you do, etc.  You could easily infer this 
from a couple of the tables, but I won't go out of my way to make it 
plain.

To use the guide effectively, you should have some familiarity with 
hexadecimal (base 16).  I won't try to describe it here.  You should 
ask a math teacher or use a search engine if you need help with it.

For the stuff in here now, you don't need to know anything at all about 
SNES assembly.  I don't, and I wrote it.

All the information here was taken from one ROM image of The 7th Saga.  
If you have an image taken from a different dump, the tables might not 
match at all.  If you have an image of Elnard, I don't know if anything 
will match.

Is there something fundamental I don't seem to know about ROMs, 
headers, assembly, or anything else, by which ignorance I'm making 
mistakes and/or being a fool?  Then please, educate me.

0.3 Notes about Offsets, Byte Order, and Notation
=================================================

All offsets listed in this guide are ROM offsets, meaning that offset 
0x000000 is the start of the ROM.  This sounds very obvious, but it 
bears mentioning because the ROM file that you're probably looking at, 
you naughty intellectual property thief, you, may have a 512 byte 
header on the front of it, in which case file offsets are 0x200 higher 
than ROM offsets.  For example, if you're looking at the ROM file, and 
if you think that offset 0x001000 should have the byte value 0x76, you 
need to look at 0x001200 instead.  Just remember, if the data makes no 
sense, check at +0x200 before you give up.  You might find a utility to 
remove the header, if you like.

The game stores numerical data in 1, 2, and 3 byte sizes with the 
lowest byte first.  This means that the hex strings 01, 0100, and 
010000 would all represent the same number, 1.

Whenever I write a hex value representing a number in this guide, the 
highest byte will come first, and the value will have the prefix "0x".  
Hex strings taken directly from the ROM will have no prefix.  So, the 
decimal number 2500 will be written as either 0x09C4 or 0x0009C4, and 
it will appear in the ROM as either C409 or C40900.

Easy, isn't it?


1. ROM Data
===========

1.1 Format
==========

A table refers to any section of the ROM with a set of regular,
repeating features.  Each repetition of certain features constitutes 
an entry, and the entries taken together make up the table.

Each table description will proceed about like this:

 <Start Address>-<End Address>

 <A verbal description of the table>

 Size: <# of entries>x<entry size>

 <Names occurring in the table,
  or sequence in which lines apply to apprentices>

 Entry format: <An entry from the table,
                usually the first non-null one,
                with spaces added for clarity>

 <Explanations of the different parts of the sample entry>

The names/apprentices section is not strictly necessary.  Names are 
found using a supplied offset, but jumping to the offset, adding the 
file header length, and decoding the alphabet repeatedly can get 
tiresome.  In the case of apprentice data, the data -always- occurs in 
the same order, but it is included in each table for convenience (or 
in case some tables actually do proceed in different order).

A name value of (empty) just means that there is no name string.  The 
rest of the entry may or may not contain interesting data.

Explanations will refer to the literal data in the sample entry.  I 
think this is easier to follow than, say, using placeholders like "xxxx 
yyyy zz wwwwwwww" to indicate different byte groupings.  Especially 
when cross-referencing with a hex editor.

1.2 Table Descriptions
======================

0x004DF2-0x0058DE Data Table Pointer Table
------------------------------------------

This table contains a large number of pointers to elements in other 
tables spanning 0x00623F-0x008A17, i.e. Character Statistics through 
Apprentice Equipment Data.  This table was probably created to simplify 
changes to game data during development and testing.

Size: 932x3 bytes

Entry format: xxxxxx

xxxxxx: ROM address.  Below are the locations of addresses pointing at 
        the different tables.  Note that most of these address tables 
        are larger than the actual data tables and contain many 
        identical pointers to empty records.

        0x004DF2-0x004E09:  (8)   Character Statistics
        0x004E0A-0x004E21:  (8)   Spell Lists (list portion)
        0x004E22-0x004E39:  (8)   Spell Lists (levels portion)
        0x004F3A-0x005065:  (99)  Item Data
        0x005066-0x0050FF:  (51)  Weapon Data
        0x005100-0x005239:  (104) Armor Data
        0x00523A-0x0053FE:  (150) Spell Data
        0x0053FF-0x00570A:  (259) Monster Data
        0x00570B-0x0058AE:  (139) Shop Data
        0x0058AF-0x0058C6:  (8)   Apprentice Interaction Data
        0x0058C7-0x0058DE:  (8)   Apprentice Equipment Data
        

0x00623F-0x0062BC Character Statistics
--------------------------------------

This table determines characters' statistics at the beginning of the 
game and their gains at each level up.  Level gains do not change 
during the course of the game, but there is a variance of +/- 1 point 
to each statistic at each level up.

Size: 7x18 bytes

Names:  Kamil   Olvan   Esuna   Wilme   Lux     Valsu   Lejes

Entry format: 1000 0400 04040303 0503 03030303 6597C7 15

1000:     Character's starting HP
0400:     Character's starting MP
04040303: Character's starting Power/Guard/Magic/Speed
0503:     Character's mean gain per level (HP/MP)
03030303: Character's mean gain per level (Power/Guard/Magic/Speed)
6597C7:   Character's starting weapon/armor/misc codes
15:       Character's starting experience

0x0062BD-0x00639C Spell Lists
-----------------------------

This table indicates what spells each character will learn and the 
levels at which the spells are learnt.

Size: 7x32 bytes

Names:  Kamil   Olvan   Esuna   Wilme   Lux     Valsu   Lejes

Item format: 01182D0C19031502282E1A0D00000000 ...
             0306080A0C101113161E222400000000

First half:  Spell codes
Second half: Levels to learn corresponding spells in first half

0x00639D-0x00659A Weapon Data
-----------------------------

Contains statistics for weapons.  Duh.  SW/AX/ST etc. are abbreviations 
representing symbol characters.

Weapons have item codes 0x64-0x96.

Size: 51x10 bytes

Names:  (empty) SWTranq SWPsyte SWAnim  SWKryn  SWAnger SWNatr  SWBrill
        SWCour  SWDesp  SWFear  SWFire  SWInsa  SWVict  SWAnsc  SWDoom
        SWFort  SW      SW      SWTidal SWZnte  SWMura  KNLght  SBSaber
        KNFire  Claw    HAZnte  HAKryn  AXFire  AXPsyte AXAnim  AXAnger
        AXPower AXDesp  AXKryn  AXFear  AXMyst  AXHope  AXImmo  SWSword
        AX      STLght  STPetr  RDTide  RDConf  RDBrill RDDesp  RDNatr
        RDFear  RDMyst  RDImmo

Entry format: 0200 3200 43 4A3BC7 1400

0200:   +Power
3200:   Cost
43:     Allowed users: 0x43 = 0100 0011b
                       (nil Lejes Valsu Lux; Wilme Esuna Olvan Kamil)
4A3BC7: Name offset (& 0x0FFFFF)
1400:   Unknown


0x00659B-0x006C93 Armor Data
----------------------------

Contains statistics for body armor and other equipment.  AR/SH/RB 
etc. are abbreviations representing symbol characters.

Note the existence of an element system.

Armor/other equipment have item codes 0x97-0xFF.

Size: 105x17 bytes

Names:  ARXtri  ARPsyt  ARAnim  ARRoyl  ARCour  ARBrav  ARMystc ARFort
        MLScale MLChain MLKryn  CKFire  CKIce   RBLght  RBXtre  Xtri
        Coat    Blck    RBCttn  RBSilk  RBSeas  RBHope  RBAnger RBVict
        RBDesp  RBConf  RBMyst  RBImmo  Brwn    SH      SHXtri  SHKryn
        SHCour  SHBrill SHJust  SHSound SHMyst  SHAnger SHMystc SHFrtn
        SHImmo  SHIllus AMAmuletAMRing  (empty) (empty) Horn    Pod
        HTXtri  Scarf   MKMask  MKKryn  CRBrill (empty) (empty) (empty)
        (empty x 49)

Entry Format: 0100 5000 03 00 00 00 00 00 00 00 A73CC7 1400

0100:   +Guard
5000:   Cost
03:     Allowed users: 0x03 = 0000 0011b
                       (nil Lejes Valsu Lux; Wilme Esuna Olvan Kamil)
00[1]:  Thunder/Laser damage modifier
00[2]:  Unknown
00[3]:  Unknown
00[4]:  Fire damage modifier
00[5]:  Ice damage modifier
00[6]:  Vacuum success modifier
00[7]:  Magic success modifier
A73CC7: Name offset (& 0x0FFFFF)
1400:   Unknown

0x006C94-0x007017 Item Data
---------------------------

Contains statistics for items.  This table does not specify the item 
effect.

Items have item codes 0x00-0x63.

Size: 9x100 bytes

Names:  (empty) Winball Exigate Map     Watr Rn Wind Rn Star Rn Moon Rn
        Lght Rn Sky Rn  Wzrd Rn Potn 1  Potn 2  Potn 3  (empty) (empty)
        (empty) MHerb 1 MHerb 2 Antid   M Water Recvry  V Seed  M Seed
        P Seed  Pr Seed I Seed  A Seed  (empty) (empty) (empty) (empty)
        (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty)
        (empty) B Power (empty) (empty) (empty) Msquito M Siphn (empty)
        B Fire  (empty) B Ice   (empty) B Fossl B Aglty (empty) (empty)
        B Prtct S Dstry Vacuum  (empty) (empty) (empty) (empty) (empty)
        (empty) (empty) (empty) Mirror  Harp    (empty) (empty) Opal
        Pearl   Topaz   Ruby    Saphr   Emrld   Dmnd    (empty) (empty)
        (empty) Whstle  Mnlight Key Bri RmtCntl Jl Key  Letter  (empty)
        (empty) (empty) Ky Erth Cry Pce Star    Water RnWind Rn Star Rn
        Moon Rn Lght Rn Sky Rn  Wzrd Rn

Entry Format: 04 01 2800 7F00 FF34 C7

04:     Targeting (00 = single enemy, 01 = all enemies,
                   02 = ally, 04 = map)
01:     Single use bit (00 = reusable, 01 = destroy on use)
2800:   Cost
7F:     Allowed users: 0x7F = 0111 1111b
                     (nil Lejes Valsu Lux; Wilme Esuna Olvan Kamil)
00:     Sell ratio (00 = 50% i.e. normal, 01 = 100% i.e. gem)
FF34C7: Name offset (& 0x0FFFFF)

0x007018-0x0072F3 Spell Data
----------------------------

Contains statistics for spells.  Not too sure about the byte groupings.

Size: 61x12 bytes

Names:  (empty) FIRE 1  FIRE 2  ICE 1   ICE 2   LASER 1 LASER 2 LASER 3
        (empty) (empty) (empty) (empty) F BIRD  F BALL  BLZRD 1 BLZRD 2
        THNDER1 THNDER2 (empty) (empty) (empty) PETRIFY DEFNSE1 DEFNSE2
        HEAL 1  HEAL 2  HEAL 3  MPCTCHR AGILITY F SHID  PROTECT EXIT
        RANER   POWER   HPCTCHR ELIXIR  LEGUS   (empty) (empty) (empty)
        VACUUM1 VACUUM2 (empty) (empty) (empty) PURIFY  REVIVE1 REVIVE2
        (empty) (empty) (empty) (empty) (empty) (empty) (empty) POISON
        HAIL    (empty) (empty) (empty) (empty)

Entry Format: 1E00 00 0300 01 04 00 00 DD37C7

1E00:   Spell power (should be tested)
00:     Targeting (00 = single enemy , 01 = all enemies,
                   02 = ally, 04 = map)
0300:   MP cost
01:     Domain? (00 = all, 01 = battle, 02 = map)
04:     Element type (See Armor Data)
00:     Unknown
00:     Unknown
DD37C7: Name offset (& 0x0FFFFF)

0x0072F4-0x008307 Monster Data
------------------------------

Contains data for monsters.  Not all monsters appear in the game.  A 
few bosses are listed multiple times.

I don't know how apprentice data works here.

Size: 98x42 bytes

Names:  (empty) (empty) Demon   Trick   Titan   Coccoon Soidiek Spidek
        Mutant  Defeat  Orc     Tall    Sasee   Despair Doom    Reaper
        Desrich Manrot  Kadoom  Heysir  Blasu   Brain   Ghoul   Spirit
        Crab    Griffin Android Sage    Wyrock  Flame   Pison   R-Pison
        M-Pison Romus   Doros   Serpent Hermit  (empty) Gariso  Foma
        GORSIA  Wyvern  Undead  Lihall  Manta   S.Witch B.Night Statue
        Chimera Sword   Dragon  Doros   Gariso  GORSIA  GORSIA  GORSIA
        (empty) (empty) (empty) (empty) (empty) Plater  Falock  Debag
        B.Demon R.Demon S.Demon R.Trick K.Trick D.Trick Serpant Serpint
        S.Brain N.Brain Goron   (empty) Unded   Undeed  K.Moon  F.Night
        P.Moon  V.Night K.Night D.Night F.Witch Chimere Dergun  Dogun
        Monmo   Griffan (empty) Kamil   Olvan   Esuna   Wilme   Lux
        Valsu   Lejes

Entry format: 03 1E00 1E00 0900 0700 02 01 1817000000000000 ...
              1414000000000000 0A0A0A0A0A0A0A 0F00 02 00 00 E938C7

03:     Unknown
1E00:   Max. HP
1E00:   Max. MP
0900:   Power
0700:   Guard
02:     Magic
01:     Speed

1817000000000000: Spell list.  See Spell Data.
1414000000000000: Chance to cast spells.  Some of these sum to over 100.
                  They should be tested.
0A0A0A0A0A0A0A:   Elemental resistances.  See Armor Data.

0F00:   Gold.  Experience = 2.201 * Gold.  (thanks DragonAtma)
02:     Item drop set.  See Item Drop Sets.
00:     Unknown
00:     Run flag (00 = allowed to run, 01 = not allowed to run)
E938C7: Name offset (& 0x0FFFFF)

0x008308-0x00873F Shop Data
---------------------------

This table contains shop inventories for all the towns.

All I know is that there are offsets here referring to city names.  The 
rest is a complete mystery.

Size: 40x27 bytes

Names:  Lemele  Rablesk Bonro   Zellis  Melenam Eygus   Pell    Guntz
        Patrof  Bone    Dowaine Belaine Telaine Luze    Pang    Padal
        Baran   Polasu  Tiffana Bilthem Pandam  Brush   Valenca Bugask
        (empty) Guanta  Gorfun  Pharano Pasanda Ligena  Guanas  Palsu
        Melenam AIRSHIP Guanas  Bijenia Bulando Luze    (empty) (empty)

Entry Format: 6667808E7A 98A9000000000000 0B0C11132947484900 0400 C233C7

6667808E7A:         Item codes for weapon shop inventory
98A9000000000000:   Item codes for armor shop inventory
0B0C11132947484900: Item codes for item shop inventory
0400:               Inn cost per character
C233C7:             Name offset (& 0x0FFFFF)

0x008740-0x0088E3 Apprentice Interaction Data
---------------------------------------------

This table gives the odds for each apprentice to offer different 
speeches to the player character.  These odds always sum to 100, except 
for Kamil's speeches to Esuna which sum to 110 (bug?).

Size: 60x7 bytes

Names:  Kamil   Olvan   Esuna   Wilme   Lux     Valsu   Lejes

Entry Format: 87FBC6 0FFCC6 CCFCC6 3BFDC6 0000C7 F600C7 ...
              000000000000 1E14140A0A0A 1E280A0A0A0A ...
              0A0A14140A1E 1E1E0A0F0A05 1E1E0A0F0A05 ...
              050514140A28

87FBC6: Dialog offset: Offer to join you
0FFCC6: Dialog offset: Beg to join you
CCFCC6: Dialog offset: Make no offer
3BFDC6: Dialog offset: Ask you to get stronger
0000C7: Dialog offset: Offer to fight you
F600C7: Dialog offset: Ask you to go away

000000000000: Odds to give each speech to Kamil
1E14140A0A0A: Odds to give each speech to Olvan
1E280A0A0A0A: Odds to give each speech to Esuna
0A0A14140A1E: Odds to give each speech to Wilme
1E1E0A0F0A05: Odds to give each speech to Lux
1E1E0A0F0A05: Odds to give each speech to Valsu
050514140A28: Odds to give each speech to Lejes

0x0088E4-0x008A17 Apprentice Equipment Data
-------------------------------------------

This table shows at what level each apprentice gets certain equipment.

Size: 44x7 bytes

Names:  Kamil   Olvan   Esuna   Wilme   Lux     Valsu   Lejes

Entry Format: 02 6697B5 06 6798B6 ... 26 719EBD FF 719EBD

xx:     Level at which following items are acquired
xxxxxx: Item codes for Weapon/Armor/Other

0x008A18-0x008B17 Item Drop Sets
--------------------------------

This table controls what items an enemy may drop.  Each entry has 16 
bytes, presumably with a 1/16 chance to pick each byte.  If the byte is 
nonzero, you should get an item.

This table may have more than 16 lines.  Most of it is blank.

Size: 16x16 bytes (?)

Entry Format: 47 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00

xx: An item code.  Reminder: 0x00-0x63 are items.
                             0x64-0x96 are weapons.
                             0x97-0xFF are armors/others.

0x008CC8-0x008DBA Experience Table
----------------------------------

This table contains the experience needed to reach each level above 1.  
There is a value 0x000000 right before what I marked as the start of 
the table, but byte alignment suggests that maybe that 0x000000 belongs 
to something else.  Not a good argument?  At least I told you.

Note: The value here that corresponds to level 81 is unattainable 
because the game won't store experience amounts over 0x98967F 
(9,999,999).

Size: 81x3 bytes

Entry Format: 8C0000

8C0000: A simple 24 bit integer.  Entries appear in increasing order, 
starting with the experience needed to reach level 2.

0x060000-0x06FDDF Text Segment 1
--------------------------------

This rather large section holds most of the game text.  It contains all 
NPC dialog excluding apprentices.  A couple of Kamil's speeches are at 
the top of the segment.

It does not use ASCII nor any other common character mapping.  Included 
here is a character table with which a motivated reader may translate 
the text bytes into English.  To get the byte value for a character, 
add the row and column heading values.

    | 0x0| 0x1| 0x2| 0x3| 0x4| 0x5| 0x6| 0x7
----+----+----+----+----+----+----+----+----
0x00|  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7
0x08|  8 |  9 |    |    |    |  _ |    |
0x10|    |    |    |    |    |    |    |
0x18|    |    |    |    |    |    |    |
0x20|  A |  B |  C |  D |  E |  F |  G |  H
0x28|  I |  J |  K |  L |  M |  N |  O |  P
0x30|  Q |  R |  S |  T |  U |  V |  W |  X
0x38|  Y |  Z |  a |  b |  c |  d |  e |  f
0x40|  g |  h |  i |  j |  k |  l |  m |  n
0x48|  o |  p |  q |  r |  s |  t |  u |  v
0x50|  w |  x |  y |  z |    |    |  ? |  1
0x58|  2 |  3 |  : |  ; |    |    |    |
0x60|    |    |    |    |    |    |  ' |  "
0x68|  - |  , |  . | HT | SB | CR | MK | HA
0x70| AX | SW | KN | ST | AR | SH | CK |
0x78|    |    | AM |    |    | RD | ML | RB
0x80|    |    | <B>|    |    |  ! |    |
0x88|(MC)|    |    |(IT)|(GD)|    |    |
0x90|    |    |    |    |    |    |    |
0x98|    |    |    |    |    |    |    |
0xA0|    |    |    |    |    |    |    |
0xA8|    |    |    |    |    |    |    |
0xB0|    |    |    |    |    |    |    |
0xB8|    |    |    |    |    |    |    |
0xC0|    |    |    |    |    |    |    |
0xC8|    | __ | er | ar | an | be | re | de
0xD0| me | is | if_| ll | se | es | n't|you_
0xD8| the|The_| it_| It_| to_| We_| we | ty
0xE0|I'm_|have| ble| do | my | oo | st | ed
0xE8| on | fa | y_ | d_ | n_ | wh | in |_<B>
0xF0|    |    |    |    |    |    |    | <P>
0xF8|    |<BR>|<PD>|    |    |    |    |

Explanations of certain characters:
<B>:  Toggles bold text.
<P>:  Ends a name or dialog.
<BR>: Line break
<PD>: Page down (Shows the little triangle and pauses dialog)
(MC): Main character's name
(IT): Name of an item
(GD): A number, only seen in reference to gold.

0x00-0x09: These digits are used in dialog.
0x57-0x59: These digits are used in item/spell names.
0x6B-0x7F: Graphic symbols for weapons and armor.
0xC9-0xEF: The game manages a little bit of text compression this way, 
           by representing common letter combinations with single bytes.

0x070000-0x07545F Text Segment 2
--------------------------------

This text segment contains most of the apprentice dialog and all the 
remaining game text.  That includes Search results, name tables, menu 
text, a debug interface, etc.

It has the same format as Text Segment 1.


2. Other
========

2.1 Legal/Disclaimers
---------------------

New versions of this guide will be posted to GameFAQs.com whenever they 
exist.

The 7th Saga is copyright Produce/Enix 1993.

Any entity has the right to copy and disseminate this document subject 
to two conditions: (1) The content of this document is not altered in 
any way, and (2) No fee is charged to copy, to gain access to, or to 
grant access to either this document or any collection containing this 
document.

The information in this guide is provided "as is" with no express nor 
implied warranty of completeness, correctness, or relevance to 
anything.  Do not use the information in this guide as a flotation 
device.

Cross out the answer that we think that you think is correct, and 
circle the answer that you think that we think is correct.

Move 'Zig.'  For great justice.

2.2 Thanks
----------
- DragonAtma, for explaining why experience isn't stored anywhere.
- The 7th Saga messageboard, for existing, and for being mildly diverting.

2.3 History
-----------

07/17/05 v1.01; 15 tables, 23kB
 - Minor edits:  formatting, typos, rewriting, etc.
 - Noted possible bug in  0x008740-0x0088E3 Apprentice Interaction Data
   (Kamil addressing Esuna:  odds sum to 110)
 - Figured out 0x008308-0x00873F City Data, renamed to "Shop Data"
 - Added 0x004DF2-0x0058DE Data Table Pointer Table
 - Fixed author name

03/26/05 v1.0; 14 tables, 21kB

2.4 Contact
-----------

I welcome comments on this guide, especially since I haven't edited 
every one of these tables and verified the expected changes.  But I am 
furtive.  If you want to contact me, post something on the 7th Saga 
messageboard at GameFAQs.

View in: