The extra dungeons, side quests, espers, spells and weapons of the Game Boy Advance release, brought to the SNES, with the GBA's music player and a bestiary of every enemy.
#230 Added the Dragons' Den: an island in the World of Ruin with eighteen rooms, three parties, eight seals, 38 new enemies and 69 fights, ending with Kaiser Dragon and Omega Weapon.
- In 1.0
- The hunt for the eight legendary dragons in the World of Ruin ended with the Crusader Magicite, and the small island north of the Colosseum had nothing on it. There was no Omega Weapon.
- Now
- Once all eight dragons are dead, the Falcon can land on that island. Inside, the party splits into three groups, swapped with the Y button, to work through switch puzzles and break the eight seals by defeating reborn dragons. Kaiser Dragon guards the last room, and Omega Weapon then waits in the lair.
For ROM hackers Method
Taken from the GBA ROM by script. 18 maps: GBA 415 to 431 keep their numbers and GBA 227, the Falcon's deck, becomes 432, with records, 39 layouts (the same LZSS), NPCs, triggers, entrances, treasures and encounter packs. 38 monsters in slots 384 to 422 and 69 formations, 576 to 644: records are the SNES format; graphics go from linear to planar 4bpp and each stencil word is byte-swapped; attack numbers from 93 up are the GBA number minus 88. About 11 KB of event script, the SNES command set: 104 GBA-only switches map to event bits 1.0 never uses, and battles by formation use event command $69, a new handler in EventCmdTbl slot C0/992C. Entry: LandAirship (EE/936E) tests the island's tiles at EE/93AF, before the Phoenix Cave check. Needs the 4 MB ROM (#237).
How to read these notes
Credit: as in the GBA release, my implementation
#232 Added the Soul Shrine: an island west of Mobliz offering 128 battles across ten phases, rewarding the Master's Crown.
- In 1.0
- The small island west of Mobliz in the World of Ruin was bare land with nothing on it to visit.
- Now
- Once Kaiser Dragon is dead, the shrine's door opens and its ghost offers a chain of fights against enemies from across the game. Nothing heals the party between fights, and leaving mid-chain starts it over.
For ROM hackers Method
Taken from the GBA ROM as the Den was (#230). GBA maps 229 and 230 become 433 and 434 with their records, NPCs, triggers and entrances, entrance destinations remapped to the new slots, plus map title 74. The ghost's 128 fights use event command $69 (battle by 16-bit formation number, handler in EventCmdTbl slot C0/992C), since 1.0's $4D names only one of 256 event battle groups; the 32 fights that need a group use new groups 154 to 185. Landing: LandAirship tests the island's tiles (230..233, 133..136) at EE/93AF. The Master's Crown is rare item 20, event bit $01E4: the rare item name table grows to 21 entries and the Important Items list needs an eleventh row, opened in a window 1 mask of its own, since other menus draw on the shared mask's last lines. The door's GBA game-clear test is dropped. Needs #237.
How to read these notes
Credit: as in the GBA release, my implementation
#235 The Dragons' Den and Soul Shrine islands now show a cave entrance on the world map and appear on the mini-map.
- In 1.0
- The two small islands, north of the Colosseum and west of Mobliz, were plain land with no entrance drawn on them, and the World of Ruin mini-map marked neither.
- Now
- Each island shows a cave mouth the Falcon can land on, and each is a bright dot on the mini-map.
For ROM hackers 1.0 addresses
World of Ruin tilemap WorldTilemap2 (EF/6A56, LZSS, 256 by 256 tiles). Paint the Phoenix Cave's 2 by 2 cave-mouth block, tiles the airship can land on, on both islands: top row $BF $BE, bottom row $AF $AE, top-left corner at (50,7) for the Dragons' Den and at (231,134) for the Soul Shrine. Recompress; if it grows, move it and repoint. Mini-map graphics MinimapGfx2 (EF/E8B3, LZSS, 4bpp, one pixel per 4 by 4 world tiles): set pixels (12,1) and (57,33) to colour 5, the entrance marker.
How to read these notes
Credit: my implementation
#245 The Dragons' Den's flavor and battle dialogue is rewritten in Woolsey's voice and trimmed to fit the SNES message box.
- In 1.0
- The GBA release's Dragons' Den text is in a newer, wordier translation than the game's terse 1994 script, and a battle message must fit one line of the SNES battle box.
- Now
- The Den's story lines now match the tone of the rest of the game, and its nineteen boss battle lines fit on one line.
For ROM hackers Method
Text only, for the Den and Shrine content of #230 and #232. Their field lines are new entries appended to the dialogue table (Dlg, CD/0000, pointers in DlgPtrs, CC/E602), with the GBA control codes converted and the wording rewritten. The Den bosses' battle lines are new entries of the monster dialogue table (MonsterDlg, CF/E1E0, pointers in MonsterDlgPtrs, CF/DFE0). The battle message box shows one line in the variable-width font and does not wrap, so each line is cut to at most 224 pixels, the widest 1.0 line. In this ROM hack the grown pointer tables sit in the 4 MB area (#237).
How to read these notes
Credit: my implementation
#270 Added four more espers: Leviathan, Cactuar, Diabolos and Gilgamesh, with their summon animations and three new spells, Flood, Gravija and Valor. Kaiser Dragon leaves the Diabolos magicite.
- In 1.0
- 1.0 has 27 espers and its magic list holds 54 spells.
- Now
- The four join the end of the Espers list. Leviathan casts Tidal Wave; Cactuar 1000 Needles, or sometimes 10,000 Needles; Diabolos Dark Messenger; and Gilgamesh picks Excalibur, Masamune, Enkidu or the feeble Excalipoor at random. Leviathan teaches Flood, Diabolos Gravija and Gilgamesh Valor. Kaiser Dragon leaves Diabolos's magicite.
For ROM hackers Method
The GBA release's data, read from the player's GBA ROM: attack and esper records, names, descriptions, summon sprites, animation records, effect properties, frames and animation scripts. The GBA's numbering is kept: spells 54 to 56 are Flood, Gravija and Valor; the 27 old summon attacks move to 256 to 282 and the new summon moves are 283 to 290; animations 406 to 440; espers 27 to 30 (the owned-esper bits at $1A69 have room). So attack numbers pass 255: the summon command, InitTarget (C2/26D3), attack names and the animation lookup take a 9-bit number. The 77 new frames live in a second block, reached by a $0B84 test in LoadSpriteAnimFrames (C1/A0C6) and LoadBGAnimFrames (C1/9F73). The GBA's setup routines, script commands and attacker effects $58 to $5B are its 65816 code read back from ARM. Three more learnable spells need 36 bytes of free save RAM. Needs the 4 MB ROM.
How to read these notes
Credit: as in the GBA release, my implementation
#273 After the Falcon flies, Leviathan attacks the Nikeah-South Figaro ferry and becomes magicite, hinted by NPCs in both towns.
- In 1.0
- The ferry between Nikeah and South Figaro just carried the party across, and Mog's Water Rondo dance could not be learned anywhere in the World of Ruin.
- Now
- After the Falcon flies, Leviathan stops the ferry in either direction and fights on deck, then becomes magicite, and Mog can learn Water Rondo there. A former Returner in Nikeah and a sailor in South Figaro give hints.
For ROM hackers Method
Needs #270 (esper 27) and a new map (the GBA's copy of the ferry deck, map 187, for the scene), which needs the 4 MB ROM's map room. Hook: ExecWorldCmd (EE/78FB), the world map's script loop, starts with a jsr to a test. During a World of Ruin ferry ride, with the Falcon flying (switch $0CD) and without Leviathan's magicite, stepping on tile (113,80) or (124,76) leaves for the deck map at (14,16) with its startup event; the second tile also sets a switch that says which port to land at. The scene, the fight (formation 640) and the magicite are the GBA's event script, translated to SNES event commands. Hint NPCs are appended to Nikeah (map 169, with four triggers) and South Figaro (map 74); their maps' startups call the original startup first. New switches take free event bits.
How to read these notes
Credit: as in the GBA release, my implementation
#274 A Jidoor auction rumor leads to the Excalipoor, which draws out Gilgamesh at the Colosseum and leaves his magicite.
- In 1.0
- The Jidoor auction's lots included the Golem and Zoneseek magicite, and every item wagered at the Colosseum led to one set opponent and prize.
- Now
- After the Falcon, a Jidoor rumour tells of a rare sword, and the auction then sometimes offers Excalipoor for 500,000 GP. Wagered at the Colosseum, it draws out Gilgamesh, who leaves his magicite.
For ROM hackers Method
Needs #278 (Excalipoor is item 270) and #270 (esper 30). An NPC appended to Jidoor (map 198) tells the rumour and sets a switch; the auction house's World of Ruin branch then offers Excalipoor first (the GBA's script: half the time, bids to 500,000 gil in ten 50,000 steps, refunded if the gil runs out). Colosseum: in EventCmd_9a (C0/B0B2), before the lda #$40 at C0/B0C1, a wager of item 270 loads a new map (the GBA's map 222) at (8,8) with its startup event. The Colosseum match is fought there as usual; then the map's trigger runs Gilgamesh's scene and fight (formation 638). An NPC appended to the Colosseum (map 413) is the magicite, shown until taken. The new map and formation need the 4 MB ROM.
How to read these notes
Credit: as in the GBA release, my implementation
#275 Defeating ten Cactrots brings out Gigantuar near Maranda, dropping the Cactuar magicite, hinted by a Maranda NPC.
- In 1.0
- Beating Cactrots, however many, brought only the usual battle rewards, and no esper was tied to them.
- Now
- In the World of Ruin, after ten Cactrots have fallen, one desert tile south of Maranda starts a fight with Gigantuar, who leaves the Cactuar magicite. A Maranda NPC gives the hint.
For ROM hackers Method
Needs #270 (esper 28). Count: in WinBattle's loop over the monsters, at C2/5DB8, after the Wound, Petrify or Zombie test, a jsl counts monster 76 (Cactrot) into one free byte of save RAM (stopping at 255) and notes Gigantuar's defeat. Encounter: in CheckBattleWorld (C0/C176), before the txa at C0/C197, ahead of the encounter rate and the encounter switch, a jsr starts formation 639 (Gigantuar) on World of Ruin tile (63,192) once 10 Cactrots are counted and the magicite is not owned. After the battle, before WorldMain's jmp ReloadMap at EE/045C, a jsr sends a won 639 to a map whose trigger gives the magicite. The hint NPC is appended to Maranda (map 284). Formation 639 and the map need the 4 MB ROM.
How to read these notes
Credit: as in the GBA release, my implementation
#278 Added fifteen GBA items, thirteen weapons plus the Dueling Mask and the Bone Wrist, as Dragons' Den rewards and Colosseum trades. The bag has 277 slots, so all 270 kinds fit.
- In 1.0
- The item list was full: all 255 places held real items and the one number left over meant "empty", so there was no room for new equipment.
- Now
- Twelve of the weapons are an ultimate weapon for one party member each, and Excalipoor is Gilgamesh's joke sword. Gau gets the Dueling Mask, a helmet, and Umaro the Bone Wrist, a relic. The eight reborn dragons of the Dragons' Den and its Neslug, Plague and Flan Princess box fights each give a new weapon, and three chests hold the Stardust Rod, Dueling Mask and Bone Wrist. The Colosseum pairs the new items.
For ROM hackers Method
Item numbers become nine bits; 256 to 270 are the GBA's fifteen items, records copied from the GBA ROM. Bit 8 is kept: in the bag, in bit 7 of the count byte ($1969; counts stop at 99); for equipment, in a 12-byte map in free save RAM; in a treasure record, in bit 2 of the type byte, as the GBA does; in a Colosseum record, in byte 1 (always $40 in 1.0); for shops and monster drops, in a parallel bit table. Every routine that reads, lists, gives or takes an item is widened. The bag grows from 256 slots to 277 so all 270 kinds fit: slots 256 to 276 take 42 bytes of free RAM and a save RAM block of their own, and a battle copies the whole bag into its own 277-entry list. The Dragons' Den rewards and the Colosseum trades are table data. Needs the 4 MB ROM.
How to read these notes
Credit: as in the GBA release, my implementation
#517 Added a music player on the third Config page: 83 songs, the GBA player's own screen and font, a level bar for each voice, and the map's song resumed on leaving.
- In 1.0
- The SNES game had no music player, so a song could only be heard where a map or a scene played it.
- Now
- The third Config page now holds a music player with 83 songs, listed alphabetically.
For ROM hackers Method
A new menu screen, opened from a row on Config page 3 (#236). It takes menu states $7B and $7C, spare in 1.0's MenuStateTbl (C3/01DB), which the loop dispatches at C3/01CA. On entry the map's song and volume are saved and sound command $F1 stops the song; on exit the saved song plays again. Levels come from the sound program's unused waveform output mode: command $FF with second byte $01 and a nonzero third byte turns it on, and each tick $2140 to $2143 then carry one byte a voice, xLLL0RRR, bit 7 alternating between voices 0 to 3 and 4 to 7. Turn it off before any other command, since a level byte can equal a command's echo. The art, the thin font and the song titles come from the player's GBA ROM.
How to read these notes
Credit: as in the GBA release, my implementation
#518 Added a bestiary on the third Config page: all 409 enemies listed from the start, each with its sprite, stats, steal and drops, elements, type and immunities.
- In 1.0
- The SNES game had no bestiary.
- Now
- The third Config page now has a bestiary listing every named enemy from the start. A turns an entry's three pages, and the shoulder buttons step between enemies.
For ROM hackers Method
A new menu screen from a sixth row on Config page 3 (#236), under the music player (#517). Four new menu states, $80 to $83: MenuStateTbl (C3/01DB) grows past 128 entries, which works because the dispatch at C3/01CA indexes it with the whole state byte; in a binary the table moves to free space in bank C3 and that jsr is repointed. The screens are far code reached through jsl wrappers, using DrawWindowFar (C3/0345), DrawPosTextFar (C3/02FF) and LoadCursorFar (C3/0602). Values come from MonsterProp (CF/0000), MonsterItems (CF/3000) and MonsterName (CF/C050). The sprite reuses the Colosseum's drawing (DrawColosseumMonster, C3/AF00) and MonsterStencil (D2/A820), over the Narshe exterior battle background loaded the way LoadColosseumBGGfx (C3/B34B) does. The list of named monsters is made at build time.
How to read these notes
Credit: as in the GBA release, previously fixed by Lightning Hunter and DrakeyC, my implementation