psx.wiki

Final Fantasy VII: Difference between revisions

Revision as of 00:33, 2 November 2026
RemmyLee
(Final Fantasy VII: both pages rewritten in the Sony manual voice (connected paragraphs, the reason with each fact, no signposts); SYSTEM.CNF defaults cited to the OS manual)
Revision as of 00:54, 2 November 2026
RemmyLee
(Final Fantasy VII: every finding checked against the discs and the StationX runs)
Line 9:Line 9:
info: Developer = Squaresoftinfo: Developer = Squaresoft
info: Publisher = Sony / Squaresoftinfo: Publisher = Sony / Squaresoft
−info: Release date = 15 August 1997+info: Release date = 7 September 1997
info: Discs = 3info: Discs = 3
info: Players = 1info: Players = 1
Line 20:Line 20:
## Releases## Releases
−Final Fantasy VII was released in North America as a set of three discs, SCUS-94163, SCUS-94164 and SCUS-94165, and each disc carries a single data track. The serials and sizes of the discs are shown below.[^psxdc]+Final Fantasy VII was released in North America on 7 September 1997 as a set of three discs, SCUS-94163, SCUS-94164 and SCUS-94165, and each disc carries a single data track.[^se][^psxdc] PlayStation DataCenter gives 15 August 1997 as the release date; however, the date given by Square Enix is used here. The serials and sizes of the discs are shown below.[^psxdc]
Table: Final Fantasy VII North American discsTable: Final Fantasy VII North American discs
Line 36:Line 36:
The main program loads the parts of the game as modules into the memory area that starts at 800A0000h. FIELD/FIELD.BIN and BATTLE/BROM.X are stored compressed: each file consists of an 8-byte header followed by gzip data, and the first word of the header gives the unpacked size. The field module therefore occupies 264008 bytes in memory, and BROM.X grows from 1142 bytes on the disc to 1740 bytes when it is unpacked.[^d1]The main program loads the parts of the game as modules into the memory area that starts at 800A0000h. FIELD/FIELD.BIN and BATTLE/BROM.X are stored compressed: each file consists of an 8-byte header followed by gzip data, and the first word of the header gives the unpacked size. The field module therefore occupies 264008 bytes in memory, and BROM.X grows from 1142 bytes on the disc to 1740 bytes when it is unpacked.[^d1]
+The menus are separate files in the MENU directory, and the main program loads each of them to 801D0000h by its number. Each entry of the table at 80048F60h gives the sector and size of one menu file; entry 11 is PATYMENU.MNU and entry 12 is BGINMENU.MNU.[^d1]
+
## Development## Development
−Square left part of its development code in the retail program: the event debugger of the field module ([Field Script Debugger](/games/final-fantasy-vii/field-script-debugger/)), a battle-test screen and four extra main menu commands. The routines and their text are still on the disc; however, the calls, flags or menu entries that would start them are missing or held at zero, and the player therefore cannot reach them.[^d1][^bench]+Square left part of its development code in the retail program. The routines and their text are still on the disc; however, the calls, flags or menu entries that would start them are missing or held at zero, and the player therefore cannot reach them. The largest is the event debugger of the field module, which is described in [Field Script Debugger](/games/final-fantasy-vii/field-script-debugger/). The others are described below, together with the GameShark codes that open them.[^d1]
### Battle-Test Screen (BROM.X)### Battle-Test Screen (BROM.X)
Line 44:Line 46:
The main program selects the module to run next from a mode word at 8009C560h. The code at 800146A4h tests this word for 2 and for 4, and a value of 4 loads battle file 3, BATTLE/BROM.X, and starts it at 800A00CCh. However, no store of 4 to the mode word was found in the main program or in any module, so the battle-test screen cannot be opened in the retail game.[^d1][^bench]The main program selects the module to run next from a mode word at 8009C560h. The code at 800146A4h tests this word for 2 and for 4, and a value of 4 loads battle file 3, BATTLE/BROM.X, and starts it at 800A00CCh. However, no store of 4 to the mode word was found in the main program or in any module, so the battle-test screen cannot be opened in the retail game.[^d1][^bench]
−BROM.X calls the main program function at 80025174h from 800A0328h, and no other module calls this function. This function reads controller 1, and the button that is held determines whether it opens the main menu, a shop, the naming screen, party formation or the save menu. When it opens the save menu, it also fills the last 30 inventory slots with 99 of each Source item.[^d1][^bench]+BROM.X shows the word SCENE and a battle number over the title logo. The number starts from the last battle of the field (800707BCh) and is held between 0 and 1023. When a button is held for 9 frames, it repeats every frame. The buttons are read through the main program's controller routine at 8001C808h. This routine places the first data byte of the controller in bits 8 to 15 and the second in bits 0 to 7, and the buttons of the screen are shown below.[^d1][^pad]
−### Unused Menu Commands+Table: Battle-test screen buttons
−The names of the main menu commands are stored as a table at 80049248h in SCUS_941.63. The table begins with the 10 commands that the retail menu shows (Item through Save) and continues with four more names: Uso, Beginner, Uso and Uso.[^d1] Because the menu builds its cursor with only 10 rows, the four extra commands can never be selected. In addition, the Beginner entry is given menu number 0, which is the main menu itself, so even if it were selected it would open no screen.[^bench]+| Button | Action |
+| --- | --- |
+| Up, Down | Battle number +1, -1 |
+| Left, Right | Battle number +10, -10 |
+| Start or Circle | Fight the selected battle |
+| Triangle | Menu test launcher |
+| Select | Return to the field |
+The Triangle button calls the main program function at 80025174h from 800A0328h, and no other module calls this function. The button that is held on controller 1 determines whether it opens the main menu, a shop, the naming screen, party formation or the save menu. When it opens the save menu, it also fills the last 30 inventory slots with 99 of each Source item.[^d1][^bench]
+
+The two lists below open the screen from the field. List 2 places a routine in the unused main program code at 8001CDA4h that corrects the texture page of the SCENE text, holds the number to 0 to 999 and skips the scenes 16 to 19, which hold no enemies. List 3 needs list 2; when L2 and R2 are held on the field, it changes the field's battle request from mode 2 to mode 4 and starts a battle. In the StationX emulator on 1 November 2026, L2 and R2 opened the screen with SCENE 0000, Up gave SCENE 0001, and Circle started the battle.[^bench][^sx]
+
+List 2:
+
+```
+8001CDA4 800A
+8001CDA6 3C09
+8001CDA8 3403
+8001CDAA 3C08
+8001CDAC 003F
+8001CDAE 3508
+8001CDB0 0090
+8001CDB2 AD28
+8001CDB4 A423
+8001CDB6 3C08
+8001CDB8 06E0
+8001CDBA 3508
+8001CDBC 0098
+8001CDBE AD28
+8001CDC0 0C00
+8001CDC2 3C08
+8001CDC4 7383
+8001CDC6 3508
+8001CDC8 03C0
+8001CDCA AD28
+8001CDCC 03C4
+8001CDCE AD20
+8001CDD0 0802
+8001CDD2 3C08
+8001CDD4 80F7
+8001CDD6 3508
+8001CDD8 03C8
+8001CDDA AD28
+8001CDDC 03CC
+8001CDDE AD20
+8001CDE0 5821
+8001CDE2 0260
+8001CDE4 6021
+8001CDE6 03E0
+8001CDE8 8007
+8001CDEA 3C0A
+8001CDEC 07BC
+8001CDEE 9553
+8001CDF0 7383
+8001CDF2 0C00
+8001CDF4 0000
+8001CDF6 0000
+8001CDF8 07BC
+8001CDFA A553
+8001CDFC F821
+8001CDFE 0180
+8001CE00 9821
+8001CE02 0160
+8001CE04 8033
+8001CE06 0802
+8001CE08 0000
+8001CE0A 0000
+8001CE0C 0002
+8001CE0E 0661
+8001CE10 0000
+8001CE12 0000
+8001CE14 0000
+8001CE16 3413
+8001CE18 03E8
+8001CE1A 2A62
+8001CE1C 0002
+8001CE1E 1440
+8001CE20 0000
+8001CE22 0000
+8001CE24 03E7
+8001CE26 3413
+8001CE28 0010
+8001CE2A 2A62
+8001CE2C 000A
+8001CE2E 1440
+8001CE30 0000
+8001CE32 0000
+8001CE34 0014
+8001CE36 2A62
+8001CE38 0007
+8001CE3A 1040
+8001CE3C 0000
+8001CE3E 0000
+8001CE40 0012
+8001CE42 2A62
+8001CE44 0003
+8001CE46 1040
+8001CE48 0000
+8001CE4A 0000
+8001CE4C 0008
+8001CE4E 03E0
+8001CE50 0014
+8001CE52 3413
+8001CE54 000F
+8001CE56 3413
+8001CE58 0008
+8001CE5A 03E0
+8001CE5C 0000
+8001CE5E 0000
+800146F0 8002
+800146F2 3C05
+800146F4 CDA4
+800146F6 24A5
+```
+
+List 3:
+
+```
+8001CEF0 800A
+8001CEF2 3C08
+8001CEF4 2F88
+8001CEF6 3509
+8001CEF8 DD8A
+8001CEFA 17E9
+8001CEFC 0003
+8001CEFE 3049
+8001CF00 0003
+8001CF02 340A
+8001CF04 DD87
+8001CF06 152A
+8001CF08 C560
+8001CF0A 9509
+8001CF0C 0001
+8001CF0E 340A
+8001CF10 DD84
+8001CF12 152A
+8001CF14 3402
+8001CF16 3C0A
+8001CF18 292C
+8001CF1A 8D09
+8001CF1C 0002
+8001CF1E 354B
+8001CF20 0002
+8001CF22 152B
+8001CF24 0004
+8001CF26 354B
+8001CF28 292C
+8001CF2A AD0B
+8001CF2C 5144
+8001CF2E 0800
+8001CF30 0000
+8001CF32 0000
+80014510 0002
+80014512 3409
+80014514 ABF5
+80014516 A109
+80014518 8008
+8001451A 3C0B
+8001451C 0001
+8001451E 3409
+80014520 EBC8
+80014522 A169
+80014524 0008
+80014526 03E0
+80014528 0000
+8001452A 0000
+8001C8CC 73BC
+8001C8CE 0800
+```
+
+### Unused Main Menu Commands
+
+The names of the main menu commands are stored as a table at 80049248h in SCUS_941.63. The table begins with the 10 commands of the retail menu, from Item to Save, and continues with four more names: Uso, Beginner, Uso and Uso. The routine at 8002368Ch builds the menu cursor with 10 rows, so the retail menu stops at Save.[^d1]
+
+A command opens the menu file whose number is stored for its row in the table at 80049450h. Rows 0 to 9 hold 1 to 10, row 10 (Uso) holds 11, which is PATYMENU, and row 11 (Beginner) holds 0, which opens no file. When the row count at 800236ACh and the cursor limit at 80023378h are raised from 10 to 11, an eleventh row named Uso appears under Save and opens PATYMENU. This was done in the StationX emulator on 31 October and 1 November 2026.[^d1][^sx]
+
+
+PATYMENU is a party editor that reads the main program's button word at 80062D7Eh. Up and Down move between the three party slots; Right and Left step the character number of the slot at 8009CBDCh through 0 to 10 and FFh, which marks an empty slot. Circle reverses bit 0 of byte 20h of the character record, which moves the portrait 24 pixels to the right, and Cross returns to the main menu. The file begins with Square's development file paths, and the first of them is x:\master\menu\data\choco.tim.[^d1][^sx]
+
+### Bugenhagen Materia Menu (BGINMENU)
+
+BGINMENU.MNU is the menu file of the master materia trades with Bugenhagen. The field script command menu (49h) stores its type to 8009ABF5h and its parameter to 8009ABF6h, and the main program loads BGINMENU for types 15h, 16h and 17h. Types 16h and 17h, with parameters 0 to 3, are used only in room BUGIN1B; type 16h checks whether the materia of a set are held and mastered, and type 17h takes them and gives the master materia.[^d1]
+
+Table: BGINMENU trades (type 17h)
+
+| Parameter | Materia taken | Materia given |
+| --- | --- | --- |
+| 0 | 21 magic materia | Master Magic |
+| 1 | 16 summon materia | Master Summon |
+| 2 | 7 command materia | Master Command |
+| 3 | None | Bahamut ZERO |
+
+Type 15h calls a third BGINMENU routine at 801D027Ch. Only the debug room BLACKBGB uses this type.[^d1]
+
+### Masamune
+
+Weapon 127 of the KERNEL.BIN weapon table is the Masamune, and its description is empty. The main program loads this table to 800738A0h, 2Ch bytes per weapon. The halfword at offset 0Eh of a weapon holds one bit for each character, and the Equip menu lists the weapon only for the characters whose bits are 1. The Masamune is the only weapon whose bit 10 (Sephiroth) is 1, which gives 0400h, while all 16 of Cloud's weapons carry 0201h. No field script gives item FFh, which is weapon 127, and no shop in SHOPMENU.MNU sells it.[^d1]
+
+The two codes below give Cloud's bit to the Masamune and place one in the last inventory slot. In the StationX emulator on 1 November 2026, the Masamune then appeared in Cloud's weapon list, and when equipped it showed Attack 99 and Attack% 255.[^sx]
+
+```
+80074E82 0601
+8009CE5E 02FF
+```
+
+### Old Character Records
+
+NAMEMENU.MNU holds 11 character records of 84h bytes from offset 904Ch on, and their character numbers run from 0 to 10. They name Cloud "Ex-SOLDIER" and spell Cait Sith as "Cait Seith", while the list that the naming screen shows, at 8EB4h in the same file, spells "Cait Sith". Record 10 is Sephiroth and record 9 has no name.[^d1]
+
+### Test Enemies
+
+The first scenes of BATTLE/SCENE.BIN contain enemies 0 to 9 (without 3). Their names begin with the bytes 70h, 7Ch and 79h followed by the enemy number, and these bytes do not form English text in the US character table.[^d1][^bench]
+
+### Chocobo Race Editor
+
+CHOCOBO.BIN, the chocobo race module, contains a routine at 800A9A94h that reads controller 1 and works on the bytes at 8009D488h. No jal instruction, pointer or address load in the module refers to it. The word at 800A03ECh is jal 800A9D94h, and the bench notes give 0C02A6A5h (jal 800A9A94h) as the change that would call the editor.[^d1][^bench]
+
+### Unused Dialogue
+
+Every room script of the three discs was walked command by command, and a line of text was counted as shown when the mes (40h), ask (48h) or mpnam (43h) command uses it in any room. The 2325 room files hold 12329 distinct lines, of which 643 are never shown, and 554 of these are outside the debug rooms. Of the 554, 345 are close variants of lines that are shown, and 209 have no close variant. Text shown by other routes, such as battle or the menus, would also be counted as never shown.[^dlg]
+
+Among the lines that are never shown are "This is the end of the Test Play." in TIN_1, a document search in the Shinra Mansion in MTNVL6 ("Look, this letter could be in invisible ink"), and the counters "scenario =" and "number of defeats =" of the Fort Condor battles in CONVIL_2.[^dlg]
+
## References## References
+[^se]: Square Enix. "Square Enix Announces Release Date of Final Fantasy VII: Advent Children." 15 May 2005. http://release.square-enix.com/na/2005/05/square_enix_announces_release.html (archived 28 March 2016, https://web.archive.org/web/20160328231448/http://release.square-enix.com/na/2005/05/square_enix_announces_release.html)
[^psxdc]: PlayStation DataCenter, Final Fantasy VII (NTSC-U), SCUS-94163. https://psxdatacenter.com/games/U/F/SCUS-94163.html[^psxdc]: PlayStation DataCenter, Final Fantasy VII (NTSC-U), SCUS-94163. https://psxdatacenter.com/games/U/F/SCUS-94163.html
−[^d1]: Final Fantasy VII (USA) disc 1, SCUS-94163, read 1 November 2026: SYSTEM.CNF, SCUS_941.63, FIELD/FIELD.BIN and BATTLE/BROM.X.+[^d1]: Final Fantasy VII (USA) discs 1 to 3, read 1 November 2026: SYSTEM.CNF, SCUS_941.63, INIT/KERNEL.BIN, FIELD/FIELD.BIN, FIELD/*.DAT, BATTLE/BROM.X, BATTLE/SCENE.BIN, MINI/CHOCOBO.BIN, MENU/PATYMENU.MNU, MENU/BGINMENU.MNU, MENU/NAMEMENU.MNU and MENU/SHOPMENU.MNU.
[^os]: Sony Computer Entertainment Inc. PlayStation Operating System. Table 2-1, System Designation File Keyword List.[^os]: Sony Computer Entertainment Inc. PlayStation Operating System. Table 2-1, System Designation File Keyword List.
+[^pad]: [Controller Protocol](/hardware/controller/protocol/), the table of digital pad data.
[^bench]: psx.wiki bench notes, Final Fantasy VII hidden and unused code, 31 October and 1 November 2026.[^bench]: psx.wiki bench notes, Final Fantasy VII hidden and unused code, 31 October and 1 November 2026.
+[^sx]: StationX emulator runs, 31 October and 1 November 2026: the codes through the bench cart's cheat engine, and the Uso rows through monitor writes.
+[^dlg]: Script walk of the room files of the three discs (unused3.py), run 1 November 2026.