Difference between revisions of "FF7/Kernel/Kernel.bin"

From Final Fantasy Inside
< FF7‎ | Kernel
Jump to navigation Jump to search
my_wiki>Halkun
(Section 8: Accessory data format)
my_wiki>Halkun
(Section 9: Materia data format)
Line 151: Line 151:
  
  
=== Section 9: Materia data format ===
 
  
This contains the Materia data. Each record is 20 bytes long.
 
 
{| border="0" cellpadding="3" cellspacing="1" style="background: rgb(0,0,0)" align="center"
 
! style="background:rgb(204,204,204); width=50px;" align="center" | Offset
 
! style="background:rgb(204,204,204); width=50px;" | Length
 
! style="background:rgb(204,204,204); width:350px;" colspan="2" | Description
 
|-
 
|style="background:rgb(255,255,255);" | 0x00
 
|style="background:rgb(255,255,255);" | 8 bytes
 
|style="background:rgb(255,255,255);width:150px;" | Level-up AP limits
 
|style="background:rgb(255,255,255);width:200px;" | Multiples of 100 (4x WORD)
 
|-
 
|style="background:rgb(255,255,255);" | 0x08
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Equip Effect
 
|style="background:rgb(255,255,255);" | [See table below]
 
|-
 
|style="background:rgb(255,255,255);" | 0x09
 
|style="background:rgb(255,255,255);" | 3 bytes
 
|style="background:rgb(255,255,255);" colspan="2" | Status Bitmask
 
|-
 
|style="background:rgb(255,255,255);" | 0x0C
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" colspan="2" | Element
 
|-
 
|style="background:rgb(255,255,255);" | 0x0D
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" colspan="2" | Materia Type
 
|-
 
|style="background:rgb(204,204,255);" colspan="2" rowspan="15" | &nbsp;
 
|style="background:rgb(255,255,255);" | 0x00
 
|style="background:rgb(255,255,255);" | Unknown
 
|-
 
|style="background:rgb(255,255,255);" | 0x08
 
|style="background:rgb(255,255,255);" | Master Command: All commands are available
 
|-
 
|style="background:rgb(255,255,255);" | 0x0A
 
|style="background:rgb(255,255,255);" | Master Magic:  All spells are available
 
|-
 
|style="background:rgb(255,255,255);" | 0x0C
 
|style="background:rgb(255,255,255);" | Master Summon: All summons are available
 
|-
 
|style="background:rgb(255,255,255);" | 0x12
 
|style="background:rgb(255,255,255);" | Command: Command at offset 0x0E to 0x12 is <br />available, depending on AP level
 
|-
 
|style="background:rgb(255,255,255);" | 0x16
 
|style="background:rgb(255,255,255);" | Command: Commands at offset 0x0E to 0x12 <br />become available as you level up
 
|-
 
|style="background:rgb(255,255,255);" | 0x19
 
|style="background:rgb(255,255,255);" | Magic: Spells 0x0E to 0x11  become available<br />as you level up
 
|-
 
|style="background:rgb(255,255,255);" | 0x20
 
|style="background:rgb(255,255,255);" | Booster%:  0x0E is boosted by offset 0x0F to <br />0x13 depending on AP level
 
|-
 
|style="background:rgb(255,255,255);" | 0x21
 
|style="background:rgb(255,255,255);" | Unknown
 
|-
 
|style="background:rgb(255,255,255);" | 0x25
 
|style="background:rgb(255,255,255);" | Unknown
 
|-
 
|style="background:rgb(255,255,255);" | 0x30
 
|style="background:rgb(255,255,255);" | Unknown
 
|-
 
|style="background:rgb(255,255,255);" | 0x33
 
|style="background:rgb(255,255,255);" | W-Command: Command at 0x0E is added to <br />the battle menu
 
|-
 
|style="background:rgb(255,255,255);" | 0x35
 
|style="background:rgb(255,255,255);" | Unknown
 
|-
 
|style="background:rgb(255,255,255);" | 0x3B
 
|style="background:rgb(255,255,255);" | Summon: Summon: Spell at 0x0E can be used from<br />offset 0x0F to 0x13 times depending on AP level
 
|-
 
|style="background:rgb(255,255,255);" | 0x57
 
|style="background:rgb(255,255,255);" | Enemy Skill: Enables command 'Enemy Skill'
 
|-
 
|style="background:rgb(255,255,255);" | 0x0E
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|-
 
|style="background:rgb(255,255,255);" | 0x0F
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|-
 
|style="background:rgb(255,255,255);" | 0x10
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|-
 
|style="background:rgb(255,255,255);" | 0x11
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|-
 
|style="background:rgb(255,255,255);" | 0x12
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|-
 
|style="background:rgb(255,255,255);" | 0x13
 
|style="background:rgb(255,255,255);" | 1 byte
 
|style="background:rgb(255,255,255);" | Materia attributes
 
|style="background:rgb(255,255,255);" | [See Above]
 
|}
 
 
==== Equip Effects ====
 
 
{| border="0" cellpadding="5" cellspacing="1" style="background: rgb(0,0,0)" align="center"
 
! style="background:rgb(204,204,204);" align="center" | Byte
 
! style="background:rgb(204,204,204);" align="center" | STR
 
! style="background:rgb(204,204,204);" align="center" | VIT
 
! style="background:rgb(204,204,204);" align="center" | MAG
 
! style="background:rgb(204,204,204);" align="center" | MDEF
 
! style="background:rgb(204,204,204);" align="center" | MAXHP
 
! style="background:rgb(204,204,204);" align="center" | MAXMP
 
! style="background:rgb(204,204,204);" align="center" | LUCK
 
! style="background:rgb(204,204,204);" align="center" | DEX
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x00
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x01
 
|style="background:rgb(255,255,255);" align="center" | -02
 
|style="background:rgb(255,255,255);" align="center" | -01
 
|style="background:rgb(255,255,255);" align="center" | +02
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | -05%
 
|style="background:rgb(255,255,255);" align="center" | +05%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x02
 
|style="background:rgb(255,255,255);" align="center" | -04
 
|style="background:rgb(255,255,255);" align="center" | -04
 
|style="background:rgb(255,255,255);" align="center" | +04
 
|style="background:rgb(255,255,255);" align="center" | +02
 
|style="background:rgb(255,255,255);" align="center" | -10%
 
|style="background:rgb(255,255,255);" align="center" | +10%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x06
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x07
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x08
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0A
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +02
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0B
 
|style="background:rgb(255,255,255);" align="center" | -01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | -02%
 
|style="background:rgb(255,255,255);" align="center" | +02%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0C
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | -02%
 
|style="background:rgb(255,255,255);" align="center" | +02%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0D
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | +01
 
|style="background:rgb(255,255,255);" align="center" | -05%
 
|style="background:rgb(255,255,255);" align="center" | +05%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0E
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +02
 
|style="background:rgb(255,255,255);" align="center" | +02
 
|style="background:rgb(255,255,255);" align="center" | -10%
 
|style="background:rgb(255,255,255);" align="center" | +10%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x0F
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +04
 
|style="background:rgb(255,255,255);" align="center" | +04
 
|style="background:rgb(255,255,255);" align="center" | -10%
 
|style="background:rgb(255,255,255);" align="center" | +15%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|-
 
! style="background:rgb(204,204,204);" align="center" | 0x10
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | +08
 
|style="background:rgb(255,255,255);" align="center" | +08
 
|style="background:rgb(255,255,255);" align="center" | -10%
 
|style="background:rgb(255,255,255);" align="center" | +20%
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|style="background:rgb(255,255,255);" align="center" | &nbsp;
 
|}
 
  
 
