| Each of the 165 monsters has a record reached through a table of 165 offsets at the start of the monster data: a 10-letter name, then fixed fields, then an ailment group (a mask byte and one byte per set bit), an element group (a mask and one byte per set bit of its low 7), and a count byte with that many more. The battle loader copies the name and the fixed bytes into the fighter, widening the bytes at +24 to +26 to words; the reward code reads the experience as a word at +27, the gold as a word at +30, the dropped item at +32 and its rate at +33. Lufia Forge names the words at +16, +20 and +22 HP, ATP and DFP and treats the word at +18 as MP, the bytes at +24 to +26 M.DEF, AGL and MGR, the byte at +12 the element the monster is weak to and +13 the physical damage it then takes in sixteenths, and the element group's bytes magic damage multipliers in sixteenths. 77 monsters carry a drop. HP runs up to 65535 (Gades). | 0x5800-0x59490x594A-0x7D900xF67D-0xF68F0xF570-0xF6650x43C26-0x43CA6 | Code |
| Each of the 256 items has a record reached through a table of 256 offsets: a 12-letter name, bytes at +12 to +15, a word at +16, a mask byte at +20, one record-relative pointer for each set bit of the mask's low six, and then a list of three-byte properties (an id and a word) ended by 0, which the record reader spreads into one word per property id. The equip code takes a weapon's property 14 second byte as the wearer's hit byte (255 when it is 0), property 22 as the weapon's special, and averages the nonzero property 23 bytes of the other five pieces into the wearer's encounter byte. The other meanings are Lufia Forge's alone: it names +12 the type, +13 the equipment slot (1 weapon to 6 ring), the high four bits of +14 who can equip it (Hero, Lufia, Aguro, Jerin), the word at +16 the price, and the property ids 5 ATP, 6 DFP, 7 MGR, 8 AGL, 9 STR, 10 INT, 14 weight and hit chance, and the rest. 163 items have a slot by that reading; the 57 with a nonzero mask (the usable ones) have pointers before their property list. | 0x55800-0x559FF0x55A00-0x5787F0x47AD0-0x47AE20x47999-0x47A2C0x47858-0x478D1 | Code |
| The 56 spells have records reached through a table of offsets: an 8-letter name, then bytes the spell reader copies from +8 to +20, among them a record-relative pointer at +12 to the effect data, which the reader turns into an address. The rest is Lufia Forge's reading: a usage byte at +8, a target byte at +10 and the MP cost at +11, effect codes (such as 1 restore HP, 5 restore all HP, 6 cure ailments, 11 elemental damage, 15 drain MP, 16 teleport, 17 float) and element numbers (1 Fire to 7 Dark); it reads the effect data as an effect byte, then for elemental damage an element, a power word and a random range; for healing and stat changes a kind, a power and a random range; for ailments a kind and a success rate. | 0xFDB00-0xFDB6F0xFE354-0xFE8CF0x47ABD-0x47ACF0x47A2D-0x47A6F | Code |
| On each level-up, unless a flag the game's event code sets and clears is set (not identified here), the game walks the new level's character's list of (level, spell) pairs, ended by $FF, skipping pairs whose level is 0, and teaches each spell whose level equals the new level; the Hero, Lufia and Jerin have lists, and the code skips Aguro's slot. The lists hold 63 pairs. | 0x467EB-0x467F20x46E0D-0x46E8D0x46650-0x4665D0x4665E-0x46683 | Code |
| Eight character records of 29 bytes each hold a character's state when they join: level, a growth counter, six stat words (HP, MP, AGL, INT, STR, MGR), the experience, the experience for the next level and the increment (three bytes each), and six equipment bytes. The join routine fills party slot id mod 4 only when the slot's level is 0: from a level kept aside for the slot if there is one, else by copying the record; so Maxim, Selan, Guy and Artea (records 4-7, the prologue party) take the slots of the Hero, Lufia, Aguro and Jerin; Lufia Forge names the records and the stats. | 0x46D25-0x46E0C0x46A9F-0x46B66 | Code |
| Stat growth is a table of 6 stats by 7 bands by the 4 party slots: at each level-up a stat becomes its value at the start of the current band of 16 level-ups plus the band's byte times the level-ups so far into it (1 to 16) over 16, rounded, plus a random -2 to +2 when that gain isn't 0, and it never goes down; the band start moves up at the 16th level-up of a band. The stat names come from the characters' records, whose stat names are Lufia Forge's. | 0x46C69-0x46D100x467C7-0x467EA0x46692-0x466B80x4673D-0x467C6 | Code |
| Experience to reach each level, computed from the level-up code: a character levels when their experience reaches the stored next-level value (to a cap of 99); then the increment grows by itself shifted right once for each of the character's five thresholds the growth counter plus 1 has reached, by nothing once all five are reached, and the next level comes at next plus the new increment. Level 99 takes 6,857,436 (Hero), 7,017,992 (Lufia), 6,620,349 (Aguro) and 7,124,086 (Jerin). | 0x46D11-0x46D240x46601-0x4663F0x466B9-0x4673C | Code |
| The game has 86 shop numbers, each an offset into the shop records; a record is a type byte, then item numbers, ended by 0, and a type of 0 is no shop. 70 have stock. Lufia Forge names the types 2 weapons, 3 armor, 4 weapons and armor, 5 items and 7 accessories, and the town of each shop; types 1 (shop 45, no stock), 6 (four shops of ciders) and 8 (shop 13, stuffed animals) it leaves unnamed. | 0xEC5B-0xED060xED5B-0xEFE70x51CD-0x51FD | Code |
| A random battle's encounter group (1-69) points to a list of subgroups: each monster draw picks one of the listed subgroups at random, then counts random(4) + 1 steps through its non-empty monster slots, wrapping round to the first, and takes 1-3 of the monster it stops on. So a subgroup with empty slots favours its first ones: subgroup 1 (Big Newt, Madshroom, Jellyfish) gives Big Newt 2 draws in 4 (computed). | 0x45A60-0x45BE10x459D2-0x45A5F | Code |
| The 67 subgroups each hold four monster ids ($FF empty). | 0x45BE2-0x45CED0x45A1D-0x45A2D | Code |
| Formations $E6 to $FA are fixed: each has four monster slots, and a battle takes each slot's monster once, in order, an $FF slot giving no monster. | 0x45CEE-0x45D410x459E0-0x45A0B | Code |
| Before the prologue the game's script gives the prologue party 10 stacks of items (Miracle x87, Ex Potion x62, Ex Magic x28, Revive x50, Awaken x92, Stone Cure x88, Mystery Pin x95, Shriek x91, Ex Arrows x36, Ex Bomb x29) and teaches Maxim 10 spells, Selan 8 and Artea 12. | 0x1BD8E-0x1BE050x11196-0x111A80x111A9-0x111CB0x46829-0x4684B0x4745A-0x4747D | Code |
| The game's random numbers come from a table of 55 bytes that it steps through and, each time it wraps, mixes with itself (each byte XORed with another of the table): random(n) is n times the next byte, divided by 256 and rounded down, so it runs from 0 to n − 1 and takes only n's low byte. | 0x43829-0x4385A0x438A1-0x438BF | Code |
| Random battles start from a roll on each step: on a map that has them, outside some map states that skip the roll (not identified here), a step taken while the party's step count is 4 or more starts a battle when random(128) is below 10 × danger ÷ 128, halved off the world map, where danger is 128 unless something changes it (see the danger claim). So with danger 128 a step after the fourth starts a battle with chance 10 in 128 (1 in 12.8) on the world map and 5 in 128 (1 in 25.6) elsewhere, computed. In one state the code tests (two flags not identified here) the roll is out of 255 instead. While a step count that an item or spell effect sets is above 0 and danger is 192 or more, every step starts a battle, the fourth-step wait included; that count goes down by one a step in some map states. | 0x8050-0x80640xB440-0xB4580x881D-0x88750x8876-0x88AA0x8C86-0x8CAE0x8967-0x896F0x43829-0x4385A | Code |
| The Monster Ring raises the chance of a random battle on the world map from 10 to 15 in 128 a step, and the Clear Silk to 11; off the world map the Monster Ring raises it from 5 to 7 in 128, and the Clear Silk leaves it at 5. The world-map figures are the game's threshold routine given the world-map flag, since no run reached the world map, and every figure assumes the roll is out of 128: in one movement state not followed here it is out of 255 (see the roll claim). The roll scales by a danger number, 128 by default. Each party member's encounter number is the average of the nonzero encounter numbers on the five pieces they wear besides the weapon, the party's is the average of its members' nonzero ones, and danger is the party's number when it has one. Of the 256 items only two have an encounter number: the Monster Ring (192) and the Clear Silk (147). The code also has a second danger source, set by an effect handler that no known item or spell has been traced to; by the routine's arithmetic, with both set danger is their mean, or 192 when they add past 255, and with that one alone it is that one. Measured in MesenCE on the prologue's first map, with the items put on the party: danger 128 with the prologue's own equipment, 147 with the Clear Silk on one member or on all four, 192 with the Monster Ring, and 169 with both, on one member or on two; with the second source written directly, 123 (147 and 100), 192 (192 and 200) and 200 alone. A walk on that map rolled against thresholds of 5, 5 and 7 in 128 with neither item, the Clear Silk and the Monster Ring. | 0x4732C-0x473560x47916-0x479450x47858-0x478D10x47113-0x4712C0x55A00-0x5787F0x47999-0x47A2C0x8876-0x88AA | Verified |
| A random battle's eight monster slots are filled by draws from the encounter group, each draw putting 1-3 of one monster in consecutive slots. A roll of k + random(k + 1), with k a number set for the battle, then decides how many of the first slots stay filled; fixed formations skip it. Then the slots are kept in order while three limits hold: at most 3 different monsters (a run of the same monster counts once), a total of one picture-size value per different monster below 30, and a total of another below 64; the first slot that breaks a limit is emptied with every later slot not part of a kept run. | 0x45215-0x452870x452A2-0x452C80x452C9-0x453610x4556C-0x4558F | Code |
| Each monster enters battle with its table HP plus random(HP ÷ 8 + 1), or random(255) when the HP is 2040 or more: up to an eighth more below 2040 HP, at most 254 more from 2040 up (computed); a monster whose HP is 65535 gets no bonus. | 0xF63C-0xF6650xF666-0xF67C0x43829-0x4385A | Code |
| A defeated monster adds its table experience to the battle's total; its gold plus a random bonus (each byte of gold ÷ 8 rolled separately, so up to about an eighth more, computed); and, if it has a drop item, the item when random(255) is below its rate byte, a chance of (rate + 1) in 256 for rates 1 to 255 (computed). One drop is kept per battle: a later winning roll replaces it. | 0x43C26-0x43CA60x43829-0x4385A | Code |
| A physical attack hits when random(255) is below the attacker's hit byte: a monster's is 255, so a monster's attack always passes this roll (computed), and a party member's is the second byte of their weapon's property 14 (255 if it is 0): 255 on 40 of the 42 weapons, 127 on the Luck Blade, 51 on the Gloom Pick. Before the roll, when a party member attacks a party member, the target's two status flags of value $0C are cleared (not identified here). | 0x43E9E-0x43EA30x43F75-0x43FC30x47858-0x478D10x43829-0x4385A | Code |
| A physical hit's damage starts from ATP − DFP: (ATP − DFP + 1) ÷ 2 + 1 when ATP is higher, 2 when they are within 16 of each other the other way (or equal), and 0 when DFP is 16 or more higher. A critical hit doubles that base, and makes a base of 0 into 2. The base is then multiplied by a factor of 96 plus the mean of (base ÷ 16 + 2) rolls of random(64), over 128, so the larger the base the closer the factor stays to about 127 (computed), and the mean, rounded up, of two rolls of random(r) is added, where r is ATP ÷ 8 rounded to the nearest, plus 1. DFP counts one and a half times against a target in one state the code tests (not identified here), and an attack with ATP 0 misses. Steps for slayer types, elements, weapon specials, a stone target (no damage) and drain follow and aren't covered here. | 0x43FCF-0x43FE20x440A5-0x4417C0x4401E-0x440450x439DB-0x43A040x43A05-0x43A100x43829-0x4385A0x4730C-0x4732B | Code |
| A physical attack between the two sides is a critical hit when random(255) is 1 to 5, a chance of 5 in 256 (computed), unless the attacker is a party member whose weapon has a special effect or the target is a party member with one status flag (value 2, not identified here); a critical doubles the damage's base. | 0x43DC7-0x43E120x4401E-0x440450x43829-0x4385A | Code |
| The party's Run command never escapes a fixed formation (the bosses'), always escapes in one battle state the code tests (not identified here), and otherwise escapes when random(A ÷ 4) is at least random(M ÷ 2), where A is the highest AGL among the party members present and M the highest among the monsters still in the battle, each counting its base plus a second stat word that the lookup adds to every stat (cleared to 0 when the monsters load and for the party at a step of the battle code; what raises it wasn't traced). So with equal agility the party's roll is out of half the monsters' range, and an escape succeeds about 1 time in 4 (26% at AGL 120, 28% at 40, computed for an evenly spread random byte). | 0x430B4-0x430CB0xF492-0xF4BA0xF4BB-0xF4F00xF4F1-0xF5340x47203-0x472980x4730C-0x4732B0xF274-0xF2A10xF583-0xF5930xF5C7-0xF5D70x43829-0x4385A | Code |
| The prologue's party when its first map loads is Maxim at level 78, Selan 77, Guy 77 and Artea 75, with the stats and equipment stored in their character records, and the prologue's script has given them 10 items (87 Miracle, 62 Ex Potion, 28 Ex Magic, 50 Revive, 92 Awaken, 88 Stone Cure, 95 Mystery Pin, 91 Shriek, 36 Ex Arrows, 29 Ex Bomb) and taught Maxim 10, Selan 8 and Artea 12 spells. Measured in MesenCE from power-on, pressing A every 10 frames with Start on every fourth press, about 60 frames (60 to 69) after the prologue's first map is entered. | 0x46D25-0x46E0C0x1BD8E-0x1BE050x46A9F-0x46B66 | Verified |