lostkefin/scriptFormat.md
2025-06-10 20:01:25 -04:00

5.4 KiB

Script File Format Documentation

This is information for the stageXX.bin files that are found in DATA.BIN of the game's ISO. There are 12 script files.

The Format

Address Section
$0-$2000 Pointer Table
$2001-EOF Script

Pointer Table

The pointer table has a repeating pattern of a Script Index and Pointer.
Script Index is 4 bytes long and is stored in little-endian.
Pointer is 4 bytes long and is stored in little-endian.
To get the true offset of the pointer add $2000 to the value.
For example, a pointer value of 00 E1 0C 00 ($CE100) means the true offset is at $D0100.
The table is always $2000 bytes long allowing for a maximum of 1024 entries.
If there is less than 1024 entries the table section is padded with $00's.

Script

One pointer can have as many lines of text and has no length limitations.

Font Info

All text is Shift-JIS encoded with fullwidth characters being 2 bytes long and 20 pixels wide while halfwidth characters are 1 byte long and 10 pixels wide.
In SLPM_663.60 the font graphics are located at $1A3E99 as 4BPP graphics, its palette is stored at $25E4C0, and the fontmap is at $1A31F0.
font.py extracts the fontmap from SLPM_663.60 to create a font.tbl table file.
Use kefin.tbl for corrected values and control codes.

Control Codes

Control codes and related info can be found at the function located at $4CE00 in SLPM_663.60 (Loaded into $0014CD80)

Hex Values Meaning Table file
$0A Newline [LINE]
$1D $XXXX Move NPC? If $XXXX is not $3000 then the NPC will not face Adol [MOVE]
$1D $XXXX $YYYY Move NPC? $YYYY is the direction the NPC will face [MOVE]
$23 $XXXX Normally #, change colour of text based on ASCII values of $XXXX (See Colour Section) [HASH]
$2F $XXXX Normally /, unknown, $XXXX is stored in little-endian /<$XX><$XX>
$3B $XX Show character name in dialoague box (see Character section) [CHAR]
$44 $XXXXXXXX Normally D, jump to new text with given Script Text (see above) [INDEX]
$52 $XXXX Normally R, set textbox? If $XXXX is not $3000 then it will not point to the speaker [BOX]
$XX $80 Print $XX number of bytes [LEN]
$FF End text? [END]
$81A5 Normally , wait for player input [WAIT]
$FFFD $XX Pause printing text for $XX frames(?) [PAUSE]

string.py can be used to calculate a new [LEN] value.

Colours

The value of the $23 Colour control code translates to the ASCII values of the two bytes after the code.
White is the default colour for text.

Hex values ASCII Meaning Colour code
$77 $68 wh White
$67 $72 gr Green
$62 $6C bl Blue
$70 $69 pi Pink
$79 $6C yl Yellow
$72 $65 re Red
$62 $6B bk Black
$67 $6C gl Gray
$63 $79 cy Cyan

Characters

The value of the $3B Character control code comes from the index value from a list of pointers.
These pointers are found at $2298E0 in SLPM_663.60 and pointer.py can be used to extract this list.

Value Original Text Translation
$0 アドル Adol
$1 ドギ Dogi
$2 ニーナ Niena
$3 テラ Terra
$4 マーシャ Massea
$5 スタン Stein
$6 ドーマン Doman
$7 リジェ Rizze
$8 ジャビル Jabir
$9 エフィ Effey
$A ケフィン王 King Kefin
$B アルガ Alga
$C ディオス Dios
$D ノティス Nottis
$E チェイス Chase
$F アイシャ Aisha
$10 ウイリー Willy
$11 ムバーハ Mubaja
$12 バルク Baruq
$13 アビス Abyss
$14 カリオン Karion
$15 鍛冶屋 Blacksmith
$16 水夫 Sailor
$17 執事 Butler
$18 メイド Maid
$19 下級兵士 Foot Soldier
$1A 兵士 Soldier
$1B 冒険家A Adventurer A
$1C 冒険家B Adventurer B
$1D 商人A Merchant A
$1E 商人B Merchant B
$1F コボルト Kobold
$20 砂漠おばあさん Desert Old Woman
$21 砂漠おじいさん Desert Old Man
$22 砂漠女 Desert Woman
$23 砂漠男A Desert Man A
$24 砂漠男B Desert Man B
$25 砂漠女の子 Desert Girl
$26 砂漠男の子 Desert Boy
$27 ケフィン男A Kefin Man A
$28 ケフィン男B Kefin Man B
$29 ケフィン女A Kefin Woman A
$2A ケフィン女B Kefin Woman B
$2B レジスタンスA Rebel A
$2C レジスタンスB Rebel B
$2D おじさんA Man A
$2E おじさんB Man B
$2F おばさん Woman
$30 街男A Villager Man A
$31 街男B Villager Man B
$32 街娘A Villager Girl A
$33 街娘B Villager Girl B
$34 おばあさん Old Woman
$35 おじいさん Old Man
$36 男の子A Boy A
$37 男の子B Boy B
$38 女の子A Girl A
$39 Dog
$3A 女の子B Girl B
$3B 誘拐スタン Kidnapped Stein
$3C ノティス&ディオス Noties & Deios
$40 綺麗な女性 Beautiful Woman
$41 女の子 Girl
$42 乱暴者A Thug A
$43 乱暴者B Thug B
$44 謎の声 Mysterious Voice
$45 謎の男 Mysterious Man
$46 大男 Big Man
$47 おばさん Woman