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.
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
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)
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?).
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.
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.
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.