Claim set · data/claims/ffmq-tables.yaml

Final Fantasy Mystic Quest's data tables (TheAnsarya's ffmq-info, Final Fantasy - Mystic Quest (USA) (Rev 1))

Game: Final Fantasy Mystic Quest.

Each of the 81 monsters, from the Brownie to the Dark King, has a 14-byte record at $02:C275 (HP as a word, then four stats, which terriblesecret names strength, defense, speed and magic, then eight more bytes), a 3-byte record at $02:C17C (its level, then its experience and gold, each stored as a third), and a 16-byte name at $0C:CBA0. When a battle loads a monster, the game copies its name, sets its level, sets current and maximum HP to the HP word, copies the four stats, copies bytes 6-7 to two places, bytes 8-11 to four, and bytes 12 and 13 to one place each, and and sets offset $2F to $80 for monster $42 (Behemoth) and every monster after it, $00 before it. HP runs from 50 (Brownie) to 40,000 (Dark King), levels from 1 to 40 (Dark King), and experience up to 762 (Stone Golem). ffmq-tables/monsters

No.MonsterLevelExperienceGoldHPAttackDefenseSpeedMagicByte 6 (resistances)Byte 7 (immunities)Byte 8Byte 9Byte 10Byte 11Byte 12 (weaknesses)Byte 13 (counter)
0Brownie16635031310x000x0011210x000x00
1Mintmint6117316012111290x000x00111013100x000x00
2Red Cap1629412480363638320x000x00384040360x400x00
3Mad Plant25736043320x000x0022320x040x00
4Plant Man152589460343334300x000x24323435320x240x00
5Live Oak144715710525351440x000x24535255520x240x00
6Slime17235532310x000x0012210x020x00
7Jelly142439420313028250x000x00282930280x020x00
8Ooze2554018750575859490x000xB4565662600x020x04
9Poison Toad26337054340x000x0434660x000x00
10Giant Toad61143180141415140x000x20131416140x000x00
11Mad Toad2448018740555657480x000x60575659570x400x40
12Basilisk38139086650x000x0075870x000x00
13Flazzard152619450343434310x200x04383837370x400x00
14Salamand2141115640504849460x200x04545650500x400x00
15Sand Worm499314098360x000x00221020x840x00
16Land Worm8144626518164130x000x001451860x840x00
17Leech2450418745545652450x200x00524056480x940x02
18Skeleton4933120910860x000x80951050x880x00
19Red Bone1731512510394038340x000x80443844400x480x00
20Skuldier2551318750576157500x000x80636060600x190x00
21Roc396310075960x800x0037890x010x00
22Sparna91536260191726180x800x00221924250x010x00
23Garuda2758818825616169520x800x00606068700x110x00
24Zombie1632412500353835290x000xB4283037370x580x20
25Mummy2245915685515653460x000xB4515456560x580x20
26Desert Hag101686280232420160x000x28162028260x200x08
27Water Hag2657618765576060450x400x28525363540x200x08
28Ninja1939612580444449360x000x12464548460x500x00
29Shadow3067521925706778560x000x12789070920x500x00
30Sphinx122019360273230220x800x08252932300x000x00
31Manticor2861221840637068550xA00x48636670690x400x00
32Centaur81236230171822140x000x18171819190x000x00
33Nitemare1833012535404346350x200x18535353560x500x00
34Stoney Roost111656350252324240x800x40282220210x010x80
35Hot Wings1937212585434248400xA00x00484641460x110x02
36Ghost1733012550393740380xC00x80383841410x080x10
37Spector2245315690494752460xC00x80535447470x190x10
38Gather121929360242725260x000x08252626270x520x00
39Beholder2757618810616360570x000x08606261610x020x04
40Fangpire2038115600464448400x000x00495151440x200x00
41Vampire2656118780595762540x000x01626565590x110x00
42Mage111866330211021250x800x00302626160x200x00
43Sorcerer2862721840595670650x800x00857256560x110x00
44Land Turtle91446270203216160x000x20241720160x540x00
45Adamant Turtle2142015630477044400x200x20545254440x840x00
46Scorpion71293210161618160x000x04121318130x200x00
47Snipion2345915690515556520x000x04525455520x200x00
48Were Wolf1835412555414544380x000x08464445400x400x00
49Cerberus3067521935707172640x000x48767274700x200x80
50Edgehog71353220172119100x000x22101220160x200x00
51Sting Rat142529420334036280x000x24283034320x400x00
52Lamia101506300211818200x000x18252424180x500x00
53Naga2962721870656567600x000x18716964670x500x00
54Avizzard2040215666495252380x800x01444453440x110x01
55Gargoyle2966921888667370580xC00x01636470640x110x01
56Gorgon5114315011111280x000x00121415130x000x00
57Minotar Zombie51203190131313100x000x00151313150x080x00
58Phanquid132319400302729240x500x00333234350x200x00
59Freezer Crab132379410314032280x000x00303034310x040x08
60Iflyte2142015660504950450x200x0C515156560x400x00
61Stheno2143215630474851430x000x64565453510x800x80
62Chimera2968421870656669580x200xE7717069670x110x40
63Thanatos2965421900676868570x000x30676670650x500x00
64Skullrus Rex327590100001018098960x000x002308590910x080x00
65Stone Golem3276201000059899980xA00xF4908893880x000x00
66Behemoth1843801251210x000x0011510x000x00
67Minotaur3102302404501280x000x001081570x000x00
68Squidite1121962500505030310x800xF01803440330x000x00
69Snow Crab11234630001005034320x000xF41503060300x040x00
70Jinn2050415600011558521150x200xF12005080400x000x02
71Medusa205101565001005662680x500xF51606588620x000x00
72Gidrah2772918130001307578800x200xF62207590750x100x42
73Dullahan2875021140001608572830x200xC0858093780x000x02
74Flamerus Rex1012002200706032280x000xE41007588700x080x00
75Ice Golem1624606500804841480xC00xFC1807298880x200x00
76Dualhead Hydra27429014000125145601150x200xFD988093850x000x00
77Twinhead Wyvern34600015000235901082500x200xFC1509390900x500x00
78Pazuzu356180250001109578930x800xFE909295900x110x00
79Zuh3675002000024095100980x800xFE1809093910x110x00
80Dark King4000400005012086750xD00xFF1607097800x000x00
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x14275-0x146e2 — $02:C275: the 81 stat records, 14 bytes eachFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x1417c-0x1426e — $02:C17C: level, experience ÷ 3 and gold ÷ 3, 3 bytes per monsterFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x64ba0-0x650af — $0C:CBA0: the monsters' names, 16 bytes eachffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1922-L1985 — Battle_SetEnemyAttributes (ffmq-info's label): the monster number to offset $60, the name from $0C:CBA0 + 16n, then the record at $C17C + 3n: its first byte to offset $10 (the level, where a party member's is) and the next two to $53Battle_SetEnemyAttributes: dec a pha … ldy.W #$0060 sta.B ($92),y rep #$30 and.W #$00ff asl a asl a asl a asl a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1988-L2032 — the record at $C275 + 14n: the HP word to $14 and $16, the four stats to $22-$25 and copies at $26 and $4C, then bytes 6-7 to $3A and $3Cpla pha sta.w !WRMPYA lda.B #$0e sta.w !WRMPYB rep #$30 lda.W #$c275 clc adc.w !RDMPYL tax lda.W $0000,x ldy.W #$0014 …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L2033-L2047 — the record at $C275 + 14n: the HP word to $14 and $16, the four stats to $22-$25 and copies at $26 and $4C, then bytes 6-7 to $3A and $3C (continued)adc.W #$002a tay lda.W #$0003 phb mvn $00,$00 plb plx lda.W $0000,x inx inx ldy.W #$003a sta.B ($92),y …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L2048-L2080 — bytes 8-11 to $3E-$41, byte 12 to $56, byte 13 to $2E, then $80 (monster $42 and up) or $00 to $2F, the offset after the saved $2Elda.W #$003e clc adc.B $92 tay lda.W #$0003 phb mvn $00,$02 plb sep #$20 rep #$10 lda.W $0000,x ldy.W #$0056 …Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/tables_list.txt — its drop table starts one byte into the level-experience-gold recordsDropObject drop_table.txt 1417D 81Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/monster_table.txt — the names of the four stats and of bytes 6, 7, 12 and 13; the loader shows only where they gohp,2 strength,1 defense,1 speed,1 magic,1 resistances,1 immunities,1 unknown,4,list weaknesses,1 counter,1Final Fantasy Mystic Quest: A Terrible Secret Randomizer · randomizer.py#L272-L274 — its boss test counts from monster $40, where the loader's flag starts at $42def is_boss(self): return self.index >= 0x40After a won battle, each monster present adds 3 times its experience byte to the battle's experience and 3 times its gold byte to its gold (ffmq-tables/monsters). The code would use 6 for a gold byte of $42-$49 and 10 for $4A or more, but no monster's gold byte is above 10. Code — the victory code's × 3Checked by claude-agent, 2026-11-08 — decoded the three ROM ranges and read the monster loader at the pinned linesRevised after a check by a second AI model, 2026-11-08.

Experience and gold are the stored byte times 3, as the victory code computes them (ffmq/battle-rewards). The stat names and the resistances, immunities, weaknesses and counter names are abyssonym's (terriblesecret's monster table); the loader's copies go to offsets $3A, $3C, $3E-$41, $56 and $2E of the battle record. The largest stored gold byte is 10. terriblesecret reads its drop table (xp, gp, unknown) from 0x1417D, one byte into these records, so its xp and gp are bytes 1 and 2 and its third field is the next monster's level. terriblesecret's is_boss counts monsters from $40, so it takes in Skullrus Rex ($40) and Stone Golem ($41), which the loader's $42 test leaves out.

Each of the 81 monsters has a 9-byte attack record at $02:C6FF: a profile number in the first byte's low four bits, then eight bytes, which read as item and attack numbers name attacks in the shared name table ($FF in the empty ones; the code that reads them isn't traced). When a battle loads a monster, the game copies the profile's eight bytes from the 16 profiles at $02:C9EA to offset $44 of its battle record and the whole 9-byte record to offset $57. ffmq-tables/monster-attacks

