This is page 1 of 6. Use http://codebase.md/2Tie/mh1j?lines=false&page={x} to view the full context.
# Directory Structure
```
├── .gitignore
├── config
│ ├── cryptlist1.txt
│ ├── cryptlist2.txt
│ ├── cryptlist3.txt
│ ├── cryptlist4.txt
│ ├── cryptlist5.txt
│ ├── dnas_ins_crypt_symbols.txt
│ ├── dnas_ins_funcs_auto.txt
│ ├── dnas_ins_ignores.txt
│ ├── dnas_ins_ignores.txt.save
│ ├── dnas_ins_noencrypt.bin
│ ├── dnas_ins_symbol_addrs.txt
│ ├── dnas_ins_syms_auto.txt
│ ├── dnas_ins.yaml
│ ├── dnas_net_crypt_symbols.txt
│ ├── dnas_net_funcs_auto.txt
│ ├── dnas_net_ignores.txt
│ ├── dnas_net_symbol_addrs.txt
│ ├── dnas_net_syms_auto.txt
│ ├── dnas_net.yaml
│ ├── dummy_symbol_addrs.txt
│ ├── dummy.yaml
│ ├── game_funcs_auto.txt
│ ├── game_symbol_addrs.txt
│ ├── game_syms_auto.txt
│ ├── game.yaml
│ ├── heap_symbol_addrs.txt
│ ├── heap.yaml
│ ├── lobby_funcs_auto.txt
│ ├── lobby_symbol_addrs.txt
│ ├── lobby_syms_auto.txt
│ ├── lobby.yaml
│ ├── main_shims_addrs.txt
│ ├── main_symbol_addrs.txt
│ ├── main.yaml
│ ├── select_funcs_auto.txt
│ ├── select_symbol_addrs.txt
│ ├── select_syms_auto.txt
│ ├── select.yaml
│ ├── undefined_funcs_auto.txt
│ ├── undefined_syms_auto.txt
│ ├── yn_funcs_auto.txt
│ ├── yn_symbol_addrs.txt
│ ├── yn_syms_auto.txt
│ └── yn.yaml
├── include
│ ├── common.h
│ ├── include_asm.h
│ ├── labels.inc
│ ├── macro.inc
│ ├── structs.h
│ └── types.h
├── Makefile
├── readme
├── src
│ └── main
│ ├── cardinit.c
│ └── stage.c
└── tools
├── AFS_files.txt
├── asmelf.py
├── funcrypt.py
├── lcf
│ ├── generate_lcf.py
│ ├── lcf_footer.txt
│ └── lcf_header.txt
├── packer.py
└── verify.py
```
# Files
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
```
#original files
SLPM_654.95
AFS_DATA.AFS
assets/*
overlays/*
#raw disasembly
asm/*
tools/*.bin
#built objects
build/*
*.ld
ctx.c
bin/*
tools/mwccgap/
tools/m2ctx.py
.splache
```
--------------------------------------------------------------------------------
/config/dummy.yaml:
--------------------------------------------------------------------------------
```yaml
```
--------------------------------------------------------------------------------
/config/select_funcs_auto.txt:
--------------------------------------------------------------------------------
```
```
--------------------------------------------------------------------------------
/config/heap_symbol_addrs.txt:
--------------------------------------------------------------------------------
```
_end = 0xE00000;
end = 0xE00000;
```
--------------------------------------------------------------------------------
/config/cryptlist1.txt:
--------------------------------------------------------------------------------
```
a06958
a06ad8
a06c70
a06de0
a06ef4
a07004
a0718c
a073f4
a074d8
a075c4
a078ec
a07a0c
a07b18
a08114
a0832c
a08444
a085f4
a0889c
```
--------------------------------------------------------------------------------
/include/common.h:
--------------------------------------------------------------------------------
```
#ifndef COMMON_H
#define COMMON_H
#include "types.h"
#define INCLUDE_ASM(FOLDER, NAME)
#define INCLUDE_RODATA(FOLDER, NAME)
#endif
```
--------------------------------------------------------------------------------
/tools/lcf/lcf_footer.txt:
--------------------------------------------------------------------------------
```
.dummy :
{
# to get addr
end = .;
_end = .;
} > dummy.bin
.heap :
{
# to get heap addr
end = .;
_end = .;
} > heap
}
```
--------------------------------------------------------------------------------
/config/cryptlist3.txt:
--------------------------------------------------------------------------------
```
A27E54
a27f64
a28134
a28308
a285b4
a287b0
a288d0
a28a88
a29138
a29264
a293e4
a29590
a297e8
a29914
a29fd8
a2a4d8
a2da90
a2dbf8
a2dfc0
a2e190
a2e358
```
--------------------------------------------------------------------------------
/config/cryptlist2.txt:
--------------------------------------------------------------------------------
```
A207D0
A20960
A20B10
A20EBC
A2113C
A212F4
A214B4
A21688
A219D0
A21AE0
A21F28
A220A4
A222A0
A22494
A2257C
A226C0
A227C0
A23508
A23778
A23B4C
A23C54
A23E9C
A23F8C
A241C8
A243A0
A247D8
A24978
A24C3C
A24D3C
A24FF8
A254DC
A25930
A26144
A265E8
```
--------------------------------------------------------------------------------
/config/cryptlist5.txt:
--------------------------------------------------------------------------------
```
a6cae8
a6cc28
a6cd60
a6ce9c
a6d570
a6d7e8
a6d900
a6da10
a6daf8
a6dbe0
a6dcc8
a6ddb0
a6dec4
a6dff4
a6e0f4
a6e2c4
a6e498
a6e748
a6e948
a6ea78
a6ec8c
a6ee48
a6efb8
a6f1d0
a6f500
a6f748
a6f874
a6f9f4
a6fba0
a6fdf8
a6ff24
a705e8
a70ae8
a730ac
a731d4
a734c0
a7399c
a73b00
a73da8
a7402c
a743f0
a74534
a74850
a7496c
a74a8c
a74e20
a75198
a75474
a75a58
a75bc0
a75f88
a76158
a76320
```
--------------------------------------------------------------------------------
/config/dummy_symbol_addrs.txt:
--------------------------------------------------------------------------------
```
_dummy_text_size = 0xC0;
_dummy_bss_size = 0x0;
_dummy_text_end = 0xE00000;
_dummy_segment_end = 0xE00000;
_dummy_data_size = 0x0;
_dummy_static_init = 0xE00000;
_dummy_segment_start = 0xDFFF00;
_dummy_text_start = 0xDFFF40;
_dummy_data_start = 0xE00000;
_dummy_data_end = 0xE00000;
_dummy_bss_end = 0xE00000;
_dummy_static_init_end = 0xE00000;
_dummy_bss_start = 0xE00000;
```
--------------------------------------------------------------------------------
/src/main/cardinit.c:
--------------------------------------------------------------------------------
```cpp
#include "common.h"
#include "structs.h"
#pragma cats off
extern CARD_WORK card_w0x531880;
CARD_WORK card_w20x390880;
extern SYSTEM_WORK system_w0x3f3690;
void Card_task0x100e20(void) {
return;
}
void init_card_w0x100e30(void) {
memset0x19dd28(&card_w0x531880, 0, 0x84);
memset0x19dd28(&card_w20x390880, 0, 0x84);
system_w0x3f3690.mc_access = 0;
}
s32 save_file_req0x100e80(void) {
return 1;
}
```
--------------------------------------------------------------------------------
/config/select_syms_auto.txt:
--------------------------------------------------------------------------------
```
D_3E5168 = 0x3E5168;
D_3E516C = 0x3E516C;
D_3E5170 = 0x3E5170;
D_3E5BEC = 0x3E5BEC;
D_3EBD04 = 0x3EBD04;
D_3EBD08 = 0x3EBD08;
D_3F32E2 = 0x3F32E2;
D_3F32E3 = 0x3F32E3;
D_3F32E5 = 0x3F32E5;
D_3F32E6 = 0x3F32E6;
D_3F32E7 = 0x3F32E7;
D_3F32E8 = 0x3F32E8;
D_3F3318 = 0x3F3318;
D_3F331A = 0x3F331A;
D_3F331E = 0x3F331E;
D_3F3404 = 0x3F3404;
D_3F3621 = 0x3F3621;
D_3F3622 = 0x3F3622;
D_3F362A = 0x3F362A;
D_3F3712 = 0x3F3712;
```
--------------------------------------------------------------------------------
/config/cryptlist4.txt:
--------------------------------------------------------------------------------
```
a07754
a08c3c
a08d3c
a08e48
a08f50
a09054
a09154
a09254
a09334
a09434
a09514
a095f4
a096d4
a097d4
a098c4
a099cc
a09ad8
a09c3c
a09d4c
a09e3c
a09f3c
a0a01c
a0a108
a0a26c
a0a384
a0a564
a0af50
a0b060
a0b4ac
a0c24c
a0c4b4
a0c73c
a0c870
a0c9f0
a0cc74
a0cd78
a0cec4
a0d260
a0d42c
a0d5dc
a0d780
a0e438
a0e5b8
a0e750
a0e8c0
a0e9d4
a0eae4
a0ec6c
a0eed4
a0efb8
a0f0a4
a0f3cc
a0f4ec
a0f5f8
a0fbf4
a0fe0c
a0ff24
a100d4
a1037c
a10800
a10f9c
a11c30
a12d04
a12f80
```
--------------------------------------------------------------------------------
/config/yn_syms_auto.txt:
--------------------------------------------------------------------------------
```
args0x389e50 = 0x389E50;
BsProxyUrlstr_S0x3a0140 = 0x3A0140;
BsProxyUrlstr0x3a0250 = 0x3A0250;
Psw0x3f3710 = 0x3F3710;
MyPassword0x4e4850 = 0x4E4850;
MyUserName0x4e4950 = 0x4E4950;
MyDomain0x4e4a50 = 0x4E4A50;
MyDialOutline0x4e4b50 = 0x4E4B50;
MyDialNumber0x4e4b60 = 0x4E4B60;
SrvDomain0x4e4c50 = 0x4E4C50;
DeviceWork0x4e4d50 = 0x4E4D50;
proxy_work = 0x530394;
netconf_dev = 0x5306B0;
netconf_work = 0x5310D0;
MemcardWork0x5317c0 = 0x5317C0;
D_0053D451 = 0x53D451;
D_0053D452 = 0x53D452;
D_0053D453 = 0x53D453;
```
--------------------------------------------------------------------------------
/tools/asmelf.py:
--------------------------------------------------------------------------------
```python
from pathlib import Path
from mwccgap.mwccgap.assembler import Assembler
from mwccgap.mwccgap.elf import Elf
o_file=Path("build/asmbin.o")
assembler = Assembler(
as_path="bin/mips-ps2-decompals-as",
as_flags=["-EL", "-I include/", "-G 128", "-march=r5900", "-mabi=eabi", "-no-pad-sections", "-mno-pdr"],
as_march="r5900",
as_mabi="eabi",
macro_inc_path=Path("include/macro.inc"),
)
asm_bytes = assembler.assemble_file(Path("asm/main/nonmatchings/stage/stage_set_set0x15bbe0.s"))
assembled_elf = Elf(asm_bytes)
o_file.write_bytes(assembled_elf.pack())
```
--------------------------------------------------------------------------------
/tools/lcf/lcf_header.txt:
--------------------------------------------------------------------------------
```
MEMORY
{
main (RWX) : ORIGIN = 0x100000, LENGTH = 0x0
select.bin (RWXO) : ORIGIN = 0x533980, LENGTH = 0x0 > select.bin
game.bin (RWXO) : ORIGIN = 0x533980, LENGTH = 0x0 > game.bin
yn.bin (RWXO) : ORIGIN = 0x533980, LENGTH = 0x0 > yn.bin
lobby.bin (RWXO) : ORIGIN = 0x533980, LENGTH = 0x0 > lobby.bin
dnas_net.bin (RWXO) : ORIGIN = 0xA06200, LENGTH = 0x0 > dnas_net.bin
dnas_ins.bin (RWXO) : ORIGIN = 0xA06200, LENGTH = 0x0 > dnas_ins.bin
dummy.bin (RWX) : ORIGIN = 0xdfff00, LENGTH = 0x0
heap (RW) : ORIGIN = 0xe00000, LENGTH = 0x0
}
KEEP_SECTION
{
.vutext,
.vudata,
.vubss,
.data
}
SECTIONS
{
# define for crt0
_heap_size = -1;
_stack = -1;
_stack_size = 0x00100000;
# define for lcf
_align_segment = 0x80;
```
--------------------------------------------------------------------------------
/include/types.h:
--------------------------------------------------------------------------------
```
#ifndef TYPES_H
#define TYPES_H
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned int size_t;
typedef char s8;
typedef short s16;
typedef int s32;
typedef long long s64;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef float f32;
typedef double f64;
typedef s32 intptr_t;
typedef u32 uintptr_t;
typedef s32 ptrdiff_t;
// Old code insists on treating strlen's return type as a signed integer
typedef s32 strlen_t;
typedef s32 ssize_t;
#endif
```
--------------------------------------------------------------------------------
/include/include_asm.h:
--------------------------------------------------------------------------------
```
#ifndef INCLUDE_ASM_H
#define INCLUDE_ASM_H
#if !defined(M2CTX) && !defined(PERMUTER)
#ifndef INCLUDE_ASM
#define INCLUDE_ASM(FOLDER, NAME) \
__asm__( \
".section .text\n" \
" .set noat\n" \
" .set noreorder\n" \
" .include \"" FOLDER "/" #NAME ".s\"\n" \
" .set reorder\n" \
" .set at\n" \
)
#endif
#ifndef INCLUDE_RODATA
#define INCLUDE_RODATA(FOLDER, NAME) \
__asm__( \
".section .rodata\n" \
" .include \"" FOLDER "/" #NAME ".s\"\n" \
".section .text" \
)
#endif
__asm__(".include \"include/labels.inc\"\n");
#else
#ifndef INCLUDE_ASM
#define INCLUDE_ASM(FOLDER, NAME)
#endif
#ifndef INCLUDE_RODATA
#define INCLUDE_RODATA(FOLDER, NAME)
#endif
#endif /* !defined(M2CTX) && !defined(PERMUTER) */
#endif /* INCLUDE_ASM_H */
```
--------------------------------------------------------------------------------
/config/heap.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: #TODO overlaydata
options:
basename: heap
base_path: ..
#compiler
platform: ps2
compiler: MWCCPS2
asm_path: asm/heap
src_path: src/heap
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: config/heap_symbol_addrs.txt
undefined_funcs_auto_path: config/undefined_funcs_auto.txt
undefined_syms_auto_path: config/undefined_syms_auto.txt
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
segments:
- [0x0, databin, overlay/heap/header]
- name: heap
type: code
start: 0x80
vram: 0xE00000
bss_size: 0x0 #TODO offset 0x14 in the overlay header
subsections:
- [0x80, asm, overlay/heap/code]
#- [0x40 + offset, data, overlay/heap/data] #TODO offset 0x1C in overlay header
-[0x0]#eof
```
--------------------------------------------------------------------------------
/config/dnas_ins_funcs_auto.txt:
--------------------------------------------------------------------------------
```
memcmp0x19dad8 = 0x19DAD8;
memcpy0x19db70 = 0x19DB70;
memmove0x19dc20 = 0x19DC20;
memset0x19dd28 = 0x19DD28;
__muldi30x1a6a70 = 0x1A6A70;
__udivdi30x1a7810 = 0x1A7810;
__umoddi30x1a7d90 = 0x1A7D90;
CreateSema0x254720 = 0x254720;
DeleteSema0x254730 = 0x254730;
SignalSema0x254740 = 0x254740;
WaitSema0x254760 = 0x254760;
FlushCache0x2549a0 = 0x2549A0;
sceSifDmaStat0x254ac0 = 0x254AC0;
sceSifSetDma0x254ae0 = 0x254AE0;
DelayThread0x255780 = 0x255780;
sceSifInitRpc0x257180 = 0x257180;
sceSifBindRpc0x257918 = 0x257918;
sceSifCallRpc0x257ae8 = 0x257AE8;
sceOpen0x258b70 = 0x258B70;
sceClose0x258df8 = 0x258DF8;
sceLseek0x258f78 = 0x258F78;
sceRead0x2591b0 = 0x2591B0;
sceSifInitIopHeap0x25b928 = 0x25B928;
sceSifAllocIopHeap0x25b9b0 = 0x25B9B0;
sceSifFreeIopHeap0x25bb18 = 0x25BB18;
sceSifStopModule0x25c248 = 0x25C248;
sceSifUnloadModule0x25c450 = 0x25C450;
sceSifSearchModuleByName0x25c4e0 = 0x25C4E0;
sceSifLoadModuleBuffer0x25c610 = 0x25C610;
sceSifRebootIop0x25cda8 = 0x25CDA8;
```
--------------------------------------------------------------------------------
/config/select.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: a646083b86e08ff0e79b0ddbd96a940893d5b53c
options:
basename: select
base_path: ..
target_path: overlays/select.bin
#compiler
platform: ps2
compiler: MWCCPS2
asm_path: asm/overlay/select
src_path: src/overlay/select
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/select_symbol_addrs.txt, config/main_symbol_addrs.txt]
undefined_funcs_auto_path: config/select_funcs_auto.txt
undefined_syms_auto_path: config/select_syms_auto.txt
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, select_header]
- name: select
type: code
start: 0x80
vram: 0x533A00
bss_size: 0x0
subsegments:
- [0x80, asm, select_code]
- [0x4D80, data, select_data]
- [0x8000] #eof
```
--------------------------------------------------------------------------------
/config/yn.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: 7cc3cfcd716226249ae0e48076cf69fd638dd083
options:
basename: yn
base_path: ..
target_path: overlays/yn.bin
#compiler
platform: ps2
compiler: MWCCPS2
asm_path: asm/overlay/yn
src_path: src/overlay/yn
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/yn_symbol_addrs.txt, config/main_symbol_addrs.txt]
undefined_funcs_auto_path: config/yn_funcs_auto.txt
undefined_syms_auto_path: config/yn_syms_auto.txt
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, yn_header]
- name: yn
type: code
start: 0x80
vram: 0x533A00
bss_size: 0x46680
subsegments:
- [0x80, asm, yn_code]
- [0x8F80, data, yn_data]
- { name: yn_bss, type: bss, vram: 0x541680 }
- [0xDD00] #eof
```
--------------------------------------------------------------------------------
/config/game.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: feeecbc08b5d12e5d8114efc7b6f05cd68b334e9
options:
basename: game
base_path: ..
target_path: overlays/game.bin
#compiler
platform: ps2
compiler: MWCCPS2
asm_path: asm/overlay/game
src_path: src/overlay/game
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/game_symbol_addrs.txt, config/main_symbol_addrs.txt]
undefined_funcs_auto_path: config/game_funcs_auto.txt
undefined_syms_auto_path: config/game_syms_auto.txt
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, game_header]
- name: game
type: code
start: 0x80
vram: 0x533A00
bss_size: 0x200
subsegments:
- [0x80, asm, game_code]
- [0x108200, data, game_data]
- { name: game_bss, type: bss, vram: 0x68F100 }
- [0x15B780] #eof
```
--------------------------------------------------------------------------------
/config/dnas_ins_syms_auto.txt:
--------------------------------------------------------------------------------
```
dndst_len0x38aa4c = 0x38AA4C;
D_00A208EC = 0xA208EC;
D_00A20A9C = 0xA20A9C;
D_00A20E44 = 0xA20E44;
D_00A21008 = 0xA21008;
D_00A21280 = 0xA21280;
D_00A2131C = 0xA2131C;
D_00A21440 = 0xA21440;
D_00A214DC = 0xA214DC;
D_00A21614 = 0xA21614;
D_00A216B0 = 0xA216B0;
D_00A2195C = 0xA2195C;
D_00A21A6C = 0xA21A6C;
D_00A21B08 = 0xA21B08;
D_00A21EB4 = 0xA21EB4;
D_00A21F50 = 0xA21F50;
D_00A22030 = 0xA22030;
D_00A220CC = 0xA220CC;
D_00A2222C = 0xA2222C;
D_00A222C8 = 0xA222C8;
D_00A22420 = 0xA22420;
D_00A224BC = 0xA224BC;
D_00A22508 = 0xA22508;
D_00A225A4 = 0xA225A4;
D_00A2264C = 0xA2264C;
D_00A226E8 = 0xA226E8;
D_00A22730 = 0xA22730;
D_00A227E8 = 0xA227E8;
D_00A22F88 = 0xA22F88;
D_00A23688 = 0xA23688;
D_00A23A10 = 0xA23A10;
D_00A23B74 = 0xA23B74;
D_00A23BE4 = 0xA23BE4;
D_00A23D8C = 0xA23D8C;
D_00A23F0C = 0xA23F0C;
D_00A24154 = 0xA24154;
D_00A2432C = 0xA2432C;
D_00A24764 = 0xA24764;
D_00A24904 = 0xA24904;
D_00A24BC8 = 0xA24BC8;
D_00A24C64 = 0xA24C64;
D_00A24CC8 = 0xA24CC8;
D_00A24F84 = 0xA24F84;
D_00A25350 = 0xA25350;
D_00A261A4 = 0xA261A4;
D_00A27EA8 = 0xA27EA8;
D_00A2806C = 0xA2806C;
D_00A2823C = 0xA2823C;
D_00A284CC = 0xA284CC;
D_00A29060 = 0xA29060;
D_00A29864 = 0xA29864;
D_00A29A54 = 0xA29A54;
D_00A2A40C = 0xA2A40C;
D_00A2E0BC = 0xA2E0BC;
D_00A2E7D4 = 0xA2E7D4;
_A_EndConstructedSet0xa30679 = 0xA30679;
```
--------------------------------------------------------------------------------
/config/dnas_ins_ignores.txt:
--------------------------------------------------------------------------------
```
784 C
7A4 12
7EC C
908 C
934 24
998 25
A00 C
A9C C
ABC 19
B0C C
C0C C
C2C 19
C7C C
D20 C
D40 16
D8C C
E30 C
E50 16
E9C C
FB8 C
FE8 1F
108C 24
1110 25
1190 C
1220 C
1240 15
128C C
1304 C
1324 16
1374 C
13F0 C
1410 19
1464 C
1718 C
1738 16
1784 C
1838 C
1858 19
18AC C
1944 C
1964 15
19B4 C
1F40 C
1F80 17
1FD8 F
2028 23
2090 C
2158 C
2178 E
21BC C
2270 C
22B0 15
230C F
2374 C
2420 C
2460 18
24C0 F
2514 1F
2574 23
25D8 C
26C8 C
26E8 E
272C C
1A5FC C
1A70C C
1A78C C
1A8BC C
1A93C C
1AC64 C
1ACE8 C
1AE28 C
1AF68 C
1B0A0 C
1B120 C
1B260 C
1B2E0 C
1B434 C
1B4B4 C
1B77C C
1B7F8 10
1B888 10
1B90C C
1BCD4 C
1BD54 C
1BE50 C
1BED0 C
1C04C C
1C0CC C
1C240 C
1C2C0 C
1C328 C
1C3A8 C
1C46C C
1C4EC C
1C550 C
1C5EC C
1CDA8 C
1D334 C
1D4A8 C
1D5A4 C
1D830 C
1DA04 C
1DA80 C
1DBAC C
1DCC8 C
1DD2C C
1DDB8 C
1DF74 C
1DFF4 C
1E14C C
1E1CC C
1E584 C
1E604 C
1E724 C
1E7A4 C
1E9E8 C
1EAE8 C
1EB68 C
1EDA4 C
1EE24 C
1F170 C
1F308 C
1F528 C
1F75C C
1F888 C
1FF70 C
1FFC4 C
20414 C
20474 C
20770 3A8
21C80 C
21CC8 C
21D90 C
21E8C C
21F60 C
2205C C
22134 C
222EC C
223E0 C
22514 C
225DC C
22650 C
226FC C
22760 C
228B4 C
22E80 C
22F64 C
22FD8 C
23090 C
2314C C
23210 C
232F0 C
233BC C
2355C C
23614 C
23634 D
23684 C
23740 C
23874 C
23E04 C
2422C C
24304 C
24324 D
243AC C
278BC C
27948 C
27A24 C
27D04 C
27DEC C
27EDC C
27FBC C
28098 C
28184 C
285F4 C
28968 4B0
296A0 320
```
--------------------------------------------------------------------------------
/config/lobby.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: 9e75d24e0cc60ae0cfb92b25ae59e64b59d7f038
options:
basename: lobby
base_path: ..
target_path: overlays/lobby.bin
#compiler
platform: ps2
compiler: MWCCPS2
asm_path: asm/overlay/lobby
src_path: src/overlay/lobby
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/lobby_symbol_addrs.txt, config/main_symbol_addrs.txt]
undefined_funcs_auto_path: config/lobby_funcs_auto.txt
undefined_syms_auto_path: config/lobby_syms_auto.txt
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
global_vram_start: 0x100000
global_vram_end: 0xe00000
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, lobby_header]
- name: lobby
type: code
start: 0x80
vram: 0x533A00
bss_size: 0xEA680
subsegments:
- [0x80, asm, lobby_code]
- [0xDC980, data, lobby_data]
- { name: lobby_bss, type: bss, vram: 0x668780 }
- [0x134E00] #eof
```
--------------------------------------------------------------------------------
/config/dnas_net.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: 10b4a9deb6013e913fa4c456c96943d77df50c1d #original was 22304aee7e329143e22db8bc888bfae86f7e6b63
options:
basename: dnas_ins
base_path: ..
target_path: overlays/dnas_net_noencrypt.bin
#compiler
platform: ps2
compiler: GCC
asm_path: asm/overlay/dnas_net
src_path: src/overlay/dnas_net
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/dnas_net_symbol_addrs.txt, config/main_symbol_addrs.txt, config/dnas_net_crypt_symbols.txt]
undefined_funcs_auto_path: config/dnas_net_funcs_auto.txt
undefined_syms_auto_path: config/dnas_net_syms_auto.txt
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, dnas_net_header]
- name: dnas_net
type: code
start: 0x80
vram: 0xA06280
bss_size: 0x81400
subsegments:
- [0x80, asm, dnas_net_code]
- [0x70F80, data, dnas_net_data]
- { name: dnas_net_bss, type: bss, vram: 0xAA7200 }
- [0xA1000] #eof
```
--------------------------------------------------------------------------------
/config/dnas_ins.yaml:
--------------------------------------------------------------------------------
```yaml
sha1: e34208b621caf07b02b31472b897502fe1d37a01 #obfuscated matches 5b78507e9078b5f3c19681e1d3dc41f8a17ecf73
options:
basename: dnas_ins
base_path: ..
target_path: overlays/dnas_ins_noencrypt.bin
#compiler
platform: ps2
compiler: GCC
asm_path: asm/overlay/dnas_ins
src_path: src/overlay/dnas_ins
build_path: build
extensions_path: tools/splat_ext
symbol_addrs_path: [config/dnas_ins_symbol_addrs.txt, config/main_symbol_addrs.txt, config/dnas_ins_crypt_symbols.txt]
undefined_funcs_auto_path: config/dnas_ins_funcs_auto.txt
undefined_syms_auto_path: config/dnas_ins_syms_auto.txt
asm_function_macro: .fn
asm_data_macro: .obj
asm_nonmatching_label_macro: ""
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
find_file_boundaries: False #funcs are already aligned?
string_encoding: SHIFT-JIS
rodata_string_guesser_level: 2
disasm_unknown: True
gp_value: 0x0038EB70
section_order: [".text", ".vutext", ".data", ".vudata", ".rodata", ".init", ".ctor", ".vtables", ".sbss", ".bss", ".common", ".vubss"]
segments:
- [0x0, databin, dnas_ins_header]
- name: dnas_ins
type: code
start: 0x80
vram: 0xA06280
bss_size: 0x6FB00
subsegments:
- [0x80, asm, dnas_ins_code]
- [0x29D00, data, dnas_ins_data]
- { name: dnas_ins_bss, type: bss, vram: 0xA37D00 }
- [0x31B00] #eof
```
--------------------------------------------------------------------------------
/tools/verify.py:
--------------------------------------------------------------------------------
```python
import sys
from pathlib import Path
bytes_a = []
bytes_b = []
ignores = []
def main():
if(len(sys.argv) < 4):
print("missing args")
return
file_a = Path(sys.argv[1])
file_b = Path(sys.argv[2])
start = int(sys.argv[3], 16)
length = int(sys.argv[4], 16)
ignorefile = None
ignorepos = 0
ignores = []
if(len(sys.argv) > 5):
ignorefile = Path(sys.argv[5])
with open(file_a, 'rb') as f:
bytes_a = f.read()
with open(file_b, 'rb') as f:
bytes_b = f.read()
if(ignorefile != None):
with open(ignorefile, 'r') as f:
ignores = f.readlines()
mismatch = -1
ctr = 0
mislen = 0
for b in range(length):
pos = start+b
if(ignores and ignorepos < len(ignores)):
igdat = ignores[ignorepos].split()
igstart = int(igdat[0], 16)
igend = igstart + int(igdat[1], 16)
#print(f"test ignore: {igstart:X} {igend:X} {pos:X}")
if(pos >= igstart and pos < igend):
#print(f"ignored {pos:X}")
continue
if(pos == igend):
ignorepos += 1
continue
if(bytes_a[pos:pos+1] != bytes_b[pos:pos+1]):
if(mislen == 0):
mismatch = pos
mislen += 1
else:
if(mislen != 0):
print(f"{mismatch:X} {mislen:X}")
mislen = 0
ctr += 1
if(ctr == 100):
print("reporting limit reached")
break
if(mislen != 0):
print(f"{mismatch:X} {mislen:X}")
if(mismatch != -1):
print("not funny, didn't match")
return
print("all bytes verified!")
if __name__ == '__main__':
main()
```
--------------------------------------------------------------------------------
/config/dnas_net_syms_auto.txt:
--------------------------------------------------------------------------------
```
D_35C7B1 = 0x35C7B1;
pass_phrase0x38a028 = 0x38A028;
dnprox_str_main_s = 0x3A0148;
dnprox_str_main = 0x3A0257;
MyDomain0x4e4a50 = 0x4E4A50;
D_00A08CA4 = 0xA08CA4;
D_00A08DA4 = 0xA08DA4;
D_00A08EA4 = 0xA08EA4;
D_00A08FB4 = 0xA08FB4;
D_00A090BC = 0xA090BC;
D_00A091BC = 0xA091BC;
D_00A0929C = 0xA0929C;
D_00A0939C = 0xA0939C;
D_00A0947C = 0xA0947C;
D_00A0955C = 0xA0955C;
D_00A0963C = 0xA0963C;
D_00A0973C = 0xA0973C;
D_00A09824 = 0xA09824;
D_00A09924 = 0xA09924;
D_00A09A2C = 0xA09A2C;
D_00A09D9C = 0xA09D9C;
D_00A09E9C = 0xA09E9C;
D_00A09F84 = 0xA09F84;
D_00A0A064 = 0xA0A064;
D_00A0AFD0 = 0xA0AFD0;
D_00A0B25C = 0xA0B25C;
D_00A0B518 = 0xA0B518;
D_00A0C3DC = 0xA0C3DC;
D_00A0C664 = 0xA0C664;
D_00A0C7C4 = 0xA0C7C4;
D_00A0C8F8 = 0xA0C8F8;
D_00A0CA3C = 0xA0CA3C;
D_00A0CA84 = 0xA0CA84;
D_00A0CCCC = 0xA0CCCC;
D_00A0CF1C = 0xA0CF1C;
D_00A0D810 = 0xA0D810;
D_00A10BE0 = 0xA10BE0;
D_00A11068 = 0xA11068;
D_00A1109C = 0xA1109C;
D_00A11C7C = 0xA11C7C;
D_00A11CA0 = 0xA11CA0;
D_00A12120 = 0xA12120;
D_00A12130 = 0xA12130;
D_00A126B0 = 0xA126B0;
D_00A12D8C = 0xA12D8C;
D_00A12F20 = 0xA12F20;
D_00A13690 = 0xA13690;
D_00A21A48 = 0xA21A48;
D_00A21AB0 = 0xA21AB0;
D_00A21AE0 = 0xA21AE0;
D_00A21BB8 = 0xA21BB8;
D_00A21C20 = 0xA21C20;
D_00A21C88 = 0xA21C88;
D_00A21D08 = 0xA21D08;
D_00A21D70 = 0xA21D70;
D_00A21D80 = 0xA21D80;
D_00A6D47C = 0xA6D47C;
D_00A6D724 = 0xA6D724;
D_00A6DA64 = 0xA6DA64;
D_00A6DB48 = 0xA6DB48;
D_00A6DC30 = 0xA6DC30;
D_00A6DD1C = 0xA6DD1C;
D_00A6DE04 = 0xA6DE04;
D_00A6DF18 = 0xA6DF18;
D_00A6E044 = 0xA6E044;
D_00A6E1FC = 0xA6E1FC;
D_00A6E3CC = 0xA6E3CC;
D_00A6E674 = 0xA6E674;
D_00A6E894 = 0xA6E894;
D_00A6EBC4 = 0xA6EBC4;
D_00A6ED94 = 0xA6ED94;
D_00A6EEFC = 0xA6EEFC;
D_00A6F104 = 0xA6F104;
D_00A6F434 = 0xA6F434;
D_00A6F64C = 0xA6F64C;
D_00A6FE74 = 0xA6FE74;
D_00A70064 = 0xA70064;
D_00A70A1C = 0xA70A1C;
D_00A73108 = 0xA73108;
D_00A733C4 = 0xA733C4;
D_00A738CC = 0xA738CC;
D_00A73CE4 = 0xA73CE4;
D_00A73F4C = 0xA73F4C;
D_00A742DC = 0xA742DC;
D_00A74794 = 0xA74794;
D_00A749C4 = 0xA749C4;
D_00A74D44 = 0xA74D44;
D_00A75064 = 0xA75064;
D_00A7530C = 0xA7530C;
D_00A75914 = 0xA75914;
D_00A76084 = 0xA76084;
D_00A7679C = 0xA7679C;
D_00A87835 = 0xA87835;
D_00A87836 = 0xA87836;
D_00A87849 = 0xA87849;
D_00A8784A = 0xA8784A;
_A_EndConstructedSet0xa8c919 = 0xA8C919;
```
--------------------------------------------------------------------------------
/src/main/stage.c:
--------------------------------------------------------------------------------
```cpp
#include "common.h"
#include "structs.h"
#pragma cats off
extern void * memset0x19dd28(void *__s,int __c,size_t __n);
extern u8 * Stage_data_get0x226900(u8 area);
s16 flash_timer0x38a118;
s16 flash_flag0x38a114;
STAGE_WORK stage_work0x3d8230;
extern GAME_WORK game_w0x3f33f0;
extern STAGE_FOG *stage_fog_tbl0x2f3000[];
extern u16 Stg_env_type0x2f6370[];
void stage_w_init0x15bab0(void) {
stage_work0x3d8230.unk_07 = 0;
stage_work0x3d8230.unk_06 = 0;
stage_work0x3d8230.unk_00 = 1;
stage_work0x3d8230.unk_05 = 0;
stage_work0x3d8230.unk_04 = 0;
stage_work0x3d8230.origin.z = 0;
stage_work0x3d8230.origin.y = 0;
stage_work0x3d8230.origin.x = 0;
stage_work0x3d8230.offset.z = 0;
stage_work0x3d8230.offset.y = 0;
stage_work0x3d8230.offset.x = 0;
stage_work0x3d8230.unk_1C.z = 0;
stage_work0x3d8230.unk_1C.y = 0;
stage_work0x3d8230.unk_1C.x = 0;
stage_work0x3d8230.current_area_id = game_w0x3f33f0.current_area_id;
stage_work0x3d8230.area_origins = Stage_data_get0x226900(stage_work0x3d8230.current_area_id);
}
void stage_fog_set0x15bb60(u8 arg0) {
STAGE_FOG * temp_s0 = stage_fog_tbl0x2f3000[arg0];
flSetRenderState0x177720(0xF, (temp_s0->b4 << 0x18) | (temp_s0-> b1 << 0x10) | (temp_s0->b2 << 8) | temp_s0->b3);
flSetRenderState0x177720(0x10, temp_s0->x);
flSetRenderState0x177720(0x11, temp_s0->y);
}
INCLUDE_RODATA("asm/main/nonmatchings/stage", @550x35b810);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @560x35b818);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @570x35b820);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @580x35b828);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @590x35b838);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @600x35b840);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @610x35b848);
INCLUDE_RODATA("asm/main/nonmatchings/stage", @620x35b858);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_set_set0x15bbe0);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_mv_ck0x15c210);
void * clr_stg_work0x15c490(void) {
return memset0x19dd28(&stage_work0x3d8230, 0, 100);
}
void clr_flash0x15c4b0(void) {
flash_flag0x38a114 = 0;
flash_timer0x38a118 = 0;
}
s16 Stage_env_ck0x15c4c0(u8 stage) {
return Stg_env_type0x2f6370[stage];
}
INCLUDE_ASM("asm/main/nonmatchings/stage", Pile_on0x15c4e0);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_i0x15c520);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_se_move0x15c6b0);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_m0x15c940);
INCLUDE_ASM("asm/main/nonmatchings/stage", move_stage0x15cce0);
INCLUDE_ASM("asm/main/nonmatchings/stage", trans_stage_sub0x15cd40);
INCLUDE_ASM("asm/main/nonmatchings/stage", trans_stage0x15cd90);
INCLUDE_ASM("asm/main/nonmatchings/stage", spr_disp_sub0x1608c0);
INCLUDE_ASM("asm/main/nonmatchings/stage", stage_spr_disp0x160ab0);
```
--------------------------------------------------------------------------------
/config/dnas_net_ignores.txt:
--------------------------------------------------------------------------------
```
1580 C
15A0 1D
15DC 1C
165C C
2A68 C
2AC4 C
2B68 C
2BC4 C
2C74 C
2CC4 C
2D7C C
2DD4 C
2E80 C
2EDC C
2F80 C
2FDC C
3080 C
30BC C
3160 C
31BC C
3260 C
329C C
3340 C
337C C
3420 C
345C C
3500 C
355C C
3600 C
3644 C
36F0 C
3744 C
37F8 C
384C C
3904 C
39B4 C
3A68 C
3ACC C
3B78 C
3BBC C
3C68 C
3CBC C
3D68 C
3DA4 C
3E48 C
3E84 C
3F34 C
3FE4 C
4098 C
40FC C
41B0 C
42C8 C
4390 C
4480 14 - string
44C0 23 - string
4510 22 - string
4560 25 - string
45B0 17 - string
45F0 1E - string
4638 1D - string
4680 16 - string
46C0 14 - string
4750 22 - string
47A0 27 - string
47F0 29 - string
4848 25 - string
48F0 25 - string
4940 27 - string
4990 30 - string
4A14 1B - string
4A84 15 - string
4AC8 15 - string
4B08 12 - string
4B98 C
4D7C C
4D9C 6 - string
4DF0 C
4E8C C
4EAC B - string
4EF0 21 - string
4F50 19 - string
4FA8 10 - string
4FF8 2 - string
507C C
52D8 C
5338 C
6078 C
61FC C
62E0 C
6484 C
6568 C
6588 11 - string
65E4 C
669C C
66BC 10 - string
6718 C
681C C
68A4 C
6AA0 C
6AEC C
6BA4 C
6C3C C
6CF0 C
6D3C C
708C C
7110 C
7258 C
72CC C
7408 C
7438 C
75AC C
7630 C
8264 C
8284 12 - string
82CC C
83E8 C
8414 24 - string
8478 25 - string
84E0 C
857C C
859C 19 - string
85EC C
86EC C
870C 19 - string
875C C
8800 C
8820 16 - string
886C C
8910 C
8930 16 - string
897C C
8A98 C
8AC8 1F - string
8B6C 24 - string
8BF0 25 - string
8C70 C
8D00 C
8D20 15 - string
8D6C C
8DE4 C
8E04 16 - string
8E54 C
8ED0 C
8EF0 19 - string
8F44 C
91F8 C
9218 16 - string
9264 C
9318 C
9338 19 - string
938C C
9424 C
9444 15 - string
9494 C
9A20 C
9A60 17 - string
9AB8 F - string
9B08 23 - string
9B70 C
9C38 C
9C58 E - string
9C9C C
9D50 C
9D90 15 - string
9DEC F - string
9E54 C
9F00 C
9F40 18 - string
9FA0 F - string
9FF4 1F - string
A054 23 - string
A0B8 C
A1A8 C
A1C8 E - string
A20C C
A62C C
A64C AC - table
A720 4E - table
A790 61 - table
A818 61 - table
A8A0 61 - table
A928 61 - table
AA00 C
ADC8 C
ADE8 8 - string
AE24 D - string
AEBC C
BA5C C
BAC0 C
CB30 C
CB50 1D - string
CBAC C
CDAC C
CDCC 128 - table
CF20 60 - table
CFA0 A4 - table
D068 A4 - table
D130 A4 - table
D1F8 A0 - table
D42C C
2CB48 8A4 - table
64F28 8a8 - table
66914 C
6699C C
66A54 C
66ADC C
66B8C C
66BF0 C
66CC8 C
6729C C
6739C C
67544 C
67614 C
67680 C
6772C C
67798 C
6783C C
67884 C
67924 C
67968 C
67A0C C
67A50 C
67AF4 C
67B3C C
67BDC C
67C24 C
67CF0 C
67D38 C
67E20 C
67E64 C
67F20 C
6801C C
680F0 C
681EC C
682C4 C
68494 C
68574 C
686B4 C
68774 C
687E0 C
688A4 C
689E4 C
68AB8 C
68BB4 C
68C74 C
68D1C C
68DE4 C
68F24 C
68FFC C
69254 C
6932C C
6946C C
69574 C
695E8 C
696A0 C
6975C C
69820 C
69900 C
699CC C
69B6C C
69C24 C
69C44 D - string
69C94 C
69D50 C
69E84 C
6A414 C
6A83C C
6A914 C
6A934 D - string
6A9BC C
6CED8 C
6CF28 C
6D000 C
6D1E4 C
6D2EC C
6D6EC C
6D7C8 C
6D864 C
6D92C C
6DB04 C
6DBD4 C
6DD6C C
6DE58 C
6E0FC C
6E21C C
6E290 C
6E360 C
6E5B4 C
6E67C C
6E6DC C
6E798 C
6E7E4 C
6E8B8 C
6EB64 C
6EC4C C
6EE84 C
6EFC4 C
6F12C C
6F2A0 C
6F734 C
6F884 C
6F910 C
6F9EC C
6FCCC C
6FDB4 C
6FEA4 C
6FF84 C
70060 C
7014C C
705BC C
```
--------------------------------------------------------------------------------
/config/yn_funcs_auto.txt:
--------------------------------------------------------------------------------
```
str_stop_all0x100b10 = 0x100B10;
se_req0x159450 = 0x159450;
se_stop_all0x159f90 = 0x159F90;
SetFilterMode0x161500 = 0x161500;
flPS2DmaWait0x16efd0 = 0x16EFD0;
flCreateTextureFromTim2_mem0x16fe00 = 0x16FE00;
flSin0x173600 = 0x173600;
flSetRenderState0x177720 = 0x177720;
flReleaseTextureHandle0x188840 = 0x188840;
flReleasePaletteHandle0x1889c0 = 0x1889C0;
flPADDestroy0x18e5e0 = 0x18E5E0;
sceCdInit0x197208 = 0x197208;
bzero0x199900 = 0x199900;
memalign0x19cd70 = 0x19CD70;
free0x19cff8 = 0x19CFF8;
memset0x19dd28 = 0x19DD28;
printf0x19ef90 = 0x19EF90;
sprintf0x1a0a90 = 0x1A0A90;
strchr0x1a0f48 = 0x1A0F48;
strcmp0x1a10d8 = 0x1A10D8;
strcpy0x1a1220 = 0x1A1220;
strlen0x1a13b8 = 0x1A13B8;
strncmp0x1a16a0 = 0x1A16A0;
sceGsSyncPath0x1a97d8 = 0x1A97D8;
sceGsSyncVCallback0x1a9e58 = 0x1A9E58;
ADXT_Finish0x1fb378 = 0x1FB378;
ADXM_ShutdownThrd0x1fc830 = 0x1FC830;
ADXPS2_LoadFcacheDvd0x202220 = 0x202220;
flfntInit0x216610 = 0x216610;
flfntSetSize0x216890 = 0x216890;
flfntLocate0x2168b0 = 0x2168B0;
flfntSetZ0x2168d0 = 0x2168D0;
flfntSetPalette0x2168e0 = 0x2168E0;
flfntSetHalftype0x216910 = 0x216910;
flfntPrintf0x216920 = 0x216920;
flfntDraw0x216ac0 = 0x216AC0;
DeviceSelectInitialize0x233280 = 0x233280;
DeviceRollbackDriver0x2332c0 = 0x2332C0;
DeviceLoadDriver20x233420 = 0x233420;
DeviceLoadDriver0x233540 = 0x233540;
DeviceUpdateStatus0x2337f0 = 0x2337F0;
InetIPAddrFromString0x237950 = 0x237950;
RemoveIntcHandler0x254420 = 0x254420;
RemoveDmacHandler0x254450 = 0x254450;
CreateThread0x254520 = 0x254520;
DeleteThread0x254530 = 0x254530;
StartThread0x254540 = 0x254540;
TerminateThread0x254570 = 0x254570;
ChangeThreadPriority0x2545b0 = 0x2545B0;
GetThreadId0x254610 = 0x254610;
CreateSema0x254720 = 0x254720;
DeleteSema0x254730 = 0x254730;
iSignalSema0x254750 = 0x254750;
WaitSema0x254760 = 0x254760;
PollSema0x254770 = 0x254770;
FlushCache0x2549a0 = 0x2549A0;
DisableIntc0x255200 = 0x255200;
DisableDmac0x2552d0 = 0x2552D0;
scePrintf0x256948 = 0x256948;
sceSifExitCmd0x256ca0 = 0x256CA0;
sceSifInitRpc0x257180 = 0x257180;
sceSifBindRpc0x257918 = 0x257918;
sceSifCallRpc0x257ae8 = 0x257AE8;
sceSifCheckStatRpc0x257ce0 = 0x257CE0;
sceSifSetRpcQueue0x257d20 = 0x257D20;
sceSifRegisterRpc0x257db8 = 0x257DB8;
sceSifRemoveRpc0x257e88 = 0x257E88;
sceSifRemoveRpcQueue0x257f20 = 0x257F20;
sceSifRpcLoop0x2581d0 = 0x2581D0;
sceSifStopModule0x25c248 = 0x25C248;
sceSifUnloadModule0x25c450 = 0x25C450;
sceSifSearchModuleByName0x25c4e0 = 0x25C4E0;
sceSifLoadModule0x25c878 = 0x25C878;
sceSifLoadStartModule0x25c898 = 0x25C898;
DIntr0x25d760 = 0x25D760;
EIntr0x25d7b8 = 0x25D7B8;
LoadExecPS20x25ddc0 = 0x25DDC0;
Net_kb_input_sub0x26cb80 = 0x26CB80;
Net_kb_input_init20x26cbe0 = 0x26CBE0;
SoftKey_Getstr0x26cc90 = 0x26CC90;
SoftKey_onoff0x26cca0 = 0x26CCA0;
SoftKey_trans0x26cce0 = 0x26CCE0;
YnFile_Data_load0x26cd50 = 0x26CD50;
McActInit0x27fdf0 = 0x27FDF0;
McActMain0x27fe20 = 0x27FE20;
McActCheckSet0x27ff00 = 0x27FF00;
McActFormatSet0x280890 = 0x280890;
McActListSet0x280b70 = 0x280B70;
McActResult0x280cf0 = 0x280CF0;
net_flps00080x28bec0 = 0x28BEC0;
```
--------------------------------------------------------------------------------
/config/dnas_net_funcs_auto.txt:
--------------------------------------------------------------------------------
```
sceCdSync0x196ed8 = 0x196ED8;
sceCdDiskReady0x1976e0 = 0x1976E0;
sceCdStandby0x197b98 = 0x197B98;
sceCdReadClock0x197f20 = 0x197F20;
atoi0x1997e8 = 0x1997E8;
bsearch0x199830 = 0x199830;
__errno0x19af58 = 0x19AF58;
fclose0x19b018 = 0x19B018;
fflush0x19b118 = 0x19B118;
fgets0x19b230 = 0x19B230;
fopen0x19b7f8 = 0x19B7F8;
fprintf0x19b820 = 0x19B820;
fread0x19b878 = 0x19B878;
fseek0x19be00 = 0x19BE00;
ftell0x19c310 = 0x19C310;
fwrite0x19c890 = 0x19C890;
getenv0x19c940 = 0x19C940;
memcmp0x19dad8 = 0x19DAD8;
memcpy0x19db70 = 0x19DB70;
memset0x19dd28 = 0x19DD28;
qsort0x19f000 = 0x19F000;
sprintf0x1a0a90 = 0x1A0A90;
strcat0x1a0e18 = 0x1A0E18;
strcmp0x1a10d8 = 0x1A10D8;
strcpy0x1a1220 = 0x1A1220;
strcspn0x1a1338 = 0x1A1338;
strlen0x1a13b8 = 0x1A13B8;
strncat0x1a14f0 = 0x1A14F0;
strncmp0x1a16a0 = 0x1A16A0;
strncpy0x1a1858 = 0x1A1858;
strtol0x1a2d78 = 0x1A2D78;
vsprintf0x1a6850 = 0x1A6850;
__muldi30x1a6a70 = 0x1A6A70;
__divdi30x1a6ae8 = 0x1A6AE8;
__moddi30x1a7180 = 0x1A7180;
__udivdi30x1a7810 = 0x1A7810;
__umoddi30x1a7d90 = 0x1A7D90;
CpInetInterfaceProblemEnable0x235350 = 0x235350;
CpInetDnsInitialize0x235a10 = 0x235A10;
CpInetDnsDispose0x235a70 = 0x235A70;
sceNetGlueHtons0x236b00 = 0x236B00;
sceNetGlueInetAton0x236b20 = 0x236B20;
__sceNetGlueErrnoLoc0x236b50 = 0x236B50;
__sceNetGlueHErrnoLoc0x236b60 = 0x236B60;
sceNetGlueAbort0x236b70 = 0x236B70;
sceNetGlueAbortResolver0x236c50 = 0x236C50;
sceNetGlueSocket0x236c60 = 0x236C60;
sceNetGlueConnect0x236d10 = 0x236D10;
sceNetGlueGethostbyname0x236f10 = 0x236F10;
sceNetGlueRecv0x237220 = 0x237220;
sceNetGlueSend0x237500 = 0x237500;
sceNetGlueShutdown0x237680 = 0x237680;
sceNetGlueThreadInit0x237790 = 0x237790;
sceNetGlueThreadTerminate0x2377a0 = 0x2377A0;
CpInetHttpResolvCacheInitialize0x2377b0 = 0x2377B0;
CpInetHttpInitialize0x2377f0 = 0x2377F0;
InetDnsSetAll0x237dc0 = 0x237DC0;
CreateThread0x254520 = 0x254520;
DeleteThread0x254530 = 0x254530;
StartThread0x254540 = 0x254540;
TerminateThread0x254570 = 0x254570;
GetThreadId0x254610 = 0x254610;
ReferThreadStatus0x254620 = 0x254620;
CreateSema0x254720 = 0x254720;
DeleteSema0x254730 = 0x254730;
SignalSema0x254740 = 0x254740;
iSignalSema0x254750 = 0x254750;
WaitSema0x254760 = 0x254760;
PollSema0x254770 = 0x254770;
FlushCache0x2549a0 = 0x2549A0;
sceSifDmaStat0x254ac0 = 0x254AC0;
sceSifSetDma0x254ae0 = 0x254AE0;
getpid0x254ef0 = 0x254EF0;
stat0x254f20 = 0x254F20;
DelayThread0x255780 = 0x255780;
sceSifInitRpc0x257180 = 0x257180;
sceSifBindRpc0x257918 = 0x257918;
sceSifCallRpc0x257ae8 = 0x257AE8;
sceOpen0x258b70 = 0x258B70;
sceClose0x258df8 = 0x258DF8;
sceLseek0x258f78 = 0x258F78;
sceRead0x2591b0 = 0x2591B0;
sceWrite0x259410 = 0x259410;
sceSifInitIopHeap0x25b928 = 0x25B928;
sceSifAllocIopHeap0x25b9b0 = 0x25B9B0;
sceSifFreeIopHeap0x25bb18 = 0x25BB18;
sceSifStopModule0x25c248 = 0x25C248;
sceSifUnloadModule0x25c450 = 0x25C450;
sceSifSearchModuleByName0x25c4e0 = 0x25C4E0;
sceSifLoadModuleBuffer0x25c610 = 0x25C610;
sceSifRebootIop0x25cda8 = 0x25CDA8;
TimerUSec2BusClock0x25f228 = 0x25F228;
SetTimerAlarm0x25f3d8 = 0x25F3D8;
ReleaseTimerAlarm0x25f5f8 = 0x25F5F8;
```
--------------------------------------------------------------------------------
/config/undefined_syms_auto.txt:
--------------------------------------------------------------------------------
```
D_0025D73C = 0x25D73C;
Eft_blood_rgb__Green = 0x2E6041;
Eft_blood_rbg__Blue = 0x2E6042;
Eft_kemuri_rgb__Green = 0x2E6061;
Eft_kemuri_rgb__Blue = 0x2E6062;
Eft_kemuri_rgb__Alpha = 0x2E6063;
D_002E7E71 = 0x2E7E71;
D_002E7E72 = 0x2E7E72;
D_002E8522 = 0x2E8522;
D_002EF302 = 0x2EF302;
D_002EF306 = 0x2EF306;
D_002F0A9A = 0x2F0A9A;
D_002F0AC2 = 0x2F0AC2;
D_002F0ACA = 0x2F0ACA;
D_002F0AD2 = 0x2F0AD2;
D_002F0ADA = 0x2F0ADA;
D_002F0CC2 = 0x2F0CC2;
D_002F0CDA = 0x2F0CDA;
D_002F16A2 = 0x2F16A2;
D_002F16A6 = 0x2F16A6;
D_002F16E2 = 0x2F16E2;
D_002F16E6 = 0x2F16E6;
D_002F1722 = 0x2F1722;
D_002F1726 = 0x2F1726;
D_002F1762 = 0x2F1762;
D_002F1766 = 0x2F1766;
D_002F17A2 = 0x2F17A2;
D_002F17C2 = 0x2F17C2;
adxb_def_km0x30e346 = 0x30E346;
adxps2_rt_ver20x31e2d5 = 0x31E2D5;
adxps2_rt_ver30x31e2d6 = 0x31E2D6;
adxps2_rt_ver40x31e2d7 = 0x31E2D7;
D_0031E731 = 0x31E731;
D_0031E732 = 0x31E732;
Snd_bgm_tbl__1_0x32D471 = 0x32D471;
D_0032D9CA = 0x32D9CA;
Shell_data__1 = 0x334F41;
D_00334F42 = 0x334F42;
D_003351C1 = 0x3351C1;
D_003351C2 = 0x3351C2;
D_003351C3 = 0x3351C3;
D_003351CA = 0x3351CA;
D_003351CB = 0x3351CB;
D_003351CD = 0x3351CD;
D_003351CE = 0x3351CE;
D_003351CF = 0x3351CF;
D_003351D1 = 0x3351D1;
D_003367B1 = 0x3367B1;
Gun_data__2 = 0x3367B2;
D_003367B3 = 0x3367B3;
D_003367BA = 0x3367BA;
D_00336BF2 = 0x336BF2;
D_00336BF3 = 0x336BF3;
D_00336BF9 = 0x336BF9;
D_00336BFA = 0x336BFA;
D_00336BFB = 0x336BFB;
D_003371D2 = 0x3371D2;
D_003371D3 = 0x3371D3;
D_003371D9 = 0x3371D9;
D_003371DA = 0x3371DA;
D_003371DB = 0x3371DB;
D_003377F2 = 0x3377F2;
D_003377F3 = 0x3377F3;
D_003377F9 = 0x3377F9;
D_003377FA = 0x3377FA;
D_003377FB = 0x3377FB;
D_00337E02 = 0x337E02;
D_00337E03 = 0x337E03;
D_00337E09 = 0x337E09;
D_00337E0A = 0x337E0A;
D_00337E0B = 0x337E0B;
D_00338352 = 0x338352;
D_00338353 = 0x338353;
D_00338359 = 0x338359;
D_0033835A = 0x33835A;
D_0033835B = 0x33835B;
D_003396D1 = 0x3396D1;
Item_data__Rarity = 0x3396D2;
Item_data__MaxStack = 0x3396D3;
Item_data__IconIDX = 0x3396D5;
Item_data__ColorIDX = 0x3396D6;
D_003396DA = 0x3396DA;
D_003494B2 = 0x3494B2;
D_0034A752 = 0x34A752;
D_0034A82D = 0x34A82D;
D_0034A941 = 0x34A941;
D_0034E301 = 0x34E301;
D_0034E30B = 0x34E30B;
D_0034F5E2 = 0x34F5E2;
D_0034F5E6 = 0x34F5E6;
D_0034F6BA = 0x34F6BA;
D_0034F6BE = 0x34F6BE;
D_0034F87A = 0x34F87A;
D_00350C02 = 0x350C02;
D_00350C06 = 0x350C06;
D_00350C0A = 0x350C0A;
D_00351592 = 0x351592;
D_00351596 = 0x351596;
D_0035159A = 0x35159A;
D_00351722 = 0x351722;
D_00351726 = 0x351726;
D_0035172A = 0x35172A;
D_003545C2 = 0x3545C2;
D_00354DBA = 0x354DBA;
D_00354DBB = 0x354DBB;
D_00354DBD = 0x354DBD;
D_00354DBE = 0x354DBE;
D_00354DBF = 0x354DBF;
D_00356892 = 0x356892;
D_00356896 = 0x356896;
D_35C7B1 = 0x35C7B1;
D_0038776E = 0x38776E;
D_00387A9A = 0x387A9A;
D_00387AB9 = 0x387AB9;
D_00387ABD = 0x387ABD;
D_00387C2A = 0x387C2A;
D_00387C42 = 0x387C42;
Demo_task0x533be0 = 0x533BE0;
Edit_task0x5367f0 = 0x5367F0;
Cont_task0x5375f0 = 0x5375F0;
enemy_shadow_size_lb0x610300 = 0x610300;
em_body_tbl_lb0x610370 = 0x610370;
em_hit_push_tbl_lb0x6103a0 = 0x6103A0;
enemy_size0x63bb80 = 0x63BB80;
enemy_scale0x63bbb0 = 0x63BBB0;
enemy_shadow_size0x63bc40 = 0x63BC40;
enemy_mahi_size0x63bd60 = 0x63BD60;
em_body_tbl0x63fa10 = 0x63FA10;
em_hit_push_tbl0x63fc50 = 0x63FC50;
em_pos_tbl0x640540 = 0x640540;
em_hungry_tbl0x641240 = 0x641240;
em_thirst_tbl0x641310 = 0x641310;
em_suimin_tbl0x6413b0 = 0x6413B0;
em_ikari_data_tbl0x642040 = 0x642040;
em_atk_mode_timer_tbl0x642160 = 0x642160;
CnetSys_w0x676380 = 0x676380;
D_6763AE = 0x6763AE;
D_677324 = 0x677324;
D_6AFF80 = 0x6AFF80;
D_6AFF84 = 0x6AFF84;
network_work0x6b2a20 = 0x6B2A20;
client_work0x6dd7e0 = 0x6DD7E0;
D_6E9704 = 0x6E9704;
D_6E9714 = 0x6E9714;
recv_work0x6ea130 = 0x6EA130;
send_work0x6ea740 = 0x6EA740;
lb_player0x6eac80 = 0x6EAC80;
```
--------------------------------------------------------------------------------
/config/select_symbol_addrs.txt:
--------------------------------------------------------------------------------
```
violence_logo0x533f00 = 0x533F00;
@1060x53b330 = 0x53B330; // segment:select
@1640x53b3d0 = 0x53B3D0; // segment:select
@1650x53b3f0 = 0x53B3F0; // segment:select
@1050x53b300 = 0x53B300; // segment:select
@1630x53b3a0 = 0x53B3A0; // segment:select
c_disp0x534160 = 0x534160;
capcom_logo0x533fc0 = 0x533FC0;
opening_demo0x534340 = 0x534340;
demo_task_sub0x533c60 = 0x533C60;
@1120x53b350 = 0x53B350; // segment:select
@1130x53b370 = 0x53B370; // segment:select
middle_logo0x5340d0 = 0x5340D0;
@5020x53b840 = 0x53B840; // segment:select
@4630x53b6a0 = 0x53B6A0; // segment:select
char_make_init0x534530 = 0x534530;
@5030x53b870 = 0x53B870; // segment:select
waku_disp0x5351c0 = 0x5351C0;
@3250x53b660 = 0x53B660; // segment:select
roll_move0x536470 = 0x536470;
voice_idx0x538800 = 0x538800;
@5010x53b820 = 0x53B820; // segment:select
@4870x53b7e0 = 0x53B7E0; // segment:select
@4670x53b720 = 0x53B720; // segment:select
@3200x53b630 = 0x53B630; // segment:select
@4860x53b7d0 = 0x53B7D0; // segment:select
@4660x53b6f0 = 0x53B6F0; // segment:select
@3210x53b640 = 0x53B640; // segment:select
edit_pl_init0x534a80 = 0x534A80;
@8490x53b8e0 = 0x53B8E0; // segment:select
@5040x53b8a0 = 0x53B8A0; // segment:select
@4850x53b7b0 = 0x53B7B0; // segment:select
@4650x53b6d8 = 0x53B6D8; // segment:select
@3220x53b658 = 0x53B658; // segment:select
@4640x53b6c0 = 0x53B6C0; // segment:select
disp_cont_spr0x537460 = 0x537460;
@4690x53b770 = 0x53B770; // segment:select
@4880x53b800 = 0x53B800; // segment:select
@4680x53b740 = 0x53B740; // segment:select
ed_view_set0x535f30 = 0x535F30;
cmn_mongon_look_sub0x5384a0 = 0x5384A0;
@610x53b4c0 = 0x53B4C0;
disp_check0x535620 = 0x535620;
@600x53b4a0 = 0x53B4A0;
@630x53b510 = 0x53B510;
@620x53b4e0 = 0x53B4E0;
edit_pl_init_new0x534820 = 0x534820;
@650x53b560 = 0x53B560;
@640x53b540 = 0x53B540;
@670x53b5b0 = 0x53B5B0;
@660x53b580 = 0x53B580;
@690x53b5e8 = 0x53B5E8;
@680x53b5d0 = 0x53B5D0;
disp_edit_spr0x534e30 = 0x534E30;
check_mongon0x538840 = 0x538840;
arrow_disp0x534c20 = 0x534C20;
cmn_mongon_look0x538430 = 0x538430;
ed_cancel_se0x5351b0 = 0x5351B0;
sample_col0x538770 = 0x538770;
name_str_check0x5355a0 = 0x5355A0;
ed_decide_se0x535190 = 0x535190;
decide_chr_tbl0x5387d0 = 0x5387D0;
edit_menu_msg0x538740 = 0x538740;
edit_trans0x536670 = 0x536670;
user_load0x5363d0 = 0x5363D0;
disp_color0x535a90 = 0x535A90;
decide_chr_set0x5349d0 = 0x5349D0;
@13510x53b940 = 0x53B940;
@4710x53b7a8 = 0x53B7A8;
@4700x53b7a0 = 0x53B7A0;
disp_save_info0x5358c0 = 0x5358C0;
@6570x53b8d0 = 0x53B8D0;
@11160x53b910 = 0x53B910;
@6560x53b8c8 = 0x53B8C8;
disp_edinfo0x535310 = 0x535310;
view_type0x538760 = 0x538760;
help_mess0x5387b0 = 0x5387B0;
@6580x53b8d8 = 0x53B8D8;
cont_trans0x5374a0 = 0x5374A0;
param_change0x536280 = 0x536280;
@3980x53b680 = 0x53B680;
arr_id_tbl0x538828 = 0x538828;
edit_msg0x538700 = 0x538700;
param_change_sub20x5361a0 = 0x5361A0;
@3190x53b628 = 0x53B628;
cmn_mongon_check_sub0x538040 = 0x538040;
disp_mc0x5359b0 = 0x5359B0;
@710x53b5f8 = 0x53B5F8;
@700x53b5f0 = 0x53B5F0;
@730x53b608 = 0x53B608;
color_mess0x5387c0 = 0x5387C0;
@720x53b600 = 0x53B600;
@750x53b620 = 0x53B620;
cmn_mongon_set0x538540 = 0x538540;
ed_decide_se20x5351a0 = 0x5351A0;
@740x53b618 = 0x53B618;
@570x53b420 = 0x53B420;
cmn_mongon_check_filter0x5382b0 = 0x5382B0;
@590x53b470 = 0x53B470;
@580x53b450 = 0x53B450;
ed_color_sel0x5364c0 = 0x5364C0;
param_change_sub0x5360d0 = 0x5360D0;
// _select_static_init_end0x53b980 = 0x53B980;
// _select_bss_start0x53b980 = 0x53B980;
// _select_bss_end0x53b980 = 0x53B980;
// _select_segment_start0x533980 = 0x533980;
Edit_task0x5367f0 = 0x5367F0;
title_disp0x5341e0 = 0x5341E0;
Demo_task0x533be0 = 0x533BE0;
NG_name_chk0x538030 = 0x538030;
Init_task0x533a00 = 0x533A00;
// _select_bss_size0x0 = 0x0;
// _select_text_start0x5339c0 = 0x5339C0;
// _select_data_start0x538700 = 0x538700;
user_data_copy0x534650 = 0x534650;
// _select_text_end0x538700 = 0x538700;
_select_data_size0x3280 = 0x3280;
// _select_segment_end0x53b980 = 0x53B980;
Cont_task0x5375f0 = 0x5375F0;
_select_text_size0x4d40 = 0x4D40;
// Vu1Code_000a_0004_PROG0x0 = 0x0;
// _select_data_end0x53b980 = 0x53B980;
// _select_static_init0x53b980 = 0x53B980;
```
--------------------------------------------------------------------------------
/tools/packer.py:
--------------------------------------------------------------------------------
```python
import sys
from datetime import datetime
from pathlib import Path
filepos = 0;
bin = b''
manifest = []
def readUint():
global bin, filepos
value = int.from_bytes(bin[filepos:filepos+4], byteorder='little', signed=False)
filepos += 4
return value
def readUshort():
global bin, filepos
value = int.from_bytes(bin[filepos:filepos+2], byteorder='little', signed=False)
filepos += 2
return value
def melt(filebin):
bitcounter = 0
newbuf = []
binpos = 0
run = 0
while(True):
if bitcounter == 0 :
bitcounter = 0x8000
run = int.from_bytes(filebin[binpos:binpos+2], byteorder='little', signed=False)
binpos += 2
if run & bitcounter == 0:
newbuf.append(filebin[binpos])
newbuf.append(filebin[binpos+1])
binpos += 2
else:
offset = int.from_bytes(filebin[binpos:binpos+2], byteorder='little', signed=False)
binpos += 2
count = offset >> 11
if count == 0 :
count = int.from_bytes(filebin[binpos:binpos+2], byteorder='little', signed=False)
binpos += 2
else:
offset = (offset & 0x7FF)*2
if offset == 0:
if count == 0:
break
for c in range(count):
newbuf.append(0)
newbuf.append(0)
else:
for c in range(count):
newbuf.append(newbuf[len(newbuf)-offset])
newbuf.append(newbuf[len(newbuf)-offset])
bitcounter >>= 1
return newbuf
def unpack(file, dir):
global bin, filepos
filelist = []
print(f"unpacking {file}")
with open(file, 'rb') as binfile:
bin = binfile.read()
#do the shit
#read the magic to verify it's a regular AFS1 archive
magic = bin[0:4].decode('utf-8')
filepos += 4
print(magic)
if magic != "AFS\x00":
print(f"incorrect magic: {bin[0:4]}")
return
filecount = readUint()
print(f"file count: {filecount}")
#then for the filecount, read pointer and size!
for f in range(filecount):
fileoff = readUint()
filesize = readUint()
#print(f"{f}: off {fileoff:X}, size {filesize:X}, readpos {filepos:X}")
filelist.append([fileoff, filesize])
#now fetch the attributes table
filepos = filelist[0][0]-8
attpos = readUint()
attsize = readUint()
print(f"attributes info: pos {attpos:X} size {attsize:X}")
if attpos == len(bin):
print("no attributes table!") #MHDOS does this for the top-level asset AFS (DATA.BIN)
else:
filepos = attpos
for f in range(filecount):
filename = bin[filepos:filepos+0x20].decode('utf-8').rstrip('\x00')
filepos += 0x20
filemod = datetime(readUshort(), readUshort(), readUshort(), readUshort(), readUshort(), readUshort())
filesize = readUint()
#print(f"{f:X}: {filename} {filelist[f][1]:X}")
if filesize != filelist[f][1]:
print(f"file {filename} has size mismatch: {filelist[f][1]:X} in header vs {filesize:X} in attrs!")
filelist[f].append(filename)
filelist[f].append(filemod)
for f in range(filecount):
filename = f"{f}.bin"
if len(filelist[f]) > 2:
filename = filelist[f][2]
#filepath = dir + filename
#check the list to grab final filepath, also check if we need to decompress
newfile = bin[filelist[f][0]:filelist[f][0]+filelist[f][1]]
compressed = True
#some heuristics to start off with
#compressed will always have 4 trailing 00 bytes
if newfile[len(newfile)-4:len(newfile)] != b'\x00\x00\x00\x00':
candidate = False
asci = True
#compressed will never have a valid magic(?)
for c in range(3):
if (newfile[c] < 0x20) or (newfile[c] > 0x7E):
asci = False
break
if asci:
compressed = False
#print(f"{f}: {filename} {compressed}")
folder = ""
if len(manifest) != 0:
mrow = manifest[f].split(" ")
if mrow[0] != filename:
print(f"error: name mismatch at file {f}: manifest \"{mrow[0]}\" vs AFS \"{filename}\"")
#print(filename.encode())
#print(mrow[0].encode())
return
elif (mrow[1] == "Y") != compressed:
#heuristics failed, log this for investigation
print(f"warning: file {filename} manifest ({mrow[1]}) mismatches compress heuristic ({compressed})")
#and flip to match manifest, we trust manifest
compressed = not compressed
folder = mrow[2]
filepath = dir + folder + filename
#print(filepath)
pp = Path(dir + folder)
if not pp.exists():
pp.mkdir(parents=True)
if compressed:
newfile = bytes(melt(newfile))
#print(f"writing {filepath}")
with open(filepath, 'wb') as outfile:
outfile.write(newfile)
if __name__ == "__main__":
if len(sys.argv) == 5: #packer -u AFS_DATA.AFS assets/AFS/ tools/AFS_files.txt
with open(sys.argv[4]) as m:
manifest = [line.rstrip() for line in m]
if len(sys.argv) >= 4: #packer -u AFS_DATA.AFS assets/AFS/
if(sys.argv[1] == "-u"):
print(f"unpacking {sys.argv[2]} to {sys.argv[3]}")
unpack(sys.argv[2], sys.argv[3])
#go through the table, unpacking and then decompressing as needed. generate a txt file of the files in order with a y or n based on if it was compressed, for repacking purposes? also maybe original filesize, to see if compression is a simple pattern?
elif(sys.argv[1] == "-p"):
print(f"packing {sys.argv[3]} to {sys.argv[2]}")
#if the list exists, use that. else, just grab all the files and stuff!
else:
print("insufficient args. -flag archive folder")
```
--------------------------------------------------------------------------------
/config/game_syms_auto.txt:
--------------------------------------------------------------------------------
```
Eft_blood_rgb0x2e6040 = 0x2E6040;
Eft_blood_rgb__Green = 0x2E6041;
Eft_blood_rbg__Blue = 0x2E6042;
Eft_kemuri_rgb0x2e6060 = 0x2E6060;
Eft_kemuri_rgb__Green = 0x2E6061;
Eft_kemuri_rgb__Blue = 0x2E6062;
Eft_kemuri_rgb__Alpha = 0x2E6063;
Eft_fish_rgb0x2e6090 = 0x2E6090;
Eft_hire_rgb0x2e60b0 = 0x2E60B0;
stage_start_pos0x2f2620 = 0x2F2620;
stage_start_pos__Y = 0x2F2624;
stage_start_pos__Z = 0x2F2628;
stage_hate_add_tbl0x2f6160 = 0x2F6160;
Eft_stg_type0x2f62c0 = 0x2F62C0;
stg_eft_mdl_no0x2f6c00 = 0x2F6C00;
Snd_em_id_conv_tbl0x32d9c0 = 0x32D9C0;
em_cmd0_tbl0x32da00 = 0x32DA00;
em_cmd1_tbl0x32da90 = 0x32DA90;
em_cmd2_tbl0x32db20 = 0x32DB20;
em_cmd3_tbl0x32dbb0 = 0x32DBB0;
em_cmd4_tbl0x32dc40 = 0x32DC40;
em_cmd5_tbl0x32dcd0 = 0x32DCD0;
em_cmd6_tbl0x32dd60 = 0x32DD60;
Shell_data__1 = 0x334F41;
Gun_data__2 = 0x3367B2;
Gun_Grow_Up_DATA0x336bc0 = 0x336BC0;
Item_data0x3396d0 = 0x3396D0;
eft17_type11_lag_tbl0x387d50 = 0x387D50;
eft17_type15_lag_tbl0x387d60 = 0x387D60;
eft04_type5_fade_data0x387d78 = 0x387D78;
eft10_num0x387d94 = 0x387D94;
eft10_all_time0x387d98 = 0x387D98;
eft10_param0x387d9c = 0x387D9C;
eft10_time0x387da0 = 0x387DA0;
meat_dmg_tbl0x387da8 = 0x387DA8;
rotz770x387db0 = 0x387DB0;
eft15_type0_lag0x387dc8 = 0x387DC8;
eft16_time_tbl30x387de8 = 0x387DE8;
eft19_model_no0x387df8 = 0x387DF8;
kuituki_time_tbl0x387e00 = 0x387E00;
em01_rail_add0x388250 = 0x388250;
em01_rail_half_add0x388258 = 0x388258;
fly_adjy_hosei_tbl0x388500 = 0x388500;
hagi_tbl0x388508 = 0x388508;
hagi_tbl0x3886b0 = 0x3886B0;
hire_start_timer_tbl00x3887c8 = 0x3887C8;
hire_start_timer_tbl10x3887d0 = 0x3887D0;
hire_remove_timer_tbl00x3887d8 = 0x3887D8;
hire_remove_timer_tbl10x3887e0 = 0x3887E0;
hire_down_angx0x3887e8 = 0x3887E8;
st51_ang_tbl0x388c70 = 0x388C70;
st53_ang_tbl0x388c78 = 0x388C78;
st58_dir0x388ce8 = 0x388CE8;
st64_dir0x388cf0 = 0x388CF0;
st75_dir0x388cf8 = 0x388CF8;
em17_rail_add0x388e10 = 0x388E10;
em17_rail_half_add0x388e18 = 0x388E18;
em18_act_tbl0x388e20 = 0x388E20;
em19_scale_tbl0x388e80 = 0x388E80;
em20_rail_add0x388ee0 = 0x388EE0;
em20_rail_half_add0x388ee8 = 0x388EE8;
hire_start_timer_tbl00x3893d0 = 0x3893D0;
hire_start_timer_tbl10x3893d8 = 0x3893D8;
hire_remove_timer_tbl00x3893e0 = 0x3893E0;
hire_remove_timer_tbl10x3893e8 = 0x3893E8;
hire_down_angx0x3893f0 = 0x3893F0;
em27_act_tbl0x3895b0 = 0x3895B0;
st11_id_tbl0x389a48 = 0x389A48;
st11_mdl_no0x389a50 = 0x389A50;
st12_id_tbl0x389a58 = 0x389A58;
st12_mdl_no0x389a60 = 0x389A60;
st25_id_tbl0x389a68 = 0x389A68;
st25_mdl_no0x389a70 = 0x389A70;
st25_rot_tbl0x389a78 = 0x389A78;
st28_id_tbl0x389a80 = 0x389A80;
st28_mdl_no0x389a88 = 0x389A88;
st30_id_tbl0x389a90 = 0x389A90;
st30_mdl_no0x389a98 = 0x389A98;
set00_st04_dir_tbl0x389aa0 = 0x389AA0;
set00_st26_dir_tbl0x389aa4 = 0x389AA4;
set00_st26_scale_tbl0x389aa8 = 0x389AA8;
set00_st41_dir_tbl0x389ab0 = 0x389AB0;
set00_st41_dir_tbl__2 = 0x389AB2;
set00_st42_dir_tbl0x389ab4 = 0x389AB4;
set00_st42_scale_tbl0x389ab8 = 0x389AB8;
set00_st43_dir_tbl0x389ac0 = 0x389AC0;
st00_mdl_tbl0x389ac8 = 0x389AC8;
st01_mdl_tbl0x389ad0 = 0x389AD0;
st04_mdl_tbl0x389ad8 = 0x389AD8;
set14_st00_mask_tbl0x389ae0 = 0x389AE0;
set14_st01_mask_tbl0x389ae8 = 0x389AE8;
set14_st03_mask_tbl0x389af0 = 0x389AF0;
set14_st04_mask_tbl0x389af8 = 0x389AF8;
set14_st42_mask_tbl0x389b00 = 0x389B00;
set14_st51_mask_tbl0x389b08 = 0x389B08;
set14_st52_mask_tbl0x389b10 = 0x389B10;
set14_st53_mask_tbl0x389b18 = 0x389B18;
st01_parts_id_tbl0x389b20 = 0x389B20;
set19_s11_mask_tbl0x389b28 = 0x389B28;
set19_s12_mask_tbl0x389b30 = 0x389B30;
set19_s21_mask_tbl0x389b38 = 0x389B38;
set19_s28_mask_tbl0x389b40 = 0x389B40;
set19_s30_mask_tbl0x389b48 = 0x389B48;
set19_s34_mask_tbl0x389b50 = 0x389B50;
set19_s52_mask_tbl0x389b58 = 0x389B58;
set19_s54_mask_tbl0x389b60 = 0x389B60;
set19_s57_mask_tbl0x389b68 = 0x389B68;
set19_s61_mask_tbl0x389b70 = 0x389B70;
set19_s67_mask_tbl0x389b78 = 0x389B78;
set19_s73_s75_mask_tbl0x389b80 = 0x389B80;
set20_model_no0x389b88 = 0x389B88;
shell16_tbl0x389b8c = 0x389B8C;
shell01_tbl0x389b90 = 0x389B90;
shell02_tbl0x389b94 = 0x389B94;
shell03_tbl0x389ba0 = 0x389BA0;
shell04_tbl0x389ba4 = 0x389BA4;
shell05_tbl0x389ba8 = 0x389BA8;
shell06_tbl0x389bac = 0x389BAC;
sleeve_param_tbl00x389bd0 = 0x389BD0;
shell08_tbl0x389bd8 = 0x389BD8;
rotx_em010x389be0 = 0x389BE0;
roty_em010x389be8 = 0x389BE8;
shell09_tbl0x389bf8 = 0x389BF8;
shell10_body_tbl0x389bfc = 0x389BFC;
shell11_tbl0x389c00 = 0x389C00;
shell12_tbl0x389c08 = 0x389C08;
shell13_tbl0x389c0c = 0x389C0C;
item_chr_tbl0x389c10 = 0x389C10;
shell15_tbl0x389c14 = 0x389C14;
shell00_tbl0x389c18 = 0x389C18;
shell17_tbl0x389c1c = 0x389C1C;
shell18_tbl0x389c20 = 0x389C20;
shell19_tbl0x389c24 = 0x389C24;
shell20_tbl0x389c28 = 0x389C28;
shell21_tbl0x389c2c = 0x389C2C;
shell22_tbl0x389c30 = 0x389C30;
shell22_st25_taihou_ang0x389c34 = 0x389C34;
st11_dir_tbl0x389c38 = 0x389C38;
st28_dir_tbl0x389c40 = 0x389C40;
st30_dir_tbl0x389c48 = 0x389C48;
shell23_tbl0x389c50 = 0x389C50;
eft10_index0x38a720 = 0x38A720;
eft10_time_tbl0x38a724 = 0x38A724;
eft15_type2_lag0x38a728 = 0x38A728;
set19_s48_mask_tbl0x38a7d8 = 0x38A7D8;
shell22_st12_taihou_ang0x38a7e0 = 0x38A7E0;
eft_work0x390b10 = 0x390B10;
User_data0x3c6fc0 = 0x3C6FC0;
em_yobi_stack0x3c7800 = 0x3C7800;
senko_stack0x3c7900 = 0x3C7900;
smoke_stack0x3c7980 = 0x3C7980;
smell_stack0x3c7a00 = 0x3C7A00;
stage_work0x3d8230 = 0x3D8230;
em_work0x3d82a0 = 0x3D82A0;
player_work0x3e4bf0 = 0x3E4BF0;
D_3E4C9C = 0x3E4C9C;
D_3E5326 = 0x3E5326;
D_3E547C = 0x3E547C;
mat_list0x3e9bf0 = 0x3E9BF0;
mat_palett0x3eac70 = 0x3EAC70;
ot30x3f1df0 = 0x3F1DF0;
ot10x3f1e50 = 0x3F1E50;
ot00x3f1ed0 = 0x3F1ED0;
fov0x3f1fd0 = 0x3F1FD0;
rview_matY0x3f2020 = 0x3F2020;
rview_mat0x3f2060 = 0x3F2060;
D_3F2080 = 0x3F2080;
D_3F2090 = 0x3F2090;
view_mat0x3f20a0 = 0x3F20A0;
game_w0x3f33f0 = 0x3F33F0;
D_3F3470 = 0x3F3470;
D_3F3498 = 0x3F3498;
D_3F35F8 = 0x3F35F8;
D_3F3608 = 0x3F3608;
D_006422B1 = 0x6422B1;
D_006422B2 = 0x6422B2;
D_006422B3 = 0x6422B3;
D_00645FC1 = 0x645FC1;
D_00645FC2 = 0x645FC2;
D_00645FD1 = 0x645FD1;
D_00645FD2 = 0x645FD2;
D_00645FE1 = 0x645FE1;
D_00645FE2 = 0x645FE2;
D_00645FF1 = 0x645FF1;
D_00645FF2 = 0x645FF2;
D_00646001 = 0x646001;
D_00646002 = 0x646002;
D_0065B0DE = 0x65B0DE;
D_0065B0DF = 0x65B0DF;
D_00668442 = 0x668442;
D_006849E7 = 0x6849E7;
D_00684A2A = 0x684A2A;
D_00684A31 = 0x684A31;
```
--------------------------------------------------------------------------------
/config/undefined_funcs_auto.txt:
--------------------------------------------------------------------------------
```
func_00171308 = 0x171308;
func_00171448 = 0x171448;
func_00171568 = 0x171568;
em_eye_search_set0x533a00 = 0x533A00;
em_search_data_set0x5341d0 = 0x5341D0;
user_data_copy0x534650 = 0x534650;
em_neck_move0x534680 = 0x534680;
disp_edinfo0x535310 = 0x535310;
yn_set_main0x535340 = 0x535340;
smell_ck0x5355a0 = 0x5355A0;
em_type_act_set0x535a10 = 0x535A10;
em_act_set0x535d20 = 0x535D20;
em_ikari_add0x536110 = 0x536110;
ikari_flag_set0x536320 = 0x536320;
Em_Damage_Hate_Set0x5363c0 = 0x5363C0;
Em_Hate_Ck0x536530 = 0x536530;
em_range_set0x536bc0 = 0x536BC0;
target_kind_set0x537620 = 0x537620;
pl_ninshiki_ck0x537f10 = 0x537F10;
kehai_set0x537fe0 = 0x537FE0;
kehai_ck0x5383c0 = 0x5383C0;
em_cancel_act_ck0x5384f0 = 0x5384F0;
em_area_move_init0x538580 = 0x538580;
Stage_Hate_Add0x538850 = 0x538850;
em_pl_pos_set0x538960 = 0x538960;
em_escape_action_ck0x538a70 = 0x538A70;
Em_Unko_Smoke_Ck0x539270 = 0x539270;
Em_Senko_Ck0x539340 = 0x539340;
Em_Master_Change0x5395f0 = 0x5395F0;
Ikari_Data_Set0x539c40 = 0x539C40;
Em_Taisei_Set0x539c90 = 0x539C90;
em_wall_bit_set0x53a190 = 0x53A190;
em_tsuushin_set0x53a2b0 = 0x53A2B0;
em_hungry_add0x53a630 = 0x53A630;
em_def_attack_set0x53b080 = 0x53B080;
em_def_defence_set0x53b310 = 0x53B310;
Bdora_hp_ck0x53b5c0 = 0x53B5C0;
em_hagitori_lv_up0x53b6d0 = 0x53B6D0;
em_tail_off_sub0x53b8a0 = 0x53B8A0;
em_niku_eat_set0x53b9c0 = 0x53B9C0;
Eft17_set_ex0x53fdf0 = 0x53FDF0;
Eft05_set0x543690 = 0x543690;
Eft08_set0x544c90 = 0x544C90;
Eft08_set20x544d20 = 0x544D20;
eft11_set0x546860 = 0x546860;
eft12_set0x549200 = 0x549200;
Eft12_set40x5496e0 = 0x5496E0;
eft14_set0x54b7e0 = 0x54B7E0;
Eft14_set20x54b8c0 = 0x54B8C0;
Eft14_set40x54ba40 = 0x54BA40;
Eft15_set0x54d480 = 0x54D480;
Eft16_set0x5508f0 = 0x5508F0;
Eft16_set_impact0x550dd0 = 0x550DD0;
eft00_set0x551790 = 0x551790;
Eft18_set20x5547b0 = 0x5547B0;
Eft21_set0x555020 = 0x555020;
Eft22_set0x555a90 = 0x555A90;
Fish_set0x5589f0 = 0x5589F0;
Eft24_set0x558a80 = 0x558A80;
em_eye_dmg_act_set0x559320 = 0x559320;
em_eye_dmg_reset_act_set0x559d30 = 0x559D30;
Em_Taisei_Ck0x559dc0 = 0x559DC0;
poison_stock_set0x55a440 = 0x55A440;
em_cmd_init0x55b060 = 0x55B060;
em_cmd_reset0x5655d0 = 0x5655D0;
Em_Mode_Chg0x566500 = 0x566500;
em01_init0x566670 = 0x566670;
em01_main0x574080 = 0x574080;
em02_init0x57efa0 = 0x57EFA0;
em02_main0x57f4f0 = 0x57F4F0;
em03_init0x5873d0 = 0x5873D0;
em03_main0x587780 = 0x587780;
em04_init0x58b850 = 0x58B850;
em04_main0x58e070 = 0x58E070;
em07_init0x58f8b0 = 0x58F8B0;
SetDialogData0x591be0 = 0x591BE0;
em07_main0x592fe0 = 0x592FE0;
LBDisp_NowLoading20x593cb0 = 0x593CB0;
em08_init0x59a2c0 = 0x59A2C0;
Lbs_load0x59db00 = 0x59DB00;
em08_main0x5a2de0 = 0x5A2DE0;
em09_init0x5a7f70 = 0x5A7F70;
Em09_item_sub0x5a8170 = 0x5A8170;
em09_main0x5ab1f0 = 0x5AB1F0;
em09_material_sub0x5aca60 = 0x5ACA60;
_cnet_Return_CallBack0x5ad1b0 = 0x5AD1B0;
__cnetSub_Set_BgProcess0x5ad280 = 0x5AD280;
__cnetSub_Get_RestBgWork0x5ad500 = 0x5AD500;
em10_init0x5ad5a0 = 0x5AD5A0;
cnLBS_RecvData0x5ad620 = 0x5AD620;
GetRecvData80x5adb60 = 0x5ADB60;
GetRecvData320x5adb90 = 0x5ADB90;
GetRecvDataOption30x5adc70 = 0x5ADC70;
SetSendCommand0x5adee0 = 0x5ADEE0;
SetSendCommandLen0x5ae090 = 0x5AE090;
SetSendData80x5ae0b0 = 0x5AE0B0;
SetSendData320x5ae120 = 0x5AE120;
Write_Socket0x5ae300 = 0x5AE300;
em10_main0x5aeab0 = 0x5AEAB0;
em12_init0x5af530 = 0x5AF530;
cnWrap_InitWork0x5b2330 = 0x5B2330;
cpn_GetCNData0x5b25b0 = 0x5B25B0;
cnWrap_BgmStop0x5b2620 = 0x5B2620;
em12_main0x5b3a50 = 0x5B3A50;
Lb_Menu_Init0x5b3d70 = 0x5B3D70;
Lb_menu_exit0x5b3e60 = 0x5B3E60;
Lb_menu_move_Core0x5b3ed0 = 0x5B3ED0;
DispLobbyMenu0x5b4980 = 0x5B4980;
Disp_lb_menu0x5b4b20 = 0x5B4B20;
Lb_get_player_id0x5b4d30 = 0x5B4D30;
internet_connect_000x5b52a0 = 0x5B52A0;
em14_init0x5b52d0 = 0x5B52D0;
disconnect0x5b5380 = 0x5B5380;
internet_browser0x5b5980 = 0x5B5980;
internet_connect_100x5b5c50 = 0x5B5C50;
internet_server_select0x5b5d10 = 0x5B5D10;
internet_to_modem0x5b69e0 = 0x5B69E0;
internet_disconnect0x5b6f20 = 0x5B6F20;
internet_connect_minimum_cleanup0x5b7020 = 0x5B7020;
internet_lobby_act0x5b70d0 = 0x5B70D0;
Lbc_set_prim0x5b7460 = 0x5B7460;
lbc_text_lobby_trans0x5b78f0 = 0x5B78F0;
em14_main0x5bbc70 = 0x5BBC70;
Lbs_InRoomCheck0x5bd520 = 0x5BD520;
net_ToNetworkLobby0x5c0680 = 0x5C0680;
em15_init0x5c2ac0 = 0x5C2AC0;
Lobby_main0x5c4d40 = 0x5C4D40;
Lb_get_quest_str20x5c5e20 = 0x5C5E20;
em15_main0x5caea0 = 0x5CAEA0;
Lb_send_chat_plus0x5cb100 = 0x5CB100;
Lobby_quest_print0x5cb310 = 0x5CB310;
em16_init0x5d0610 = 0x5D0610;
Clear_lobby_ram0x5d58c0 = 0x5D58C0;
em16_main0x5d6c30 = 0x5D6C30;
Lb_get_pl_stat20x5d8370 = 0x5D8370;
Local_main0x5d8680 = 0x5D8680;
em17_init0x5d9f20 = 0x5D9F20;
em17_main0x5e1530 = 0x5E1530;
BS_DispDialog0x5e5d20 = 0x5E5D20;
BS_EraseDialog0x5e5d30 = 0x5E5D30;
em18_init0x5e6c80 = 0x5E6C80;
em18_main0x5e74e0 = 0x5E74E0;
em19_init0x5e7920 = 0x5E7920;
em19_main0x5eaa40 = 0x5EAA40;
em20_init0x5eba50 = 0x5EBA50;
em20_main0x5f6920 = 0x5F6920;
em20_material_sub0x5fcbb0 = 0x5FCBB0;
em21_init0x600010 = 0x600010;
em21_main0x607ce0 = 0x607CE0;
Lb_ItemBox_init0x609750 = 0x609750;
Disp_lb_item_box0x60ce50 = 0x60CE50;
em27_init0x60d450 = 0x60D450;
Eft25_set0x60e2b0 = 0x60E2B0;
Eft25_set_pos0x60e330 = 0x60E330;
em27_main0x612430 = 0x612430;
em29_init0x6140b0 = 0x6140B0;
em29_main0x6145d0 = 0x6145D0;
em33_init0x6147d0 = 0x6147D0;
em33_main0x614b20 = 0x614B20;
set09_set0x618ca0 = 0x618CA0;
Set09_set_ex0x618f00 = 0x618F00;
Set03_set0x61ed10 = 0x61ED10;
Set04_set0x61f2c0 = 0x61F2C0;
Set05_set0x61f7e0 = 0x61F7E0;
set07_set0x6206d0 = 0x6206D0;
set08_set0x620b70 = 0x620B70;
set00_set0x6213f0 = 0x6213F0;
Set10_set0x621c70 = 0x621C70;
set11_set0x622180 = 0x622180;
set14_set0x6229b0 = 0x6229B0;
set15_set0x624050 = 0x624050;
set16_set0x625120 = 0x625120;
set17_set0x625630 = 0x625630;
Set18_set0x625bb0 = 0x625BB0;
Set19_set0x6263b0 = 0x6263B0;
Set20_set0x626e70 = 0x626E70;
Set22_set0x627840 = 0x627840;
shell01_set20x628690 = 0x628690;
shell01_set30x628750 = 0x628750;
shell03_set0x628fb0 = 0x628FB0;
shell04_set20x629c20 = 0x629C20;
shell05_set30x62a2c0 = 0x62A2C0;
shell06_set0x62a6c0 = 0x62A6C0;
Shell10_set0x633b50 = 0x633B50;
Shell12_set0x634460 = 0x634460;
shell00_set0x6362b0 = 0x6362B0;
Shell22_set0x637f60 = 0x637F60;
Pl_piyo_ck0x639dd0 = 0x639DD0;
Pl_poison_add0x639df0 = 0x639DF0;
Pl_die_set0x639f20 = 0x639F20;
Guard_dir_ck0x639fc0 = 0x639FC0;
Pl_damage_sub0x63a260 = 0x63A260;
Tutorial_prog0x63aca0 = 0x63ACA0;
Tutorial_quest_ck0x63af40 = 0x63AF40;
Tutorial_flag_set0x63afa0 = 0x63AFA0;
SonchoInit0x63b020 = 0x63B020;
SonchoMove0x63b0c0 = 0x63B0C0;
DispTutorial0x63b470 = 0x63B470;
InetDNAS2PersonalGetError0xa2fbc0 = 0xA2FBC0;
InetDNAS2PersonalEncode0xa2fbd0 = 0xA2FBD0;
InetDNAS2PersonalDecode0xa2fd30 = 0xA2FD30;
InetDNAS2ConnectGetError0xa769b0 = 0xA769B0;
InetDNAS2ConnectNetStart0xa769c0 = 0xA769C0;
InetDNAS2ConnectInstall0xa769d0 = 0xA769D0;
```
--------------------------------------------------------------------------------
/config/main_shims_addrs.txt:
--------------------------------------------------------------------------------
```
//overlay shims
//game
em_eye_search_set0x533a00 = 0x533A00;
em_search_data_set0x5341d0 = 0x5341D0;
em_neck_move0x534680 = 0x534680;
smell_ck0x5355a0 = 0x5355A0;
em_type_act_set0x535a10 = 0x535A10;
em_act_set0x535d20 = 0x535D20;
em_ikari_add0x536110 = 0x536110;
ikari_flag_set0x536320 = 0x536320;
Em_Damage_Hate_Set0x5363c0 = 0x5363C0;
Em_Hate_Ck0x536530 = 0x536530;
em_range_set0x536bc0 = 0x536BC0;
target_kind_set0x537620 = 0x537620;
pl_ninshiki_ck0x537f10 = 0x537F10;
kehai_set0x537fe0 = 0x537FE0;
kehai_ck0x5383c0 = 0x5383C0;
em_cancel_act_ck0x5384f0 = 0x5384F0;
em_area_move_init0x538580 = 0x538580;
Stage_Hate_Add0x538850 = 0x538850;
em_pl_pos_set0x538960 = 0x538960;
em_escape_action_ck0x538a70 = 0x538A70;
Em_Unko_Smoke_Ck0x539270 = 0x539270;
Em_Senko_Ck0x539340 = 0x539340;
Em_Master_Change0x5395f0 = 0x5395F0;
Ikari_Data_Set0x539c40 = 0x539C40;
Em_Taisei_Set0x539c90 = 0x539c90;
em_wall_bit_set0x53a190 = 0x53a190;
em_tsuushin_set0x53a2b0 = 0x53A2B0;
em_hungry_add0x53a630 = 0x53A630;
em_def_attack_set0x53b080 = 0x53B080;
em_def_defence_set0x53b310 = 0x53B310;
Bdora_hp_ck0x53b5c0 = 0x53B5C0;
em_hagitori_lv_up0x53b6d0 = 0x53B6D0;
em_tail_off_sub0x53b8a0 = 0x53B8A0;
em_niku_eat_set0x53b9c0 = 0x53B9C0;
Eft17_set_ex0x53fdf0 = 0x53FDF0;
Eft05_set0x543690 = 0x543690;
Eft08_set0x544c90 = 0x544C90;
Eft08_set20x544d20 = 0x544D20;
eft11_set0x546860 = 0x546860;
eft12_set0x549200 = 0x549200;
Eft12_set40x5496e0 = 0x5496E0;
eft14_set0x54b7e0 = 0x54B7E0;
Eft14_set20x54b8c0 = 0x54B8C0;
Eft14_set40x54ba40 = 0x54BA40;
Eft15_set0x54d480 = 0x54D480;
Eft16_set0x5508f0 = 0x5508F0;
Eft16_set_impact0x550dd0 = 0x550DD0;
eft00_set0x551790 = 0x551790;
Eft18_set20x5547b0 = 0x5547B0;
Eft21_set0x555020 = 0x555020;
Eft22_set0x555a90 = 0x555a90;
Fish_set0x5589f0 = 0x5589F0;
Eft24_set0x558a80 = 0x558A80;
em_eye_dmg_act_set0x559320 = 0x559320;
em_eye_dmg_reset_act_set0x559d30 = 0x559D30;
Em_Taisei_Ck0x559dc0 = 0x559DC0;
poison_stock_set0x55a440 = 0x55A440;
em_cmd_init0x55b060 = 0x55b060;
em_cmd_reset0x5655d0 = 0x5655D0;
Em_Mode_Chg0x566500 = 0x566500;
em01_init0x566670 = 0x566670;
em01_main0x574080 = 0x574080;
em02_init0x57efa0 = 0x57efa0;
em02_main0x57f4f0 = 0x57F4F0;
em03_init0x5873d0 = 0x5873d0;
em03_main0x587780 = 0x587780;
em04_init0x58b850 = 0x58b850;
em04_main0x58e070 = 0x58E070;
em07_init0x58f8b0 = 0x58f8b0;
em07_main0x592fe0 = 0x592FE0;
em08_init0x59a2c0 = 0x59a2c0;
em08_main0x5a2de0 = 0x5A2DE0;
em09_init0x5a7f70 = 0x5a7f70;
Em09_item_sub0x5a8170 = 0x5A8170;
em09_main0x5ab1f0 = 0x5AB1F0;
em09_material_sub0x5aca60 = 0x5aca60;
em10_init0x5ad5a0 = 0x5ad5a0;
em10_main0x5aeab0 = 0x5AEAB0;
em12_init0x5af530 = 0x5af530;
em12_main0x5b3a50 = 0x5B3A50;
em14_init0x5b52d0 = 0x5b52d0;
em14_main0x5bbc70 = 0x5BBC70;
em15_init0x5c2ac0 = 0x5c2ac0;
em15_main0x5caea0 = 0x5CAEA0;
em16_init0x5d0610 = 0x5d0610;
em16_main0x5d6c30 = 0x5D6C30;
em17_init0x5d9f20 = 0x5d9f20;
em17_main0x5e1530 = 0x5E1530;
em18_init0x5e6c80 = 0x5e6c80;
em18_main0x5e74e0 = 0x5E74E0;
em19_init0x5e7920 = 0x5e7920;
em19_main0x5eaa40 = 0x5EAA40;
em20_init0x5eba50 = 0x5eba50;
em20_main0x5f6920 = 0x5F6920;
em20_material_sub0x5fcbb0 = 0x5fcbb0;
em21_init0x600010 = 0x600010;
em21_main0x607ce0 = 0x607CE0;
em27_init0x60d450 = 0x60D450;
em27_main0x612430 = 0x612430;
em29_init0x6140b0 = 0x6140B0;
em29_main0x6145d0 = 0x6145D0;
em33_init0x6147d0 = 0x6147D0;
em33_main0x614b20 = 0x614B20;
set09_set0x618ca0 = 0x618CA0;
Set09_set_ex0x618f00 = 0x618F00;
Set03_set0x61ed10 = 0x61ED10;
Set04_set0x61f2c0 = 0x61F2C0;
Set05_set0x61f7e0 = 0x61F7E0;
set07_set0x6206d0 = 0x6206D0;
set08_set0x620b70 = 0x620b70;
set00_set0x6213f0 = 0x6213f0;
Set10_set0x621c70 = 0x621C70;
set11_set0x622180 = 0x622180;
set14_set0x6229b0 = 0x6229b0;
set15_set0x624050 = 0x624050;
set16_set0x625120 = 0x625120;
set17_set0x625630 = 0x625630;
Set18_set0x625bb0 = 0x625BB0;
Set19_set0x6263b0 = 0x6263B0;
Set20_set0x626e70 = 0x626E70;
Set22_set0x627840 = 0x627840;
shell01_set20x628690 = 0x628690;
shell01_set30x628750 = 0x628750;
shell03_set0x628fb0 = 0x628fb0;
shell04_set20x629c20 = 0x629c20;
shell05_set30x62a2c0 = 0x62A2C0;
shell06_set0x62a6c0 = 0x62A6C0;
Shell10_set0x633b50 = 0x633B50;
Shell12_set0x634460 = 0x634460;
shell00_set0x6362b0 = 0x6362b0;
Shell22_set0x637f60 = 0x637f60;
Pl_piyo_ck0x639dd0 = 0x639dd0;
Pl_poison_add0x639df0 = 0x639DF0;
Pl_die_set0x639f20 = 0x639f20;
Guard_dir_ck0x639fc0 = 0x639FC0;
Pl_damage_sub0x63a260 = 0x63A260;
Tutorial_prog0x63aca0 = 0x63ACA0;
Tutorial_quest_ck0x63af40 = 0x63AF40;
Tutorial_flag_set0x63afa0 = 0x63AFA0;
SonchoInit0x63b020 = 0x63B020;
SonchoMove0x63b0c0 = 0x63b0c0;
DispTutorial0x63b470 = 0x63b470;
//data
enemy_size0x63bb80 = 0x63BB80;
enemy_scale0x63bbb0 = 0x63BBB0;
enemy_shadow_size0x63bc40 = 0x63bc40;
enemy_mahi_size0x63bd60 = 0x63bd60;
em_body_tbl0x63fa10 = 0x63fa10;
em_hit_push_tbl0x63fc50 = 0x63FC50;
em_pos_tbl0x640540 = 0x640540;
em_hungry_tbl0x641240 = 0x641240;
em_thirst_tbl0x641310 = 0x641310;
em_suimin_tbl0x6413b0 = 0x6413B0;
em_ikari_data_tbl0x642040 = 0x642040;
em_atk_mode_timer_tbl0x642160 = 0x642160;
//select
Demo_task0x533be0 = 0x533be0;
user_data_copy0x534650 = 0x534650;
disp_edinfo0x535310 = 0x535310; // allow_duplicated:true
Edit_task0x5367f0 = 0x5367f0;
Cont_task0x5375f0 = 0x5375f0;
//yn
yn_set_init0x535310 = 0x535310; // allow_duplicated:true
yn_set_main0x535340 = 0x535340;
//lobby
SetDialogData0x591be0 = 0x591BE0;
LBDisp_NowLoading20x593cb0 = 0x593CB0;
Lbs_load0x59db00 = 0x59DB00;
_cnet_Return_CallBack0x5ad1b0 = 0x5ad1b0;
__cnetSub_Set_BgProcess0x5ad280 = 0x5ad280;
__cnetSub_Get_RestBgWork0x5ad500 = 0x5ad500;
cnLBS_RecvData0x5ad620 = 0x5AD620;
GetRecvData80x5adb60 = 0x5adb60;
GetRecvData320x5adb90 = 0x5adb90;
GetRecvDataOption30x5adc70 = 0x5adc70;
SetSendCommand0x5adee0 = 0x5adee0;
SetSendCommandLen0x5ae090 = 0x5ae090;
SetSendData80x5ae0b0 = 0x5ae0b0;
SetSendData320x5ae120 = 0x5ae120;
Write_Socket0x5ae300 = 0x5ae300;
cnWrap_InitWork0x5b2330 = 0x5B2330;
cpn_GetCNData0x5b25b0 = 0x5B25B0;
cnWrap_BgmStop0x5b2620 = 0x5b2620;
Lb_Menu_Init0x5b3d70 = 0x5b3d70;
Lb_menu_exit0x5b3e60 = 0x5b3e60;
Lb_menu_move_Core0x5b3ed0 = 0x5b3ed0;
DispLobbyMenu0x5b4980 = 0x5b4980;
Disp_lb_menu0x5b4b20 = 0x5b4b20;
Lb_get_player_id0x5b4d30 = 0x5b4d30;
internet_connect_000x5b52a0 = 0x5B52A0;
disconnect0x5b5380 = 0x5B5380;
internet_browser0x5b5980 = 0x5B5980;
internet_connect_100x5b5c50 = 0x5B5C50;
internet_server_select0x5b5d10 = 0x5B5D10;
internet_to_modem0x5b69e0 = 0x5B69E0;
internet_disconnect0x5b6f20 = 0x5B6F20;
internet_connect_minimum_cleanup0x5b7020 = 0x5B7020;
internet_lobby_act0x5b70d0 = 0x5B70D0;
Lbc_set_prim0x5b7460 = 0x5b7460;
lbc_text_lobby_trans0x5b78f0 = 0x5b78f0;
Lbs_InRoomCheck0x5bd520 = 0x5bd520;
net_ToNetworkLobby0x5c0680 = 0x5C0680;
Lobby_main0x5c4d40 = 0x5C4D40;
Lb_get_quest_str20x5c5e20 = 0x5C5E20;
Lb_send_chat_plus0x5cb100 = 0x5cb100;
Lobby_quest_print0x5cb310 = 0x5cb310;
Clear_lobby_ram0x5d58c0 = 0x5D58C0;
Lb_get_pl_stat20x5d8370 = 0x5d8370;
Local_main0x5d8680 = 0x5D8680;
BS_DispDialog0x5e5d20 = 0x5E5D20;
BS_EraseDialog0x5e5d30 = 0x5E5D30;
Lb_ItemBox_init0x609750 = 0x609750;
Disp_lb_item_box0x60ce50 = 0x60ce50;
Eft25_set0x60e2b0 = 0x60e2b0;
Eft25_set_pos0x60e330 = 0x60E330;
//data
enemy_shadow_size_lb0x610300 = 0x610300;
em_body_tbl_lb0x610370 = 0x610370;
em_hit_push_tbl_lb0x6103a0 = 0x6103A0;
CnetSys_w0x676380 = 0x676380;
D_6763AE = 0x6763ae;
D_677324 = 0x677324;
network_work0x6b2a20 = 0x6b2a20;
client_work0x6dd7e0 = 0x6dd7e0;
D_6E9704 = 0x6e9704;
D_6E9714 = 0x6e9714;
recv_work0x6ea130 = 0x6ea130;
send_work0x6ea740 = 0x6ea740;
lb_player0x6eac80 = 0x6eac80;
//dunno
//dial_jmp_tbl$5400x389f20 = 0x389F20;
//lobby_client_top_menu_jmp$11310x389f28 = 0x389F28;
//bs_init_jmp$5030x389fe8 = 0x389FE8;
//ins
InetDNAS2PersonalGetError0xa2fbc0 = 0xA2FBC0;
InetDNAS2PersonalEncode0xa2fbd0 = 0xA2FBD0;
InetDNAS2PersonalDecode0xa2fd30 = 0xA2FD30;
//net
InetDNAS2ConnectGetError0xa769b0 = 0xA769B0;
InetDNAS2ConnectNetStart0xa769c0 = 0xA769C0;
InetDNAS2ConnectInstall0xa769d0 = 0xA769D0;
```
--------------------------------------------------------------------------------
/config/game_funcs_auto.txt:
--------------------------------------------------------------------------------
```
pull_eft_work0x100ff0 = 0x100FF0;
pull_eft_work20x1010c0 = 0x1010C0;
push_eft_work0x1011c0 = 0x1011C0;
eft_vec_linear0x1013b0 = 0x1013B0;
eft_alpha_linear0x101480 = 0x101480;
eft_rgba_linear0x101510 = 0x101510;
make_mat_srt0x1018c0 = 0x1018C0;
eft_trans_sub0x1019e0 = 0x1019E0;
eft_trans_sub_col0x101b90 = 0x101B90;
eft_trans_sub_opa0x101c60 = 0x101C60;
Eft_rendope_set0x101d10 = 0x101D10;
Kaeru_ck0x101dc0 = 0x101DC0;
eft01_set0x102b00 = 0x102B00;
Eft06_set0x1058a0 = 0x1058A0;
Eft06_set20x105990 = 0x105990;
Eft13_set_em0x1097d0 = 0x1097D0;
Eft13_set_em_scl0x1098a0 = 0x1098A0;
Eft13_set_pos0x109970 = 0x109970;
Eft13_set_pos20x1099f0 = 0x1099F0;
em_search_set0x109e30 = 0x109E30;
em_dur_init0x10a070 = 0x10A070;
em_dur_set0x10a0f0 = 0x10A0F0;
get_joint_pos0x10a150 = 0x10A150;
get_joint_pos_em0x10a180 = 0x10A180;
get_joint_wmat0x10a190 = 0x10A190;
get_joint_wmat_em0x10a1c0 = 0x10A1C0;
enemy_mk0x10aeb0 = 0x10AEB0;
Em_area_ck0x10b790 = 0x10B790;
em_status_init0x10bad0 = 0x10BAD0;
em_material_sub0x10cea0 = 0x10CEA0;
AreaFieldInCheck0x1168a0 = 0x1168A0;
GetGroundHit0x119210 = 0x119210;
GetGroundShellHit0x119540 = 0x119540;
GetGroundHitArea0x1198b0 = 0x1198B0;
GetTenjoHit0x11aec0 = 0x11AEC0;
GetYouganHit0x11b070 = 0x11B070;
GetWallHitLine0x11b2a0 = 0x11B2A0;
GetEyeHitLine0x11bad0 = 0x11BAD0;
pl_light_change0x11e280 = 0x11E280;
Pl_light_set0x11e540 = 0x11E540;
reload_tex0x11f170 = 0x11F170;
cpRotMatrix0x1202c0 = 0x1202C0;
cpRotMatrixYXZ20x120310 = 0x120310;
calc_vec_ang0x1203a0 = 0x1203A0;
calc_vec_ang20x120430 = 0x120430;
calc_mat_angY0x1204d0 = 0x1204D0;
SetVector0x1207d0 = 0x1207D0;
PointToPoint0x1207e0 = 0x1207E0;
AddVector0x120820 = 0x120820;
ScaleVector0x1208a0 = 0x1208A0;
RotateX0x120d40 = 0x120D40;
RotateY0x120d90 = 0x120D90;
RotateZ0x120de0 = 0x120DE0;
CalcDistanceXZ0x120f20 = 0x120F20;
clay_attr_set0x121e20 = 0x121E20;
clay_attr_reset0x121ee0 = 0x121EE0;
calc_ofs_velocity0x1257e0 = 0x1257E0;
calc_velocity0x125820 = 0x125820;
frame_init0x125920 = 0x125920;
frame_move0x125f10 = 0x125F10;
frame_check0x1263f0 = 0x1263F0;
em_frame_check0x1264c0 = 0x1264C0;
frame_check20x126500 = 0x126500;
em_frame_check20x126550 = 0x126550;
em_frame_check30x1265d0 = 0x1265D0;
WyvernAreaMove0x1324b0 = 0x1324B0;
act_set0x14eb00 = 0x14EB00;
Pl_act_set0x14ecb0 = 0x14ECB0;
act_ck0x14ef20 = 0x14EF20;
pl_flag_ck0x14ef60 = 0x14EF60;
pl_flag_set0x14efa0 = 0x14EFA0;
pl_flag_clr0x14efe0 = 0x14EFE0;
shell_flag_set0x14f050 = 0x14F050;
Pl_master_ck0x14fc20 = 0x14FC20;
Pl_Skill_ck0x150150 = 0x150150;
rate_g_calc0x1513b0 = 0x1513B0;
rate_add0x151430 = 0x151430;
rate_add_g0x151470 = 0x151470;
em_rate_add_g0x1514e0 = 0x1514E0;
rate_add_g20x151550 = 0x151550;
em_rate_clear0x151620 = 0x151620;
rate_clear_g0x151640 = 0x151640;
em_rate_clear_g0x151650 = 0x151650;
shell_rate_add0x151660 = 0x151660;
shell_rate_add_g0x1516a0 = 0x1516A0;
action_timer_calc0x151710 = 0x151710;
em_action_timer_calc0x1517a0 = 0x1517A0;
pl_atck_data_set_shl0x151960 = 0x151960;
atck_data_set_shl0x151a50 = 0x151A50;
Pl_stg_ck0x151ff0 = 0x151FF0;
Em_stg_ck0x152010 = 0x152010;
Pl_stg_ck_tw0x152030 = 0x152030;
World_calc20x1520c0 = 0x1520C0;
Pl_item_stack0x152760 = 0x152760;
Pl_item_num_ck0x152b60 = 0x152B60;
Pl_item_num_ck30x152c70 = 0x152C70;
Pl_item_search_space0x152de0 = 0x152DE0;
Pl_vital_calc0x153420 = 0x153420;
Pl_slash_calc0x1536d0 = 0x1536D0;
Pl_stamina_calc0x153ae0 = 0x153AE0;
Get_tuto_id0x154330 = 0x154330;
Pl_silencer_ck0x154d30 = 0x154D30;
Pl_view_reset0x154e90 = 0x154E90;
pull_set_work0x1552a0 = 0x1552A0;
push_set_work0x155380 = 0x155380;
set01_set0x155740 = 0x155740;
set01_set20x155870 = 0x155870;
set12_set0x1567c0 = 0x1567C0;
Set13_set20x156a30 = 0x156A30;
pull_shell_work0x159090 = 0x159090;
push_shell_work0x159160 = 0x159160;
softdip_ck0x1593d0 = 0x1593D0;
se_req0x159450 = 0x159450;
se_req20x159530 = 0x159530;
Code_Make0x1598a0 = 0x1598A0;
Em_se_req2_com0x1599d0 = 0x1599D0;
Pl_se_req20x159d30 = 0x159D30;
Em_se_req20x159de0 = 0x159DE0;
ran_suu0x161230 = 0x161230;
SetTrnslMode0x161480 = 0x161480;
SetFilterMode0x161500 = 0x161500;
SetTextureStage0x161550 = 0x161550;
font_print0x161970 = 0x161970;
font_print_sp0x162020 = 0x162020;
font_print_uf0x162570 = 0x162570;
font_set_palette0x1626a0 = 0x1626A0;
Online_ck0x162d60 = 0x162D60;
Material_set_sub0x169120 = 0x169120;
get_prim_ptr0x169300 = 0x169300;
get_prim_ptr20x169320 = 0x169320;
get_prim0x169340 = 0x169340;
get_prim20x1693d0 = 0x1693D0;
release_prim0x169460 = 0x169460;
release_prim20x1694b0 = 0x1694B0;
add_prim0x169530 = 0x169530;
vib_set0x1698d0 = 0x1698D0;
vib_set_pl0x169920 = 0x169920;
Create_FOV0x169cf0 = 0x169CF0;
push_smell0x16a2b0 = 0x16A2B0;
pull_smell0x16a330 = 0x16A330;
push_smoke0x16a3d0 = 0x16A3D0;
pull_smoke0x16a450 = 0x16A450;
push_senko0x16a570 = 0x16A570;
pull_senko0x16a620 = 0x16A620;
push_em_yobi0x16a790 = 0x16A790;
pull_em_yobi0x16a810 = 0x16A810;
GetWaterData0x16ab80 = 0x16AB80;
flExecuteClay0x16d5c0 = 0x16D5C0;
flmatInit0x171ce0 = 0x171CE0;
flmatMakeScale0x171d50 = 0x171D50;
flmatMakeTrans0x171e00 = 0x171E00;
flmatScaleFactor330x171e50 = 0x171E50;
flmatSetTrans0x171e90 = 0x171E90;
flmatGetTrans0x171ee0 = 0x171EE0;
flmatRotX330x171f70 = 0x171F70;
flmatRotY330x172010 = 0x172010;
flmatRotZ330x1720b0 = 0x1720B0;
flmatSetXYZ330x172140 = 0x172140;
flmatRotXYZ330x1724e0 = 0x1724E0;
flmatRotZXY330x172670 = 0x172670;
flmatMul33_20x172b90 = 0x172B90;
flmatInvert0x172be0 = 0x172BE0;
flmatCopy0x172cb0 = 0x172CB0;
flmatCopy330x172ce0 = 0x172CE0;
flmatBlend0x172d30 = 0x172D30;
flvecApplyMat330x172e00 = 0x172E00;
flvecApplyMat33_20x172e70 = 0x172E70;
flvecRotX0x172ff0 = 0x172FF0;
flvecRotY0x173070 = 0x173070;
flvecCalcLength0x1730f0 = 0x1730F0;
flvecCalcDistance0x173140 = 0x173140;
flvecNormalize0x1731b0 = 0x1731B0;
flvecInnerProduct0x173220 = 0x173220;
flvecOuterProduct0x173280 = 0x173280;
flvecCopy0x173300 = 0x173300;
flAbs0x173540 = 0x173540;
flArcTan20x1735e0 = 0x1735E0;
flSin0x173600 = 0x173600;
flCos0x173610 = 0x173610;
flFloor0x173660 = 0x173660;
flSqrt0x173680 = 0x173680;
flCheckMeshFOV0x1738c0 = 0x1738C0;
flSetSkinTrans0x173f00 = 0x173F00;
flSetSkinTransMatrixList0x173fb0 = 0x173FB0;
flSetMatrixList0x174060 = 0x174060;
flCalcTransSI0x1746a0 = 0x1746A0;
flps00080x175b80 = 0x175B80;
flSetRenderState0x177720 = 0x177720;
plFCVFcurveInterpolateHermite0x192e40 = 0x192E40;
net_send_em0x1ba8e0 = 0x1BA8E0;
flfntSetSize0x216890 = 0x216890;
flfntLocate0x2168b0 = 0x2168B0;
Eft20_set0x21cd40 = 0x21CD40;
Eft20_set20x21ce20 = 0x21CE20;
adx_se_stop0x21db10 = 0x21DB10;
PachingerCamChk0x222930 = 0x222930;
set_quake_sub0x222980 = 0x222980;
set_quake_sub20x2229d0 = 0x2229D0;
Em_set_quake_sub0x222aa0 = 0x222AA0;
RedDragonEscapeCamera0x225e90 = 0x225E90;
F_DragonEscapeCamera0x225ea0 = 0x225EA0;
FishWyvernCameraRequest0x225f50 = 0x225F50;
Quest_failed_set0x226830 = 0x226830;
Stage_data_get0x226900 = 0x226900;
Quest_clear_ck0x2272d0 = 0x2272D0;
Quest_enemy_revival_ck0x2273d0 = 0x2273D0;
Quest_enemy_revival_set0x227450 = 0x227450;
Quest_enemy_die0x2274e0 = 0x2274E0;
Quest_enemy_escape0x2275a0 = 0x2275A0;
Quest_enemy_capture0x2275f0 = 0x2275F0;
Quest_enemy_hagi_set0x2276c0 = 0x2276C0;
Item_stolen0x228670 = 0x228670;
Ext_pick_point_set0x229130 = 0x229130;
Ext_pick_point_cnt_ck0x229240 = 0x229240;
Ext_pick_point_clr0x229260 = 0x229260;
Ext_pick_point_pos0x2292b0 = 0x2292B0;
Ext_pick_point_st0x229300 = 0x229300;
Em_hagi_point_set0x2297c0 = 0x2297C0;
Em_tail_hagi_point_set0x2298e0 = 0x2298E0;
Em_hagi_point_cnt_ck0x229980 = 0x229980;
Em_hagi_point_clr0x229a50 = 0x229A50;
Event_flag_set0x272ec0 = 0x272EC0;
Event_flag_clear0x272f00 = 0x272F00;
Event_flag_ck0x272f50 = 0x272F50;
Get_atk_value0x2731b0 = 0x2731B0;
wyvern_kill_cnt_up0x274c00 = 0x274C00;
ListSelect0x274ec0 = 0x274EC0;
PageSelect0x274f70 = 0x274F70;
PutButtonICON0x275740 = 0x275740;
DispFrameList0x275920 = 0x275920;
DispFrameMessage0x276160 = 0x276160;
NPC_Message0x277700 = 0x277700;
Eft02_set20x27e9f0 = 0x27E9F0;
Eft02_set30x27eab0 = 0x27EAB0;
Eft02_set40x27ebb0 = 0x27EBB0;
Eft02_set_pos20x27eeb0 = 0x27EEB0;
hit_line2_pk0x28cc40 = 0x28CC40;
hit_line_sphr20x290280 = 0x290280;
hit_point_cyl0x290560 = 0x290560;
```
--------------------------------------------------------------------------------
/config/dnas_ins_crypt_symbols.txt:
--------------------------------------------------------------------------------
```
dnas_crypt_key_00 = 0xa06980; // type:label size:0x10
dnas_jptg_st_00 = 0xa06994; // type:label
dnas_str_arg_00 = 0xa069a4; // type:char
dnas_crypt_key_00_end = 0xa069ec; // type:label size:0x10
dnas_jptg_ed_00 = 0xa069FC; // type:label
dnas_crypt_key_01 = 0xa06b04; // type:label size:0x10
dnas_jptg_st_01 = 0xa06b16; // type:label
dnas_str_arg_01 = 0xa06b34; // type:char
dnas_str_arg_18 = 0xa06b98; // type:char
dnas_crypt_key_01_end = 0xa06c00; // type:label size:0x10
dnas_jptg_ed_01 = 0xa06c10; // type:label
dnas_crypt_key_02 = 0xa06c98; // type:label size:0x10
dnas_str_arg_02 = 0xa06cbc; // type:char
dnas_crypt_key_02_end = 0xa06d0c; // type:label size:0x10
dnas_crypt_key_03 = 0xa06e08; // type:label size:0x10
dnas_str_arg_03 = 0xa06e2c; // type:char
dnas_crypt_key_03_end = 0xa06e7c; // type:label size:0x10
dnas_crypt_key_04 = 0xa06f1c; // type:label size:0x10
dnas_str_arg_04 = 0xa06f40; // type:char
dnas_crypt_key_04_end = 0xa06f8c; // type:label size:0x10
dnas_crypt_key_05 = 0xa0702c; // type:label size:0x10
dnas_str_arg_05 = 0xa07050; // type:char
dnas_crypt_key_05_end = 0xa0709c; // type:label size:0x10
dnas_crypt_key_06 = 0xa071b4; // type:label size:0x10
dnas_str_arg_06 = 0xa071e8; // type:char
dnas_str_arg_19 = 0xa0728c; // type:char
dnas_str_arg_20 = 0xa07310; // type:char
dnas_crypt_key_06_end = 0xa07390; // type:label size:0x10
dnas_crypt_key_07 = 0xa0741c; // type:label size:0x10
dnas_str_arg_07 = 0xa07440; // type:char
dnas_crypt_key_07_end = 0xa0748c; // type:label size:0x10
dnas_crypt_key_08 = 0xa07500; // type:label size:0x10
dnas_str_arg_08 = 0xa07524; // type:char
dnas_crypt_key_08_end = 0xa07574; // type:label size:0x10
dnas_crypt_key_09 = 0xa075ec; // type:label size:0x10
dnas_str_arg_09 = 0xa07610; // type:char
dnas_crypt_key_09_end = 0xa07664; // type:label size:0x10
dnas_crypt_key_10 = 0xa07914; // type:label size:0x10
dnas_str_arg_10 = 0xa07938; // type:char
dnas_crypt_key_10_end = 0xa07984; // type:label size:0x10
dnas_crypt_key_11 = 0xa07a34; // type:label size:0x10
dnas_str_arg_11 = 0xa07a58; // type:char
dnas_crypt_key_11_end = 0xa07aac; // type:label size:0x10
dnas_crypt_key_12 = 0xa07b40; // type:label size:0x10
dnas_str_arg_12 = 0xa07b64; // type:char
dnas_crypt_key_12_end = 0xa07bb4; // type:label size:0x10
dnas_crypt_key_13 = 0xa0813c; // type:label size:0x10
dnas_str_arg_13 = 0xa08180; // type:char
dnas_str_arg_21 = 0xa081d8; // type:char
dnas_str_arg_25 = 0xa08228; // type:char
dnas_crypt_key_13_end = 0xa08290; // type:label size:0x10
dnas_crypt_key_14 = 0xa08354; // type:label size:0x10
dnas_str_arg_14 = 0xa08378; // type:char
dnas_crypt_key_14_end = 0xa083bc; // type:label size:0x10
dnas_crypt_key_15 = 0xa0846c; // type:label size:0x10
dnas_str_arg_15 = 0xa084b0; // type:char
dnas_str_arg_22 = 0xa0850c; // type:char
dnas_crypt_key_15_end = 0xa08574; // type:label size:0x10
dnas_crypt_key_16 = 0xa0861c; // type:label size:0x10
dnas_str_arg_16 = 0xa08660; // type:char
dnas_str_arg_23 = 0xa086c0; // type:char
dnas_str_arg_24 = 0xa08714; // type:char
dnas_str_arg_26 = 0xa08774; // type:char
dnas_crypt_key_16_end = 0xa087d8; // type:label size:0x10
dnas_crypt_key_17 = 0xa088c4; // type:label size:0x10
dnas_str_arg_17 = 0xa088e8; // type:char
dnas_crypt_key_17_end = 0xa0892c; // type:label size:0x10
dnas_crypt_key_18 = 0xa207f8; // type:label size:0x10
dnas_crypt_key_18_end = 0xa2090c; // type:label size:0x10
dnas_crypt_key_19 = 0xa20988; // type:label size:0x10
dnas_crypt_key_19_end = 0xa20abc; // type:label size:0x10
dnas_crypt_key_20 = 0xa20b38; // type:label size:0x10
dnas_crypt_key_20_end = 0xa20e64; // type:label size:0x10
dnas_crypt_key_21 = 0xa20ee4; // type:label size:0x10
dnas_crypt_key_21_end = 0xa21028; // type:label size:0x10
dnas_crypt_key_22 = 0xa21164; // type:label size:0x10
dnas_crypt_key_22_end = 0xa212a0; // type:label size:0x10
dnas_crypt_key_23 = 0xa21320; // type:label size:0x10
dnas_crypt_key_23_end = 0xa21460; // type:label size:0x10
dnas_crypt_key_24 = 0xa214e0; // type:label size:0x10
dnas_crypt_key_24_end = 0xa21634; // type:label size:0x10
dnas_crypt_key_25 = 0xa216b4; // type:label size:0x10
dnas_crypt_key_25_end = 0xa2197c; // type:label size:0x10
dnas_crypt_key_26 = 0xa219f8; // type:label size:0x10
dnas_crypt_key_26_end = 0xa21a88; // type:label size:0x10
dnas_crypt_key_27 = 0xa21b0c; // type:label size:0x10
dnas_crypt_key_27_end = 0xa21ed4; // type:label size:0x10
dnas_crypt_key_28 = 0xa21f54; // type:label size:0x10
dnas_crypt_key_28_end = 0xa22050; // type:label size:0x10
dnas_crypt_key_29 = 0xa220d0; // type:label size:0x10
dnas_crypt_key_29_end = 0xa2224c; // type:label size:0x10
dnas_crypt_key_30 = 0xa222cc; // type:label size:0x10
dnas_crypt_key_30_end = 0xa22440; // type:label size:0x10
dnas_crypt_key_31 = 0xa224c0; // type:label size:0x10
dnas_crypt_key_31_end = 0xa22528; // type:label size:0x10
dnas_crypt_key_32 = 0xa225a8; // type:label size:0x10
dnas_crypt_key_32_end = 0xa2266c; // type:label size:0x10
dnas_crypt_key_33 = 0xa226ec; // type:label size:0x10
dnas_crypt_key_33_end = 0xa22750; // type:label size:0x10
dnas_crypt_key_34 = 0xa227ec; // type:label size:0x10
dnas_crypt_key_34_end = 0xa22fa8; // type:label size:0x10
dnas_crypt_key_35 = 0xa23530; // type:label size:0x10
dnas_crypt_key_35_end = 0xa236a8; // type:label size:0x10
dnas_crypt_key_36 = 0xa237a0; // type:label size:0x10
dnas_crypt_key_36_end = 0xa23a30; // type:label size:0x10
dnas_crypt_key_37 = 0xa23b64; // type:label size:0x10
dnas_crypt_key_37_end = 0xa23c04; // type:label size:0x10
dnas_crypt_key_38 = 0xa23c7c; // type:label size:0x10
dnas_crypt_key_38_end = 0xa23dac; // type:label size:0x10
dnas_crypt_key_39 = 0xa23ec4; // type:label size:0x10
dnas_crypt_key_39_end = 0xa23f2c; // type:label size:0x10
dnas_crypt_key_40 = 0xa23fb4; // type:label size:0x10
dnas_crypt_key_40_end = 0xa24174; // type:label size:0x10
dnas_crypt_key_41 = 0xa241F0; // type:label size:0x10
dnas_crypt_key_41_end = 0xa2434c; // type:label size:0x10
dnas_crypt_key_42 = 0xa243c8; // type:label size:0x10
dnas_crypt_key_42_end = 0xa24784; // type:label size:0x10
dnas_crypt_key_43 = 0xa24800; // type:label size:0x10
dnas_crypt_key_43_end = 0xa24924; // type:label size:0x10
dnas_crypt_key_44 = 0xa249A0; // type:label size:0x10
dnas_crypt_key_44_end = 0xa24be8; // type:label size:0x10
dnas_crypt_key_45 = 0xa24c54; // type:label size:0x10
dnas_crypt_key_45_end = 0xa24ce8; // type:label size:0x10
dnas_crypt_key_46 = 0xa24d64; // type:label size:0x10
dnas_crypt_key_46_end = 0xa24fa4; // type:label size:0x10
dnas_crypt_key_47 = 0xa25020; // type:label size:0x10
dnas_crypt_key_47_end = 0xa25370; // type:label size:0x10
dnas_crypt_key_48 = 0xa25504; // type:label size:0x10
dnas_crypt_key_48_end = 0xa25728; // type:label size:0x10
dnas_crypt_key_49 = 0xa25958; // type:label size:0x10
dnas_crypt_key_49_end = 0xa25a88; // type:label size:0x10
dnas_crypt_key_50 = 0xa2616c; // type:label size:0x10
dnas_crypt_key_50_end = 0xa261c4; // type:label size:0x10
dnas_crypt_key_51 = 0xa26610; // type:label size:0x10
dnas_crypt_key_51_end = 0xa26674; // type:label size:0x10
dnas_crypt_key_52 = 0xa27e7c; // type:label size:0x10
dnas_crypt_key_52_end = 0xa27ec8; // type:label size:0x10
dnas_crypt_key_53 = 0xa27f8c; // type:label size:0x10
dnas_crypt_key_53_end = 0xa2808c; // type:label size:0x10
dnas_crypt_key_54 = 0xa2815c; // type:label size:0x10
dnas_crypt_key_54_end = 0xa2825c; // type:label size:0x10
dnas_crypt_key_55 = 0xa28330; // type:label size:0x10
dnas_crypt_key_55_end = 0xa284ec; // type:label size:0x10
dnas_crypt_key_56 = 0xa285dc; // type:label size:0x10
dnas_crypt_key_56_end = 0xa28714; // type:label size:0x10
dnas_crypt_key_57 = 0xa287d8; // type:label size:0x10
dnas_crypt_key_57_end = 0xa28850; // type:label size:0x10
dnas_crypt_key_58 = 0xa288f8; // type:label size:0x10
dnas_crypt_key_58_end = 0xa28960; // type:label size:0x10
dnas_crypt_key_59 = 0xa28ab0; // type:label size:0x10
dnas_crypt_key_59_end = 0xa29080; // type:label size:0x10
dnas_crypt_key_60 = 0xa29160; // type:label size:0x10
dnas_crypt_key_60_end = 0xa291d8; // type:label size:0x10
dnas_crypt_key_61 = 0xa2928c; // type:label size:0x10
dnas_crypt_key_61_end = 0xa2934c; // type:label size:0x10
dnas_crypt_key_62 = 0xa2940c; // type:label size:0x10
dnas_crypt_key_62_end = 0xa294f0; // type:label size:0x10
dnas_crypt_key_63 = 0xa295b8; // type:label size:0x10
dnas_crypt_key_63_end = 0xa2975c; // type:label size:0x10
dnas_crypt_key_64 = 0xa29810; // type:label size:0x10
dnas_str_arg_27 = 0xa29834; // type:char
dnas_crypt_key_64_end = 0xa29884; // type:label size:0x10
dnas_crypt_key_65 = 0xa2993c; // type:label size:0x10
dnas_crypt_key_65_end = 0xa29a74; // type:label size:0x10
dnas_crypt_key_66 = 0xa2a000; // type:label size:0x10
dnas_crypt_key_66_end = 0xa2a42c; // type:label size:0x10
dnas_crypt_key_67 = 0xa2a500; // type:label size:0x10
dnas_str_arg_28 = 0xa2a524; // type:char
dnas_crypt_key_67_end = 0xa2a5ac; // type:label size:0x10
dnas_crypt_key_68 = 0xa2dab8; // type:label size:0x10
dnas_crypt_key_68_end = 0xa2db48; // type:label size:0x10
dnas_crypt_key_69 = 0xa2dc20; // type:label size:0x10
dnas_crypt_key_69_end = 0xa2df04; // type:label size:0x10
dnas_crypt_key_70 = 0xa2dfe8; // type:label size:0x10
dnas_crypt_key_70_end = 0xa2e0dc; // type:label size:0x10
dnas_crypt_key_71 = 0xa2e1b8; // type:label size:0x10
dnas_crypt_key_71_end = 0xa2e298; // type:label size:0x10
dnas_crypt_key_72 = 0xa2e380; // type:label size:0x10
dnas_crypt_key_72_end = 0xa2e7f4; // type:label size:0x10
```
--------------------------------------------------------------------------------
/tools/lcf/generate_lcf.py:
--------------------------------------------------------------------------------
```python
import sys
from dataclasses import dataclass
from pathlib import Path
import splat.scripts.split as split
from splat.segtypes.linker_entry import LinkerEntry, LinkerWriter
@dataclass
class Run:
entries: list[LinkerEntry]
is_game: bool
section: str
def split_into_runs(entries: list[LinkerEntry]) -> list[Run]:
runs: list[Run] = list()
runs.append(Run(list(), False, ".text"))
for entry in entries:
if entry.section_link_type == "pad":
continue
entry_is_game = "main" in str(entry.object_path)
#print(entry_is_game, entry.object_path, entry.section_link_type)
if entry.section_link_type != runs[-1].section or entry_is_game != runs[-1].is_game:
runs.append(Run(list(), entry_is_game, entry.section_link_type))
runs[-1].entries.append(entry)
return runs
def strip_path(path: Path) -> str:
return path.name
class LCFWriter:
def __init__(self, config_path: Path):
self.config_path = config_path
self.file = None
self.last_line_blank = False
def __enter__(self) -> 'LCFWriter':
self.file = open(self.config_path, "w")
with open("tools/lcf/lcf_header.txt") as header:
self.file.write(header.read())
return self
def __exit__(self, *args):
with open("tools/lcf/lcf_footer.txt") as footer:
self.file.write(footer.read())
self.file.close()
def write_line(self, line: str):
#print(line)
self.file.write(f"\t\t{line}\n")
self.last_line_blank = False
def blank(self):
self.file.write("\n")
self.last_line_blank = True
def seperator(self):
self.write_line("# " + "=" * 75)
def begin_section(self, title: str):
if not self.last_line_blank:
self.blank()
self.seperator()
self.write_line(f"# {title}")
self.seperator()
self.blank()
def align(self, alignment: int):
self.write_line(f". = ALIGN(0x{alignment:X});")
def align_all(self, alignment: int):
self.write_line(f"ALIGNALL(0x{alignment:X});")
def add_entry(self, entry: LinkerEntry, section: str):
self.write_line(f"{strip_path(entry.object_path)} ({section})")
def add_entries(self, entries: list[LinkerEntry], section: str):
for entry in entries:
self.add_entry(entry, section)
def add_runs(self, runs: list[Run], section: str):
for run in runs:
self.add_entries(run.entries, section)
def write_segment_runs(self, runs: list[Run], segment: str, overlay: bool=False):
self.file.write(f"\t.{segment}\t:\n\t{{\n")
self.write_line("_gp = 0x38EB70;")
#overlay head
if(overlay):
self.begin_section("overlay header")
self.write_line(f"_{segment}_segment_start = .;")
self.write_line("")
self.write_line("# declare variables")
self.write_line(f"_{segment}_text_size = 0;")
self.write_line(f"_{segment}_data_size = 0;")
self.write_line(f"_{segment}_bss_size = 0;")
self.write_line(f"_{segment}_static_init = 0;")
self.write_line(f"_{segment}_static_init_end = 0;")
self.write_line("")
self.write_line("# overlay header")
self.write_line("WRITEB 0x4D;\t# 'M'")
self.write_line("WRITEB 0x57;\t# 'W'")
self.write_line("WRITEB 0x6F;\t# 'o'")
self.write_line("WRITEB 0x33;\t# '3', ver.3")
self.write_line(f"WRITEW OVERLAYID(.{segment});\t# overlay ID")
self.write_line(f"WRITEW ADDR(.{segment});\t# load address")
self.write_line(f"WRITEW _{segment}_text_size;\t# size of text")
self.write_line(f"WRITEW _{segment}_data_size;\t# size of data")
self.write_line(f"WRITEW _{segment}_bss_size;\t# size of bss")
self.write_line(f"WRITEW _{segment}_static_init;\t# start address of static init")
self.write_line(f"WRITEW _{segment}_static_init_end;\t# end address of static init")
self.write_line("")
self.write_line("# name of overlay in hex")
#now the overlay name!
segname = f"{segment}.bin"
#TODO loop over the name, 32 WRITEBs
for l in range(0x20):
letter = "0x00"
if l < len(segname):
letter = hex(ord(segname[l:l+1]))
self.write_line(f"WRITEB {letter};")
self.write_line(f"_{segment}_text_start = .;")
# text
self.begin_section("text section")
self.align(0x80)
text_runs = [x for x in runs if x.section == ".text"]
for run in text_runs:
if(len(run.entries) == 0):
#print(f"zero entries for obj {run}")
continue
path = str(run.entries[0].object_path)
is_lib_vib = "libvib" in path
is_cri = "cri" in path
is_crt0 = "crt0" in path
is_sce = "sce" in path
alignment = 0x4
if run.is_game:
alignment = 0x10
elif is_lib_vib or is_cri or is_sce:
alignment = 0x8
elif is_crt0:
self.add_entry(run.entries, ".text")
self.align(0x10)
continue
self.align_all(alignment)
self.add_entries(run.entries, ".text")
if(overlay):
self.write_line(f"_{segment}_text_end = .;")
self.write_line(f"_{segment}_text_size = _{segment}_text_end - _{segment}_text_start;")
self.blank()
#for _ in range(2):
# self.write_line("WRITEW 0x0; # text section patch for EE pipeline")
# data/rodata
self.begin_section("data sections")
if(overlay):
self.write_line(f"_{segment}_data_start = .;")
data_runs = [x for x in runs if (x.section == ".data" and "/elf/" not in str(x.entries[0].object_path) and "_header.s" not in x.entries[0].object_path.name)]
#for x in data_runs:
# print(f"{x.entries[0].object_path}")
# if "/elf/" in str(x.entries[0].object_path):
# print("HEY OMIT THIS!")
# and not "elf" in str(run.entries[0].object_path) ?? todo fix up
self.begin_section(".data")
self.align(0x80)
self.align_all(0x8)
self.add_runs(data_runs, ".data")
rodata_runs = [x for x in runs if x.section == ".rodata"]
self.begin_section(".rodata")
self.align(0x80)
self.align_all(0x8)
self.add_runs(rodata_runs, ".rodata")
#TODO check sfiii once files are decompiled
# small data
self.begin_section("small data sections")
sdata_runs = [x for x in runs if x.section == ".sdata"]
self.align(0x80)
self.align_all(0x4)
self.add_runs(sdata_runs, ".sdata")
if(overlay):
self.write_line(f"_{segment}_static_init = .;")
self.write_line(f"_{segment}_static_init_end = .;")
self.write_line(f"_{segment}_data_end = .;")
self.write_line(f"_{segment}_data_size = _{segment}_data_end - _{segment}_data_start;")
self.blank()
if(overlay):
self.write_line(f"_{segment}_bss_start = .;")
self.begin_section("sbss sections")
sbss_runs = [x for x in runs if x.section == ".sbss"]
self.align(0x080)
self.align_all(0x4)
self.add_runs(sbss_runs, ".sbss")
# bss
self.begin_section("bss sections")
self.align(0x80)
bss_runs = [x for x in runs if x.section == ".bss"]
#self.align_all(0x10)
for run in bss_runs:
for entry in run.entries:
self.add_entry(entry, ".bss")
if "cri" in str(entry.object_path):
self.add_entry(entry, "COMMON")
self.align_all(0x10)
if(overlay):
self.write_line(f"_{segment}_bss_end = .;")
self.write_line(f"_{segment}_bss_size = _{segment}_bss_end - _{segment}_bss_start;")
self.blank()
# finalize
self.align(0x80)
if(overlay):
self.write_line(f"_{segment}_segment_end = .;")
self.file.write(f"\t}}\t>\t{segment}{'' if segment == 'main' else '.bin'}\n")
self.blank()
def main():
config_path = Path(sys.argv[1])
split.main([Path("config/main.yaml")], modes="all", verbose=False)
#main_backup = split.linker_writer.entries
runs_main = split_into_runs(split.linker_writer.entries)
#ctx_backup = split.symbols.spim_context
#print(len(runs_main))
#write_segment_runs(runs_main, "main")
split.main([Path("config/select.yaml")], modes="all", verbose=False)
runs_select = split_into_runs(split.linker_writer.entries)
split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
#split.main(["config/main.yaml"], modes="all", verbose=False)
#split.linker_writer.entries = main_backup
split.main([Path("config/game.yaml")], modes="all", verbose=False)
runs_game = split_into_runs(split.linker_writer.entries)
split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
#split.main(["config/main.yaml"], modes="all", verbose=False)
#print(len(runs_game))
split.main([Path("config/yn.yaml")], modes="all", verbose=False)
runs_yn = split_into_runs(split.linker_writer.entries)
split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
#split.main(["config/main.yaml"], modes="all", verbose=False)
split.main([Path("config/lobby.yaml")], modes="all", verbose=False)
runs_lobby = split_into_runs(split.linker_writer.entries)
split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
split.main([Path("config/dnas_ins.yaml")], modes="all", verbose=False)
runs_dnas_ins = split_into_runs(split.linker_writer.entries)
split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
split.main([Path("config/dnas_net.yaml")], modes="all", verbose=False)
runs_dnas_net = split_into_runs(split.linker_writer.entries)
#split.symbols.spim_context = split.symbols.spimdisasm.common.Context()
#write_segment_runs(runs_game, "game")
with LCFWriter(config_path) as lcf:
lcf.write_segment_runs(runs_main, "main", False)
lcf.write_segment_runs(runs_select, "select", True)
lcf.write_segment_runs(runs_game, "game", True)
lcf.write_segment_runs(runs_yn, "yn", True)
lcf.write_segment_runs(runs_lobby, "lobby", True)
lcf.write_segment_runs(runs_dnas_net, "dnas_net", True)
lcf.write_segment_runs(runs_dnas_ins, "dnas_ins", True)
#patch CRI rodata segments
print("LCF written!")
cri_nonmatchings = Path("asm/nonmatchings/cri")
for asm_file in cri_nonmatchings.rglob("*.s"):
text = asm_file.read_text()
text = text.replace(".section .rodata", ".rdata")
asm_file.write_text(text)
if __name__ == "__main__":
main()
```