lostkefin/scriptFormat.md
2025-05-09 02:51:33 -04:00

4.9 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 is located at $1A3E90 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 quick font.tbl table file.
Use kefin.tbl for corrected values and control codes.

Control codes

Hex Values Meaning Table file
$0A Newline [LINE]\n
$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]
$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]

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

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 スタン Stan
$6 ドーマン Dorman
$7 リジェ Rije
$8 ジャビル Jabil
$9 エフィ Efi
$A ケフィン王 King Kefin
$B アルガ Arga
$C ディオス Dios
$D ノティス Notis
$E チェイス Chase
$F アイシャ Aisha
$10 ウイリー Willie
$11 ムバーハ Mubaha
$12 バルク Balk
$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 Resistance A
$2C レジスタンスB Resistance 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 Stan
$3C ノティス&ディオス Notis & Dios
$40 綺麗な女性 Beautiful Woman
$41 女の子 Girl
$42 乱暴者A Thug A
$43 乱暴者B Thug B
$44 謎の声 Mysterious Voice
$45 謎の男 Mysterious Man
$46 大男 Big Man
$47 おばさん Woman