No.MonsterProfileFirst byteAttacks
0Brownie00x00Punch (0x5A), Kick (0x5B)
1Mintmint00x00Punch (0x5A), Kick (0x5B), Stare (0xA4)
2Red Cap00x00Kick (0x5B), Stare (0xA4), Punch (0x5A), Hypno-sleep (0xAC)
3Mad Plant10x01Branch (0x78), Full Nelson (0x61)
4Plant Man10x01Branch (0x78), Full Nelson (0x61), Bad Breath (0xA7), Poison Thorn (0x9C)
5Live Oak40x04Full Nelson (0x61), Poison Thorn (0x9C), Branch (0x78), Electrapulse (0x50), Corrode Gas (0x92)
6Slime10x01Stab (0x5D), Hydro Acid (0x77)
7Jelly10x01Stab (0x5D), Hydro Acid (0x77), Dissolve (0xBF)
8Ooze50x05Stab (0x5D), Hydro Acid (0x77), Dissolve (0xBF), Spark (0x52), Thunder Beam (0x91)
9Poison Toad00x00Whip Tongue (0x7B), Poison Fluid (0xAA)
10Giant Toad00x00Whip Tongue (0x7B), Poison Fluid (0xAA), Body Odor (0xA8)
11Mad Toad60x06Whip Tongue (0x7B), Poison Fluid (0xAA), Body Odor (0xA8), Electrapulse (0x50), Stone Gaze (0xB5)
12Basilisk00x00Claw (0x70), Fang (0x71)
13Flazzard20x02Claw (0x70), Fang (0x71), Flame (0x81), Para-stare (0xA9)
14Salamand40x04Flame (0x81), Thunder (0x90), Fang (0x71), Poisonbreath (0x9F), Claw (0x70)
15Sand Worm00x00Scrunch (0x60), Quicksand (0x55)
16Land Worm10x01Scrunch (0x60), Quicksand (0x55), Quake (0x80)
17Leech60x06Scrunch (0x60), Fireball (0x83), Quicksand (0x55), Quake (0x80), Drain (0xBE)
18Skeleton00x00Sword (0x40), Head Butt (0x5E), Spooky Laugh (0xA5)
19Red Bone00x00Sword (0x40), Head Butt (0x5E), Spooky Laugh (0xA5), Sleep Powder (0xAF)
20Skuldier40x04Sword (0x40), Head Butt (0x5E), Spooky Laugh (0xA5), Sleep Powder (0xAF), Doom Powder (0x57)
21Roc10x01Beak (0x72), Blinder (0xA0)
22Sparna10x01Beak (0x72), Tornado (0x8D), Iron Nail (0x53)
23Garuda50x05Beak (0x72), Typhoon (0x8E), Muffle (0xB2), Iron Nail (0x53), Blinder (0xA0)
24Zombie30x03Mucus (0x6F), Rotten Mucus (0x9D), Bad Breath (0xA7), Multiply (0xC2)
25Mummy60x06Body Slam (0x5F), Neck Choke (0x62), Sleep Powder (0xAF), Poison Flour (0xAB), Stone Gaze (0xB5)
26Desert Hag110x0BFin (0x79), Watergun (0x86), Double Hit (0xB7)
27Water Hag10x01Fin (0x79), Neck Choke (0x62), Watergun (0x86), Whirlwater (0x8B), Cure (0x49)
28Ninja00x00Blow Dart (0x48), Scimitar (0x41), Smokescreen (0xB1), Lullaby (0xAD)
29Shadow50x05Scimitar (0x41), Blow Dart (0x48), Smokescreen (0xB1), Multiply (0xC2), Doom Dance (0x93), Selfdestruct (0xC1)
30Sphinx110x0BBite (0x76), Ice Breath (0x8C), Riddle (0xA6), Claw (0x70), Heal (0x4A)
31Manticor50x05Bite (0x76), Thunder (0x90), Fireball (0x83), Quake (0x80), Stone Gas (0xB4), Heal (0x4A)
32Centaur110x0BBow & Arrow (0x47), Double Kick (0xB9), Riddle (0xA6)
33Nitemare110x0BBow & Arrow (0x47), Double Kick (0xB9), Hypno-sleep (0xAC), Riddle (0xA6)
34Stoney Roost20x02Coldness (0x87), Dive (0x6D), Stone Beak (0xA2)
35Hot Wings30x03Dive (0x6D), Flame Sweep (0x82), Stone Beak (0xA2), Cure (0x49)
36Ghost10x01Coldness (0x87), Attatch (0x6E), Power Drain (0x51), Multiply (0xC2)
37Spector40x04Attatch (0x6E), Coldness (0x87), Power Drain (0x51), Double Hit (0xB7), Multiply (0xC2)
38Gather20x02Psudopod (0x75), Blind Flash (0xB0), Para-stare (0xA9), Selfdestruct (0xC1)
39Beholder120x0CPsudopod (0x75), Thunder Beam (0x91), Blind Flash (0xB0), Doom Gaze (0x56), Selfdestruct (0xC1)
40Fangpire10x01Drain (0xBE), Uppercut (0x5C), Tornado (0x8D), Sonic Boom (0x94), Heal (0x4A)
41Vampire40x04Uppercut (0x5C), Blizzard (0x4C), Drain (0xBE), Typhoon (0x8E), Sonic Boom (0x94), Heal (0x4A)
42Mage10x01Blizzard (0x4C), Muffle (0xB2), Cure (0x49)
43Sorcerer10x01Quake (0x4B), Blizzard (0x4C), Thunder (0x4E), Muffle (0xB2), Cure (0x49)
44Land Turtle00x00Body Slam (0x5F), Bite (0x76), Para-claw (0x98), Rapier (0x43)
45Adamant Turtle40x04Body Slam (0x5F), Scrunch (0x60), Flame (0x81), Para-claw (0x98), Blinder (0xA0)
46Scorpion10x01Tail (0x74), Scissor (0x7A), Poison Sting (0x9B), Rapier (0x43)
47Snipion40x04Twin Shears (0xBA), Tail (0x74), Poison Sting (0x9B), Quicksand (0x55), Doom Powder (0x57)
48Were Wolf10x01Bark (0x95), Quake (0x80), Triple Fang (0xB8), Body Odor (0xA8)
49Cerberus50x05Triple Fang (0xB8), Stone Gaze (0xB5), Quake (0x80), Bark (0x95), Doom Gaze (0x56)
50Edgehog20x02Sting (0x73), Blinder (0xA0), Para-needle (0x97), Rapier (0x43)
51Sting Rat110x0BSting (0x73), Para-needle (0x97), Poison Sting (0x9B), Blinder (0xA0)
52Lamia110x0BGaze (0xA3), Wraparound (0x6C), Sleep Lure (0xAE)
53Naga130x0DWraparound (0x6C), Thunder (0x90), Gaze (0xA3), Sleep Lure (0xAE), Silence Song (0xB3)
54Avizzard00x00Fire (0x4D), Double Sword (0xB6), Spooky Laugh (0xA5), Silence Song (0xB3)
55Gargoyle50x05Double Sword (0xB6), Blizzard (0x4C), Thunder (0x4E), Drain (0xBE), Silence Song (0xB3), Stone Beak (0xA2)
56Gorgon40x04Bite (0x76), Dash (0x63), Body Odor (0xA8), Iron Nail (0x53), Poisonbreath (0x9F)
57Minotar Zombie130x0DAxe (0x44), Roundhouse (0x64), Blinder (0xA0), Stare (0xA4), Scream (0x54), Bad Breath (0xA7)
58Phanquid130x0DBlackness (0xA1), Sucker Stick (0xC0), Ice Breath (0x8C), Electrapulse (0x50), 6 Psudopods (0xBC)
59Freezer Crab50x05Giant Blade (0x7D), Full Nelson (0x61), Whirlwater (0x8B), Icy Foam (0x88), Sonic Boom (0x94)
60Iflyte50x05Bearhug (0x68), Flame Sweep (0x82), Flame Pillar (0x84), Dragon Cut (0x42), Beam (0x45), Hypno-sleep (0xAC)
61Stheno50x05Snake Head (0xBD), Bad Breath (0xA7), Stone Gaze (0xB5), Para-claw (0x98), Spark (0x52), Screechvoice (0x96)
62Chimera50x05Thunder (0x4E), Quake (0x80), Tornado (0x8D), Para Gas (0xC3), Stone Gas (0xB4), Sonic Boom (0x94)
63Thanatos70x07Headoomerang (0x7E), Thunder Beam (0x91), Rapier (0x43), Doom Dance (0x93), Muffle (0xB2), Cure (0x49)
64Skullrus Rex130x0DTwin Fang (0xC7), Stone Gas (0xB4), Quake (0x4B), Sleep Powder (0xAF), Poison Flour (0xAB)
65Stone Golem10x01Thunder (0x4E), Stone Block (0xC5), Stare (0xA4), Corrode Gas (0x92)
66Behemoth00x00Horn (0x7C)
67Minotaur00x00Axe (0x44), Roundhouse (0x64), Scream (0x54)
68Squidite130x0DSucker Stick (0xC0), Choke Up (0x65), 6 Psudopods (0xBC), Electrapulse (0x50), Blackness (0xA1)
69Snow Crab40x04Giant Blade (0x7D), Full Nelson (0x61), Icy Foam (0x88), Tornado (0x8D), Stare (0xA4)
70Jinn50x05Dragon Cut (0x42), Fire (0x4D), Beam (0x45), Flame Pillar (0x84), Hypno-sleep (0xAC)
71Medusa130x0DSnake Head (0xBD), Para-snake (0x99), Poison Snake (0x9E), Screechvoice (0x96), Stone Gaze (0xB5)
72Gidrah120x0CThree Heads (0xBB), Tornado (0x8D), Para Gas (0xC3), Quake (0x80), Stone Gas (0xB4)
73Dullahan40x04Rapier (0x43), Thunder Beam (0x91), Headoomerang (0x7E), Hypno-sleep (0xAC), Doom Dance (0x93)
74Flamerus Rex120x0CBone Missile (0x46), Twin Fang (0xC7), Rip Earth (0xC4), Sleep Powder (0xAF), Poison Flour (0xAB), Chew Off (0x7F)
75Ice Golem50x05Mega Punch (0x67), Axe Bomber (0x69), Ice Block (0x89), Hypno-sleep (0xAC), Stomp Stomp (0x66), Snowstorm (0x8A)
76Dualhead Hydra50x05Fire Breath (0x59), Para-breath (0x9A), Poisonbreath (0x9F), Thunder (0x4E), Scrunch (0x60), Stone Gas (0xB4)
77Twinhead Wyvern150x0FFire Breath (0xD7), Para-breath (0x9A), Poisonbreath (0x9F), Thunder (0x4E), Bite (0x76), Tornado (0x8D)
78Pazuzu80x08Sky Attack (0x6B), Hurricane (0x8F), Windstorm (0xC6), Piledriver (0x6A), Stone Beak (0xA2), Psychshield (0xC8), Psychshield (0xC9)
79Zuh50x05Sky Attack (0xD8), Piledriver (0xD9), Hurricane (0xDA), Doom Dance (0x93), Psychshield (0xC8), Psychshield (0xC9)
80Dark King00x00Dark Cane (0xCA), Iron Nail (0x53), Spark (0x52), Para-stare (0xA9)
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x146ff-0x149d7 — $02:C6FF: the 81 attack records, 9 bytes eachFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x64120-0x64b6f — the item, spell and attack names, 12 bytes each, numbers $00-$DBffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L2082-L2115 — the record at $C6FF + 9n; its first byte's low nibble × 8 + $C9EA, 8 bytes to offset $44; then 9 bytes to $57sta.w !WRMPYA lda.B #$09 sta.w !WRMPYB rep #$30 lda.W #$c6ff clc adc.w !RDMPYL tax phx lda.W $0000,x and.W #$000f asl a …Checked by claude-agent, 2026-11-08 — decoded the attack records and read the copy at the pinned linesRevised after a check by a second AI model, 2026-11-08.