== The KERNEL2.BIN Archive ==
 
== The KERNEL2.BIN Archive ==
  
 
On the PC version there exists a secondary kernel archive called KERNEL2.BIN. This archive contains only sections 10-27 (Text data) of KERNEL.BIN. The data was ungzipped from the original archive,  concatenated together, and then LZSed into a single archive with a 4 byte header giving the length of the file. See the section on BIN types and LZS compression later in this document for more information.
 
On the PC version there exists a secondary kernel archive called KERNEL2.BIN. This archive contains only sections 10-27 (Text data) of KERNEL.BIN. The data was ungzipped from the original archive,  concatenated together, and then LZSed into a single archive with a 4 byte header giving the length of the file. See the section on BIN types and LZS compression later in this document for more information.

Revision as of 06:40, 10 March 2005

Important Files

File:Gears img 5.png

The KERNEL.BIN Archive

The file KERNEL.BIN archive is in BIN-GZIP format. It consists of 27 gziped sections concatenated together with a 6 byte header for each. This file is the same both on the PC and PSX versions. This holds all the static data and menu text for the game, with a look up table at the beginning of the section. Sections 10-27 are FF Text files.

The KERNEL.BIN file consists of the following sections.

File Data Offset
1 Command data 0x0006
2 Attack data 0x0086
3 Savemap 0x063A
4 Character starting stats 0x0F7F
5 Item data 0x111B
6 Weapon data 0x137A
7 Armor data 0x1A30
8 Accessory data 0x1B73
9 Materia data 0x1C11
10 Command descriptions 0x1F32
11 Magic descriptions 0x2199
12 Item descriptions 0x28D4
13 Weapon descriptions 0x2EE2
14 Armor descriptions 0x307B
15 Accessory descriptions 0x315F
16 Materia descriptions 0x3384
17 Key Item descriptions 0x3838
18 Command Names 0x3BE2
19 Magic Names 0x3CCA
20 Item Names 0x4293
21 Weapon Names 0x4651
22 Armor Names 0x4B02
23 Accessory Names 0x4C4B
24 Materia Names 0x4D90
25 Key Item Names 0x5040
26 Battle and Battle-Screen Text 0x5217
27 Summon Attack Names 0x5692




KERNEL.BIN Section formats

The first 9 sections of data (i.e. The non-text related items) have a typical BIN file format. The text sections (10-27) do not have the typical 6 byte header. The text sections have a header of pointers to the text block. The text is in FF text format.




Section 4: Initialization data

This contains the starting stats for the characters and related game states. On "New Game", this data is copied directly into the Savemap (from offset 0x0054 to 0x0BAF) which is explained in the "Menu" section. This data has the same format as the data explained in that section.







The KERNEL2.BIN Archive

On the PC version there exists a secondary kernel archive called KERNEL2.BIN. This archive contains only sections 10-27 (Text data) of KERNEL.BIN. The data was ungzipped from the original archive, concatenated together, and then LZSed into a single archive with a 4 byte header giving the length of the file. See the section on BIN types and LZS compression later in this document for more information.