If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working at any time.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Arcana/ROM map
< Arcana
Jump to navigation
Jump to search
(Back to Main page)
Bank $00: Common functions; Event handling
$00/89F1 Sub: RNG, can take a value ("5") and roll a range ("0-4"), or can provide a random 2 byte number through $1E0A. $00/902B Sub: Reads the event opcode from $1E10. (Very important line! Uses a jump table to run opcodes as code.) Events: These opcodes run over half of the game. Most commonly you'll find code 07 for long calling a subroutine. $00/90FA Event Opcode 01 - Loops a number of times (1 byte input) $00/911E Event Opcode 02 - Loop end: jumps back to opcode 01 $00/9140 Event Opcode 1A - Jump always (2 bytes) $00/9148 Event Opcode 03 - Jump long (3 bytes) $00/915A Event Opcode 1B - Call subroutine (2 bytes) $00/9177 Event Opcode 1C - Return from short subroutine/1B $00/918D Event Opcode 04 - Call subroutine (3 bytes) $00/91BB Event Opcode 05 - Return from long subroutine/04 $00/91DA Event Opcode 06 - Delay x frames (1 byte) $00/9527 Event Opcode 07 - Call subroutine (3 bytes) (Runs code, returns with RTL) $00/954D Event Opcode 0B - Jump if false (2 bytes) $00/9562 Event Opcode 0C - Jump if true (2 bytes) $00/9577 Event Opcode 11 - Switch-case: jump based on return value (varied inputs) $00/96CD Event Opcode 0E - Compares RAM to a value using a comparator (5 bytes) $00/974A Event Opcode 13 - Set RAM address (2 bytes) to value (1 byte) $00/975F Event Opcode 16 - Set RAM address (2 bytes) to value (2 bytes) $00/97B6 Event Opcode 1E - Load value (2 bytes) $00/97C5 Event Opcode 1F - Load value at address (2 bytes) $00/9847 Event Opcode 24 - Load a value from 1 of 4 arrays (1 byte input) $00/9C3C Sub: Set/Get Music (1 byte) $00/9C44 Sub: Set/Get SFX (1 byte) $00/9B07 Sub: Main event handler $00/A00F Sub: Check $31 for button press (2 bytes: button) $00/A022 Sub: Check $21 for button press (2 bytes: button) $00/A0AC Sub: Load text to be read (3 byte location) $00/A0BD Sub: Call RNG (1 byte), something with screen $00/A0CB Sub: Unfade from black $00/A0DB Sub: Fade to black Text opcodes: These control formatting in-between the plaintext before it's written to RAM. $00/A858 Text Opcode 00 - Null terminator/stop reading $00/A881 Text Opcode 01 - Move cursor to X,Y position $00/A898 Text Opcode 02 - Used drawing the menus $00/A8A8 Text Opcode 03 - Sets vertical spacing (03 0E = default) $00/A8C2 Text Opcode 05 - Text delay? $00/A8DE Text Opcode 06 - Sets text color (white/gray or white/yellow depending on context) $00/A902 Text Opcode 0D - Newline $00/A919 Text Opcode 14 - Writes text in RAM to the screen(2 byte address) $00/A943 Text Opcode 10 - Writes text in RAM/ROM to the screen(3 byte address) $00/A969 Text Opcode 11 - Converts number to text(3 byte address) $00/A9A8 Text Opcode 1C - Sets text scroll speed $00/A9BD Text Opcode 1D - Sets text scroll speed (1 line at a time) $00/A9C5 Text Opcode 1E - Sets text scroll speed (fast) $00/A9CD Text Opcode 7F - Wait for A press $00/AA04 Text Opcode 08 - Move cursor to X position $00/A9A8 Text Opcode 1C - Sets text scroll speed $00/A9E1 Text Opcode 1B - Draws dialogue portraits $00/BE07 Sub: Clears the screen of text $00/C055 Sub: Hit calculation start $00/C07C Sub: Unknown mod; probably adds 0 to $00 $00/C0B9 Sub: Miss check/crit check $00/C132 Sub: No-element handling $00/C2D4 Sub: Check if damage is over 999 $00/C30C Sub: Load attacking Element $00/C3CA Sub: More element handling $00/C431 Sub: Attack vs. Defense $00/C585 Sub: Load stat boost modifier $00/C5B1 Sub: Check for dead/removed actors, more $00/C658 Sub: Load Strength modifier $00/C66A Sub: Load Endurance modifier $00/C676 Sub: Load Alertness modifier $00/C68A Sub: Load Intelligence $00/C6A7 Sub: Load Intelligence $00/C6C4 Sub: Load Intelligence $00/C6DC Sub: Lots of branching. Returns crit chance or other variables $00/C781 Sub: Load Armor defense $00/C856 Sub: Loads spell power/element $00/C88B Sub: Multiplication (A * X) $00/C8A1 Sub: Multiplication (AA * X) $00/C8C2 Sub: Division (Returns A remainder, X result) $00/D137 Sub: Checks if loaded music is $33 (must be SPC commands) $00/D1AA Sub: Loads HAL Logo theme
Bank $01: Game setup, gameplay, ending
$01/8001 Game start $01/8053 A bunch of initialization/zeroing functions $01/8913 Game over $01/8C85 Event: Handle dungeon movement $01/9584 Event: Item handling outside of battle $01/9BB6 Pointer: Draw status screen ($08/C93E)
Bank $02: Battles
$02/8CF3 Event: Status handling $02/8FC9 Tbl: Boss animations $02/913D Sub: Initializes a character/monster's stats from ROM at battle start
Bank $03: Event handling, towns
$03/A457 Sub: Load current tile's encounter value $03/A499 Sub: Update dungeon progress? $03/A52A Dungeon BGM (See Music tab for ID list) $03/D5BF Item inventory limit (shops). Default $60 = $30 slots (48 items @ 8 per page) (see $07/AA28) $03/DDD6 Item slots -1 x2, used after selling an item in town to check when to stop rearranging. (see $07/AA28)(should be $5E?) $03/DF27 Bar prices (you know, the Alchemist guy) (NOTE: His prices are also plaintext in his dialogue and need to be edited separately) $03/DFA2 Bar option 2 HP gain $03/DFA4 Bar option 3 HP gain $03/DFA6 Bar option 4 HP gain $03/DFA8 Bar option 2 MP gain $03/DFAA Bar option 3 MP gain $03/DFAC Bar option 4 MP gain $03/E052 Card prices (see Inventory) $03/E2A8 Set up dialogue cursor
Bank $04: Graphics
Bank $05: Battles
$05/9F7B Names, Characters ($0A bytes per entry + 00 delimeter) $05/9FE9 Names, Enemies ($10 bytes per entry + 00 delimeter) $05/A539 Enemy postfixes A-H (I forget what 81 40 means though) $05/A554 Classes, Characters ($10 bytes per entry + 00 delimeter) NOTE: Using too long a name will result in a blank line. $05/A5FE Names, Areas ($10 bytes per entry + 00 delimeter) $05/A895 Names, Elements ($06 bytes per entry + 00 delimeter) $05/A8BF Names, Status effects ($0C bytes per entry + 00 delimeter) $05/A91A EXP to next level, Rooks? $05/A992 EXP to next level, Sylph? $05/AA0A EXP to next level, Dao? $05/AA82 EXP to next level, Marid? $05/AAFA EXP to next level, Efrite? $05/AB72 EXP to next level, Teefa $05/ABEA EXP to next level, Salah? $05/AC62 EXP to next level, Darwin? $05/ACDA EXP to next level, Axs? (60 entries x 2 bytes) $05/AD6A Level-up stats, Rooks (HP, MP, Str, End, Int, Alt) (2 bytes per entry) $05/B03A Level-up stats, Sylph $05/B2FD Level-up stats, Dao $05/B5CE Level-up stats, Marid $05/B89E Level-up stats, Efrite $05/BB7A Level-up stats, Teefa $05/BE4A Level-up stats, Salah $05/C11A Level-up stats, Darwin $05/C3EA Level-up stats, Axs $05/C6A3 A bunch of 0's and 1's $05/C8D4 Level-up spells, Rooks $05/C8E2 Level-up spells, Sylph $05/C8F2 Level-up spells, Dao $05/C8F2 Level-up spells, Marid $05/C8FB Level-up spells, Efrite $05/C904 Level-up spells, Teefa $05/C911 Level-up spells, Salah $05/C91F Level-up spells, Darwin $05/C929 Level-up spells, Axs $05/C92D Monster race/element (2 bytes per entry) (ends at 2C9CB) $05/C9CD Monster Equipment stats, several unknown (start) $05/CE54 Monster Equipment stats (end) $05/CE55 Monster HP $05/CEF5 Monster EXP $05/CF95 Monster GP $05/D035 Monster Lvl $05/D0D5 Monster ?? stat - $20 entries of 00 through 05. No idea what this is. $05/D195 Monster boss music (00 none, 01 Boss1, 03 Boss2, 02 Rimsala) $05/D1E5 Monster boss flag (00-0F are bosses, FF are not bosses) $05/D235 Monster spell. (If nonzero, there's a random chance they'll use that spell instead of attacking.) (see Spells page) $05/D285 Monster ?? stat $05/D405 Monster Armor Def table (bugged?): offset = Armor * 2 $05/D445 Monster Accessory Def table: offset = Accessory * 2 $05/D4A5 Possible monster stat $05/D565 Possible monster stat $05/DE88 Equipment prices (see Equipment tab) $05/DF79 Equipment "can be equipped by" data (see Equipment tab) $05/DFF3 Equipment power/defense $05/E0E3 Equipment race bonus/element (2 bytes per item) $05/E1D5 Equipment: weapon crit rate $05/E226 Equipment: shield mag def ($05/E1D5) $05/E24E Equipment: weapon damage penalty $05/E2C8 Equipment - spell cast in battle $05/E356 Spells' names $05/EA4D Spells’ “battle only flag” (01: out of battle only, 02: battle only, 03: either) $05/EA9F Spells’ “single/multi target flag” (00: single, 01: multi); Change Attribute is broken as ST $05/EAF1 Spells’ accuracy $05/EB4D Spells' power $05/EC04 Spells' element (paired with an unknown byte, so skip a byte for each entry) (see Magic tab) $05/ECA6 Spells' MP cost $05/ECF8 Spells' color palette (see Magic tab) $05/ED57 Spells’ sfx $05/EE9A Item names (look for LDA $05/EE9A,x or "BF 9A EE 05") $05/F038 Card names (look for LDA $05/F038,x or "BF 38 F0 05") $05/F17E Sleeping Bag HP heal amount (200 HP) (Heals everyone but the spirits) $05/F180 Sleeping Bag MP heal amount (25 MP) $05/F194 Tent HP heal amount (999 MP) (Heals everyone but the spirits) $05/F196 Tent MP heal amount (999 MP) $05/F20A Herbs heal amount (70 HP) $05/F21F Medicine heal amount (200 HP) $05/F234 Silver Flask heal amount (15 MP) $05/F249 Gold Flask heal amount (40 MP)
Bank $06: Stage select
$06/DDBD Stage select: Chapter 2 (These are essentially pre-made save files) $06/E2BD Stage select: Chapter 3 $06/E7BD Stage select: Chapter 4 $06/ECBD Stage select: Chapter 5
Bank $07: Dungeons and gameplay
$07/8001 Sub: Fighting final boss? $07/80F2 Tbl: Levelup spells $07/8CC4 Sub: Deducts HP from target $07/8EDF FINIS (tile bytes) (appears 2x for some reason) $07/8F6E SLEEP (appears 3x for some reason) $07/8FEC ROOKS $07/9020 EFRITE $07/903A SALAH $07/906A End of names' sprite values $07/A83D Sub: Branches based on treasure chest contents $07/A866 Sub: Card treasure type $07/A932 Sub: Loads a card name from ROM $07/A9D4 Sub: Adds a card to the inventory $07/A872 Sub: Item treasure type $07/A95C Sub: Loads an item name from ROM $07/AA18 Sub: Adds an item to the inventory $07/AA27 Item inventory limit (chests). Default $60 = $30 slots (48 items @ 8 per page) $07/A87E Sub: Equipment treasure type $07/A986 Sub: Loads an equipment name from ROM $07/AA3D Sub: Adds a weapon to the inventory $07/AA4D Equipment inventory limit (chests). Default $40 = $20 slots (32 items @ 8 per page) $07/A88A Sub: GP treasure type $07/A896 Sub: Monster treasure type (unused) $07/A8AF Sub: FFFF treasure type (unused???) (returns failure) $07/A8BB Sub: Empty treasure type (returns failure) $07/AA65 Sub: Adds GP to total $07/AA6B Max GP (FFFF) $07/B234 Sub: Levelup check $07/B2DB Sub: When Teefa/Axs join, assigns them Rooks' LV $07/B2E2 Sub: When Salah joins, assigns her Rooks' LV-3 $07/B2F5 Sub: When Darwin joins, assigns him Rooks' LV+3 $07/BBEA Pointer table for character stats in RAM $07/BBF6 Honey stat boost amounts (Str, Int, End, Alt, HP, MP) $07/BC7C Sub: Recovers MP, sets to full MP if more than max $07/BCF1 Sub: Loop for full party healing; ends when X=08 $07/BF3A Sub: Related to running $07/BF54 Sub: Deducts MP from a spell $07/C355 Pointer table for spell effects $07/C8DE SFX for Healing (See Music tab for values) $07/C8E5 SFX for Change Attribute $07/C8E4 SFX for Buffs
Bank $08: Small scripts
$08/8000 Script, Battle/Towns/Items/Magic $08/9650 Spell descriptions $08/C93E Status screen (184 bytes) $08/C9F6 Status screen, current spirit (161 bytes) $08/D3C3 Alchemist conversations
Bank $0C: Main script
(Text is in plaintext, so it's easy to search for in the ROM.) $0C/A010 Script 000: Rooks' introduction $0C/F703 Script 117: Prelude to the final battle
Bank $0D: Compressed data
$0D/9590 Weapons menu
Bank $0E: Compressed gfx
$0E/92F9 Rooks gfx $0E/95A3 Sylph gfx $0E/A12C Marid gfx $0E/AC91 Dao gfx $0E/B715 Efrite gfx $0E/C292 Teefa gfx $0E/D25E Salah gfx
Bank $0F: Battle animations?
$0F/817A Really long pointer table
Bank $10: Compressed gfx
$10/8001 Balnea Temple/Reused brick gfx $10/C58D Balnea Temple gfx end
Bank $11: Compressed gfx
$11/8A91 Forest of Doubt gfx $11/FBA7 Forest of Doubt gfx end
Bank $12: Compressed gfx
$12/8571 Bintel Castle gfx $12/E35E Bintel Castle gfx end
Bank $13: Graphics and Maps
$13/8001 Draven Pass gfx $13/DACA Draven Pass gfx end $13/EBF7 Balnea Temple 1F map (These are all preceded by FF E4. Read break on $7FFC42 or similar and follow the DMA address given.) $13/ECFF Balnea Temple 2F map $13/F764 Bintel Castle map
Bank $15: Compressed sprites
$15/B4F1 The Seven McGuffins gfx (ends at B87A)
Bank $16: Compressed sprites
$16/B8EC Final fight gfx
Bank $17: Initialization
$17/8130 Intro script ("This is an historic land") $17/833F Sub: Stage Select (logs your inputs and compares them to the right codes) $17/840E Sound test $17/9285 HAL logo gfx header
Bank $18: Treasures, encounters, events
$18/802E Sub: Random encounter logic $18/8044 Encounter rate (higher = fewer encounters) (Default $0C) $18/8056 Sub: Random encounter $18/80DB Sub: Normal (returns 3)/back attack (returns 2)? $18/8210 Sub: Formations $18/826A Snip: Loads the proper battle music ID $18/82B6 Snip: Loads monster ID from formation $18/82E2 Table: Battle music IDs (normal, boss, goddess, final) $18/85AB Sub: Returns treasure data (A: item type, X: value) $18/85D2 Sub: Updates treasure tracker ($18E3) after opening a chest $18/8A99 Table: Pointers for chapter treasures tables $18/8AA3 Table: Treasure data Ch1 (12 bytes per entry) $18/8B1D Table: Treasure data Ch2 (12 bytes per entry) $18/8CB7 Table: Treasure data Ch3 (12 bytes per entry) $18/8EBD Table: Treasure data Ch4 (12 bytes per entry) $18/8FEB Table: Treasure data Ch5 (12 bytes per entry) Ch5 examples: $18/9001 Location of Robe of Valor in Bintel Castle first room $18/900D Location of Gold Flask in Bintel Castle first room ^_^ $18/9079 Location of Grand Shield $18/9023 Desiree data (02 0C = Equipment id 0C) $18/9047 Return Ring data in "A Tunnel". $18/9101 Table: Pointers to boss locations by chapter (Ch1: +0, Ch2: +2 etc) $18/910B Table: Ch1 boss fights (8 bytes/entry): 00 01-> Map 00 Balnea 1F; 0F00 0600 -> (0F, 06); 0600 -> Encounter #6) $18/911D Table: Ch2 boss fights (8 bytes/entry) $18/912F Table: Ch3 boss fights (8 bytes/entry) $18/9139 Table: Ch4 boss fights (8 bytes/entry) empty, needs research $18/913B Table: Ch5 boss fights (8 bytes/entry) empty, needs research $18/913D Table: Pointers to encounters by chapter (Ch1: +2, Ch2: +4 etc) $18/9147 Table: Ch1 encounters $18/9177 Table: Ch2 encounters $18/91AA Table: Ch3 encounters Ch3 example: $18/91B3 Encounter data (1C 1D 1E 1A 1B -> 5 monsters in Ice Cave) $18/91DD Table: Ch4 encounters $18/9229 Table: Ch5 encounters $18/9270 Table: Pointers to RNG seeds $18/947C RNG seed "10" from offset 0A $18/947D Entry size $18/94D9 RNG seed "01" from offset 0B (Chapter 2?) $18/C551 Red and Blue Guardian event $18/C6D1 Tiamat event $18/D019 Epilogue text setup