Reading bytes 1-8 as attack numbers rests on their names: each falls in $40-$DC, the attack range (ffmq-tables/attacks), or is $FF. Attack names are the 12-byte names the item and attack numbers share, read with abyssonym's mq.tbl.

The 16 attack profiles at $02:C9EA hold eight bytes each; a monster's attack record names its profile (ffmq-tables/monster-attacks), and the loader copies it to offset $44. In 10 of them the bytes' low seven bits sum to 100 (profiles 0, 1, 2, 8, 10, 11, 12, 13, 14, 15); the rest sum to 80, 102, 98, 102, 78, 104. Profiles 11, 12, 13, 14, 15 set the top bit on one byte. ffmq-tables/attack-profiles

No.Slot 1Slot 2Slot 3Slot 4Slot 5Slot 6Slot 7Slot 8
0453510100000
1303020200000
2403020100000
3352510100000
425252210101000
52020202010800
628231813101000
72020101010800
82015151010101010
91915151510101010
1017131313131399
114535138100000
12352513810101000
1325252213810800
1420151513810101010
1519151515137999
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x149ea-0x14a69 — $02:C9EA: the 16 profiles, 8 bytes eachffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L2086-L2105 — the copy of a profile's 8 bytes to offset $44lda.W #$c6ff clc adc.w !RDMPYL tax phx lda.W $0000,x and.W #$000f asl a asl a asl a clc adc.W #$c9ea …Checked by claude-agent, 2026-11-08 — decoded the profiles and summed each row's low seven bitsRevised after a check by a second AI model, 2026-11-08.

Low-seven-bit sums by profile: 100, 100, 100, 80, 102, 98, 102, 78, 100, 104, 100, 100, 100, 100, 100, 100. Profiles with a top bit set: 11, 12, 13, 14, 15.

Each of the 234 formations at $02:CA6A is 4 bytes: three monster slots and a flags byte. A slot of $FF is empty; otherwise its low seven bits are the monster number. Each slot's top bit is kept apart for that slot ($80 for an empty one), and the flags byte's bits 4 and 5 are kept apart too; what those do isn't read. Bit 7 of the flags byte skips the first-strike roll and bit 6 stops the party running (ffmq/first-strike, ffmq/run). ffmq-tables/formations

