What do you need help on? Cancel X
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: Thunder/Laser damage modifier 00: Unknown 00: Unknown 00: Fire damage modifier 00: Ice damage modifier 00: Vacuum success modifier 00: 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.