This is page 1 of 6. Use http://codebase.md/2Tie/mh1j?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
│ └── 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;
```
--------------------------------------------------------------------------------
/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
```
--------------------------------------------------------------------------------
/include/structs.h:
--------------------------------------------------------------------------------
```
#ifndef STRUCTS_H
#define STRUCTS_H
#include "types.h"
typedef struct {
//total size: 0xC
f32 x; //offset 0x0, size 0x4
f32 y; //offset 0x4, size 0x4
f32 z; //offset 0x8, size 0x4
} Vec3;
typedef struct {
//total size: 0xC
s32 x; //offset 0x0, size 0x4
s32 y; //offset 0x4, size 0x4
u8 b1; //offset 0x8, size 0x4
u8 b2; //offset 0x8, size 0x4
u8 b3; //offset 0x8, size 0x4
u8 b4; //offset 0x8, size 0x4
} STAGE_FOG;
typedef struct {
//total size: 0x8
u16 item;
u16 quantity;
} ITEM_SLOT;
typedef struct {
//total size:0x224
u8 top_state; //offset 0x0
u8 sub_state; //offset 0x1
u8 game_top_state; //offset 0x2
u8 game_sub_state; //offset 0x3
u16 unk_04;
u16 unk_06;
u8 unk_08;
u8 unk_09;
u16 unk_0a;
u8 unk_0c;
u8 unk_0d;
u8 unk_0e;
u8 unk_0f;
u8 BGM_flags; //offset 0x10
u8 BGM; //offset 0x11
u8 unk_12;
u8 unk_13;
u8 current_area_id; //offset 0x14
u8 area_model; //offset 0x15
u8 unk_16;
u8 unk_17;
u8 unk_18;
u8 unk_19;
u8 unk_1a;
u8 unk_1b;
u8 unk_1c;
u8 unk_1d;
u16 tick_count; //offset 0x1e
u8 pad_0_ack; //offset 0x20
u8 pad_1_ack; //offset 0x21
u8 unk_22;
u8 unk_23;
u8 unk_24;
u8 current_music; //offset 0x25
s16 music_timer; //offset 0x26
u8 load_monsters[4]; //offset 0x28
u16 selected_quest_id; //offset 0x2c
u8 fight_music_index; //offset 0x2e
u8 camp_area_id; //offset 0x2f
u8 unk_30;
u8 unk_31;
u8 unk_32;
u8 unk_33;
u8 unk_34;
u8 unk_35;
u8 unk_36;
u8 unk_37;
u8 unk_38;
u8 unk_39;
u8 unk_3a;
u8 unk_3b;
u8 unk_3c;
u8 unk_3d;
u8 unk_3e;
u8 unk_3f;
u8 unk_40;
u8 unk_41;
u8 unk_42;
u8 unk_43;
u8 unk_44;
u8 unk_45;
u8 unk_46;
u8 unk_47;
u8 unk_48;
u8 unk_49;
u8 unk_4a;
u8 unk_4b;
u8 unk_4c;
u8 unk_4d;
u8 unk_4e;
u8 unk_4f;
u8 unk_50;
u8 unk_51;
u8 unk_52;
u8 unk_53;
u8 unk_54;
u8 unk_55;
u8 unk_56;
u8 unk_57;
u8 unk_58;
u8 unk_59;
u8 unk_5a;
u8 unk_5b;
u8 unk_5c;
u8 unk_5d;
u8 unk_5e;
u8 unk_5f;
u8 unk_60;
u8 unk_61;
u8 unk_62;
u8 unk_63;
u8 unk_64;
u8 unk_65;
u8 unk_66;
u8 unk_67;
u8 unk_68;
u8 unk_69;
u8 unk_6a;
u8 unk_6b;
u8 unk_6c;
u8 unk_6d;
u8 unk_6e;
u8 unk_6f;
u8 unk_70;
u8 unk_71;
u8 unk_72;
u8 unk_73;
u8 unk_74;
u8 unk_75;
u8 unk_76;
u8 unk_77;
u8 unk_78;
u8 unk_79;
u8 unk_7a;
u8 unk_7b;
u8 unk_7c;
u8 unk_7d;
u8 unk_7e;
u8 unk_7f;
u8 player_items[4]; //offset 0x80
u8 unk_84;
u8 unk_85;
u8 unk_86;
u8 unk_87;
u32 mdl_ptrs[4]; //offset 0x88
u16 mdl_status[4]; //offset 0x98
u16 mdl_starts[4]; //offset 0xa0
u32 sub_mdl_ptrs[4]; //offset 0xa8
u16 sub_mdl_status[4]; //offset 0xb8
u16 sub_mdl_starts[4]; //offset 0xc0
u8 unk_c8;
u8 unk_c9;
u8 unk_ca;
u8 unk_cb;
u16 stolen_item_id; //offset 0xcc
u16 stolen_item_quantity; //offset 0xce
u8 stolen_item_flag; //offset 0xd0
u8 my_player_number; //offset 0xd1
u8 address_id; //offset 0xd2
u8 number_of_players; //offset 0xd3
u8 hit_id; //offset 0xd4
u8 mission_state; //offset 0xd5
u8 unk_d6;
u8 unk_d7;
u8 unk_d8;
u8 unk_d9;
u8 unk_da;
u8 unk_db;
u8 unk_dc;
u8 unk_dd;
u8 unk_de;
u8 unk_df;
u8 unk_e0;
u8 unk_e1;
u8 unk_e2;
u8 unk_e3;
u8 unk_e4;
u8 unk_e5;
u8 unk_e6;
u8 unk_e7;
u8 unk_e8;
u8 unk_e9;
u8 unk_ea;
u8 unk_eb;
u8 unk_ec;
u8 unk_ed;
u8 unk_ee;
u8 unk_ef;
u8 unk_f0;
u8 unk_f1;
u8 unk_f2;
u8 unk_f3;
u8 unk_f4;
u8 unk_f5;
u8 unk_f6;
u8 unk_f7;
u8 unk_f8;
u8 unk_f9;
u8 unk_fa;
u8 unk_fb;
u8 unk_fc;
u8 unk_fd;
u8 unk_fe;
u8 unk_ff;
u8 unk_100;
u8 unk_101;
u8 unk_102;
u8 unk_103;
u8 unk_104;
u8 unk_105;
u8 unk_106;
u8 unk_107;
u8 unk_108;
u8 unk_109;
u8 unk_10a;
u8 unk_10b;
u8 unk_10c;
u8 unk_10d;
u8 unk_10e;
u8 unk_10f;
u8 unk_110;
u8 unk_111;
u8 unk_112;
u8 unk_113;
u8 unk_114;
u8 unk_115;
u8 unk_116;
u8 unk_117;
u8 unk_118;
u8 unk_119;
u8 unk_11a;
u8 unk_11b;
u8 unk_11c;
u8 unk_11d;
u8 unk_11e;
u8 unk_11f;
u8 unk_120;
u8 unk_121;
u8 unk_122;
u8 unk_123;
u8 unk_124;
u8 unk_125;
u8 unk_126;
u8 unk_127;
ITEM_SLOT quest_item_box[32]; //offset 0x128
u32 quest_item_box_taken_flags[2]; //offset 0x1a8
u8 unk_1b0;
u8 unk_1b1;
u8 unk_1b2;
u8 unk_1b3;
u8 unk_1b4;
u8 unk_1b5;
u8 unk_1b6;
u8 unk_1b7;
u8 unk_1b8;
u8 unk_1b9;
u8 unk_1ba;
u8 unk_1bb;
u8 unk_1bc;
u8 unk_1bd;
u8 unk_1be;
u8 unk_1bf;
u8 unk_1c0;
u8 unk_1c1;
u8 unk_1c2;
u8 unk_1c3;
u8 unk_1c4;
u8 unk_1c5;
u8 unk_1c6;
u8 unk_1c7;
u8 unk_1c8;
u8 unk_1c9;
u8 unk_1ca;
u8 unk_1cb;
u8 unk_1cc;
u8 unk_1cd;
u8 unk_1ce;
u8 unk_1cf;
u8 unk_1d0;
u8 unk_1d1;
u8 unk_1d2;
u8 unk_1d3;
u8 unk_1d4;
u8 unk_1d5;
u8 unk_1d6;
u8 unk_1d7;
u8 unk_1d8;
u8 unk_1d9;
u8 unk_1da;
u8 unk_1db;
u8 unk_1dc;
u8 unk_1dd;
u8 unk_1de;
u8 unk_1df;
u16 current_sound_effect; //offset 0x1e0
u8 unk_1e2;
u8 unk_1e3;
u8 unk_1e4;
u8 unk_1e5;
u8 unk_1e6;
u8 in_tutorial; //offset 0x1e7
char user_id_1[8]; //offset 0x1e8
char user_id_2[8]; //offset 0x1f0
char user_id_3[8]; //offset 0x1f8
char user_id_4[8]; //offset 0x200
u8 hunter_1_present; //offset 0x208
u8 hunter_2_present; //offset 0x209
u8 hunter_3_present; //offset 0x20a
u8 hunter_4_present; //offset 0x20b
u8 unk_20c;
u8 unk_20d;
u8 unk_20e;
u8 unk_20f;
u8 number_bombs_placed; //offset 0x210
u8 number_meats_placed; //offset 0x211
u8 number_traps_placed; //offset 0x212
u8 unk_213;
u8 unk_214;
u8 unk_215;
u8 unk_216;
u8 unk_217;
u16 fatalis_health; //offset 0x218
u8 unk_21a;
u8 unk_21b;
u8 unk_21c;
u8 fort_damage; //offset 0x21d
u8 unk_21e;
u8 unk_21f;
u8 unk_220;
u8 unk_221;
u8 unk_222;
u8 unk_223;
} GAME_WORK;
typedef struct {
//total size: 0x64
u8 unk_00; //offset 0x0, size 0x1
u8 unk_01; //offset 0x1, size 0x1
u8 current_area_id; //offset 0x2, size 0x1
u8 unk_03;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
u16 unk_08;
u8 unk_0A;
u8 unk_0B;
u8 unk_0C;
u8 unk_0D;
u8 unk_0E;
u8 unk_0F;
Vec3 origin;
Vec3 unk_1C;
Vec3 offset;
u16 unk_34;
u8 unk_36;
u8 unk_37;
u16 modelwork_index;
u8 unk_3A;
u8 unk_3B;
u8* modelwork_pointer;
u8 unk_40;
u8 unk_41;
u8 unk_42;
u8 unk_43;
u8 unk_44;
u8 unk_45;
u8 unk_46;
u8 unk_47;
u8* area_origins;
u8 unk_4C;
u8 unk_4D;
u8 unk_4E;
u8 unk_4F;
u8 unk_50;
u8 unk_51;
u8 unk_52;
u8 unk_53;
u8 unk_54;
u8 unk_55;
u8 unk_56;
u8 unk_57;
u8 unk_58;
u8 unk_59;
u8 unk_5A;
u8 unk_5B;
u8 unk_5C;
u8 unk_5D;
u8 unk_5E;
u8 unk_5F;
u8 unk_60;
u8 unk_61;
u8 unk_62;
u8 unk_63;
u8 unk_64;
} STAGE_WORK;
typedef struct {
//total size: 0x18
u32 attack_bonus; //offset 0x0, size 0x4
f32 speed; //offset 0x4, size 0x4
f32 speed_variance; //offset 0x8, size 0x4
f32 horizontal_deviation; //offset 0xC, size 0x4
f32 vertical_deviation; //offset 0x10, size 0x4
f32 pellet_scale; //offset 0x14, size 0x4
} GUN_GROW_UP;
typedef struct {
//total size: 0x14
u8 model; //offset 0x0, size 0x1
u8 rarity; //offset 0x1, size 0x1
u8 level; //offset 0x2, size 0x1
u8 reload_delay; //offset 0x3, size 0x1
u32 price; //offset 0x4, size 0x4
u16 attack; //offset 0x8, size 0x2
u8 defense; //offset 0xA, size 0x1
u8 unk1; //offset 0xB, size 0x1
char* name; //offset 0xC, size 0x4
u32 ammo_types; //offset 0x10, size 0x14
} GUN_DATA;
typedef struct {
//total size: 0x10
u8 type; //offset 0x0, size 0x1
u8 can_use; //offset 0x1, size 0x1
u8 rarity; //offset 0x2, size 0x1
u8 max_stack; //offset 0x3, size 0x1
u8 flags; //offset 0x4, size 0x1
u8 icon_index; //offset 0x5, size 0x1
u8 color_index;//offset 0x6, size 0x1
u8 unk1; //offset 0x7, size 0x1
u16 ammo_type; //offset 0x8, size 0x2
u16 sound_effect; //offset 0xA, size 0x2
u16 buy_price; //offset 0xC, size 0x2
u16 sell_sprice; //offset 0xE, size 0x2
} ITEM_DATA;
typedef struct {
//total size: 0x28
s16 parent_bone; //offset 0x0, size 0x2
s16 is_capsule; //offset 0x2, size 0x2
s16 meat_zone; //offset 0x4, size 0x2
s16 body_group; //offset 0x6, size 0x2
s32 unk; //offset 0x8, size 0x4
f32 radius; //offset 0xC, size 0x4
Vec3 point1; //offset 0x10, size 0xC
Vec3 point2; //offset 0x1C, size 0xC
} HITCAPSULE_DATA;
typedef struct {
//total size: 0x14
u8 model; //offset 0x0, size 0x1
u8 rarity; //offset 0x1, size 0x1
u16 sharpness; //offset 0x2, size 0x2
u32 price; //offset 0x4, size 0x4
u16 raw_attack;//offset 0x8, size 0x2
u8 defense; //offset 0xA, size 0x1
u8 fire; //offset 0xB, size 0x1
u8 water; //offset 0xC, size 0x1
u8 thunder; //offset 0xD, size 0x1
u8 dragon; //offset 0xE, size 0x1
u8 poison; //offset 0xF, size 0x1
u8 paralysis; //offset 0x10, size 0x1
u8 sleep; //offset 0x11, size 0x1
u16 sort_order;//offset 0x12, size 0x2
char* name; //offset 0x14, size 0x4
} KEN_DATA;
typedef struct {
//total size: 0xE
s16 initial_tolerance; //offset 0x0, size 0x2
s16 recover_time; //offset 0x2, size 0x2
s16 recover_amount; //offset 0x4, size 0x2
s16 damage_amount; //offset 0x6, size 0x2
s16 duration; //offset 0x8, size 0x2
s16 damage_time; //offset 0xA, size 0x2
s16 tolerance_increase;//offset 0xC, size 0x2
} POISON_EFFICACY;
#endif
```