No.Slot 1Slot 2Slot 3Slot top bitsFlags byte
0BrownieBrownie0010x11
1BrownieBrownieBrownie0000x10
2BrownieBrownieSlime0000x00
3SlimeSlime0010x11
4SlimeSlimeSlime0000x10
5SlimeSlimeBrownie0000x00
6Mad PlantMad Plant0010x11
7Mad PlantPoison Toad0010x00
8Mad PlantMad PlantMad Plant0000x10
9Poison ToadPoison ToadBasilisk0000x01
10Poison ToadPoison ToadMad Plant0000x00
11Poison ToadPoison ToadPoison Toad0000x10
12BasiliskBasilisk0010x11
13BasiliskBasiliskPoison Toad0000x00
14BasiliskBasiliskBasilisk0000x10
15Roc1110x31
16RocRoc1110x31
17RocRocRoc1110x30
18Sand Worm0110x11
19Sand WormSand Worm0010x11
20Sand WormSand WormSand Worm0000x10
21Skeleton0110x11
22SkeletonSkeleton0010x11
23SkeletonSkeletonSkeleton0000x10
24Mintmint0110x11
25MintmintMintmint0010x10
26MintmintMintmintGiant Toad0000x00
27Giant ToadGiant Toad0010x11
28Giant ToadGiant ToadGiant Toad0000x10
29Giant ToadGiant ToadMintmint0000x00
30ScorpionScorpion0010x11
31ScorpionScorpionScorpion0000x10
32ScorpionScorpionGiant Toad0000x00
33EdgehogEdgehog0010x11
34EdgehogEdgehogScorpion0000x00
35EdgehogEdgehogEdgehog0000x10
36Land WormLand Worm0010x11
37Land WormLand WormEdgehog0000x00
38Land WormLand WormLand Worm0000x10
39CentaurCentaur0010x11
40CentaurCentaurCentaur0000x10
41CentaurCentaurLand Worm0000x00
42Land TurtleLand Turtle0010x11
43Land TurtleLand TurtleCentaur0000x00
44Land TurtleLand TurtleLand Turtle0000x10
45SparnaSparna1110x31
46SparnaSparnaLand Turtle1100x00
47SparnaSparnaSparna1110x30
48Desert Hag0110x11
49Desert HagDesert Hag0010x11
50Desert HagDesert HagDesert Hag0000x10
51LamiaLamia0010x11
52LamiaLamiaLamia0000x10
53LamiaLamiaDesert Hag0000x00
54MageMage1110x31
55MageMageMage1110x30
56MageMageLamia1100x00
57Stoney RoostStoney Roost1110x31
58Stoney RoostStoney RoostMage1110x20
59Stoney RoostStoney RoostStoney Roost1110x30
60GatherGather0010x11
61GatherGatherStoney Roost0010x00
62GatherGatherGather0000x10
63SphinxSphinx0010x11
64SphinxSphinxGather0000x00
65SphinxSphinxSphinx0000x10
66Jelly0110x11
67JellyJelly0010x10
68JellySting Rat0010x00
69Sting Rat0110x11
70Sting RatSting Rat0010x10
71Plant Man0110x10
72Plant ManPlant Man0010x11
73Plant ManPlant ManPlant Man0000x10
74Plant ManPlant ManSting Rat0000x00
75FlazzardFlazzard0010x11
76FlazzardFlazzardFlazzard0000x10
77FlazzardFlazzardPlant Man0000x00
78Red CapRed Cap0010x11
79Red CapRed CapRed Cap0000x10
80Red CapRed CapFlazzard0000x00
81ZombieZombie0010x11
82ZombieZombieZombie0000x10
83ZombieZombieRed Cap0000x00
84Red BoneRed Bone0010x11
85Red BoneRed BoneRed Bone0000x10
86Red BoneRed BoneZombie0000x00
87GhostGhost1110x31
88GhostGhostGhost1110x30
89GhostGhostRed Bone1100x00
90NitemareNitemare0010x11
91NitemareNitemareNitemare0000x10
92NitemareNitemareGhost0010x00
93Were WolfWere Wolf0010x11
94Were WolfWere WolfWere Wolf0000x10
95Were WolfWere WolfNitemare0000x00
96Hot WingsHot Wings1110x31
97Hot WingsHot WingsHot Wings1110x30
98Hot WingsHot WingsNinja1100x00
99NinjaNinja0010x11
100NinjaNinjaNinja0000x10
101NinjaNinjaHot Wings0010x00
102AvizzardAvizzard1110x31
103AvizzardAvizzardAvizzard1110x30
104AvizzardAvizzardNinja1100x00
105FangpireFangpire0010x11
106FangpireFangpireFangpire0000x10
107FangpireFangpireAvizzard0010x00
108Adamant TurtleAdamant Turtle0010x11
109Adamant TurtleAdamant TurtleAdamant Turtle0000x10
110Adamant TurtleAdamant TurtleFangpire0000x00
111SalamandSalamand0010x11
112SalamandSalamandSalamand0000x10
113SalamandSalamandAdamant Turtle0000x00
114MummyMummy0010x11
115MummyMummyMummy0000x10
116MummyMummySpector0010x00
117SpectorSpector1110x31
118SpectorSpectorSpector1110x30
119SpectorSpectorMummy1100x00
120Live OakLive Oak0010x11
121Live OakLive OakLive Oak0000x10
122Live OakLive OakSnipion0000x00
123SnipionSnipion0010x11
124SnipionSnipionSnipion0000x10
125SnipionSnipionLive Oak0000x00
126Mad ToadMad Toad0010x11
127Mad ToadMad ToadMad Toad0000x10
128Mad ToadMad ToadLeech0000x00
129LeechLeech0010x11
130LeechLeechLeech0000x10
131LeechLeechOoze0000x00
132OozeOoze0010x11
133OozeOozeOoze0000x10
134OozeOozeSkuldier0000x00
135SkuldierSkuldier0010x11
136SkuldierSkuldierSkuldier0000x10
137SkuldierSkuldierWater Hag0000x00
138Water HagWater Hag0010x11
139Water HagWater HagWater Hag0000x10
140Water HagWater HagVampire0000x00
141VampireVampire0010x11
142VampireVampireVampire0000x10
143VampireVampireWater Hag0000x00
144GarudaGaruda1110x31
145GarudaGarudaGaruda1110x30
146GarudaGarudaBeholder1100x00
147BeholderBeholder0010x11
148BeholderBeholderBeholder0000x10
149BeholderBeholderManticor0000x00
150ManticorManticor0010x11
151ManticorManticorManticor0000x10
152ManticorManticorSorcerer0010x00
153SorcererSorcerer1110x30
154SorcererSorcererSorcerer1110x30
155SorcererSorcererBeholder1100x00
156NagaNaga0010x11
157NagaNagaNaga0000x10
158NagaNagaGargoyle0010x00
159GargoyleGargoyle1110x31
160GargoyleGargoyleGargoyle1110x30
161GargoyleGargoyleShadow1100x00
162ShadowShadow0010x11
163ShadowShadowShadow0000x10
164ShadowShadowCerberus0000x00
165CerberusCerberus0010x11
166CerberusCerberusCerberus0000x10
167CerberusCerberusShadow0000x00
168Behemoth0110x5D
169Minotaur0110x55
170Gorgon0110x11
171SkeletonGorgon0010x01
172Sand WormGorgon0010x00
173GorgonGorgon0010x11
174ShadowGorgonPhanquid0000x00
175ShadowGorgonStheno0000x00
176Minotar Zombie0110x11
177BasiliskMinotar Zombie0010x01
178BasiliskMinotar ZombieSkeleton0000x00
179Minotar ZombieMinotar Zombie0010x11
180ShadowMinotar ZombieIflyte0000x00
181ShadowMinotar ZombieChimera0000x00
182SparnaSquiditeSparna0000xC5
183Desert HagSnow CrabDesert Hag0000x45
184Phanquid0110x11
185SphinxPhanquid0010x01
186SphinxPhanquidSphinx0000x00
187PhanquidPhanquid0010x11
188ShadowPhanquidStheno0000x00
189ShadowPhanquidThanatos0000x00
190Freezer Crab0110x11
191GatherFreezer Crab0010x01
192GatherFreezer CrabGather0000x00
193Freezer CrabFreezer Crab0010x11
194ShadowFreezer CrabIflyte0000x00
195Freezer CrabFreezer CrabShadow0000x00
196Red BoneJinnRed Bone0000x45
197Were WolfMedusaWere Wolf0000xC5
198Iflyte0110x11
199FangpireIflyte0010x01
200FangpireIflyteFangpire0000x00
201IflyteIflyte0010x11
202CerberusIflyteMinotar Zombie0000x00
203IflyteIflyteCerberus0000x00
204Stheno0110x11
205AvizzardStheno1010x01
206AvizzardSthenoNinja1000x00
207SthenoStheno0010x11
208CerberusSthenoGorgon0000x00
209SthenoSthenoCerberus0000x00
210SkuldierGidrahSkuldier0000x45
211VampireDullahanVampire0000x45
212Chimera0110x11
213SorcererChimera1010x01
214SorcererChimeraSorcerer1010x00
215ChimeraChimera0010x11
216CerberusChimeraFreezer Crab0000x00
217ChimeraChimeraCerberus0000x00
218Thanatos0110x11
219ManticorThanatos0010x01
220ManticorThanatosBeholder0000x00
221ThanatosThanatos0010x11
222CerberusThanatosChimera0000x00
223ThanatosThanatosCerberus0000x00
224Flamerus Rex0110x55
225Ice Golem0110xD5
226Dualhead Hydra0110x55
227Pazuzu0110x55
228ShadowSkullrus RexShadow0000x44
229CerberusStone GolemCerberus0000x44
230IflyteTwinhead WyvernStheno0000x44
231ChimeraZuhThanatos0000x44
232Dark King0110xD8
233Mummy0110x50
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x14a6a-0x14e11 — $02:CA6A: the 234 formations, 4 bytes eachffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1841-L1875 — formation × 4 + $CA6A; each slot's low seven bits (or $FF) to $04AC and $0A02, its top bit to $04B0 and $0A0A; the fourth byte to $AF, its bits 4-5 to $0A01Battle_SetEnemyHP: lda.B #$00 xba lda.W $0515 rep #$30 asl a asl a sep #$20 rep #$10 tax ldy.W #$0000 Battle_SetEnemyLevel: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1876-L1906 — counts the slots that aren't $FF into $B3 and loads each present monsterstz.B $b3 lda.B $ac inc a beq Battle_CalculateEnemyMagicDef inc.B $b3 Battle_CalculateEnemyMagicDef: lda.B $ad inc a beq Battle_SetEnemyAttack inc.B $b3 Battle_SetEnemyAttack: lda.B $ae …Before the first round the game rolls for a first strike. Unless the formation's flags byte has bit 7 set, it takes the monsters' figure as the first slot's level plus twice the second slot's plus 3 (an empty slot's level is $FF, so each slot counts its level plus one, and the third slot is never read), divided by the number of monsters, and the party's as Benjamin's level, averaged with the companion's when one is present; it draws 0-100 and, when the draw is at least 100 minus 10 times the difference (the difference capped at 10), gives the first strike to the side with the higher figure. Computed: a difference of d gives a first strike 10d + 1 times in 101. The party's first strike is a round in which only the party acts; the monsters' is a round in which only they act, and only in battle numbers 0-19, the battlefields. With bit 7 set the roll is skipped and the monsters strike first in a battlefield. CodeThe main loop runs the run check when bit 6 of $1020, in Benjamin's record, is set; what sets that bit isn't read. The run fails outright when the formation's flags byte has bit 6 set, and succeeds outright in round 0 after the party won the first strike. Otherwise the game takes the party's speed (Benjamin's, averaged with the companion's when both can act) and the monsters' average speed: the speeds of those that can act, summed from 1 instead of 0 when the first monster can't act, over their number. It draws a random byte modulo ⌊average ÷ 5⌋ × round + 1 (rounds counted from 0; the product and the + 1 kept to 8 bits), and the run succeeds when (average − draw) mod 256 is below the party's speed, so a draw larger than the average wraps to 256 + average − draw. A failed run gives the monsters a round to themselves. Computed: in round 0 the draw is 0, so the run succeeds only when the party is faster. CodeChecked by claude-agent, 2026-11-08 — decoded the formations and read the loader at the pinned linesRevised after a check by a second AI model, 2026-11-08.

The slots' top bits go to $04B0 and $0A0A, the flags byte to $AF and its bits 4-5 to $0A01. Bit 7 is read by the first-strike roll and bit 6 by the run check: ffmq/first-strike and ffmq/run. The top-bits column counts an empty slot's $FF as 1, as the code stores it.

The 207 battle numbers each have three formations at $02:CE12. When a battle starts, the game draws a number from 0 to 100 and takes the first formation for 0-33, the second for 34-67, and the third for 68-100. Computed: the third comes up 33 times in 101 and the others 34; battle number $FF skips the draw and uses the formation already in $0515. Battle numbers 0-19 are the 20 battlefields (ffmq/battlefields). ffmq-tables/formation-sets

BattleFirstSecondThirdBattlefield
0768Foresta South
191011Foresta West
219176177Foresta East
3252425South of Libra Temple
4272529East of Libra Temple
5302932South of Aquaria
6333234South of Wintry Cave
7494850West of Wintry Cave
8545253Ice Pyramid
9184184185North of Libra Temple
10190190191Aquaria Frozen Field
11666667Path to Fireburg Southern
12696968Path to Fireburg Central
13717172Path to Fireburg Northern
14757374Sealed Temple
15787680Mine
16878689Boulder
17207201207Volcano
18136133137Kaidge Temple
19140138138South of Windia
20168168168
21212
22545
23169169169
2410119
25131214
26191819
27151617
28191820
29222123
30171170172
31212223
32177176178
33224224224
34313230
35353433
36373637
37413941
38353435
39383738
40404141
41424242
42373838
43414041
44444342
45464546
46414040
47434443
48464746
49182182182
50494849
51535153
52183183183
53504950
54495050
55535153
56535153
57504950
58525352
59525253
60565456
61525252
62555655
63575758
64185184185
65505049
66585859
67606060
68191190190
69555555
70606160
71646364
72186185185
73595958
74626161
75656465
76192191191
77616161
78646464
79225225225
80838283
81868486
82196196196
83767777
84807979
85838183
86848484
87858585
88898789
89929092
90959395
91888988
92919290
93949593
94197197197
95919291
96949594
97989696
981019999
99102102102
100198198198
101979896
10210010199
103103104104
104204204204
105100101101
106105105105
107108108108
108198198198
109101100100
110979797
111111111111
112100100100
113106107107
114103104103
115200199200
116106106107
117110108108
118200200200
119206205206
120109110109
121112113113
122205206206
123112112112
124206206206
125226226226
126233233233
127116114115
128119117118
129115115115
130118118118
131122120122
132121122121
133125123125
134128126127
135128127126
136125124125
137128127128
138130129129
139130129131
140131130131
141132132132
142135135135
143134132134
144136136136
145210210210
146136137137
147140139140
148143141142
149143142143
150211211211
151144144144
152147147147
153227227227
154144146144
155148147148
156150150150
157212212212
158227227227
159147148148
160145146145
161153153153
162218218218
163227227227
164151151151
165155153155
166214213213
167220219219
168154155154
169156156156
170227227227
171214213214
172154154155
173159159159
174214214214
175227227227
176220219220
177158156158
178160159159
179220220220
180227227227
181157158157
182214215215
183220221221
184158157157
185159159160
186215215215
187160159160
188160160161
189221221221
190163162162
191175174175
192181180181
193228228228
194164163164
195189188189
196195194195
197229229229
198166165165
199203202203
200209208209
201230230230
202167166167
203217216217
204223222223
205231231231
206232232232
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x14e12-0x1507e — $02:CE12: three formation numbers per battle numberffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1766-L1809 — Battle_InitializeEnemies (ffmq-info's label): a draw of 0-100 ($65 is the range; ffmq/rng), the battle number in $0513 × 3, plus 1 for each 34 taken off the draw, indexes $CE12; $FF in $0513 skips to the formation already in $0515Battle_InitializeEnemies: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$65 sta.W $00a8 jsl.L ExecuteAudioCall lda.B #$00 xba lda.W !sys_operation_type cmp.B #$ff …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1810-L1829 — Battle_InitializeEnemies (ffmq-info's label): a draw of 0-100 ($65 is the range; ffmq/rng), the battle number in $0513 × 3, plus 1 for each 34 taken off the draw, indexes $CE12; $FF in $0513 skips to the formation already in $0515 (continued)Battle_ProcessEnemySlot: lda.B #$00 xba lda.W $00a9 cmp.B #$22 bcc Battle_InitEnemyStats sec sbc.B #$22 inx cmp.B #$22 bcc Battle_InitEnemyStats sec …The game's random numbers come from one 16-bit state kept in save RAM at $70:1FFE: each call shifts it left twice, then adds the old state, $3711 and the frame counter at $0E96 in turn, each addition taking in the carry the step before left (the first takes bit 14 of the old state, which the second shift pushed out, so the step is 5 times the state plus that bit, not 5 times the state alone), keeps the 16-bit result, and returns its high byte, reduced modulo the range the caller puts in $A8 when that isn't 0. A range of $65 gives 0-100. Code — a call with $65 in $A8 returns 0-100Each of the 20 battlefields, battle numbers 0-19, has a count of battles at $0C:D4D0, which a new game copies to $0FD4, and a reward word at $07:EFA1. Every battlefield starts at 10. After a won battle with a number below 20, the game takes one off that battlefield's count and shows the number left; at zero it gives the reward: with the top bit set, the low 15 bits times 3 in experience; with bit 14, the item in the low byte; otherwise the low 14 bits times 3 in gold. The battlefield names are Archipelago's, not the game's: Archipelago's object ids 1-20 are taken as battle numbers 0-19 because their types (experience, item, gold) follow the reward words in the same order, and the official guide's numbered battlefields -2-, -5-, -19- and -20- have the rewards of battle numbers 1, 4, 18 and 19. CodeChecked by claude-agent, 2026-11-08 — decoded the table and read the draw at the pinned linesRevised after a check by a second AI model, 2026-11-08.

Both branches the code takes (battle numbers below 20 and from 20) do the same subtraction. The battlefield names are Archipelago's, whose 20 battlefields match the reward table's types in order (ffmq/battlefields).

The 15 weapons, items $20-$2E from the Steel Sword to the Ninja Star, have 8-byte records at $02:BC00. When a weapon's action is set up, the game takes bytes 0-1 as a word, bytes 2-5 into four places (keeping the low six bits of bytes 3 and 4, and folding their top two bits into a derived byte), byte 6 into one place, and byte 7 split into its two nibbles. terriblesecret names byte 0 the element, byte 1 the status, byte 2 the power and byte 7 a stat boost. ffmq-tables/weapons

ItemNameByte 0 (element)Byte 1 (status)Byte 2 (power)Byte 3Byte 4Byte 5Byte 6Byte 7 (stat boost)
0x20Steel Sword0x000x00100xC20xC20x810x2E0x00
0x21Knight Sword0x000x00900xC20xC20x810x2F0x20
0x22Excalibur0x000x002500xC20xC20x810x300x20
0x23Axe0x040x00180xC30x0A0x810x310x00
0x24Battle Axe0x040x001250xC30x0A0x810x320x00
0x25Giant's Axe0x040x002100xC30x0A0x810x330x00
0x26Cat Claw0x000x2450x840x430x810x340x10
0x27Charm Claw0x000x3E750x840x430x810x350x10
0x28Dragon Claw0x000x7F1600x840x430x810x360x10
0x29Bomb0x020x00140xC50xFE0x820x390x00
0x2AJumbo Bomb0x020x00250xC50xFE0x820x380x00
0x2BMega Grenade0x020x00360xC50xFE0x820x370x00
0x2CMorning Star0x040x002000xC30xCA0x810x3A0x00
0x2DBow of Grace0x010x02800xC60xC90x810x3B0x20
0x2ENinja Star0x010x24400xC60xC90x810x3C0x20
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x13c00-0x13c77 — $02:BC00: the 15 weapon recordsFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x10bf2-0x10c05 — $02:8BF2, the loader's three small tables: the bases $BC00, $BC78, $C0C3, $C117 and $C127, the record sizes 8, 7, 7, 4 and 5, and the first numbers $20, $40, $14, $10 and $2Fffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1606-L1648 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement saysBattle_SetupTargeting: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$00 xba lda.B $38 lsr a lsr a lsr a lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1649-L1686 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_ValidateAllTargets: rep #$30 phb ldy.W #$04dd lda.W #$0003 mvn $00,$02 plb sep #$20 rep #$10 lda.B $df and.B #$c0 lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1687-L1722 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_CheckTargetStatus: cmp.B #$10 beq Battle_ProcessTargetCheck lda.W $0000,x sta.B $e2 lda.B $38 cmp.B #$20 bne Battle_TargetStatusValid rts Battle_TargetStatusValid: inx Battle_ProcessTargetCheck: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1723-L1742 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_TargetCheckLoop: jsr.W Battle_NextTargetCheck sta.B $e7 xba and.B #$f0 lsr a lsr a lsr a lsr a sta.B $e6 jsr.W Battle_NextTargetCheck sta.B $e9 …Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/weapon_table.txt — the field nameselement,1 status,1 power,1 unknown,4 statboost,1Checked by claude-agent, 2026-11-08 — decoded the records and read the action loader and its table of basesChecked by a second AI model, 2026-11-08.

Names are the ROM's 12-byte item names. Field names are abyssonym's; the loader shows only where each byte goes.

The 157 monster attacks, numbers $40-$DC from Sword to an unnamed last entry, have 7-byte records at $02:BC78. The game takes bytes 0-1 as a word, bytes 2-5 into four places (byte 3's low six bits are the effect routine its battle code dispatches on, and its top two bits and byte 4's go into a derived byte), and byte 6 split into nibbles. terriblesecret names byte 0 the element, 1 the status, 2 the power, 3 the effect and 5 the targeting. ffmq-tables/attacks

No.NameByte 0 (element)Byte 1 (status)Byte 2 (power)Byte 3, low 6 bits (effect)Byte 3, top 2 bitsByte 4Byte 5 (targeting)Byte 6
0x40Sword0x020x005230xC20x810x58
0x41Scimitar0x020x0010230xC20x810x58
0x42Dragon Cut0x020x0010230xC20x810x58
0x43Rapier0x020x0048230xC30x810x58
0x44Axe0x020x005330xCA0x810x58
0x45Beam0x010x0022530xDA0x810x50
0x46Bone Missile0x010x006530xC70x810x04
0x47Bow & Arrow0x010x0015630xC90x810x58
0x48Blow Dart0x010x0015630xC90x810x58
0x49Cure0x000x00251430xD40x840x8C
0x4AHeal0x000x4001330xD50x840x90
0x4BQuake0x800x0020930xCB0x820x98
0x4CBlizzard0x400x0010830xCD0x810x4C
0x4DFire0x200x0015830xCE0x810x44
0x4EThunder0x500x0020830xCC0x810x50
0x4FReflectant0x000x0002800x1E0x810x6C
0x50Electrapulse0x000x002091030xDA0x810x50
0x51Power Drain0x000x00171030xDF0x810x58
0x52Spark0x000x00181030xCC0x810x50
0x53Iron Nail0x000x00821030xC50x810x58
0x54Scream0x010x00811030xE10x810x58
0x55Quicksand0x010x001461030xCB0x810x78
0x56Doom Gaze0x010x8001930x5D0x810x74
0x57Doom Powder0x010x8001930x5B0x810x74
0x58Cure0x000x0001400x3F0x840x00
0x59Fire Breath0x200x00922930xDB0x820x44
0x5APunch0x020x0041530xD60x810x58
0x5BKick0x020x0051530xD60x810x58
0x5CUppercut0x020x00151530xD60x810x58
0x5DStab0x020x0051530xD60x810x58
0x5EHead Butt0x020x00151530xD60x810x58
0x5FBody Slam0x020x00101530xD60x810x58
0x60Scrunch0x020x00151530xD60x810x58
0x61Full Nelson0x020x00101530xD80x810x58
0x62Neck Choke0x020x00201530xD80x810x58
0x63Dash0x020x00201530xCA0x810x58
0x64Roundhouse0x020x00111530xD60x810x58
0x65Choke Up0x020x00501530xD80x810x58
0x66Stomp Stomp0x020x00501530xD60x810x58
0x67Mega Punch0x020x0051530xCA0x810x58
0x68Bearhug0x020x0021730xD80x810x58
0x69Axe Bomber0x020x00101730xCA0x810x58
0x6APiledriver0x020x00802930xCA0x810x58
0x6BSky Attack0x020x00702930xD90x820x58
0x6CWraparound0x020x00101730xD80x810x58
0x6DDive0x020x00101730xD90x810x58
0x6EAttatch0x020x00101730xD80x810x58
0x6FMucus0x020x0051730xDF0x810x58
0x70Claw0x020x0051730xC30x810x58
0x71Fang0x020x00101730xC30x810x58
0x72Beak0x020x0051730xC30x810x58
0x73Sting0x020x00151730xC90x810x58
0x74Tail0x020x0051730xD60x810x58
0x75Psudopod0x020x0051730xD60x810x58
0x76Bite0x020x00101730xC20x810x58
0x77Hydro Acid0x020x0051730xDF0x810x58
0x78Branch0x020x0051730xC30x810x58
0x79Fin0x020x00101730xCA0x810x58
0x7AScissor0x020x00101730xC20x810x58
0x7BWhip Tongue0x020x0051730xC30x810x58
0x7CHorn0x020x0011730xC30x810x58
0x7DGiant Blade0x020x00251730xC20x810x58
0x7EHeadoomerang0x020x002501730xCA0x820x58
0x7FChew Off0x020x0011730xCA0x810x58
0x80Quake0x810x001501830xCB0x820x98
0x81Flame0x210x00801830xCE0x810x44
0x82Flame Sweep0x210x002001830xCE0x820x44
0x83Fireball0x210x001401830xCE0x810x44
0x84Flame Pillar0x210x002501830xCE0x820x44
0x85Heatwave0x310x312201830xCE0x820x44
0x86Watergun0x410x00601830xCD0x810x4C
0x87Coldness0x410x00651830xCD0x810x4C
0x88Icy Foam0x410x00801830xCD0x810x4C
0x89Ice Block0x410x001201830xD90x810x0C
0x8ASnowstorm0x410x002501530xCD0x820x4C
0x8BWhirlwater0x410x002001830xCF0x820x7C
0x8CIce Breath0x410x00701830xDB0x810x4C
0x8DTornado0x110x00801830xCF0x810x48
0x8ETyphoon0x110x002501830xCF0x820x48
0x8FHurricane0x110x00101830xCF0x810x48
0x90Thunder0x510x001001830xCC0x810x50
0x91Thunder Beam0x510x00801830xDA0x810x50
0x92Corrode Gas0x000x80501930xDB0x810x54
0x93Doom Dance0x000x802001930x5C0x810x78
0x94Sonic Boom0x010x08502030xE10x810x58
0x95Bark0x010x08702030xE10x810x58
0x96Screechvoice0x010x082502030xE10x810x58
0x97Para-needle0x000x20702030xC90x810x58
0x98Para-claw0x000x20702030xC30x810x58
0x99Para-snake0x000x202302030xC20x810x58
0x9APara-breath0x010x201802030xDB0x810x60
0x9BPoison Sting0x000x04702030xC90x810x58
0x9CPoison Thorn0x000x04702030xC90x810x58
0x9DRotten Mucus0x000x04702030xDF0x810x58
0x9EPoison Snake0x000x04802030xDF0x810x58
0x9FPoisonbreath0x010x042502030xDB0x820x5C
0xA0Blinder0x000x02752030xDB0x810x64
0xA1Blackness0x010x02752030xDB0x810x58
0xA2Stone Beak0x000x40452030xDD0x810x58
0xA3Gaze0x010x0802130xDD0x810x74
0xA4Stare0x010x0802130xDD0x810x74
0xA5Spooky Laugh0x010x0802130xDD0x810x74
0xA6Riddle0x010x0802130xDD0x810x74
0xA7Bad Breath0x010x2002130xDB0x810x60
0xA8Body Odor0x010x2002130xDB0x810x60
0xA9Para-stare0x010x2002130xDD0x810x74
0xAAPoison Fluid0x010x0402130xDF0x810x58
0xABPoison Flour0x010x0402130xDB0x810x58
0xACHypno-sleep0x010x1002130xDC0x810x40
0xADLullaby0x010x1002130xDC0x810x40
0xAESleep Lure0x010x1002130xDC0x810x40
0xAFSleep Powder0x010x1002130xDB0x810x58
0xB0Blind Flash0x010x0202130xDA0x810x58
0xB1Smokescreen0x010x0202130xDB0x810x64
0xB2Muffle0x010x0102130xDC0x810x70
0xB3Silence Song0x010x0102130xDC0x810x70
0xB4Stone Gas0x010x4002130xDB0x810x54
0xB5Stone Gaze0x010x4002130xDD0x810x74
0xB6Double Sword0x020x00102230xC10x810x59
0xB7Double Hit0x020x00102230xC10x810x59
0xB8Triple Fang0x020x00702330xC10x810x5A
0xB9Double Kick0x020x00602330xD70x810x59
0xBATwin Shears0x020x00502330xC10x810x59
0xBBThree Heads0x020x002002330xD70x810x5A
0xBC6 Psudopods0x020x00502330xD70x810x5B
0xBDSnake Head0x020x0052330xD70x810x5B
0xBEDrain0x080x001002430xDF0x810x58
0xBFDissolve0x080x001002430xDF0x810x58
0xC0Sucker Stick0x080x00602430xDF0x820x58
0xC1Selfdestruct0x000x00502530xC80x810x58
0xC2Multiply0x000x0002630xE10x810x88
0xC3Para Gas0x000x2002130xDB0x810x60
0xC4Rip Earth0x800x00451830xCB0x820x98
0xC5Stone Block0x800x0012030xD90x810x10
0xC6Windstorm0x100x0051830xCF0x810x48
0xC7Twin Fang0x000x00552330xC10x810x59
0xC8Psychshield0x000x0002930xDE0x900x00
0xC9Psychshield0x000x002002930xE00x810x58
0xCADark Cane0x020x00802930xDF0x810x58
0xCBDark Saber0x020x001152930xCC0x810x30
0xCCIce Sword0x020x00882930xCD0x810x58
0xCDFire Sword0x020x001002930xCE0x810x58
0xCEMirror Sword0x020x00752930xDE0x810x58
0xCFQuake Axe0x020x00702930xCB0x820x34
0xD0Cure Arrow0x010x00702930xD40x810x38
0xD1Lazer0x000x001202930xDA0x810x50
0xD2Spider Kids0x000x001082930xD70x810x2C
0xD3Silver Web0x000x0C802930xC20x810x18
0xD4Golden Web0x000x40702930xCA0x810x14
0xD5Mega Flare0x200x001252930xD10x810x80
0xD6Mega White0x000x00882930xD00x820x84
0xD7Fire Breath0x200x001201830xDB0x810x44
0xD8Sky Attack0x020x002501730xD90x820x58
0xD9Piledriver0x020x00101730xCA0x810x58
0xDAHurricane0x110x00151830xCF0x810x48
0xDBHeatwave0x310x312201830xCE0x820x44
0xDC(no name)0x000x0001800x0E0x820x44
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x13c78-0x140c2 — $02:BC78: the 157 attack recordsFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x10bf2-0x10c05 — $02:8BF2, the loader's three small tables: the bases $BC00, $BC78, $C0C3, $C117 and $C127, the record sizes 8, 7, 7, 4 and 5, and the first numbers $20, $40, $14, $10 and $2Fffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1606-L1648 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement saysBattle_SetupTargeting: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$00 xba lda.B $38 lsr a lsr a lsr a lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1649-L1686 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_ValidateAllTargets: rep #$30 phb ldy.W #$04dd lda.W #$0003 mvn $00,$02 plb sep #$20 rep #$10 lda.B $df and.B #$c0 lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1687-L1722 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_CheckTargetStatus: cmp.B #$10 beq Battle_ProcessTargetCheck lda.W $0000,x sta.B $e2 lda.B $38 cmp.B #$20 bne Battle_TargetStatusValid rts Battle_TargetStatusValid: inx Battle_ProcessTargetCheck: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1723-L1742 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_TargetCheckLoop: jsr.W Battle_NextTargetCheck sta.B $e7 xba and.B #$f0 lsr a lsr a lsr a lsr a sta.B $e6 jsr.W Battle_NextTargetCheck sta.B $e9 …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L3176-L3182 — the effect number in $DE, doubled, indexes a jump table at $02:992EBattle_StatusCured: lda.B #$00 xba lda.B $de asl a tax jmp.W (DB_UNREACH_02992E,x)Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/tables_list.txt — its countAttackObject attack_table.txt 13c78 156Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/attack_table.txt — the field nameselement,1 status,1 power,1 effect,1 sound_effect,1 targeting,1 unknown,1Checked by claude-agent, 2026-11-08 — decoded the records and read the action loader and the effect dispatchChecked by a second AI model, 2026-11-08.

terriblesecret's table list counts 156 attacks from 0x13C78; the area between that table and the spells at $02:C0C3 holds 157 records, and the loader's arithmetic reaches number $DC. Names are the ROM's 12-byte names; $DC's is blank.

The 12 spells, items $14-$1F from Exit to Flare, have 7-byte records at $02:C0C3 in the attack format: bytes 0-1 a word, bytes 2-5 into four places (byte 3's low six bits the effect routine), and byte 6 into one place. terriblesecret's attack fields name them: element, status, power, effect, sound effect, targeting. ffmq-tables/spells

No.NameByte 0 (element)Byte 1 (status)Byte 2 (power)Byte 3, low 6 bits (effect)Byte 3, top 2 bitsByte 4Byte 5 (targeting)Byte 6
0x14Exit0x000x0001130xD20xA10x22
0x15Cure0x080x00501430xD40x3F0x23
0x16Heal0x000x4001330xD50x150x24
0x17Life0x080x8001230xD50x150x25
0x18Quake0x800x0025930xCB0x820x26
0x19Blizzard0x400x00135830x8D0x830x27
0x1AFire0x200x0085830x4E0x830x28
0x1BAero0x100x00235830x0F0x830x29
0x1CThunder0x500x00180820x8C0x830x2A
0x1DWhite0x000x00140920x500x820x2B
0x1EMeteor0x800x00170920x930x820x2C
0x1FFlare0x200x00200910x910x820x2D
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x140c3-0x14116 — $02:C0C3: the 12 spell recordsFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x10bf2-0x10c05 — $02:8BF2, the loader's three small tables: the bases $BC00, $BC78, $C0C3, $C117 and $C127, the record sizes 8, 7, 7, 4 and 5, and the first numbers $20, $40, $14, $10 and $2Fffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1606-L1648 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement saysBattle_SetupTargeting: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$00 xba lda.B $38 lsr a lsr a lsr a lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1649-L1686 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_ValidateAllTargets: rep #$30 phb ldy.W #$04dd lda.W #$0003 mvn $00,$02 plb sep #$20 rep #$10 lda.B $df and.B #$c0 lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1687-L1722 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_CheckTargetStatus: cmp.B #$10 beq Battle_ProcessTargetCheck lda.W $0000,x sta.B $e2 lda.B $38 cmp.B #$20 bne Battle_TargetStatusValid rts Battle_TargetStatusValid: inx Battle_ProcessTargetCheck: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1723-L1742 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_TargetCheckLoop: jsr.W Battle_NextTargetCheck sta.B $e7 xba and.B #$f0 lsr a lsr a lsr a lsr a sta.B $e6 jsr.W Battle_NextTargetCheck sta.B $e9 …Checked by claude-agent, 2026-11-08 — decoded the records and read the action loaderChecked by a second AI model, 2026-11-08.

The four consumables, items $10-$13 (Cure Potion, Heal Potion, Seed, Refresher), have 4-byte records at $02:C117, which the game copies into the same four places as an attack's bytes 2-5: byte 1's low six bits are the effect routine. ffmq-tables/consumables

Value: item 0x10, 0x11, 0x12, 0x13 · name Cure Potion, Heal Potion, Seed, Refresher · Byte 0 25, 0, 0, 0 · Byte 1, low 6 bits (effect) 14, 13, 27, 10 · Byte 2 0x14, 0x15, 0x14, 0x14 · Byte 3 0x95, 0x94, 0xA0, 0x94

CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x14117-0x14126 — $02:C117: the four item recordsFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x10bf2-0x10c05 — $02:8BF2, the loader's three small tables: the bases $BC00, $BC78, $C0C3, $C117 and $C127, the record sizes 8, 7, 7, 4 and 5, and the first numbers $20, $40, $14, $10 and $2Fffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1606-L1648 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement saysBattle_SetupTargeting: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$00 xba lda.B $38 lsr a lsr a lsr a lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1649-L1686 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_ValidateAllTargets: rep #$30 phb ldy.W #$04dd lda.W #$0003 mvn $00,$02 plb sep #$20 rep #$10 lda.B $df and.B #$c0 lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1687-L1722 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_CheckTargetStatus: cmp.B #$10 beq Battle_ProcessTargetCheck lda.W $0000,x sta.B $e2 lda.B $38 cmp.B #$20 bne Battle_TargetStatusValid rts Battle_TargetStatusValid: inx Battle_ProcessTargetCheck: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1723-L1742 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_TargetCheckLoop: jsr.W Battle_NextTargetCheck sta.B $e7 xba and.B #$f0 lsr a lsr a lsr a lsr a sta.B $e6 jsr.W Battle_NextTargetCheck sta.B $e9 …Checked by claude-agent, 2026-11-08 — decoded the records and read the action loaderChecked by a second AI model, 2026-11-08.

The 17 pieces of armor, items $2F-$3F (helmets, armor, shields, and the Charm, Magic Ring and Cupid Locket), have 5-byte records at $02:C127. The game takes bytes 0-1 as a word, then splits each of bytes 2, 3 and 4 into its two nibbles. Byte 2 runs in blocks: 0x80 for 3 (Steel Helm, Moon Helm, Apollo Helm); 0x00 for 6 (Steel Armor, Noble Armor, Gaia's Armor, Relica Armor, Mystic Robe, Flame Armor); 0x20 for 5 (Black Robe, Steel Shield, Venus Shield, Aegis Shield, Ether Shield); 0x10 for 3 (Charm, Magic Ring, Cupid Locket). terriblesecret names byte 0 the element and byte 1 the status. ffmq-tables/armor

ItemNameByte 0 (element)Byte 1 (status)Byte 2Byte 3 low nibbleByte 3 high nibbleByte 4 low nibbleByte 4 high nibble
0x2FSteel Helm0x000x000x804455
0x30Moon Helm0x200x000x809999
0x31Apollo Helm0x200x000x8014151415
0x32Steel Armor0x000x000x006654
0x33Noble Armor0x400x040x0010121010
0x34Gaia's Armor0x500x140x0012151111
0x35Relica Armor0x400x400x0014151515
0x36Mystic Robe0x500x000x0015131512
0x37Flame Armor0x200x000x0012141214
0x38Black Robe0x000x800x2012131415
0x39Steel Shield0x000x000x204556
0x3AVenus Shield0x000x200x2011101112
0x3BAegis Shield0x000x600x2015141514
0x3CEther Shield0x080x300x2012121312
0x3DCharm0x000x000x102111
0x3EMagic Ring0x000x010x104343
0x3FCupid Locket0x000x0B0x107666
CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x14127-0x1417b — $02:C127: the 17 armor recordsFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x10bf2-0x10c05 — $02:8BF2, the loader's three small tables: the bases $BC00, $BC78, $C0C3, $C117 and $C127, the record sizes 8, 7, 7, 4 and 5, and the first numbers $20, $40, $14, $10 and $2Fffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1606-L1648 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement saysBattle_SetupTargeting: pea.w !JOY_DOWN pld sep #$20 rep #$10 lda.B #$00 xba lda.B $38 lsr a lsr a lsr a lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1649-L1686 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_ValidateAllTargets: rep #$30 phb ldy.W #$04dd lda.W #$0003 mvn $00,$02 plb sep #$20 rep #$10 lda.B $df and.B #$c0 lsr a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1687-L1722 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_CheckTargetStatus: cmp.B #$10 beq Battle_ProcessTargetCheck lda.W $0000,x sta.B $e2 lda.B $38 cmp.B #$20 bne Battle_TargetStatusValid rts Battle_TargetStatusValid: inx Battle_ProcessTargetCheck: …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1723-L1742 — Battle_SetupTargeting (ffmq-info's label): the action kind's high nibble picks an entry of the three small tables, and the record is base + (number − first number) × size; it then copies the bytes as the statement says (continued)Battle_TargetCheckLoop: jsr.W Battle_NextTargetCheck sta.B $e7 xba and.B #$f0 lsr a lsr a lsr a lsr a sta.B $e6 jsr.W Battle_NextTargetCheck sta.B $e9 …Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/armor_table.txt — the field names; it calls byte 2 statboostelement,1 status,1 statboost,1 power,1 unknown,1Checked by claude-agent, 2026-11-08 — decoded the records and read the action loaderRevised after a check by a second AI model, 2026-11-08.

The 9 character records at $0C:D0B0, 80 bytes each, are Benjamin's starting record and two for each companion, Kaeli, Tristam, Phoebe and Reuben, the second at a higher level. A new game copies record 0 to Benjamin's place at $1000; a script command copies the record it names, whole, to the companion's place at $1080 (ffmq/companion-records). By terriblesecret's field names, which the copies and the level-up fit, each holds the level ($10), current and maximum HP ($14, $16), the three kinds of magic points ($18-$1A, with maxima at $1B-$1D), the four stats as level gives them ($4C-$4F) and with equipment ($22-$25), and accuracy ($40), which Benjamin's level-up sets to 75 plus half the level. ffmq-tables/characters

Value: record 0, 1, 2, 3, 4, 5, 6, 7, 8 · name Benjamin, Kaeli, Tristam, Phoebe, Reuben, Kaeli, Tristam, Phoebe, Reuben · level 1, 3, 7, 15, 23, 31, 23, 34, 31 · HP 40, 120, 360, 680, 1040, 1280, 1120, 1480, 1320 · White MP 3, 3, 7, 21, 23, 35, 23, 40, 31 · Black MP 1, 0, 0, 10, 0, 17, 0, 20, 0 · Wizard MP 0, 0, 0, 5, 0, 0, 0, 10, 7 · attack 7, 11, 23, 47, 84, 96, 68, 70, 99 · defense 6, 11, 10, 20, 61, 73, 31, 39, 68 · speed 8, 11, 28, 36, 61, 77, 80, 66, 70 · magic 10, 9, 16, 49, 35, 55, 26, 94, 41 · Attack with equipment 7, 11, 28, 47, 84, 96, 73, 70, 99 · Defense with equipment 12, 29, 32, 36, 80, 97, 54, 71, 87 · Speed with equipment 8, 11, 33, 36, 61, 77, 85, 71, 70 · Magic with equipment 10, 14, 16, 54, 35, 60, 31, 99, 41 · Offset $40 (accuracy) 75, 76, 78, 82, 86, 90, 86, 92, 90

CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x650b0-0x6537f — $0C:D0B0: the 9 records, 80 bytes eachffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_00.asm#L1059-L1062 — a new game: 80 bytes from $0C:D0B0 to $1000ldx.W #$d0b0 ldy.W #$1000 lda.W #$004f mvn $00,$0cffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_00.asm#L11130-L11159 — Party_LoadCharacterData (ffmq-info's label): the script's byte × $50 + $D0B0, 80 bytes from bank $0C to $1080Party_LoadCharacterData: lda.W #$0080 and.w !char2_active_flag php lda.B [$17] inc.B $17 and.W #$00ff sep #$30 sta.W $0e92 sta.W !SNES_WRMPYA lda.B #$50 jsl.L Math_SetMultiplier …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1144-L1185 — Benjamin's level-up shows the record's layout: level at $10, MP maxima at $1B-$1D, the level stats at $4C-$4F copied to $26-$29 and, plus $2A-$2D, to $22-$25, and $40 set to 75 + level ÷ 2lda.B $10 sta.W !sys_temp_work_2 lda.B $1b sec sbc.W !sys_temp_work_1 clc adc.B $10 sta.B $1b lsr.W !sys_temp_work_1 lsr.W !sys_temp_work_2 lda.B $1c sec …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1186-L1214 — Benjamin's level-up shows the record's layout: level at $10, MP maxima at $1B-$1D, the level stats at $4C-$4F copied to $26-$29 and, plus $2A-$2D, to $22-$25, and $40 set to 75 + level ÷ 2 (continued)Battle_ProcessCommand: sta.W $0000,x inx dey bne Battle_InputReceived lda.B $4c sta.B $26 clc adc.B $2a sta.B $22 lda.B $4d sta.B $27 …Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/char_table.txt#L1-L16 — its field names and sizes, from offset 0: level at $10, HP at $14 and $16, white, black and wizard at $18-$1A and again at $1B-$1Dname_text,16,list level,1 unknown1,3 current_hp,2 max_hp,2 white,1 black,1 wizard,1 white2,1 black2,1 wizard2,1 unknown3,8 …Final Fantasy Mystic Quest: A Terrible Secret Randomizer · tables/char_table.txt#L21-L26 — accuracy at $40 and a second attack, defense, speed and magic at $4C-$4Faccuracy,1 unknown6,11 attack2,1 defense2,1 speed2,1 magic2,1Archipelago multiworld randomizer · worlds/ffmq/Options.py#L250-L256 — the randomizer's options speak of each companion's second versionQuests: Complete each companion's individual quest for them to promote to their second version.A companion joins when an event-script command names one of the 9 character records (ffmq-tables/characters): the game copies all 80 bytes of that record over the companion's place at $1080, so the companion arrives at the record's level, HP, stats and equipment, and nothing of the previous companion's record is kept; bit 7 of offset $20 is cleared in the copy unless it was set in the record it replaced. CodeChecked by claude-agent, 2026-11-08 — decoded the records and read the copies and the level-up at the pinned linesRevised after a check by a second AI model, 2026-11-08.

Archipelago's companion options call the later records each companion's second version, which a quest promotes them to. Record 0's own name field holds "DemoPlay"; the player names Benjamin. The companions' names are their records' name fields. Magic points are the maxima at offsets $1B-$1D. The field names are terriblesecret's; the copies show only where the bytes go, and the level-up adds to $16 and $1B-$1D and copies $4C-$4F (ffmq/benjamin-level-up).

Each of the 20 battlefields, battle numbers 0-19, has a count of battles at $0C:D4D0, which a new game copies to $0FD4, and a reward word at $07:EFA1. Every battlefield starts at 10. After a won battle with a number below 20, the game takes one off that battlefield's count and shows the number left; at zero it gives the reward: with the top bit set, the low 15 bits times 3 in experience; with bit 14, the item in the low byte; otherwise the low 14 bits times 3 in gold. The battlefield names are Archipelago's, not the game's: Archipelago's object ids 1-20 are taken as battle numbers 0-19 because their types (experience, item, gold) follow the reward words in the same order, and the official guide's numbered battlefields -2-, -5-, -19- and -20- have the rewards of battle numbers 1, 4, 18 and 19. ffmq-tables/battlefields

Value: Battle 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 · battlefield Foresta South, Foresta West, Foresta East, South of Libra Temple, East of Libra Temple, South of Aquaria, South of Wintry Cave, West of Wintry Cave, Ice Pyramid, North of Libra Temple, Aquaria Frozen Field, Path to Fireburg Southern, Path to Fireburg Central, Path to Fireburg Northern, Sealed Temple, Mine, Boulder, Volcano, Kaidge Temple, South of Windia · Battles 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 · reward experience, item, gold, experience, gold, item, experience, gold, experience, item, experience, gold, item, experience, gold, item, experience, experience, experience, experience · Reward 54, Charm, 150, 99, 300, Magic Ring, 99, 600, 540, Exit, 744, 900, Gemini Crest, 816, 1200, Thunder, 1200, 1068, 2808, 2700 · formations 7, 6, 8, 9, 10, 11, 19, 176, 177, 25, 24, 25, 27, 25, 29, 30, 29, 32, 33, 32, 34, 49, 48, 50, 54, 52, 53, 184, 184, 185, 190, 190, 191, 66, 66, 67, 69, 69, 68, 71, 71, 72, 75, 73, 74, 78, 76, 80, 87, 86, 89, 207, 201, 207, 136, 133, 137, 140, 138, 138

CodeFinal Fantasy - Mystic Quest (USA) (Rev 1) · 0x654d0-0x654e3 — $0C:D4D0: a byte per battlefield, inside the 380 bytes a new game copies to $0E84Final Fantasy - Mystic Quest (USA) (Rev 1) · 0x3efa1-0x3efc8 — $07:EFA1: a reward word per battlefieldffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_00.asm#L1055-L1058 — a new game: 380 bytes from $0C:D380 to $0E84, so $0C:D4D0 lands at $0FD4ldx.W #$d380 ldy.W #$0e84 lda.W #$017b mvn $00,$0cffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1452-L1472 — after the rewards: a battle number below 20 takes one off $0FD4 + n; not zero, a message with the count; zero, the reward word at $07:EFA1 + 2n, by its top bitslda.B #$00 xba lda.W $0514 cmp.B #$14 bcc Battle_UpdateBattleCount Battle_DisplayRewardsComplete: jmp.W Battle_RewardsEnd Battle_UpdateBattleCount: tax dec.W $0fd4,x beq Battle_ProcessBossDefeat lda.W $0fd4,x …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1473-L1516 — after the rewards: a battle number below 20 takes one off $0FD4 + n; not zero, a message with the count; zero, the reward word at $07:EFA1 + 2n, by its top bits (continued)Battle_ProcessBossDefeat: pha lda.B #$81 clc adc.B $01,s jsl.L PlaySoundEffectBank lda.B #$95 clc adc.B $01,s jsl.L Sub_009760 pla asl a …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1517-L1527 — after the rewards: a battle number below 20 takes one off $0FD4 + n; not zero, a message with the count; zero, the reward word at $07:EFA1 + 2n, by its top bits (continued)Battle_ApplyRewardBonus: and.W #$3fff pha asl a clc adc.B $01,s sta.B $a2 pla ldx.W #$d578 jsr.W Battle_DisplayMessageArchipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 1, taken as battle number 0: its name and its type, which matches the reward word'name': 'Foresta South Battlefield', 'object_id': 1, 'location': 'ForestaSouthBattlefield', 'location_slot': 'ForestaSouthBattlefield', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 2, taken as battle number 1: its name and its type, which matches the reward word'name': 'Foresta West Battlefield', 'object_id': 2, 'location': 'ForestaWestBattlefield', 'location_slot': 'ForestaWestBattlefield', 'type': 'BattlefieldItem'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 3, taken as battle number 2: its name and its type, which matches the reward word'name': 'Foresta East Battlefield', 'object_id': 3, 'location': 'ForestaEastBattlefield', 'location_slot': 'ForestaEastBattlefield', 'type': 'BattlefieldGp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 4, taken as battle number 3: its name and its type, which matches the reward word'name': 'South of Libra Temple Battlefield', 'object_id': 4, 'location': 'AquariaBattlefield01', 'location_slot': 'AquariaBattlefield01', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 5, taken as battle number 4: its name and its type, which matches the reward word'name': 'East of Libra Temple Battlefield', 'object_id': 5, 'location': 'AquariaBattlefield02', 'location_slot': 'AquariaBattlefield02', 'type': 'BattlefieldGp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 6, taken as battle number 5: its name and its type, which matches the reward word'name': 'South of Aquaria Battlefield', 'object_id': 6, 'location': 'AquariaBattlefield03', 'location_slot': 'AquariaBattlefield03', 'type': 'BattlefieldItem'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 7, taken as battle number 6: its name and its type, which matches the reward word'name': 'South of Wintry Cave Battlefield', 'object_id': 7, 'location': 'WintryBattlefield01', 'location_slot': 'WintryBattlefield01', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 8, taken as battle number 7: its name and its type, which matches the reward word'name': 'West of Wintry Cave Battlefield', 'object_id': 8, 'location': 'WintryBattlefield02', 'location_slot': 'WintryBattlefield02', 'type': 'BattlefieldGp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 9, taken as battle number 8: its name and its type, which matches the reward word'name': 'Ice Pyramid Battlefield', 'object_id': 9, 'location': 'PyramidBattlefield01', 'location_slot': 'PyramidBattlefield01', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 10, taken as battle number 9: its name and its type, which matches the reward word'name': 'North of Libra Temple Battlefield', 'object_id': 10, 'location': 'LibraBattlefield01', 'location_slot': 'LibraBattlefield01', 'type': 'BattlefieldItem'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 11, taken as battle number 10: its name and its type, which matches the reward word'name': 'Aquaria Frozen Field Battlefield', 'object_id': 11, 'location': 'LibraBattlefield02', 'location_slot': 'LibraBattlefield02', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 12, taken as battle number 11: its name and its type, which matches the reward word'name': 'Path to Fireburg Southern Battlefield', 'object_id': 12, 'location': 'FireburgBattlefield01', 'location_slot': 'FireburgBattlefield01', 'type': 'BattlefieldGp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 13, taken as battle number 12: its name and its type, which matches the reward word'name': 'Path to Fireburg Central Battlefield', 'object_id': 13, 'location': 'FireburgBattlefield02', 'location_slot': 'FireburgBattlefield02', 'type': 'BattlefieldItem'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 14, taken as battle number 13: its name and its type, which matches the reward word'name': 'Path to Fireburg Northern Battlefield', 'object_id': 14, 'location': 'FireburgBattlefield03', 'location_slot': 'FireburgBattlefield03', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 15, taken as battle number 14: its name and its type, which matches the reward word'name': 'Sealed Temple Battlefield', 'object_id': 15, 'location': 'MineBattlefield01', 'location_slot': 'MineBattlefield01', 'type': 'BattlefieldGp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 16, taken as battle number 15: its name and its type, which matches the reward word'name': 'Mine Battlefield', 'object_id': 16, 'location': 'MineBattlefield02', 'location_slot': 'MineBattlefield02', 'type': 'BattlefieldItem'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 17, taken as battle number 16: its name and its type, which matches the reward word'name': 'Boulder Battlefield', 'object_id': 17, 'location': 'MineBattlefield03', 'location_slot': 'MineBattlefield03', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 18, taken as battle number 17: its name and its type, which matches the reward word'name': 'Volcano Battlefield', 'object_id': 18, 'location': 'VolcanoBattlefield01', 'location_slot': 'VolcanoBattlefield01', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 19, taken as battle number 18: its name and its type, which matches the reward word'name': 'Kaidge Temple Battlefield', 'object_id': 19, 'location': 'WindiaBattlefield01', 'location_slot': 'WindiaBattlefield01', 'type': 'BattlefieldXp'Archipelago multiworld randomizer · worlds/ffmq/data/rooms.py#L1 — object id 20, taken as battle number 19: its name and its type, which matches the reward word'name': 'South of Windia Battlefield', 'object_id': 20, 'location': 'WindiaBattlefield02', 'location_slot': 'WindiaBattlefield02', 'type': 'BattlefieldXp'Final Fantasy Mystic Quest Strategy Guidebook · p. 20, Battlefield -2- — battle number 1's reward, the Charm, and its 10 battlesAfter clearing out the 10 rounds worth of monsters in this Battlefield, you'll win a prize the Charm Pendant.Final Fantasy Mystic Quest Strategy Guidebook · p. 28, Battlefield -5- — battle number 4's rewardGrab 300 GP after clearing this Battlefield!Final Fantasy Mystic Quest Strategy Guidebook · p. 59, Battlefields -19- and -20- — battle number 18's rewardHang in there for 10 rounds and you'll receive 2,808 Experience points.Final Fantasy Mystic Quest Strategy Guidebook · p. 59, Battlefields -19- and -20- — battle number 19's rewardLast Battlefield in the game. Pick up an extra 2,700 Experience points here.ファイナルファンタジーUSA ミスティッククエスト 取扱説明書 (Final Fantasy USA: Mystic Quest instruction booklet) · p. 28, バトルポイントについて — 20 battle points on the field (our gloss)フィールド上には、全部で20のバトルポイントが存在します。Checked by claude-agent, 2026-11-08 — decoded the counts and the reward words and read the countdown at the pinned linesRevised after a check by a second AI model, 2026-11-08.

The guide numbers the battlefields -1- to -20- and names none; its -n- is battle number n − 1 at the four rows it confirms. The formations column is each battle number's three formations (ffmq/formation-sets). Experience and gold rewards are the stored value times 3, as for monsters.

The level-up compares Benjamin's experience total at $1011-$1013 with the figure at $0510-$0512 (the experience for his next level). A Mesen probe replays the attract mode's level-25 Benjamin from one savestate, answers each read of his level with 1 to 41 in turn, and records what the game then writes to $0510-$0512: 13L³ + 100L² + 161L + 74 for levels 1 to 39 (348 at level 1, 929,600 at level 39), but 146,546 at level 40 and 218,780 at level 41, each 851,968 (13 × 65,536) below that cubic, so the level-40 figure is lower than the 929,600 that took him to level 40. The probe records the write coming from the script command at $00:AF5B with the event-script pointer at $03:AE36; the script isn't decoded. ffmq-tables/experience-to-level

LevelExperience for the next levelMore than the level before
1348348
2900552
31808908
431501342
550041854
674482444
7105603112
8144183858
9191004682
10246845584
11312486564
12388707622
13476288758
14576009972
156886411264
168149812634
179558014082
1811118815608
1912840017212
2014729418894
2116794820654
2219044022492
2321484824408
2424125026402
2526972428474
2630034830624
2733320032852
2836835835158
2940590037542
3044590440004
3148844842544
3253361045162
3358146847858
3463210050632
3568558453484
3674199856414
3780142059422
3886392862508
3992960065672
40146546-783054
4121878072234
Verifiedffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_02.asm#L1533-L1558 — the level-up's check: $0510-$0512 against his experience at $1011-$1013Battle_DisplayNumberValue: sep #$20 rep #$10 sec lda.W $0512 cmp.W $1013 beq Battle_ConvertNumberLoop bcc Battle_DisplayDigitLoop rts Battle_ConvertNumberLoop: rep #$30 lda.W $0510 …ffmq-info: Final Fantasy Mystic Quest (SNES) disassembly and tools · src/asm/banks/bank_00.asm#L12916-L12925 — Memory_BlockCopy_ToPointer (ffmq-info's label), a script command at $00:AF5B: the 3-byte result at $9E copied to the address that follows in the script; the probe records the program counter of the write to $0512 in this rangeMemory_BlockCopy_ToPointer: tax lda.B [$17] inc.B $17 inc.B $17 tay txa ldx.W #$009e mvn $00,$00 rtsChecked by claude-agent, 2026-11-08 — ran probes/ffmq/exp-threshold.mjs: Benjamin's level read answered with each of 1-41 from one savestate before the attract mode's script, and the program counter of the attract run's write (00:AF6A) and the script pointer recorded, and the 41 figures written to $0510-$0512 checked against the cubic (levels 1-39) and the cubic less 13 × 65,536 (40-41); the unaltered attract run (level 25) writes 269,724, the same figure; read the store and the check at the pinned linesRevised after a check by a second AI model, 2026-11-08.Probe: probes/ffmq/exp-threshold.mjs

The figures are a running total, not an amount per level: the check compares them with his whole experience. The cubic is our fit, and the probe checks it at every level. Losing exactly 13 × 65,536 at levels 40 and 41 looks like an overflow in the script's arithmetic, which isn't read yet. If the game sets the level-40 figure, a level-40 Benjamin already meets it at the next check; the level-up stops at 41 (ffmq/benjamin-level-up).

Cited by: Growth rate