lostkefin/notes.txt
2025-05-09 02:12:22 -04:00

455 lines
9.0 KiB
Plaintext

Text seems to be loaded into $00F6A150 in memory
and also at $00EF6580
stage00.bin is loaded at $0139BA00 (data starts at $0139DA00)
stagea0.bin
$00015F91 $00000000
$00015F92 $00000024
$00015F93 $00000048
$00015F94 $00000075
$00015F95 $000000A2
$00015F96 $000000CF
the latter values map directly to the start of each string (pointer?)
$00EF6660 has the value $00EF65D0
$00EF65D0 has the value $00F69E00
$00F69E00 has the value $01B08660
loading text is at $0025FD30
$0A is newline
DATA0.bin
filenames start at 0x24BE90 (0x34BE10)
pointer info is at 0x187A40 and ends at 0x18E7C0 (0x28E740)
stage00.bin
5A 00 5B 14 01 3A 02 $6005
THE TEXT IS IN SHIFT JIS THANK YOU FALCOM BLESS FEENA REAH ELDEEN EVERYONE I LOVE YOU FALCOM
Filename table for SLPM_663.60
0x00246240 Start
0x00246258 + Base pointer -> 003461D8 file start
0x0024B690 Folder start -> 0034B610
from vo1010101.bd to vo4030202.bd
1829D0 -> 00282950 Start of file info
0x001875E0 Start of folder info
4 bytes: Pointer to folder name/location
4 bytes: File count start?
4 bytes: File count
3DDFD0 -> 2DE050
003461D8 + 1D4D30 -> 41 AF88 -> 31 B008
What is 1D4D30? (D4DB0)
At 2879b4(187A34) is a pointer to 0282950 (1829D0) which points to 246258 which points to
0x00187A40 has 0034be10 (24BE90) which points the filename of stuff in DATA.BIN
at 0x00187A28 is 00287560 (1875E0)
what is 003DF4F0 -> 2DF570 ?
filename for bmg01.hd is checked at 0012ED74
bgm01.hd
filename location is at 0x002462D8 -> 346258
data file is 0000 09d0
file start is 11BD
file stop is 02
bgm01.sq info: 0x00182F50 -> 282ED0
filename location is at 0x002467D8 -> 346758
data file is 1120
file start is 3EDF
file stop is 03
file length is 10F2
file data start is at 0x01F6F800
file data stop is at 0x01F71000
file data length is 1800
ys3bgm01.sq
filename location is at 246A58 -> 3469D8
data file is 1120
file start is 3FE6
file stop is 03
file length is 1F1E
file data start is at 0x01FF4800
file data stop is at 0x01FF6800
file data length is 2000
first seq file is at 1F6F800
001342E8 in Ghidra:
At 4 breakpoints, first character is printed
At 8 breakpoints, second
at 12, third
at 14, v0 is 8000
at 15, v0 is C000
at 16, fourth
17, fifth
18, 14000
lw v1,0x4(v1)
slt at,v0,v1
bne at,zero,0x001342FC
nop
subu a2,v1,a1
When the bne is false
00014000 is v0
000115B0 is v1
002879C0 is a0
000115B0 is a1
00002A50 is a2
00402FF4 is a3
z_un_00134100
In DATA.BIN
0x0024BE80 File names
0x0024BE90 + FFF80 -> 0034BE10 -> 10BE3400
0x00187A40 + FFF80 -> 002879C0 start
0x0018E7CF -> 0028e74f end
003d2808
0x00187A40 is the file table the format is
4 bytes: Pointer to file name (add base pointer) (in little endian)
4 bytes:
4 bytes: Start of file offset
4 bytes: File length
vo1010101.bd
file length is 500
data file is 0115B0
file data start is at 0x001D73F0
B0150100 -> 000115B0 + FFF80
003DF4F0
0x01F6F800 to 0x01F70900 is 1100
Main text set is 094BC800, so with pointer it's 0139DA00
The text after the opening cutscene is at $094BCE12
The text at the opening cutscene is at $094BC862 or $094BC85E or $094BC85A or $094BC858
0x094BC800
094BC89B
095BC7DA -> DAC75B09
094BC85E - 0139DA5E = 0811EE00
Ghidra pointer is 187A40 or 1879C0 002879C0
Base pointer is $FFF80
Before the text is the expected string length then $80
This is loaded from the routine at $001971E8
opening cutscene text in hex:
82A082F182BD814182A0
location in memory (eeMemory.bin)
EF6588
F6A158
139DA62
true start is at 139DA5A
look into 0019DCF0
from 0x094BC800 to 0x094CBDA0 -> F5A0
text routine
0012D23C:
lbu v0,0x0(a1)
addiu a2,a2,-0x1
addiu a1,a1,0x1
sb v0,0x0(v1)
addiu v1,v1,0x1
bne a2,a0,0x0012D23C
nop
jr ra
first string is 55 dec or $37 (true $36)
second string is 83 dec or $53 (true $52)
third is true $8E
v0 holds character value
v1 holds memory address
a0 holds 8080808080808080FFFFFFFFFFFFFFFF (negative 1)
a1 holds character address
a2 holds string length
ra holds 00197224
0012D23C:
lbu v0,0x0(a1) // The value at (a1+0x0) is stored at v0
addiu a2,a2,-0x1 // Decrement string length
addiu a1,a1,0x1 // Increment character address
sb v0,0x0(v1) // The value in v0 is stored at (v1+0x0)
addiu v1,v1,0x1 // Increment address of memory
bne a2,a0,0x0012D23C // If a2 != a0, then loop back, so stop looping when string length is done
nop
jr ra // Return
ghidra output:
for (; iVar5 != -1; iVar5 = iVar5 + -1) {
uVar1 = *(undefined *)param_2;
param_2 = (undefined8 *)((int)param_2 + 1);
*(undefined *)puVar6 = uVar1;
puVar6 = (undefined8 *)((int)puVar6 + 1);
}
return param_1;
The character address is stored at 003D2F00 in memory
GP is 003DA7F0?
Function at 001bf260
void FUN_001bf260(int searchvalue)
{
int *pointer;
int counter;
counter = 0;
uRam003d2ed8 = uRam00f6c054;
uRam003d2ed4 = uRam00f6c058;
uRam003d2ed0 = uRam00f6c068;
pointer = piRam003d2f04;
do {
if (searchvalue == *pointer) goto LAB_001bf2e0;
if ((counter != 0) && (*pointer == 0)) break;
counter = counter + 1;
pointer = pointer + 2;
} while (counter < 0x400);
FUN_0012e570(0x368bf0,uRam003d2edc);
counter = -1;
LAB_001bf2e0:
if (counter != -1) {
uRam003d2ef0 = 1;
FUN_001484a0(uRam00f53d94,0x61,0);
FUN_001484a0(uRam00f53d94,0x3a,0x80);
FUN_001bf0e0((int)piRam003d2f04 + piRam003d2f04[counter * 2 + 1] + 0x2000);
FUN_00103d70(0xf53cd0,0xf53cf0);
}
return;
}
counter is s0
searchvalue is v0
pointer is v1
when counter is equal to searchvalue ($01), it is true
003D2EDC is 00000000
003D2ED8 is 4016CBE4
003D2ED4 is 3ED67748
003D2ED0 is 44DD5FFB
00F53D94 is 0118CB90
003D2F04 is 0139BA00
003d2f04 has $0139BA00 (start of stage00.bin)
00368bf0
f53cd0
loading screen text is at 0x0025FD30 -> 0x0035FCB0 in exe
$2638D0 ($363850) has a table of names (character box names?)
$2298E0 ($00329860) has a pointer to these names
graphics file format
8h: Header starts with NAXA5010
4h: Usually $100 but sometimes $10
4h: Always $200
4h: pointer?
4h: pointer?
4h: idk
4h: nothing
the rest: idk
There's just raw graphics at 0x0023C180 in slpm
2 dimensional, 32bpp (ARGB)
anm.bin animation, indexed 8bpp
.hgb texture file, 32bpp rgba
.hgk 3d model file?
.hd music header
.sq music sequence
.bd music header 2
0x0019D000 -> 29 CF80 some pointer table
the font graphic is at $1A3E90 -> 2A3E10
font map is at 0x001A31F0 -> 2A3170
palette is at 0x0025E4C0
FUN_0014f370 is to search the index of a character
0035FE30 (conv) is No Ys 3 Data
0035FDF0 (conv) is Ys Data Found
00360AF0 (conv) is Ys 3 Data search
FUN_0017b900 checks for save data with link option
stage90.bin has the text for the titlescreen cutscene
38FF=[IDK1]\n
B0FF=[IDK2]\n
B4FF=[IDK3]\n
CEFF=[IDK4]\n
ECFF=[IDK5]\n
9CFF=[IDK6]\n
10FF=[IDK7]\n
F6FF=[IDK8]\n
C4FF=[IDK9]\n
A6FF=[IDKA]\n
88FF=[IDKB]\n
D8FF=[IDKC]\n
B5FF=[IDKD]\n
E2FF=[IDKE]\n
60FF=[IDKF]\n
F8FF=[IDKG]\n
A1FF=[IDKH]\n
B1FF=[IDKI]\n
1FFF=[IDKJ]\n
FBFF=[IDKK]\n
15FF=[IDKL]\n
47FF=[idkG]\n
4CFF=[idkL]\n
58FF=[idkX]\n
42FF=[idkB]\n
6FFF=[idko]\n
44FF=[idkD]\n
51FF=[idkQ]\n
6AFF=[idkj]\n
57FF=[idkW]\n
/01FF=[END01]\n
/02FF=[END02]\n
/04FF=[END04]\n
/06FF=[END06]\n
/07FF=[END07]\n
/11FF=[END11]\n
/32FF=[END32]\n
/4EFF=[END4E]\n
/55FF=[END55]\n
#56FF=[END56]\n
/64FF=[END64]\n
#A5FF=[ENDA5]\n
/000000FF=[ENDa]\n
/0000FF=[ENDb]\n
/00FF=[ENDc]\n
cartographer stuff
#BLOCK NAME:stage00.bin
#TYPE: NORMAL
#METHOD: POINTER_RELATIVE
#POINTER ENDIAN: LITTLE
#POINTER TABLE START: $94BA804
#POINTER TABLE STOP: $94BB410
#POINTER SIZE: $04
#POINTER SPACE: $04
#ATLAS PTRS: Yes
#BASE POINTER: $94BC800
#TABLE: kefin.tbl
#COMMENTS: No
#SHOW END ADDRESS: No
#TRIM TRAILING NEWLINES: No
#END BLOCK
#BLOCK NAME:stage00.bin
#TYPE: NORMAL
#METHOD: POINTER RELATIVE
#POINTER ENDIAN: LITTLE
#POINTER TABLE START: $94BA804
#POINTER TABLE STOP: $94BB40F
#POINTER SIZE: $04
#POINTER SPACE: $04
#BASE POINTER: $94BC800
#SCRIPT STOP: $94CBD9F
#TABLE: kefin.tbl
#COMMENTS: No
#SHOW END ADDRESS: Yes
#TRIM TRAILING NEWLINES: No
#ATLAS PTRS: Yes
#STRINGS END AT NEXT POINTER: Yes
#END BLOCK
#BLOCK NAME:stage00.bin RAW
#TYPE: NORMAL
#METHOD: RAW
#SCRIPT START: $94BC800
#SCRIPT STOP: $94CBD9F
#TABLE: kefin.tbl
#COMMENTS: No
#SHOW END ADDRESS: No
#TRIM TRAILING NEWLINES: No
#END BLOCK
#GAME NAME:Ys V Lost Kefin
#BLOCK NAME:stage00.bin
#TYPE: NORMAL
#METHOD: POINTER_RELATIVE
#POINTER ENDIAN: LITTLE
#POINTER TABLE START: $94BA804
#POINTER TABLE STOP: $94BB40F
#POINTER SIZE: $04
#POINTER SPACE: $04
#BASE POINTER: $94BC800
#SCRIPT STOP: $94CBD9F
#TABLE: kefin.tbl
#COMMENTS: No
#SHOW END ADDRESS: Yes
#TRIM TRAILING NEWLINES: No
#ATLAS PTRS: Yes
#STRINGS END AT NEXT POINTER: Yes
#SORT OUTPUT BY STRING ADDRESS: Yes
#END BLOCK
#GAME NAME:Ys V Lost Kefin
#BLOCK NAME:stage00.bin
#TYPE: NORMAL
#METHOD: POINTER_RELATIVE
#POINTER ENDIAN: LITTLE
#POINTER TABLE START: $4
#POINTER TABLE STOP: $C0F
#POINTER SIZE: $04
#POINTER SPACE: $04
#BASE POINTER: $2000
#SCRIPT STOP: $1159E
#TABLE: kefin.tbl
#COMMENTS: No
#SHOW END ADDRESS: Yes
#TRIM TRAILING NEWLINES: No
#ATLAS PTRS: Yes
#STRINGS END AT NEXT POINTER: Yes
#SORT OUTPUT BY STRING ADDRESS: Yes
#END BLOCK