From a30957122886361f5b943a0b3e02ed725782d34e Mon Sep 17 00:00:00 2001 From: rozlette Date: Thu, 6 Dec 2018 13:47:07 -0600 Subject: [PATCH] Updata current progress --- Makefile | 9 +- asmdiff.sh | 2 +- codescript.txt | 4 +- extract_rom.py | 18 +- functions.py | 55 +- include/functions.h | 99 +-- include/structs.h | 241 ++++-- include/variables.h | 86 +- objects.py | 1 + src/code/code_0x800A5AC0.c | 4 +- src/code/code_0x800E8EA0.c.ignore | 44 + src/code/z_en_item00.c.ignore | 1237 +++++++++++++++++++++++++++++ src/libultra/gu/sins.c | 21 + src/libultra/gu/sintable.h | 6 + src/sintable.h | 6 + undef.txt | 4 +- variables.py | 43 + 17 files changed, 1692 insertions(+), 188 deletions(-) create mode 100644 src/code/code_0x800E8EA0.c.ignore create mode 100644 src/code/z_en_item00.c.ignore create mode 100644 src/libultra/gu/sins.c create mode 100644 src/libultra/gu/sintable.h create mode 100644 src/sintable.h diff --git a/Makefile b/Makefile index 0fc5fa28d0..96a18750ff 100644 --- a/Makefile +++ b/Makefile @@ -7,8 +7,9 @@ LD := $(MIPS_BINUTILS)ld #QEMU_IRIX := ~/irixemu/mips-linux-user/qemu-mips QEMU_IRIX := ~/qemu-irix +IRIX_71_ROOT := ./ido/71/ IRIX_62_ROOT := ./ido/62/ -IRIX_53_ROOT := ./ido/ +IRIX_53_ROOT := ./ido/53_patched/ CFLAGS := -G 0 -non_shared -Xfullwarn -Xcpluscomm ASFLAGS := -march=vr4300 -32 @@ -24,11 +25,11 @@ build/src/libultra/%: CC := $(QEMU_IRIX) -L $(IRIX_53_ROOT) $(IRIX_53_ROOT)/usr/ build/src/libultra/%: CFLAGS := $(CFLAGS) -Wab,-r4300_mul build/src/boot_O1/%: OPTIMIZATION := -O1 build/src/boot_O2_g3/%: OPTIMIZATION := -O2 -g3 -test.txt: OPTIMIZATION := -O2 -test.txt: CC := $(QEMU_IRIX) -L $(IRIX_53_ROOT) $(IRIX_53_ROOT)/usr/bin/cc +#test.txt: OPTIMIZATION := -O2 +#test.txt: CC := $(QEMU_IRIX) -L $(IRIX_53_ROOT) $(IRIX_53_ROOT)/usr/bin/cc test.txt: CFLAGS := $(CFLAGS) -Wab,-r4300_mul -CC := $(QEMU_IRIX) -L $(IRIX_62_ROOT) $(IRIX_62_ROOT)/usr/bin/cc +CC := $(QEMU_IRIX) -L $(IRIX_71_ROOT) $(IRIX_71_ROOT)/usr/bin/cc test.txt: CC := python3 preprocess.py $(CC) -- $(AS) $(ASFLAGS) -- build/src/boot_O2_g3/%: CC := python3 preprocess.py $(CC) -- $(AS) $(ASFLAGS) -- diff --git a/asmdiff.sh b/asmdiff.sh index 2d503abf46..8b303e439a 100644 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -2,7 +2,7 @@ MIPS_BINUTILS="mips-linux-gnu-" -OBJDUMP="${MIPS_BINUTILS}objdump -D -z -mmips -EB -j .text -j .data" +OBJDUMP="${MIPS_BINUTILS}objdump -D -z -mmips -EB -j .text -j .data -j .rodata" FORMATTER="sed '/^0/!s/.*://'" diff --git a/codescript.txt b/codescript.txt index a9976203d9..ab711a821d 100644 --- a/codescript.txt +++ b/codescript.txt @@ -33,7 +33,7 @@ SECTIONS build/asm/boot_0x80088110.o(.text) build/asm/boot_0x800882A0.o(.text) build/src/libultra/gu/sinf.o(.text) - build/asm/sins.o(.text) + build/src/libultra/gu/sins.o(.text) build/src/libultra/io/sptask.o(.text) build/asm/ll.o(.text) build/asm/exceptasm.o(.text) @@ -194,7 +194,7 @@ SECTIONS code 0x800A5AC0: { build/src/code/code_0x800A5AC0.o(.text) - build/asm/code_0x800A5D00.o(.text) + build/asm/z_en_item00.o(.text) build/asm/code_0x800A81F0.o(.text) build/asm/code_0x800ACBF0.o(.text) build/asm/code_0x800B32D0.o(.text) diff --git a/extract_rom.py b/extract_rom.py index 29412c7fe6..6888a7d0b9 100644 --- a/extract_rom.py +++ b/extract_rom.py @@ -3,8 +3,8 @@ import os; from libyaz0 import decompress -ROM_FILE_NAME = 'baserom.z64' -FILE_TABLE_OFFSET = 0x1A500 # 0x1C110 for JP1.0, 0x1C050 for JP1.1 +ROM_FILE_NAME = 'Legend of Zelda, The - Majoras Mask (E) (Prototype).z64' +FILE_TABLE_OFFSET = 0x1A500 # 0x1C110 for JP1.0, 0x1C050 for JP1.1, 0x24F60 for debug FILE_NAMES = { 0:'makerom', @@ -1585,7 +1585,7 @@ except IOError: dmadata_size = read_uint32_be(FILE_TABLE_OFFSET + 16 * 2 + 4) - read_uint32_be(FILE_TABLE_OFFSET + 16 * 2 + 0) file_count = dmadata_size // 0x10 - + # extract files for i in range(0, file_count): entryOffset = FILE_TABLE_OFFSET + 16 * i @@ -1606,19 +1606,19 @@ for i in range(0, file_count): else: # compressed compressed = True size = physEnd - physStart - + if physStart == 0xFFFFFFFF: # file is in table but not on cart? continue - + if virtStart == 0 and virtEnd == 0: # there are several entries at the end like this... continue - + print('extracting ' + filename + ' (0x%08X, 0x%08X, 0x%08X)' % (virtStart, virtEnd, size)) - + write_output_file('baserom/' + filename, physStart, size) if compressed: #print('decompressing ' + filename) - + fileobj = open('baserom/' + filename, 'rb') decompressed_data = decompress(fileobj.read()) fileobj.close() @@ -1626,4 +1626,4 @@ for i in range(0, file_count): writefile = open('decomp/' + filename, 'wb') writefile.write(decompressed_data) writefile.close() - + diff --git a/functions.py b/functions.py index 507f6e878a..b7862893cc 100644 --- a/functions.py +++ b/functions.py @@ -47,6 +47,7 @@ known_funcs = { 0x80085468:("func_80085468","UNK_TYPE","s80085320*"), 0x800854E0:("func_800854E0","UNK_TYPE","UNK_ARGS"), 0x80085538:("func_80085538","UNK_RET","s80085320*"), + 0x80086FDC:("func_80086FDC","f32","void"), 0x80087830:("func_80087830","UNK_TYPE","UNK_TYPE, UNK_TYPE, UNK_TYPE"), 0x80087854:("func_80087854","UNK_TYPE","u8*, UNK_TYPE, UNK_PTR"), 0x800878A4:("func_800878A4","UNK_TYPE","u8*, UNK_TYPE, UNK_TYPE, UNK_TYPE"), @@ -214,13 +215,35 @@ known_funcs = { 0x800A5C28:("func_800A5C28","UNK_RET","s800A5AC0*"), 0x800A5C60:("func_800A5C60","UNK_RET","s800A5AC0*, UNK_TYPE"), 0x800A5CB8:("func_800A5CB8","UNK_RET","s800A5AC0*, UNK_TYPE"), - 0x800B3BA4:("func_800B3BA4","UNK_RET","UNK_PTR, f32, UNK_PTR, UNK_TYPE"), + 0x800A63A8:("func_800A63A8","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A640C:("func_800A640C","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A6650:("func_800A6650","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A6A40:("func_800A6A40","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A72AC:("func_800A72AC","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A73A0:("func_800A73A0","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A74D8:("func_800A74D8","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A75B8:("func_800A75B8","UNK_RET","z_Actor* a0, z_GlobalContext* a1"), + 0x800A7650:("func_800A7650","s16","s16"), + 0x800B16B8:("func_800B16B8","UNK_RET","z_GlobalContext*, z_Vector3D*, UNK_PTR, UNK_PTR, UNK_PTR, UNK_PTR"), + 0x800B3BA4:("func_800B3BA4","UNK_RET","UNK_PTR, f32, UNK_PTR, f32"), 0x800B3FC0:("func_800B3FC0","UNK_TYPE","UNK_TYPE"), 0x800B5BB0:("func_800B5BB0","UNK_TYPE","z_GlobalContext*, UNK_TYPE"), + 0x800B5D6C:("func_800B5D6C","UNK_TYPE","z_GlobalContext*, s16"), + 0x800B5DB0:("func_800B5DB0","UNK_RET","z_GlobalContext*, s16"), + 0x800B670C:("func_800B670C","UNK_RET","z_Actor*"), 0x800B675C:("func_800B675C","UNK_RET","s800A5AC0*, UNK_TYPE"), + 0x800B67E0:("func_800B67E0","UNK_RET","z_Actor*, f32"), + 0x800B67FC:("func_800B67FC","UNK_RET","z_GlobalContext*, z_Actor*"), + 0x800B6A88:("func_800B6A88","UNK_RET","z_Actor*"), + 0x800B78B8:("func_800B78B8","UNK_RET","z_GlobalContext*, z_Actor*, f32, f32, f32, UNK_TYPE"), + 0x800B8050:("func_800B8050","UNK_RET","z_Actor*, z_GlobalContext*, UNK_TYPE"), + 0x800B8118:("func_800B8118","UNK_RET","z_Actor*, z_GlobalContext*, UNK_TYPE"), 0x800B84D0:("func_800B84D0","UNK_TYPE","s800A5AC0*, UNK_TYPE"), 0x800B863C:("func_800B863C","UNK_RET","s800A5AC0*, UNK_TYPE"), 0x800B867C:("func_800B867C","UNK_TYPE","s800A5AC0*"), + 0x800B89F8:("func_800B89F8","UNK_TYPE","z_Actor*, z_GlobalContext*"), + 0x800B8A1C:("func_800B8A1C","UNK_RET","z_Actor*, z_GlobalContext*, UNK_TYPE, f32, f32"), + 0x800BAC60:("func_800BAC60","z_Actor*","UNK_PTR, z_GlobalContext*, UNK_TYPE, f32, f32, f32, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE"), # Does this return a z_ActorEnItem00*? 0x800BDFC0:("func_800BDFC0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE, s800A5AC0*"), 0x800BE03C:("func_800BE03C","void","z_GlobalContext*, UNK_TYPE"), 0x800C6024:("func_800C6024","UNK_TYPE","UNK_TYPE"), @@ -239,17 +262,45 @@ known_funcs = { 0x800E130C:("func_800E130C","void","z_GlobalContext*, UNK_PTR, z_Actor*, UNK_PTR"), 0x800E1374:("func_800E1374","UNK_RET","UNK_TYPE, UNK_PTR, z_Actor*, UNK_PTR"), 0x800E2558:("func_800E2558","void","z_GlobalContext*, UNK_PTR, UNK_PTR"), + 0x800E2740:("func_800E2740","UNK_RET","z_GlobalContext*, UNK_PTR, UNK_PTR"), 0x800E2928:("func_800E2928","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_PTR"), 0x800E7DF8:("func_800E7DF8","void","z_Actor*, UNK_PTR"), + 0x800E8EA0:("func_800E8EA0","void","z_GlobalContext* a0, z_Actor* a1, u16 a2"), + 0x800E8ED0:("func_800E8ED0","UNK_TYPE","UNK_TYPE a0"), + 0x800E8EE0:("func_800E8EE0","void","UNK_TYPE a0"), + 0x800E8EEC:("func_800E8EEC","UNK_TYPE","UNK_TYPE a0"), + 0x800E8EFC:("func_800E8EFC","void","UNK_TYPE a0"), + 0x800E8F08:("func_800E8F08","UNK_TYPE","s16* a0, s16* a1"), + 0x800E8FA4:("func_800E8FA4","UNK_RET","UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2, UNK_TYPE a3"), + 0x800E9138:("func_800E9138","UNK_RET","UNK_ARGS"), + 0x800E9250:("func_800E9250","UNK_RET","UNK_ARGS"), + 0x800EE320:("func_800EE320","UNK_RET","z_GlobalContext*, UNK_TYPE"), + 0x800F0568:("func_800F0568","UNK_RET","z_GlobalContext*, z_Vector3D*, UNK_TYPE, UNK_TYPE"), + 0x800FED44:("func_800FED44","f32","s16"), + 0x800FED84:("func_800FED84","f32","s16"), 0x800FFADC:("func_800FFADC","void","z_Actor*, z_ActorCompInitEntry*"), # Compact Instance Initializer - 0x80131758:("func_80131758","void","z_GlobalContext*, UNK_TYPE"), + 0x800FFCD8:("func_800FFCD8","UNK_RET","f32*, f32, f32, f32, f32"), + 0x800FFEBC:("func_800FFEBC","UNK_TYPE","s16*, s16, UNK_TYPE, UNK_TYPE, UNK_TYPE"), 0x80100504:("func_80100504","UNK_TYPE","UNK_TYPE"), + 0x80112E80:("func_80112E80","UNK_RET","z_GlobalContext*, UNK_TYPE"), + 0x80115908:("func_80115908","UNK_RET","z_GlobalContext*, UNK_TYPE"), + 0x8012C28C:("func_8012C28C","UNK_RET","z_GraphicsContext*"), + 0x8012C2DC:("func_8012C2DC","UNK_RET","z_GraphicsContext*"), + 0x8012C724:("func_8012C724","u32*","u32*"), + 0x8012F608:("func_8012F608","u8","UNK_PTR, UNK_TYPE"), + 0x8012F668:("func_8012F668","UNK_TYPE","UNK_PTR, UNK_TYPE"), + 0x80131758:("func_80131758","void","z_GlobalContext*, UNK_TYPE"), 0x80138C88:("func_80138C88","UNK_RET","UNK_PTR, UNK_PTR, UNK_PTR"), 0x80139188:("func_80139188","UNK_TYPE","UNK_PTR, UNK_PTR"), 0x80139894:("func_80139894","UNK_RET","UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, f32, f32, f32"), + 0x801660B8:("func_801660B8","u32*","z_GlobalContext*, u32*, UNK_TYPE"), 0x80174BF0:("func_80174BF0","UNK_RET","UNK_TYPE"), + 0x801795C0:("func_801795C0","f32","f32"), + 0x8018039C:("func_8018039C","UNK_RET","f32, f32, f32, UNK_TYPE"), + 0x80181A40:("func_80181A40","UNK_TYPE","z_GraphicsContext*"), 0x80183070:("func_80183070","void","void"), 0x8018349C:("func_8018349C","UNK_RET","UNK_TYPE, UNK_TYPE"), + 0x8019F0C8:("func_8019F0C8","UNK_RET","UNK_TYPE"), # ovl_En_Test #0x80862B70:("func_80862B70","void","void* a0"), diff --git a/include/functions.h b/include/functions.h index 7dcbc06890..abcc2342b4 100644 --- a/include/functions.h +++ b/include/functions.h @@ -184,7 +184,7 @@ UNK_RET func_80085538(s80085320*); // func_80085538 // UNK_RET func_80086F28(UNK_ARGS); // UNK_RET func_80086FA0(UNK_ARGS); // UNK_RET func_80086FD0(UNK_ARGS); -// UNK_RET func_80086FDC(UNK_ARGS); +f32 func_80086FDC(void); // func_80086FDC // UNK_RET func_80087030(UNK_ARGS); // UNK_RET func_80087160(UNK_ARGS); // UNK_RET func_8008718C(UNK_ARGS); @@ -498,11 +498,11 @@ UNK_RET func_800A5CB8(s800A5AC0*, UNK_TYPE); // func_800A5CB8 // UNK_RET func_800A630C(UNK_ARGS); // UNK_RET func_800A6314(UNK_ARGS); // UNK_RET func_800A637C(UNK_ARGS); -// UNK_RET func_800A63A8(UNK_ARGS); -// UNK_RET func_800A640C(UNK_ARGS); -// UNK_RET func_800A6650(UNK_ARGS); +UNK_RET func_800A63A8(z_Actor* a0, z_GlobalContext* a1); // func_800A63A8 +UNK_RET func_800A640C(z_Actor* a0, z_GlobalContext* a1); // func_800A640C +UNK_RET func_800A6650(z_Actor* a0, z_GlobalContext* a1); // func_800A6650 // UNK_RET func_800A6780(UNK_ARGS); -// UNK_RET func_800A6A40(UNK_ARGS); +UNK_RET func_800A6A40(z_Actor* a0, z_GlobalContext* a1); // func_800A6A40 // UNK_RET func_800A6B98(UNK_ARGS); // UNK_RET func_800A6E30(UNK_ARGS); // UNK_RET func_800A6E4C(UNK_ARGS); @@ -540,11 +540,11 @@ UNK_RET func_800A5CB8(s800A5AC0*, UNK_TYPE); // func_800A5CB8 // UNK_RET func_800A727C(UNK_ARGS); // UNK_RET func_800A7290(UNK_ARGS); // UNK_RET func_800A729C(UNK_ARGS); -// UNK_RET func_800A72AC(UNK_ARGS); -// UNK_RET func_800A73A0(UNK_ARGS); -// UNK_RET func_800A74D8(UNK_ARGS); -// UNK_RET func_800A75B8(UNK_ARGS); -// UNK_RET func_800A7650(UNK_ARGS); +UNK_RET func_800A72AC(z_Actor* a0, z_GlobalContext* a1); // func_800A72AC +UNK_RET func_800A73A0(z_Actor* a0, z_GlobalContext* a1); // func_800A73A0 +UNK_RET func_800A74D8(z_Actor* a0, z_GlobalContext* a1); // func_800A74D8 +UNK_RET func_800A75B8(z_Actor* a0, z_GlobalContext* a1); // func_800A75B8 +s16 func_800A7650(s16); // func_800A7650 // UNK_RET func_800A7730(UNK_ARGS); // UNK_RET func_800A7AD4(UNK_ARGS); // UNK_RET func_800A7D28(UNK_ARGS); @@ -637,7 +637,7 @@ UNK_RET func_800A5CB8(s800A5AC0*, UNK_TYPE); // func_800A5CB8 // UNK_RET func_800B14D4(UNK_ARGS); // UNK_RET func_800B1598(UNK_ARGS); // UNK_RET func_800B165C(UNK_ARGS); -// UNK_RET func_800B16B8(UNK_ARGS); +UNK_RET func_800B16B8(z_GlobalContext*, z_Vector3D*, UNK_PTR, UNK_PTR, UNK_PTR, UNK_PTR); // func_800B16B8 // UNK_RET func_800B16F4(UNK_ARGS); // UNK_RET func_800B1970(UNK_ARGS); // UNK_RET func_800B19E0(UNK_ARGS); @@ -684,7 +684,7 @@ UNK_RET func_800A5CB8(s800A5AC0*, UNK_TYPE); // func_800A5CB8 // UNK_RET func_800B3880(UNK_ARGS); // UNK_RET func_800B39A4(UNK_ARGS); // UNK_RET func_800B3AD0(UNK_ARGS); -UNK_RET func_800B3BA4(UNK_PTR, f32, UNK_PTR, UNK_TYPE); // func_800B3BA4 +UNK_RET func_800B3BA4(UNK_PTR, f32, UNK_PTR, f32); // func_800B3BA4 // UNK_RET func_800B3BC8(UNK_ARGS); UNK_TYPE func_800B3FC0(UNK_TYPE); // func_800B3FC0 // UNK_RET func_800B4024(UNK_ARGS); @@ -713,8 +713,8 @@ UNK_TYPE func_800B5BB0(z_GlobalContext*, UNK_TYPE); // func_800B5BB0 // UNK_RET func_800B5CDC(UNK_ARGS); // UNK_RET func_800B5D18(UNK_ARGS); // UNK_RET func_800B5D30(UNK_ARGS); -// UNK_RET func_800B5D6C(UNK_ARGS); -// UNK_RET func_800B5DB0(UNK_ARGS); +UNK_TYPE func_800B5D6C(z_GlobalContext*, s16); // func_800B5D6C +UNK_RET func_800B5DB0(z_GlobalContext*, s16); // func_800B5DB0 // UNK_RET func_800B5DF0(UNK_ARGS); // UNK_RET func_800B5E0C(UNK_ARGS); // UNK_RET func_800B5E68(UNK_ARGS); @@ -725,18 +725,18 @@ UNK_TYPE func_800B5BB0(z_GlobalContext*, UNK_TYPE); // func_800B5BB0 // UNK_RET func_800B6584(UNK_ARGS); // UNK_RET func_800B6608(UNK_ARGS); // UNK_RET func_800B6680(UNK_ARGS); -// UNK_RET func_800B670C(UNK_ARGS); +UNK_RET func_800B670C(z_Actor*); // func_800B670C // UNK_RET func_800B672C(UNK_ARGS); UNK_RET func_800B675C(s800A5AC0*, UNK_TYPE); // func_800B675C // UNK_RET func_800B67C0(UNK_ARGS); -// UNK_RET func_800B67E0(UNK_ARGS); -// UNK_RET func_800B67FC(UNK_ARGS); +UNK_RET func_800B67E0(z_Actor*, f32); // func_800B67E0 +UNK_RET func_800B67FC(z_GlobalContext*, z_Actor*); // func_800B67FC // UNK_RET func_800B6834(UNK_ARGS); // UNK_RET func_800B6948(UNK_ARGS); // UNK_RET func_800B6988(UNK_ARGS); // UNK_RET func_800B69AC(UNK_ARGS); // UNK_RET func_800B6A10(UNK_ARGS); -// UNK_RET func_800B6A88(UNK_ARGS); +UNK_RET func_800B6A88(z_Actor*); // func_800B6A88 // UNK_RET func_800B6AB4(UNK_ARGS); // UNK_RET func_800B6B24(UNK_ARGS); // UNK_RET func_800B6B50(UNK_ARGS); @@ -776,12 +776,12 @@ UNK_RET func_800B675C(s800A5AC0*, UNK_TYPE); // func_800B675C // UNK_RET func_800B75A0(UNK_ARGS); // UNK_RET func_800B761C(UNK_ARGS); // UNK_RET func_800B7678(UNK_ARGS); -// UNK_RET func_800B78B8(UNK_ARGS); +UNK_RET func_800B78B8(z_GlobalContext*, z_Actor*, f32, f32, f32, UNK_TYPE); // func_800B78B8 // UNK_RET func_800B7E04(UNK_ARGS); // UNK_RET func_800B7FE0(UNK_ARGS); // UNK_RET func_800B8018(UNK_ARGS); -// UNK_RET func_800B8050(UNK_ARGS); -// UNK_RET func_800B8118(UNK_ARGS); +UNK_RET func_800B8050(z_Actor*, z_GlobalContext*, UNK_TYPE); // func_800B8050 +UNK_RET func_800B8118(z_Actor*, z_GlobalContext*, UNK_TYPE); // func_800B8118 // UNK_RET func_800B81E0(UNK_ARGS); // UNK_RET func_800B8214(UNK_ARGS); // UNK_RET func_800B8248(UNK_ARGS); @@ -801,8 +801,8 @@ UNK_TYPE func_800B867C(s800A5AC0*); // func_800B867C // UNK_RET func_800B886C(UNK_ARGS); // UNK_RET func_800B8898(UNK_ARGS); // UNK_RET func_800B8934(UNK_ARGS); -// UNK_RET func_800B89F8(UNK_ARGS); -// UNK_RET func_800B8A1C(UNK_ARGS); +UNK_TYPE func_800B89F8(z_Actor*, z_GlobalContext*); // func_800B89F8 +UNK_RET func_800B8A1C(z_Actor*, z_GlobalContext*, UNK_TYPE, f32, f32); // func_800B8A1C // UNK_RET func_800B8B84(UNK_ARGS); // UNK_RET func_800B8BB0(UNK_ARGS); // UNK_RET func_800B8BFC(UNK_ARGS); @@ -849,7 +849,7 @@ UNK_TYPE func_800B867C(s800A5AC0*); // func_800B867C // UNK_RET func_800BAAB4(UNK_ARGS); // UNK_RET func_800BAB24(UNK_ARGS); // UNK_RET func_800BABFC(UNK_ARGS); -// UNK_RET func_800BAC60(UNK_ARGS); +z_Actor* func_800BAC60(UNK_PTR, z_GlobalContext*, UNK_TYPE, f32, f32, f32, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE); // func_800BAC60 // UNK_RET func_800BACD4(UNK_ARGS); // UNK_RET func_800BAE14(UNK_ARGS); // UNK_RET func_800BB0C0(UNK_ARGS); @@ -1430,7 +1430,7 @@ UNK_RET func_800E1374(UNK_TYPE, UNK_PTR, z_Actor*, UNK_PTR); // func_800E1374 // UNK_RET func_800E2470(UNK_ARGS); // UNK_RET func_800E2480(UNK_ARGS); void func_800E2558(z_GlobalContext*, UNK_PTR, UNK_PTR); // func_800E2558 -// UNK_RET func_800E2740(UNK_ARGS); +UNK_RET func_800E2740(z_GlobalContext*, UNK_PTR, UNK_PTR); // func_800E2740 UNK_RET func_800E2928(UNK_TYPE, UNK_TYPE, UNK_PTR); // func_800E2928 // UNK_RET func_800E2B98(UNK_ARGS); // UNK_RET func_800E2BBC(UNK_ARGS); @@ -1525,10 +1525,15 @@ void func_800E7DF8(z_Actor*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800E8690(UNK_ARGS); // UNK_RET func_800E86C0(UNK_ARGS); // UNK_RET func_800E86E0(UNK_ARGS); -// UNK_RET func_800E8EA0(UNK_ARGS); -// UNK_RET func_800E8F08(UNK_ARGS); -// UNK_RET func_800E8FA4(UNK_ARGS); -// UNK_RET func_800E9250(UNK_ARGS); +void func_800E8EA0(z_GlobalContext* a0, z_Actor* a1, u16 a2); // func_800E8EA0 +UNK_TYPE func_800E8ED0(UNK_TYPE a0); // func_800E8ED0 +void func_800E8EE0(UNK_TYPE a0); // func_800E8EE0 +UNK_TYPE func_800E8EEC(UNK_TYPE a0); // func_800E8EEC +void func_800E8EFC(UNK_TYPE a0); // func_800E8EFC +UNK_TYPE func_800E8F08(s16* a0, s16* a1); // func_800E8F08 +UNK_RET func_800E8FA4(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2, UNK_TYPE a3); // func_800E8FA4 +UNK_RET func_800E9138(UNK_ARGS); // func_800E9138 +UNK_RET func_800E9250(UNK_ARGS); // func_800E9250 // UNK_RET func_800E9360(UNK_ARGS); // UNK_RET func_800E93E0(UNK_ARGS); // UNK_RET func_800E9470(UNK_ARGS); @@ -1667,7 +1672,7 @@ void func_800E7DF8(z_Actor*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800EE200(UNK_ARGS); // UNK_RET func_800EE29C(UNK_ARGS); // UNK_RET func_800EE2F4(UNK_ARGS); -// UNK_RET func_800EE320(UNK_ARGS); +UNK_RET func_800EE320(z_GlobalContext*, UNK_TYPE); // func_800EE320 // UNK_RET func_800EE364(UNK_ARGS); // UNK_RET func_800EE400(UNK_ARGS); // UNK_RET func_800EE5FC(UNK_ARGS); @@ -1699,7 +1704,7 @@ void func_800E7DF8(z_Actor*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800F03C0(UNK_ARGS); // UNK_RET func_800F03C5(UNK_ARGS); // UNK_RET func_800F048C(UNK_ARGS); -// UNK_RET func_800F0568(UNK_ARGS); +UNK_RET func_800F0568(z_GlobalContext*, z_Vector3D*, UNK_TYPE, UNK_TYPE); // func_800F0568 // UNK_RET func_800F0590(UNK_ARGS); // UNK_RET func_800F05C0(UNK_ARGS); // UNK_RET func_800F07C0(UNK_ARGS); @@ -1896,8 +1901,8 @@ void func_800E7DF8(z_Actor*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800FEAC0(UNK_ARGS); // UNK_RET func_800FEAF4(UNK_ARGS); // UNK_RET func_800FEC90(UNK_ARGS); -// UNK_RET func_800FED44(UNK_ARGS); -// UNK_RET func_800FED84(UNK_ARGS); +f32 func_800FED44(s16); // func_800FED44 +f32 func_800FED84(s16); // func_800FED84 // UNK_RET func_800FEDC4(UNK_ARGS); // UNK_RET func_800FEE08(UNK_ARGS); // UNK_RET func_800FEE70(UNK_ARGS); @@ -1935,10 +1940,10 @@ void func_800FFADC(z_Actor*, z_ActorCompInitEntry*); // func_800FFADC // UNK_RET func_800FFC50(UNK_ARGS); // UNK_RET func_800FFC7C(UNK_ARGS); // UNK_RET func_800FFCB4(UNK_ARGS); -// UNK_RET func_800FFCD8(UNK_ARGS); +UNK_RET func_800FFCD8(f32*, f32, f32, f32, f32); // func_800FFCD8 // UNK_RET func_800FFDF8(UNK_ARGS); // UNK_RET func_800FFE68(UNK_ARGS); -// UNK_RET func_800FFEBC(UNK_ARGS); +UNK_TYPE func_800FFEBC(s16*, s16, UNK_TYPE, UNK_TYPE, UNK_TYPE); // func_800FFEBC // UNK_RET func_800FFFD8(UNK_ARGS); // UNK_RET func_80100009(UNK_ARGS); // UNK_RET func_80100030(UNK_ARGS); @@ -2196,7 +2201,7 @@ UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_801129E4(UNK_ARGS); // UNK_RET func_80112AFC(UNK_ARGS); // UNK_RET func_80112B40(UNK_ARGS); -// UNK_RET func_80112E80(UNK_ARGS); +UNK_RET func_80112E80(z_GlobalContext*, UNK_TYPE); // func_80112E80 // UNK_RET func_801143CC(UNK_ARGS); // UNK_RET func_80114978(UNK_ARGS); // UNK_RET func_801149A0(UNK_ARGS); @@ -2209,7 +2214,7 @@ UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_80115428(UNK_ARGS); // UNK_RET func_8011552C(UNK_ARGS); // UNK_RET func_80115844(UNK_ARGS); -// UNK_RET func_80115908(UNK_ARGS); +UNK_RET func_80115908(z_GlobalContext*, UNK_TYPE); // func_80115908 // UNK_RET func_801159EC(UNK_ARGS); // UNK_RET func_80115A14(UNK_ARGS); // UNK_RET func_80115D14(UNK_ARGS); @@ -2423,9 +2428,9 @@ UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_8012C214(UNK_ARGS); // UNK_RET func_8012C240(UNK_ARGS); // UNK_RET func_8012C268(UNK_ARGS); -// UNK_RET func_8012C28C(UNK_ARGS); +UNK_RET func_8012C28C(z_GraphicsContext*); // func_8012C28C // UNK_RET func_8012C2B4(UNK_ARGS); -// UNK_RET func_8012C2DC(UNK_ARGS); +UNK_RET func_8012C2DC(z_GraphicsContext*); // func_8012C2DC // UNK_RET func_8012C304(UNK_ARGS); // UNK_RET func_8012C3A4(UNK_ARGS); // UNK_RET func_8012C3CC(UNK_ARGS); @@ -2440,7 +2445,7 @@ UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_8012C680(UNK_ARGS); // UNK_RET func_8012C6AC(UNK_ARGS); // UNK_RET func_8012C6FC(UNK_ARGS); -// UNK_RET func_8012C724(UNK_ARGS); +u32* func_8012C724(u32*); // func_8012C724 // UNK_RET func_8012C7FC(UNK_ARGS); // UNK_RET func_8012C868(UNK_ARGS); // UNK_RET func_8012C8AC(UNK_ARGS); @@ -2483,8 +2488,8 @@ UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_8012F2E0(UNK_ARGS); // UNK_RET func_8012F3D0(UNK_ARGS); // UNK_RET func_8012F4FC(UNK_ARGS); -// UNK_RET func_8012F608(UNK_ARGS); -// UNK_RET func_8012F668(UNK_ARGS); +u8 func_8012F608(UNK_PTR, UNK_TYPE); // func_8012F608 +UNK_TYPE func_8012F668(UNK_PTR, UNK_TYPE); // func_8012F668 // UNK_RET func_8012F73C(UNK_ARGS); // UNK_RET func_8012F79C(UNK_ARGS); // UNK_RET func_8012F90C(UNK_ARGS); @@ -3177,7 +3182,7 @@ UNK_RET func_80139894(UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, // UNK_RET func_80165FE8(UNK_ARGS); // UNK_RET func_80165FF0(UNK_ARGS); // UNK_RET func_80166060(UNK_ARGS); -// UNK_RET func_801660B8(UNK_ARGS); +u32* func_801660B8(z_GlobalContext*, u32*, UNK_TYPE); // func_801660B8 // UNK_RET func_8016613C(UNK_ARGS); // UNK_RET func_801663C4(UNK_ARGS); // UNK_RET func_80166644(UNK_ARGS); @@ -3439,7 +3444,7 @@ UNK_RET func_80174BF0(UNK_TYPE); // func_80174BF0 // UNK_RET func_801794EC(UNK_ARGS); // UNK_RET func_80179540(UNK_ARGS); // UNK_RET func_80179594(UNK_ARGS); -// UNK_RET func_801795C0(UNK_ARGS); +f32 func_801795C0(f32); // func_801795C0 // UNK_RET func_801795F0(UNK_ARGS); // UNK_RET func_80179678(UNK_ARGS); // UNK_RET func_80179798(UNK_ARGS); @@ -3535,7 +3540,7 @@ UNK_RET func_80174BF0(UNK_TYPE); // func_80174BF0 // UNK_RET func_80180234(UNK_ARGS); // UNK_RET func_80180244(UNK_ARGS); // UNK_RET func_8018029C(UNK_ARGS); -// UNK_RET func_8018039C(UNK_ARGS); +UNK_RET func_8018039C(f32, f32, f32, UNK_TYPE); // func_8018039C // UNK_RET func_80180478(UNK_ARGS); // UNK_RET func_801807B8(UNK_ARGS); // UNK_RET func_80180900(UNK_ARGS); @@ -3548,7 +3553,7 @@ UNK_RET func_80174BF0(UNK_TYPE); // func_80174BF0 // UNK_RET func_80181650(UNK_ARGS); // UNK_RET func_801817FC(UNK_ARGS); // UNK_RET func_80181A18(UNK_ARGS); -// UNK_RET func_80181A40(UNK_ARGS); +UNK_TYPE func_80181A40(z_GraphicsContext*); // func_80181A40 // UNK_RET func_80181A98(UNK_ARGS); // UNK_RET func_80181B50(UNK_ARGS); // UNK_RET func_80181B78(UNK_ARGS); @@ -4198,7 +4203,7 @@ UNK_RET func_8018349C(UNK_TYPE, UNK_TYPE); // func_8018349C // UNK_RET func_8019EE88(UNK_ARGS); // UNK_RET func_8019F024(UNK_ARGS); // UNK_RET func_8019F05C(UNK_ARGS); -// UNK_RET func_8019F0C8(UNK_ARGS); +UNK_RET func_8019F0C8(UNK_TYPE); // func_8019F0C8 // UNK_RET func_8019F128(UNK_ARGS); // UNK_RET func_8019F170(UNK_ARGS); // UNK_RET func_8019F1C0(UNK_ARGS); diff --git a/include/structs.h b/include/structs.h index 4d0e0a2362..1443aca3e6 100644 --- a/include/structs.h +++ b/include/structs.h @@ -24,57 +24,57 @@ typedef struct { // TODO this should extend from z_Actor typedef struct s800A5AC0_s { - /* 0x000 */ u8 pad0[0x1C]; - /* 0x01C */ s16 unk1C; - /* 0x01E */ u8 pad1[0x74]; - /* 0x092 */ s16 unk92; - /* 0x094 */ u8 pad2[0x22]; - /* 0x0B6 */ u8 unkB6; - /* 0x0B7 */ u8 pad4[5]; - /* 0x0BC */ u16 unkBC; // or char - /* 0x0BE */ s16 unkBE; - /* 0x0C0 */ u8 pad5[0x56]; - /* 0x116 */ u16 unk116; - /* 0x118 */ u8 pad6[0x2C]; - /* 0x144 */ void(*unk144)(struct s800A5AC0_s*, UNK_TYPE); - /* 0x148 */ UNK_TYPE unk148; + /* 0x000 */ u8 pad0[0x1C]; + /* 0x01C */ s16 unk1C; + /* 0x01E */ u8 pad1[0x74]; + /* 0x092 */ s16 unk92; + /* 0x094 */ u8 pad2[0x22]; + /* 0x0B6 */ u8 unkB6; + /* 0x0B7 */ u8 pad4[5]; + /* 0x0BC */ u16 unkBC; // or char + /* 0x0BE */ s16 unkBE; + /* 0x0C0 */ u8 pad5[0x56]; + /* 0x116 */ u16 unk116; + /* 0x118 */ u8 pad6[0x2C]; + /* 0x144 */ void(*unk144)(struct s800A5AC0_s*, UNK_TYPE); + /* 0x148 */ UNK_TYPE unk148; } s800A5AC0; typedef struct { - /* 0x00 */ u8 pad0[8]; - /* 0x08 */ UNK_TYPE unk8; - /* 0x0C */ UNK_TYPE unkC; - /* 0x10 */ u32 unk10; - /* 0x14 */ u8 pad1[0xA]; - /* 0x1E */ s8 unk1E; - /* 0x1F */ u8 pad2[1]; + /* 0x00 */ u8 pad0[8]; + /* 0x08 */ UNK_TYPE unk8; + /* 0x0C */ UNK_TYPE unkC; + /* 0x10 */ u32 unk10; + /* 0x14 */ u8 pad1[0xA]; + /* 0x1E */ s8 unk1E; + /* 0x1F */ u8 pad2[1]; } s800BF9A0; typedef struct { - /* 0x00 */ UNK_TYPE unk0; - /* 0x04 */ UNK_TYPE unk4; - /* 0x08 */ UNK_TYPE unk8; - /* 0x12 */ u8 pad0[0x5C]; - /* 0x68 */ UNK_TYPE unk68; - /* 0x6C */ UNK_TYPE unk6C; - /* 0x70 */ UNK_TYPE unk70; - /* 0x72 */ u16 unk72; - /* 0x74 */ u16 unk74; - /* 0x76 */ u16 unk76; - /* 0x78 */ u8 pad1[2]; - /* 0x7C */ f32 unk7C; - /* 0x80 */ f32 unk80; - /* 0x84 */ f32 unk84; - /* 0x88 */ UNK_TYPE unk88; - /* 0x8C */ UNK_TYPE unk8C; - /* 0x90 */ UNK_TYPE unk90; - /* 0x94 */ u16 unk94; - /* 0x96 */ u16 unk96; - /* 0x98 */ u16 unk98; - /* 0x9A */ u8 pad2[2]; - /* 0x9C */ f32 unk9C; - /* 0xA0 */ f32 unkA0; - /* 0xA4 */ f32 unkA4; + /* 0x00 */ UNK_TYPE unk0; + /* 0x04 */ UNK_TYPE unk4; + /* 0x08 */ UNK_TYPE unk8; + /* 0x12 */ u8 pad0[0x5C]; + /* 0x68 */ UNK_TYPE unk68; + /* 0x6C */ UNK_TYPE unk6C; + /* 0x70 */ UNK_TYPE unk70; + /* 0x72 */ u16 unk72; + /* 0x74 */ u16 unk74; + /* 0x76 */ u16 unk76; + /* 0x78 */ u8 pad1[2]; + /* 0x7C */ f32 unk7C; + /* 0x80 */ f32 unk80; + /* 0x84 */ f32 unk84; + /* 0x88 */ UNK_TYPE unk88; + /* 0x8C */ UNK_TYPE unk8C; + /* 0x90 */ UNK_TYPE unk90; + /* 0x94 */ u16 unk94; + /* 0x96 */ u16 unk96; + /* 0x98 */ u16 unk98; + /* 0x9A */ u8 pad2[2]; + /* 0x9C */ f32 unk9C; + /* 0xA0 */ f32 unkA0; + /* 0xA4 */ f32 unkA4; } s800CAAD0; typedef struct { @@ -106,9 +106,9 @@ typedef struct { } s800F4F54; typedef struct { - /* 0x0 */ f32 x; - /* 0x4 */ f32 y; - /* 0x8 */ f32 z; + /* 0x0 */ f32 x; + /* 0x4 */ f32 y; + /* 0x8 */ f32 z; } z_Vector3D; struct z_Actor; @@ -116,48 +116,74 @@ struct z_Actor; typedef void(*z_ActorFunc)(struct z_Actor*, void*); typedef struct { - /* 0x000 */ u8 pad0[4]; - /* 0x004 */ UNK_TYPE unk4; - /* 0x008 */ u8 pad1[0x14]; - /* 0x01C */ s16 unk1C; - /* 0x01E */ u8 pad2[0x3A]; - /* 0x058 */ z_Vector3D unk58; // scale? - /* 0x064 */ u8 pad3[0x2E]; - /* 0x092 */ s16 unk92; - /* 0x094 */ u8 pad4[0x22]; - /* 0x0B6 */ u8 unkB6; - /* 0x0B7 */ u8 pad5[5]; - /* 0x0BC */ u16 unkBC; // or char - /* 0x0BE */ s16 unkBE; - /* 0x0C0 */ u8 pad6[0x3C]; - /* 0x0FC */ f32 unkFC; // start of z_Vector3D? - /* 0x100 */ f32 unk100; - /* 0x104 */ f32 unk104; - /* 0x108 */ u8 pad7[0xE]; - /* 0x116 */ u16 unk116; - /* 0x118 */ u8 pad8[0x24]; - /* 0x13C */ z_ActorFunc drawFunc; - /* 0x140 */ u8 pad9[4]; - // TODO figure out what size this is + /* 0x000 */ u8 pad0[4]; + /* 0x004 */ UNK_TYPE unk4; + /* 0x008 */ u8 pad1[0x14]; + /* 0x01C */ s16 unk1C; + /* 0x01E */ u8 pad2[0x3A]; + /* 0x058 */ z_Vector3D unk58; // scale? + /* 0x064 */ u8 pad3[0x2E]; + /* 0x092 */ s16 unk92; + /* 0x094 */ u8 pad4[0x22]; + /* 0x0B6 */ u8 unkB6; + /* 0x0B7 */ u8 pad5[5]; + /* 0x0BC */ u16 unkBC; // or char + /* 0x0BE */ s16 unkBE; + /* 0x0C0 */ u8 pad6[0x3C]; + /* 0x0FC */ f32 unkFC; // start of z_Vector3D? + /* 0x100 */ f32 unk100; + /* 0x104 */ f32 unk104; + /* 0x108 */ u8 pad7[0xE]; + /* 0x116 */ u16 unk116; + /* 0x118 */ u8 pad8[0x24]; + /* 0x13C */ z_ActorFunc drawFunc; + /* 0x140 */ u8 pad9[4]; + // TODO figure out what size this is } z_Actor; -typedef struct s80BD5530_s { - /* 0x00000 */ u8 pad[0x18884]; - /* 0x18884 */ UNK_TYPE unk18884; +typedef struct { + /* 0x000 */ u8 pad0[0x2B0]; + /* 0x2B0 */ u32* unk2B0; // OVERLAY_DISP append address + /* 0x2B4 */ u8 pad1[0xC]; + /* 0x2C0 */ u32* unk2C0; // POLY_OPA_DISP append address +} z_GraphicsContext; + +// Some structure pointed to by Global Context + 0x1CCC; +typedef struct { + /* 0x000 */ u8 pad0[0x24]; + /* 0x024 */ z_Vector3D unk24; + /* 0x030 */ u8 pad1[0xA44]; + /* 0xA74 */ UNK_TYPE unkA74; +} sGlobalContext1CCC; + +typedef struct { + /* 0x00000 */ z_GraphicsContext* unk0; + /* 0x00004 */ u8 pad0[0x1C9C]; + /* 0x01CA0 */ UNK_TYPE unk1CA0; + /* 0x01CA4 */ u8 pad1[0x28]; + /* 0x01CCC */ sGlobalContext1CCC* unk1CCC; + /* 0x01CD0 */ u8 pad2[0x15330]; + /* 0x17000 */ u16 unk17000; + /* 0x17002 */ u8 pad3[0xD86]; + /* 0x17D88 */ UNK_TYPE unk17D88; + /* 0x17D8C */ u8 pad4[0xAB4]; + /* 0x18840 */ UNK_TYPE unk18840; + /* 0x18844 */ u8 pad5[0x40]; + /* 0x18884 */ UNK_TYPE unk18884; } z_GlobalContext; typedef struct { - u32 cont : 1; - u32 type : 4; - u32 offset : 11; - u32 value : 16; + u32 cont : 1; + u32 type : 4; + u32 offset : 11; + u32 value : 16; } z_ActorCompInitEntry; typedef struct { /* 0x00 */ s16 id; /* 0x02 */ u8 type; // Classifies actor and determines when actor will execute /* 0x03 */ u8 room; // Room instance was spawned in. If value set to FF in - // rom, instance does not despawn when swapping rooms + // rom, instance does not despawn when swapping rooms /* 0x04 */ s32 flags; // unknown /* 0x08 */ s16 objectId; // Possibly it's primary object dependency /* 0x0A */ // Padding @@ -168,6 +194,63 @@ typedef struct { /* 0x1C */ z_ActorFunc draw; // Draw function } z_ActorInit; +// TODO probably an actor? +typedef struct { + /* 0x000 */ u8 pad0[3]; + /* 0x003 */ s8 unk3; + /* 0x004 */ UNK_TYPE unk4; + /* 0x008 */ u8 pad1[0x10]; + /* 0x018 */ s16 unk18; + /* 0x01A */ u8 pad2[2]; + /* 0x01C */ volatile s16 unk1C; //! ...is this volatile??? It makes func_800A5D70 match :/ + /* 0x01E */ u8 unk1E; + /* 0x01F */ u8 pad3[0x05]; + /* 0x024 */ z_Vector3D unk24; + /* 0x030 */ s16 unk30; + /* 0x032 */ s16 unk32; + /* 0x034 */ u8 pad4[8]; + /* 0x03C */ z_Vector3D unk3C; + /* 0x048 */ u8 pad5[0x10]; + /* 0x058 */ f32 unk58; + /* 0x05C */ f32 unk5C; + /* 0x060 */ f32 unk60; + /* 0x064 */ u8 pad6[4]; + /* 0x068 */ f32 unk68; + /* 0x06C */ u8 pad7[4]; + /* 0x070 */ f32 unk70; + /* 0x074 */ f32 unk74; + /* 0x078 */ u8 pad8[0x10]; + /* 0x088 */ f32 unk88; + /* 0x08C */ u8 pad9[4]; + /* 0x090 */ u16 unk90; + /* 0x092 */ u16 unk92; + /* 0x094 */ u8 pad10[4]; + /* 0x098 */ f32 unk98; + /* 0x09C */ f32 unk9C; + /* 0x0A0 */ u8 pad11[0x1C]; + /* 0x0BC */ s16 unkBC; + /* 0x0BE */ s16 unkBE; + /* 0x0C0 */ s16 unkC0; + /* 0x0C2 */ u8 pad12[2]; + /* 0x0C4 */ f32 unkC4; + /* 0x0C8 */ u8 pad13[8]; + /* 0x0D0 */ u8 unkD0; + /* 0x0D1 */ u8 pad14[0x4D]; + /* 0x11E */ u8 unk11E; + /* 0x11F */ u8 pad15[0x25]; + /* 0x144 */ UNK_FUN_PTR(unk144); + /* 0x148 */ s16 unk148; + /* 0x14A */ s16 unk14A; + /* 0x14C */ s16 unk14C; + /* 0x14E */ s16 unk14E; + /* 0x150 */ s16 unk150; + /* 0x152 */ s16 unk152; + /* 0x154 */ f32 unk154; + /* 0x158 */ UNK_TYPE unk158; + /* 0x15C */ u8 pad16[0x48]; + /* 0x1A4 */ u8 unk1A4; +} s800A5D00; + // TODO everything past here should be placed in an appropiate libultra header diff --git a/include/variables.h b/include/variables.h index 1d6b7fe6e7..005993dcba 100644 --- a/include/variables.h +++ b/include/variables.h @@ -835,7 +835,7 @@ extern UNK_TYPE D_00C7A4E0; // D_00C7A4E0 //extern UNK_TYPE D_060010E0; //extern UNK_TYPE D_060010F0; //extern UNK_TYPE D_060010F4; -extern UNK_TYPE D_06001100; +extern UNK_TYPE D_06001100; // D_06001100 //extern UNK_TYPE D_06001118; //extern UNK_TYPE D_06001140; //extern UNK_TYPE D_06001158; @@ -854,7 +854,7 @@ extern UNK_TYPE D_06001100; //extern UNK_TYPE D_06001210; //extern UNK_TYPE D_06001214; //extern UNK_TYPE D_06001220; -extern UNK_TYPE D_06001228; +extern UNK_TYPE D_06001228; // D_06001228 //extern UNK_TYPE D_06001254; //extern UNK_TYPE D_06001290; //extern UNK_TYPE D_06001298; @@ -1900,7 +1900,7 @@ extern s80085320* g_s80085320_ListTail; // D_80096C44 //extern UNK_TYPE D_80097530; //extern UNK_TYPE D_80097540; extern UNK_TYPE D_80097590; // D_80097590 -//extern UNK_TYPE D_800975E0; +extern short sintable[]; // D_800975E0 //extern UNK_TYPE D_80097DDE; //extern UNK_TYPE D_80097DE0; //extern UNK_TYPE D_80097DE4; @@ -2196,16 +2196,18 @@ extern DmadataEntry dmadata[]; // D_8009F8B0 extern UNK_TYPE D_801ADE80; // D_801ADE80 extern UNK_TYPE D_801ADEAC; // D_801ADEAC extern int D_801ADEB0[]; // D_801ADEB0 -//extern UNK_TYPE D_801ADEE0; -//extern UNK_TYPE D_801ADF0C; -//extern UNK_TYPE D_801ADF10; -//extern UNK_TYPE D_801ADF14; -//extern UNK_TYPE D_801ADF18; -//extern UNK_TYPE D_801ADF24; -//extern UNK_TYPE D_801ADF30; -//extern UNK_TYPE D_801ADF44; -//extern UNK_TYPE D_801AE194; -//extern UNK_TYPE D_801AE214; +extern UNK_TYPE D_801ADEE0; // D_801ADEE0 +extern UNK_TYPE D_801ADF0C; // D_801ADF0C +extern UNK_TYPE D_801ADF10; // D_801ADF10 +extern UNK_TYPE D_801ADF14; // D_801ADF14 +extern UNK_TYPE D_801ADF18; // D_801ADF18 +extern UNK_TYPE D_801ADF24; // D_801ADF24 +extern UNK_TYPE D_801ADF30[]; // D_801ADF30 +extern UNK_TYPE D_801ADF44[]; // D_801ADF44 +extern u8 D_801ADF74[]; // D_801ADF74 +extern u8 D_801AE084[]; // D_801AE084 +extern s32 D_801AE194[]; // D_801AE194 +extern u8 D_801AE214[]; // D_801AE214 //extern UNK_TYPE D_801AE240; //extern UNK_TYPE D_801AE250; //extern UNK_TYPE D_801AE260; @@ -2843,10 +2845,10 @@ extern u8 D_801BDB30[]; // D_801BDB30 //extern UNK_TYPE D_801C1E44; //extern UNK_TYPE D_801C1E48; //extern UNK_TYPE D_801C1E4A; -//extern UNK_TYPE D_801C2078; -//extern UNK_TYPE D_801C2079; +extern u8 D_801C2078[]; // D_801C2078 +extern u8 D_801C2079; // D_801C2079 //extern UNK_TYPE D_801C207A; -//extern UNK_TYPE D_801C207E; +extern u8 D_801C207E; // D_801C207E //extern UNK_TYPE D_801C207F; //extern UNK_TYPE D_801C2080; //extern UNK_TYPE D_801C2081; @@ -3342,34 +3344,34 @@ extern u8 D_801BDB30[]; // D_801BDB30 //extern UNK_TYPE D_801DB958; //extern UNK_TYPE D_801DBDF0; //extern UNK_TYPE D_801DBDF4; -//extern UNK_TYPE D_801DBE68; -//extern UNK_TYPE D_801DBE6C; -//extern UNK_TYPE D_801DBE70; -//extern UNK_TYPE D_801DBE74; -//extern UNK_TYPE D_801DBE78; -//extern UNK_TYPE D_801DBE7C; -//extern UNK_TYPE D_801DBE80; -//extern UNK_TYPE D_801DBE84; -//extern UNK_TYPE D_801DBE88; -//extern UNK_TYPE D_801DBE8C; -//extern UNK_TYPE D_801DBE90; -//extern UNK_TYPE D_801DBE94; -//extern UNK_TYPE D_801DBE98; -//extern UNK_TYPE D_801DBE9C; -//extern UNK_TYPE D_801DBEA0; +extern f32 D_801DBE68; // D_801DBE68 +extern f32 D_801DBE6C; // D_801DBE6C +extern f32 D_801DBE70; // D_801DBE70 +extern f32 D_801DBE74; // D_801DBE74 +extern f32 D_801DBE78; // D_801DBE78 +extern f32 D_801DBE7C; // D_801DBE7C +extern f32 D_801DBE80; // D_801DBE80 +extern f32 D_801DBE84; // D_801DBE84 +extern f32 D_801DBE88; // D_801DBE88 +extern f32 D_801DBE8C; // D_801DBE8C +extern f32 D_801DBE90; // D_801DBE90 +extern f32 D_801DBE94; // D_801DBE94 +extern f32 D_801DBE98; // D_801DBE98 +extern f32 D_801DBE9C; // D_801DBE9C +extern f32 D_801DBEA0; // D_801DBEA0 //extern UNK_TYPE D_801DBEA4; -//extern UNK_TYPE D_801DBF10; -//extern UNK_TYPE D_801DBF14; -//extern UNK_TYPE D_801DBF18; -//extern UNK_TYPE D_801DBF1C; -//extern UNK_TYPE D_801DBF20; +extern f32 D_801DBF10; // D_801DBF10 +extern f32 D_801DBF14; // D_801DBF14 +extern f32 D_801DBF18; // D_801DBF18 +extern f32 D_801DBF1C; // D_801DBF1C +extern f32 D_801DBF20; // D_801DBF20 //extern UNK_TYPE D_801DBF24; //extern UNK_TYPE D_801DBF98; //extern UNK_TYPE D_801DBFF4; -//extern UNK_TYPE D_801DC068; -//extern UNK_TYPE D_801DC06C; -//extern UNK_TYPE D_801DC070; -//extern UNK_TYPE D_801DC074; +extern f32 D_801DC068; // D_801DC068 +extern f32 D_801DC06C; // D_801DC06C +extern f32 D_801DC070; // D_801DC070 +extern f32 D_801DC074; // D_801DC074 //extern UNK_TYPE D_801DC080; //extern UNK_TYPE D_801DC084; //extern UNK_TYPE D_801DC088; @@ -4494,8 +4496,8 @@ extern UNK_TYPE D_801ED940; // D_801ED940 //extern UNK_TYPE D_801EF600; //extern UNK_TYPE D_801EF638; //extern UNK_TYPE D_801EF66D; -//extern UNK_TYPE D_801EF670; -//extern UNK_TYPE D_801EF677; +extern u8 D_801EF670; // D_801EF670 +extern u8 D_801EF677; // D_801EF677 //extern UNK_TYPE D_801EF678; //extern UNK_TYPE D_801EF67C; //extern UNK_TYPE D_801EF67E; diff --git a/objects.py b/objects.py index bb3bf6cf0e..55b06e4aab 100644 --- a/objects.py +++ b/objects.py @@ -95,4 +95,5 @@ known_objects = { 0x80095950:"visetxscale", 0x80095a60:"llcvt", 0x80096510:"spsetpc", + 0x800A5D00:"z_en_item00" } diff --git a/src/code/code_0x800A5AC0.c b/src/code/code_0x800A5AC0.c index ce9a6abebd..207cf9315d 100644 --- a/src/code/code_0x800A5AC0.c +++ b/src/code/code_0x800A5AC0.c @@ -3,12 +3,14 @@ // TODO this file looks like an actor, it should be cleaned up as such +// This file is most likely En_A_Obj + UNK_RET func_800A5AC0(void* a0, UNK_TYPE a1) { s800A5AC0* s0 = (s800A5AC0*)a0; s0->unk116 = ((s0->unk1C >> 8) & 0xFF) | 0x300; s0->unk1C = (s0->unk1C & 0xFF) - 9; func_800FFADC((z_Actor*)s0, (z_ActorCompInitEntry*)&D_801ADEAC); - func_800B3BA4(&s0->unkBC, 0, (void*)&func_800B3FC0, 0x41400000); + func_800B3BA4(&s0->unkBC, 0, (UNK_PTR)&func_800B3FC0, 12); func_800E1374(a1, &s0->unk148, (z_Actor*)s0, &D_801ADE80); func_800E7DF8((z_Actor*)s0, &s0->unk148); s0->unkB6 = 255; diff --git a/src/code/code_0x800E8EA0.c.ignore b/src/code/code_0x800E8EA0.c.ignore new file mode 100644 index 0000000000..1bc5b38f86 --- /dev/null +++ b/src/code/code_0x800E8EA0.c.ignore @@ -0,0 +1,44 @@ +#include +#include + +void func_800E8EA0(z_GlobalContext* a0, z_Actor* a1, u16 a2) { + func_80151938(a0, a2); + a1->unk116 = a2; +} + +UNK_TYPE func_800E8ED0(UNK_TYPE a0) { + return 0; +} + +void func_800E8EE0(UNK_TYPE a0) { + return; +} + +UNK_TYPE func_800E8EEC(UNK_TYPE a0) { + return 0; +} + +void func_800E8EFC(UNK_TYPE a0) { + return; +} + +UNK_TYPE func_800E8F08(s16* a0, s16* a1) { + func_800FFEBC(a0 + 1, 0, 6, 6200, 100); + func_800FFEBC(a1 , 0, 6, 6200, 100); + func_800FFEBC(a0 + 1, 0, 6, 6200, 100); + func_800FFEBC(a1 , 0, 6, 6200, 100); + + return 1; +} + +UNK_RET func_800E8FA4(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2, UNK_TYPE a3) { + +} + +UNK_RET func_800E9138(UNK_ARGS) { + +} + +UNK_RET func_800E9250(UNK_ARGS) { + +} diff --git a/src/code/z_en_item00.c.ignore b/src/code/z_en_item00.c.ignore new file mode 100644 index 0000000000..b44d5a5e3d --- /dev/null +++ b/src/code/z_en_item00.c.ignore @@ -0,0 +1,1237 @@ +#include +#include + +extern float fabsf(float); +#pragma intrinsic (fabsf) + +// D_801DBDF0 is start of .rodata + +// This file is most likely En_Item00 +// file name: z_en_item00.c + +static const f32 D_801DBDF0 = 0.6; + +void func_800A5D00(s800A5D00* a0, z_GlobalContext* a1, f32* a2, f32* a3) { + func_800B67FC(a1, a0); + func_800B67E0(a0, 0.5); + + a0->unk154 = 0.5; + *a2 = 0.0; + *a3 = D_801DBDF0; + a0->unk30 = 16384; +} + +void func_800A5D70(s800A5D00* a0, z_GlobalContext* a1) { + UNK_TYPE pad2; + s16 v0; + f32 sp3C; + f32 sp38; + UNK_TYPE sp34; + UNK_TYPE sp30; + UNK_TYPE pad1; + + sp34 = 0; + sp3C = 980; + sp38 = 6; + v0 = a0->unk1C; + + sp30 = ((v0 & 0x8000) != 0)? 1 : 0; + + a0->unk148 = (v0 & 0x7F00) >> 8; + + a0->unk1C &= 0xFF; + + if (func_800B5D6C(a1, a0->unk148) != 0) { + if (a0->unk1C == 6) { + sp30 = 0; + a0->unk148 = 0; + a0->unk1C = 3; + } else { + func_800B670C(a0); + return; + } + } + + if (a0->unk1C == 21) { + a0->unk1C = 3; + } + + func_800FFADC((z_Actor*)a0, (z_ActorCompInitEntry*)&D_801ADF0C); + + func_800E1374(a1, &(a0->unk158), ( z_Actor*)a0, &D_801ADEE0); + + a0->unk150 = 1; + + switch (a0->unk1C) { + case 0: + case 1: + case 2: + // func_800A5E80 + func_800B67E0(a0, 0.015); + a0->unk154 = D_801DBE68; + sp3C = D_801DBE6C; + break; + case 17: + // func_800A5EAC + a0->unk150 = 0; + func_800B67E0(a0, 0.03); + a0->unk154 = D_801DBE70; + sp3C = 350; + break; + case 6: + case 7: + // func_800A5EDC + a0->unk150 = 0; + func_800B67E0(a0, 0.02); + a0->unk154 = D_801DBE74; + sp3C = D_801DBE78; + + if (a0->unk1C == 7) { + sp30 = -1; + } + break; + case 3: + // func_800A5F24 + a0->unk18 = (s16)func_801795C0(D_801DBE7C); + sp3C = 430; + func_800B67E0(a0, 0.02); + a0->unk154 = D_801DBE80; + break; + case 5: + case 8: + case 9: + case 10: + // func_800A5F68 + func_800B67E0(a0, 0.035); + a0->unk154 = D_801DBE84; + sp3C = 250; + break; + case 4: + case 11: + case 12: + case 13: + case 15: + case 23: + case 25: + // func_800A5F94 + func_800B67E0(a0, 0.03); + a0->unk154 = D_801DBE88; + sp3C = 320; + break; + case 14: + // func_800A5FC0 + func_800B67E0(a0, 0.0449999993); //! 0.045 doesn't match + a0->unk154 = D_801DBE8C; + sp3C = 320; + break; + case 19: + // func_800A5FEC + func_800B67E0(a0, 0.0449999993); //! 0.045 doesn't match + a0->unk154 = D_801DBE90; + sp3C = D_801DBE94; + break; + case 20: + // func_800A6018 + func_800B67E0(a0, 0.03); + a0->unk154 = D_801DBE98; + sp3C = D_801DBE9C; + break; + case 18: + case 26: + // func_800A6044 + sp3C = 500; + func_800B67E0(a0, 0.01); + a0->unk154 = D_801DBEA0; + break; + case 22: + // func_800A6070 + a0->unk1E = func_8012F608(&a1->unk17D88, 179); + func_800A5D00(a0, a1, &sp3C, &sp38); + break; + case 27: + // func_800A60A8 + a0->unk1E = func_8012F608(&a1->unk17D88, 160); + func_800A5D00(a0, a1, &sp3C, &sp38); + break; + case 28: + // func_800A60E0 + a0->unk1E = func_8012F608(&a1->unk17D88, 145); + func_800A5D00(a0, a1, &sp3C, &sp38); + break; + case 16: + case 21: + case 24: + default: + // func_800A6110 + break; + } + + a0->unk14E = 0; + + func_800B3BA4(&(a0->unkBC), sp3C, (UNK_PTR)func_800B3FC0, sp38); + + a0->unkD0 = 180; + a0->unk3C = a0->unk24; + a0->unk14A = 0; + + if (sp30 < 0) { + a0->unk144 = (UNK_FUN_ARG)func_800A63A8; + a0->unk152 = -1; + return; + } + + if (sp30 == 0) { + a0->unk144 = (UNK_FUN_ARG)func_800A640C; + a0->unk152 = -1; + return; + } + + a0->unk152 = 15; + a0->unk14C = 35; + a0->unk70 = 0.0; + a0->unk68 = 0.0; + a0->unk74 = 0.0; + + switch (a0->unk1C) { + case 0: + // func_800A61D4 + func_80112E80(a1, 132); + break; + case 1: + // func_800A61E8 + func_80112E80(a1, 133); + break; + case 2: + // func_800A61FC + func_80112E80(a1, 135); + break; + case 20: + // func_800A6210 + func_80112E80(a1, 136); + break; + case 19: + // func_800A6224 + func_80112E80(a1, 138); + break; + case 3: + // func_800A6238 + func_80112E80(a1, 131); + break; + case 18: + case 26: + // func_800A624C + func_80112E80(a1, 112); + break; + case 4: + case 11: + // func_800A6260 + func_80112E80(a1, 143); + break; + case 5: + // func_800A6274 + func_80112E80(a1, 147); + break; + case 8: + // func_800A6288 + func_80112E80(a1, 148); + break; + case 9: + // func_800A629C + func_80112E80(a1, 149); + break; + case 10: + // func_800A62B0 + func_80112E80(a1, 150); + break; + case 14: + // func_800A62C4 + func_80112E80(a1, 122); + break; + case 15: + // func_800A62D8 + func_80112E80(a1, 121); + break; + case 17: + // func_800A62EC + func_80112E80(a1, 120); + break; + case 12: + // func_800A6300 + sp34 = 40; + break; + case 23: + // func_800A630C + sp34 = 42; + break; + case 6: + case 7: + case 13: + case 16: + case 21: + case 22: + case 24: + case 25: + default: + // func_800A6314 + break; + } + + if ((sp34 != 0) && (func_800B89F8(a0, a1) == 0)) { + func_800B8A1C(a0, a1, sp34, 50, 20); + } + + a0->unk144 = (UNK_FUN_ARG)func_800A6A40; + ((UNK_RET(*)(s800A5D00*, z_GlobalContext*))(a0->unk144))(a0, a1); +} + +UNK_RET func_800A637C(s800A5D00* a0, z_GlobalContext* a1) { + UNK_TYPE* a2 = &a0->unk158; + func_800E11EC(a1, a2); +} + +UNK_RET func_800A63A8(s800A5D00* a0, z_GlobalContext* a1) { + u32 sp1C; + + sp1C = func_8012F608(&a1->unk17D88, 150); + + if (func_8012F668(&a1->unk17D88, sp1C) != 0) { + a0->unk1E = sp1C; + a0->unk144 = (UNK_FUN_ARG)func_800A640C; + } +} + +UNK_RET func_800A640C(s800A5D00* a0, z_GlobalContext* a1) { + s16 v1; + + v1 = a0->unk1C; + if ((v1 < 3) || (v1 == 3 && (a0->unk152 < 0)) || (v1 == 6) || (v1 == 7)) { + a0->unkBE += 960; + v1 = a0->unk1C; + } else { + if ((v1 >= 22) && (v1 != 23) && (v1 < 25)) { + if (a0->unk152 == -1) { + if (func_800FFEBC(&(a0->unkBC), a0->unk30 - 16384, 2, 3000, 1500) == 0) { + a0->unk152 = -2; + } + } else { + if (func_800FFEBC(&(a0->unkBC), -16384 - a0->unk30, 2, 3000, 1500) == 0) { + a0->unk152 = -1; + } + } + + func_800FFEBC(&(a0->unk30), 0, 2, 2500, 500); + v1 = a0->unk1C; + } else { + if ((v1 == 27) || (v1 == 28)) { + a0->unk152 = -1; + a0->unkBE += 960; + v1 = a0->unk1C; + } + } + } + + if ((v1 == 6) || (v1 == 7)) { + a0->unkC4 = (func_800FED84(a0->unkBE) * 150) + D_801DBF10; + } + + func_800FFCD8(&(a0->unk70), 0, 1, 0.5, 0); + + if (a0->unk14C == 0) { + v1 = a0->unk1C; + if (v1 != 17 && v1 != 6 && v1 != 7) { + a0->unk14C = -1; + } + } + + if (a0->unk152 == 0) { + v1 = a0->unk1C; + if (v1 != 17 && v1 != 6 && v1 != 7) { + func_800B670C(a0); + } + } + + if (a0->unk74 != 0 && ((a0->unk90) & 0x1) == 0) { + a0->unk144 = (UNK_FUN_ARG)func_800A6650; + } +} + +UNK_RET func_800A6650(s800A5D00* a0, z_GlobalContext* a1) { + UNK_TYPE pad; + z_Vector3D sp30; + + if (a0->unk1C < 3) { + a0->unkBE += 960; + } + + if ((a1->unk18840 & 0x1) != 0) { + sp30.x = a0->unk24.x + func_801795C0(10); + sp30.y = a0->unk24.y + func_801795C0(10); + sp30.z = a0->unk24.z + func_801795C0(10); + + func_800B16B8(a1, &sp30, &D_801ADF18, &D_801ADF24, &D_801ADF10, &D_801ADF14); + } + + if ((a0->unk90 & 0x3) != 0) { + if (a0->unk68 > -2) { + a0->unk144 = (UNK_FUN_ARG)func_800A640C; + } else { + a0->unk68 *= D_801DBF14; + a0->unk90 &= 0xFFFE; + } + } +} + +UNK_RET func_800A6780(s800A5D00* a0, z_GlobalContext* a1) { + s32 v0_2; + z_Vector3D sp40; + s16 v0; + f32 pad; + f32 sp34; + + a0->unk152++; + v0 = a0->unk1C; + if ((v0 == 3) && (a0->unk68 < 0)) { + + a0->unk70 = 0; + a0->unk74 = D_801DBF18; + + if (a0->unk68 < -1.5f) { + a0->unk68 = -1.5; + } + + a0->unk18 += (s16)((a0->unk68 + 3) * 1000); + + sp34 = func_800FED44(a0->unk18); + a0->unk24.x += func_800FED44(a0->unk92) * (-3 * sp34); + + sp34 = func_800FED44(a0->unk18); + a0->unk24.z += func_800FED84(a0->unk92) * (-3 * sp34); + v0 = a0->unk1C; + } + + if (v0 < 3) { + a0->unkBE += 960; + } else if ((v0 >= 22) && (v0 != 23) && (v0 != 25)) { + a0->unk30 -= 700; + a0->unkBE += 400; + a0->unkBC = a0->unk30 - 16384; + } + + if (a0->unk68 <= 2) { + v0_2 = (u16)(a0->unkC0) + 10000; + if (v0_2 < 0xFFFF) { + a0->unkC0 += 10000; + } else { + a0->unkC0 = -1; + } + } + + if ((a1->unk18840 & 0x1) == 0) { + sp40.x = a0->unk24.x + (func_80086FDC() - 0.5f) * 10; + sp40.y = a0->unk24.y + (func_80086FDC() - 0.5f) * 10; + sp40.z = a0->unk24.z + (func_80086FDC() - 0.5f) * 10; + + func_800B16B8(a1, &sp40, &D_801ADF18, &D_801ADF24, &D_801ADF10, &D_801ADF14); + } + + if ((a0->unk90 & 0x3) != 0) { + a0->unk144 = (UNK_FUN_ARG)func_800A640C; + a0->unkC0 = 0; + a0->unk70 = 0; + } +} + +UNK_RET func_800A6A40(s800A5D00* a0, z_GlobalContext* a1) { + sGlobalContext1CCC* sp2C; + s16 v0; + f32 f0; + + sp2C = a1->unk1CCC; + + if (a0->unk14A != 0) { + if (func_800B89F8(a0, a1) == 0) { + func_800B8A1C(a0, a1, a0->unk14A, 50, 80); + a0->unk152++; + } else { + a0->unk14A = 0; + } + } + + if (a0->unk152 == 0) { + func_800B670C(a0); + return; + } + + a0->unk24 = sp2C->unk24; + + v0 = a0->unk1C; + if (v0 < 3) { + a0->unkBE += 960; + } else if (v0 == 3) { + a0->unkBE = 0; + } + + a0->unk24.y += 40 + func_800FED84(a0->unk152 * 15000) * (a0->unk152 * D_801DBF1C); + if (D_801EF677 == 0) { + a0->unk24.y += 20; + } +} + +UNK_RET func_800A6B98(s800A5D00* a0, z_GlobalContext* a1) { + UNK_TYPE pad; + sGlobalContext1CCC* v1; + s16 v1_2; + s16 v0; + UNK_TYPE sp38; + UNK_TYPE sp34; + UNK_TYPE pad2; + + v1 = a1->unk1CCC; + sp38 = v1->unkA74 & 0x1000; + sp34 = 0; + + if (a0->unk152 > 0) { + a0->unk152--; + } + + if ((a0->unk152 > 0) && (a0->unk152 < 41) && (a0->unk14C <= 0)) { + a0->unk14E = a0->unk152; + } + + ((void(*)(s800A5D00* a0, z_GlobalContext* a1))(a0->unk144))(a0, a1); + + func_800FFCD8(&(a0->unk58), a0->unk154, D_801DBF20, a0->unk154 * D_801DBF20, 0); + + // TODO wrong float register is used + a0->unk60 = a0->unk58; + a0->unk5C = a0->unk58; + + if (a0->unk74 != 0) { + func_800B6A88(a0); + func_800B78B8(a1, a0, 20, 15, 15, 29); + + if (a0->unk88 <= -32000) { + func_800B670C(a0); + return; + } + } + + //sp28 = &(a0->unk158); + + func_800E7DF8((z_Actor*)a0, &(a0->unk158)); + + func_800E2740(a1, &(a1->unk18884), &(a0->unk158)); + + v1_2 = a0->unk1C; + + if ((v1_2 == 22) || (v1_2 == 27) || (v1_2 == 28)) { + a0->unkC4 = fabsf(func_800FED44(a0->unkBC) * 37); + } + + if (a0->unk14C > 0) { + return; + } + + if (((sp38 == 0) || !(a0->unk98 <= 60) || !(-100 <= a0->unk9C) || !(a0->unk9C <= 100)) && + ((sp38 != 0) || !(a0->unk98 <= 30) || !(-50 <= a0->unk9C) || (a0->unk9C <= 50))){ + // TODO branch isn't quite right + if (func_800B89F8(a0, a1) == 0) { + return; + } + } + + *(volatile int*)0 = 0; + *(volatile int*)0 = 0; + + if (a1->unk17000 != 0) { + return; + } + + switch (a0->unk1C) { + case 0: + // func_800A6E30 + a0->unk1A4 = 1; + func_80112E80(a1, 132); + break; + case 1: + // func_800A6E4C + a0->unk1A4 = 1; + func_80112E80(a1, 133); + break; + case 2: + // func_800A6E68 + a0->unk1A4 = 1; + func_80112E80(a1, 135); + break; + case 20: + // func_800A6E84 + a0->unk1A4 = 1; + func_80112E80(a1, 136); + break; + case 19: + // func_800A6EA0 + a0->unk1A4 = 1; + func_80112E80(a1, 138); + break; + case 13: + // func_800A6EBC + sp34 = 25; + break; + case 12: + // func_800A6EC8 + sp34 = 40; + break; + case 23: + // func_800A6ED4 + sp34 = 42; + break; + case 3: + // func_800A6EE0 + func_80112E80(a1, 131); + break; + case 18: + case 26: + // func_800A6EF4 + func_80115908(a1, 112); + break; + case 4: + case 11: + // func_800A6F08 + func_80112E80(a1, 143); + break; + case 5: + // func_800A6F1C + func_80112E80(a1, 147); + break; + case 8: + // func_800A6F30 + func_80112E80(a1, 148); + break; + case 9: + // func_800A6F44 + func_80112E80(a1, 149); + break; + case 10: + // func_800A6F58 + func_80112E80(a1, 150); + break; + case 17: + // func_800A6F6C + sp34 = 60; + break; + case 6: + // func_800A6F78 + sp34 = 12; + break; + case 7: + // func_800A6F84 + sp34 = 13; + break; + case 14: + // func_800A6F90 + func_80112E80(a1, 122); + break; + case 15: + // func_800A6FA4 + func_80112E80(a1, 121); + break; + case 22: + // func_800A6FB8 + sp34 = 50; + break; + case 27: + // func_800A6FC4 + sp34 = 62; + break; + case 28: + // func_800A6FD0 + sp34 = 63; + break; + } + + if ((sp34 != 0) && (func_800B89F8(a0, a1) == 0)) { + // TODO loads are correct + func_800B8A1C(a0, a1, sp34, 50, 20); + } + + v0 = a0->unk1C; + + switch (v0) { + case 6: + case 7: + case 17: + case 22: + case 27: + case 28: + // func_800A7040 + if (func_800B89F8(a0, a1) != 0) { + func_800B5DB0(a1, a0->unk148); + func_800B670C(a0); + } + return; + } + + if ((v0 < 3) || (v0 == 19)) { + func_8019F0C8(18435); + } else if (sp34 != 0) { + if (func_800B89F8(a0, a1) == 0) { + return; + } + func_800B5DB0(a1, a0->unk148); + func_800B670C(a0); + return; + } else { + func_8019F0C8(18468); + } + + func_800B5DB0(a1, a0->unk148); + + a0->unk152 = 15; + a0->unk14C = 35; + a0->unkC0 = 0; + a0->unk70 = 0; + a0->unk68 = 0; + a0->unk74 = 0; + + func_800B67E0(a0, a0->unk154); + + a0->unk14A = 0; + a0->unk144 = (UNK_FUN_ARG)func_800A6A40; +} + +UNK_RET func_800A7128(s800A5D00* a0, z_GlobalContext* a1) { + s16 v0; + UNK_TYPE pad; + s8 sp31; + + if ((a0->unk14E & a0->unk150) != 0) { + return; + } + + switch (a0->unk1C) { + case 0: + case 1: + case 2: + case 19: + case 20: + // func_800A7170 + func_800A72AC(a0, a1); + break; + case 6: + // func_800A7184 + func_800A75B8(a0, a1); + break; + case 7: + // func_800A7198 + func_800A74D8(a0, a1); + break; + case 3: + // func_800A71AC + v0 = a0->unk152; + if (v0 < 0) { + if (v0 == -1) { + sp31 = func_8012F608(&(a1->unk17D88), 144); + if (func_8012F668(&(a1->unk17D88), (s32)sp31) == 0) { + return; + } + a0->unk1E = sp31; + func_800B67FC(a1, a0); + a0->unk152 = -2; + // TODO the branch statement is slightly too early + *(volatile int*)0 = 0; + return; + } else { + func_8018039C(16, 16, 16, 1); + func_800EE320(a1, 8); + return; + } + } + // fallthrough + case 4: + case 5: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 17: + case 23: + case 25: + // func_800A7254 + func_800A73A0(a0, a1); + break; + case 22: + // func_800A7268 + func_800EE320(a1, 39); + break; + case 27: + // func_800A727C + func_800EE320(a1, 27); + break; + case 28: + // func_800A7290 + func_800EE320(a1, 10); + break; + } +} + +// TODO everything past here needs work + +UNK_RET func_800A72AC(s800A5D00* a0, z_GlobalContext* a1) { + s16 v0; + UNK_TYPE sp30; + u32* v0_2; + z_GraphicsContext* a0_2 = a1->unk0; + u32* sp24; + u32* sp20; + + func_8012C28C(a1->unk0); + func_800B8050(a0, a1, 0); + + v0 = a0->unk1C; + sp30 = (v0 < 3)? v0 : v0 - 16; + + sp24 = a0_2->unk2B0; + a0_2->unk2B0 = sp24 + 2; + sp24[0] = 0xDA380003; + sp24[1] = func_80181A40(a1->unk0); + + sp20 = a0_2->unk2B0; + a0_2->unk2B0 = sp20 + 2; + sp20[0] = 0xDB060020; + sp20[1] = func_80100504(D_801ADF30[sp30]); + + v0_2 = a0_2->unk2B0; + a0_2->unk2B0 = v0_2 + 2; + v0_2[0] = 0xDE000000; + v0_2[1] = 0x040622C0; +} + +UNK_RET func_800A73A0(s800A5D00* a0, z_GlobalContext* a1) { + s16 v1; + s32 sp34; + u32* sp28; + u32* sp24; + u32* v0; + z_GraphicsContext* s0 = a1->unk0; + + sp34 = a0->unk1C; + s0->unk2B0 = func_801660B8(a1, s0->unk2B0, sp34 - 3); + + v1 = a0->unk1C; + if (v1 == 23) { + sp34 = 6; + } else if (v1 == 25) { + sp34 = 1; + } else if (v1 >= 8) { + sp34 -= 3; + if (v1 < 10) { + sp34 += 1; + } + } + + a1->unk0->unk2B0 = func_8012C724(s0->unk2B0); + + sp28 = s0->unk2B0; + s0->unk2B0 = sp28 + 2; + sp28[0] = 0xDB060020; + sp28[1] = func_80100504(D_801ADF44[sp34]); + + sp24 = s0->unk2B0; + s0->unk2B0 = sp24 + 2; + sp24[0] = 0xDA380003; + sp24[1] = func_80181A40(s0); + + v0 = s0->unk2B0; + s0->unk2B0 = v0 + 2; + v0[0] = 0xDE000000; + v0[1] = 0x0405F6F0; +} + +UNK_RET func_800A74D8(s800A5D00* a0, z_GlobalContext* a1) { + u32* sp24; + u32* v0; + + if (func_8012F608(&(a1->unk17D88), 150) != a0->unk1E) { + return; + } + + func_8012C2DC(a1->unk0); + func_8018039C(20, 20, 20, 1); + + sp24 = a1->unk0->unk2C0; + a1->unk0->unk2C0 = sp24 + 2; + sp24[0] = 0xDA380003; + sp24[1] = func_80181A40(a1->unk0); + + v0 = a1->unk0->unk2C0; + a1->unk0->unk2C0 = v0 + 2; + v0[0] = 0xDE000000; + v0[1] = 0x06001290; + + v0 = a1->unk0->unk2C0; + a1->unk0->unk2C0 = v0 + 2; + v0[0] = 0xDE000000; + v0[1] = 0x06001470; +} + +UNK_RET func_800A75B8(s800A5D00* a0, z_GlobalContext* a1) { + u32* sp20; + u32* v0; + + func_8012C2DC(a1->unk0); + func_800B8118(a0, a1, 0); + + sp20 = a1->unk0->unk2C0; + a1->unk0->unk2C0 = sp20 + 2; + sp20[0] = 0xDA380003; + sp20[1] = func_80181A40(a1->unk0); + + v0 = a1->unk0->unk2C0; + a1->unk0->unk2C0 = v0 + 2; + v0[0] = 0xDE000000; + v0[1] = 0x0405AAB0; +} + +s16 func_800A7650(s16 a0) { + if ((((a0 == 4) || (a0 == 25) || (a0 == 11)) && (*((u8*)(D_801EF670[D_801C207E]) + 0x70) == 255)) || + (((a0 == 5) || (a0 == 8) || (a0 == 9) || (a0 == 10)) && (*((u8*)(D_801EF670[D_801C2079]) + 0x70) == 255)) || + (((a0 == 14) || (a0 == 15)) && (D_801EF670[0x38] == 0))) { + return -1; + } + + if (a0 == 3) { + if (D_801EF670[0x34] == D_801EF670[0x36]) { + return 0; + } + } + + return a0; +} + +s800A5D00* func_800A7730(z_GlobalContext* a0, z_Vector3D* a1, s16 a2) { + UNK_TYPE sp58; + s16 sp56; + s16 sp54; + UNK_TYPE sp50; + s16 v0; + UNK_TYPE v1; + s800A5D00* s3; + s16 s0; + UNK_TYPE sp44; + + sp58 = a2 & 0x1; + sp56 = a2 & 0x8000; + sp54 = a2 & 0x7F00; + v0 = a2 & 0xFF; + s3 = NULL; + s0 = a2 & 0x7FFF; + sp50 = a2 & 0x0002; + + if (v0 == 21) { + sp44 = sp54 | 0x03 | sp56; + for (v1 = 0; v1 != 3; v1++) { + s3 = func_800A7730(a0, a1, sp44); + } + return s3; + } + + if (v0 == 29) { + if (func_800B5D6C(a0, (sp54 >> 8)) == 0) { + func_800BAC60(&(a0->unk1CA0), a0, 571, a1->x, a1->y, a1->z, 0, 0, 0, sp54); + } + + return s3; + } + + if (((v0 == 18) || ((s0 & 0xFF) == 26)) && (sp58 == 0)) { + if (18 == (s0 & 0xFF)) { + s3 = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 16, a1->x, a1->y + 40, a1->z, 0, 0, 0, + ((((sp54 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102); + + if (func_800B5D6C(a0, (((sp54 >> 8) & 0x7F) << 9)) == 0) { + func_800F0568(a0, a1, 40, 10471); + } + + return s3; + } else { + s3 = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 432, a1->x, a1->y + 40, a1->z, 0, 0, 0, + (((sp54 >> 8) & 0x7F) << 9) | 0x7); + + if (sp50 == 0) { + if (func_800B5D6C(a0, a2) == 0) { + func_800F0568(a0, a1, 40, 10471); + } + + return s3; + } + } + } + + if (sp56 == 0) { + s0 = func_800A7650(s0 & 0xFF); + } + + if (s0 == -1) { + return s3; + } + + s3 = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 14, a1->x, a1->y, a1->z, 0, 0, 0, s0 | sp56 | sp54); + + if (s3 == NULL) { + return s3; + } + + if (sp56 != 0) { + return s3; + } + + if (sp58 == 0) { + s3->unk68 = 8; + } else { + s3->unk68 = -2; + } + + s3->unk70 = 2; + s3->unk74 = D_801DC068; + + s3->unk32 = func_801795C0(65536); + + func_800B67E0(s3, 0); + + v0 = s3->unk1C; + + s3->unk144 = (UNK_FUN_ARG)func_800A6780; + s3->unk152 = 220; + + if ((v0 != 17) && (v0 != 6) && (v0 != 7)) { + s3->unk3 = -1; + } + + s3->unk4 |= 0x10; + + return s3; +} + +s800A5D00* func_800A7AD4(z_GlobalContext* a0, z_Vector3D* a1, s16 a2) { + s800A5D00* sp4C; // v1 + UNK_TYPE sp44; // t1 + s16 sp42; // t6 + s16 sp40; // t0 + UNK_TYPE v0; + + sp44 = a2 & 0x1; + sp40 = a2 & 0x7F00; + sp42 = a2 & 0x8000; + v0 = a2 & 0xFF; + sp4C = NULL; + + if (v0 == 21) { + return NULL; + } + + if (((v0 == 18) || (v0 == 26)) && (sp44 == 0)) { + if (v0 == 18) { + sp4C = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 16, a1->x, a1->y + 40, a1->z, 0, 0, 0, + (((((sp40 << 8) & 0x7F) >> 9) & 0xFE00) | 0x102)); + } else { + sp4C = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 432, a1->x, a1->y + 40, a1->z, 0, 0, 0, + (((sp40 << 8) & 0x7F) >> 9) | 0x7); + } + + if (func_800B5D6C(a0, a2) != 0) { + return sp4C; + } + + func_800F0568(a0, a1, 40, 10471); + + return sp4C; + } + + v0 = func_800A7650(v0); + if (v0 == -1) { + return sp4C; + } + + sp4C = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 14, a1->x, a1->y, a1->z, 0, 0, 0, v0 | sp42 | sp40); + + if (sp4C == 0) { + return sp4C; + } + + if (sp42 != 0) { + return sp4C; + } + + sp4C->unk68 = 0; + sp4C->unk70 = 0; + + if (sp44 != 0) { + sp4C->unk74 = 0; + } else { + sp4C->unk74 = D_801DC06C; + } + + sp4C->unk32 = func_801795C0(65536); + sp4C->unk4 |= 0x10; + + return sp4C; +} + +void func_800A7D28(z_GlobalContext* a0, s800A5D00* a1, z_Vector3D* a2, s16 a3) { + UNK_TYPE s7; + s16 sp50; // t6 + UNK_TYPE v0; + UNK_TYPE s4; + u8 s3; + u8 s2; + u8 s1; + s800A5D00* s0; + s16 v0_2; + + s7 = a3; + sp50 = s7 & 0x8000; + s7 &= 0x1F0; + + if (s7 > 0x100) { + return; + } + + v0 = s7 + func_80086FDC() * 16; + s3 = D_801AE084[v0]; + s2 = D_801ADF74[v0]; + s4 = 255; + + if (s2 == 16) { + s3 = 1; + s2 = 15; + v0 = D_801EF670[0x20]; + + // TODO switch? + if (v0 != 1) { + if (v0 != 2) { + if (v0 != 4) { + s2 = 0; + } else { + s2 = 5; + } + } else { + s2 = 3; + } + } + } + + if ((a1 != NULL) && (a1->unk11E != 0)) { + if ((a1->unk11E & 0x1) != 0) { + s7 = 16; + s2 = 8; + s3 = 1; + } else if ((a1->unk11E & 0x2) != 0) { + s7 = 16; + s2 = 3; + } else if ((a1->unk11E & 0x20) != 0) { + s2 = 20; + s3 = 1; + } + } + + if (s2 = 18) { + v0 = *((s16*)D_801EF670 + 0x36 / 2); + + if (v0 < 17) { + func_800BAC60(&(a0->unk1CA0), a0, 16, a2->x, a2->y + 40, a2->z, 0, 0, 0, 2); + func_800F0568(a0, a2, 40, 10471); + return; + } + + // TODO wtf even is this + if (v0 < 49) { + s7 = 16; + s2 = 3; + s3 = 3; + s1 = 3; + } else if (v0 < 81) { + s7 = 16; + s2 = 3; + s3 = 1; + s1 = 3; + } else if ((D_801EF670[0x38] != 0) && (s7 = 208, s2 = 14, s3 = 1, D_801EF670[0x39] == 0)) { + s1 = 14; + } else if ((v0 != 0) && (s7 = 208, s2 = 14, D_801EF670[0x39] < (v0 >> 1))) { + s3 = 1; + s1 = 14; + } else if (s7 = 160, s2 = 8, s3 = 1, ((u8*)(D_801EF670[0xA0]))[D_801C2078[1]] < 6) { + s1 = 8; + } else if (s7 = 176, s2 = 4, s3 = 1, ((u8*)(D_801EF670[0xA0]))[D_801C2078[6]] < 6) { + s1 = 4; + } else if (s7 = 160, s2 = 2, s3 = 1, *((s16*)D_801EF670 + 0x3A / 2) < 11) { + s1 = 2; + } + } + + if (s4 == s1) { + return; + } + + while (s3 > 0) { + s2 = func_800A7650(s2); + + if (sp50 == 0) { + if (s4 != s2) { + s1 = s2; + s0 = (s800A5D00*)func_800BAC60(&(a0->unk1CA0), a0, 14, a2->x, a2->y, a2->z, 0, 0, 0, s2); + if ((s0 != NULL) && (s4 != s1)) { + s0->unk68 = 8; + s0->unk70 = 2; + s0->unk74 = D_801DC070; + + s0->unk32 = func_80086FDC() * D_801DC074; + + func_800B67E0(s0, 0); + + s0->unk144 = (UNK_FUN_ARG)func_800A6780; + s0->unk4 |= 0x10; + v0_2 = s0->unk1C; + + if ((v0_2 == 17) || (v0_2 == 6) || (v0_2 == 7)) { + s0->unk3 = -1; + } + s0->unk152 = 220; + } + } + } else { + func_800A7730(a0, a2, s7 | 0x8000); + } + s3--; + } +} + +s32 func_800A8150(UNK_TYPE a0) { + if ((a0 < 0) || (a0 > 31)) { + return -1; + } else { + return D_801AE194[a0]; + } +} + +u8 func_800A817C(UNK_TYPE a0) { + if ((a0 < 0) || (a0 > 31)) { + return 0; + } else { + return D_801AE214[a0]; + } +} + +UNK_TYPE func_800A81A4(z_GlobalContext* ctxt, UNK_TYPE a1, s16 a2) { + UNK_TYPE v0; + v0 = (func_800A8150(a1) ^ 0x1A) < 1; + + if (v0 == 0) { + return v0; + } + + return func_800B5D6C(ctxt, a2) < 1; +} diff --git a/src/libultra/gu/sins.c b/src/libultra/gu/sins.c new file mode 100644 index 0000000000..b3a10fdb2f --- /dev/null +++ b/src/libultra/gu/sins.c @@ -0,0 +1,21 @@ +#include +// TODO we can't include this because then sintable is placed in .data, which we strip out +//#include "sintable.h" +extern short sintable[1024]; + +short sins(unsigned short x) { + short val; + + x >>= 4; + if ((x & 0x400) != 0) { + val = sintable[0x3FF - (x & 0x3FF)]; + } else { + val = sintable[x & 0x3FF]; + } + + if ((x & 0x800) != 0) { + return -val; + } + + return val; +} diff --git a/src/libultra/gu/sintable.h b/src/libultra/gu/sintable.h new file mode 100644 index 0000000000..607f85062d --- /dev/null +++ b/src/libultra/gu/sintable.h @@ -0,0 +1,6 @@ +#ifndef _SINTABLE_H_ +#define _SINTABLE_H_ + +static short sintable[1024]; + +#endif diff --git a/src/sintable.h b/src/sintable.h new file mode 100644 index 0000000000..607f85062d --- /dev/null +++ b/src/sintable.h @@ -0,0 +1,6 @@ +#ifndef _SINTABLE_H_ +#define _SINTABLE_H_ + +static short sintable[1024]; + +#endif diff --git a/undef.txt b/undef.txt index c3a2c6f242..27b119a479 100644 --- a/undef.txt +++ b/undef.txt @@ -1890,7 +1890,7 @@ D_80097524 = 0x80097524; D_80097530 = 0x80097530; D_80097540 = 0x80097540; D_80097590 = 0x80097590; -D_800975E0 = 0x800975E0; +sintable = 0x800975E0; D_80097DDE = 0x80097DDE; D_80097DE0 = 0x80097DE0; D_80097DE4 = 0x80097DE4; @@ -2194,6 +2194,8 @@ D_801ADF18 = 0x801ADF18; D_801ADF24 = 0x801ADF24; D_801ADF30 = 0x801ADF30; D_801ADF44 = 0x801ADF44; +D_801ADF74 = 0x801ADF74; +D_801AE084 = 0x801AE084; D_801AE194 = 0x801AE194; D_801AE214 = 0x801AE214; D_801AE240 = 0x801AE240; diff --git a/variables.py b/variables.py index 553a9ba8f3..57bd54a04d 100644 --- a/variables.py +++ b/variables.py @@ -82,6 +82,8 @@ known_vars = { 0x80099500:("","s80085320",False), 0x80099520:("","OSThread",False), 0x800996D0:("","UNK_TYPE",False), + 0x800975E0:("sintable","short",True), +# 0x80097DDE:("sintable","short",True), # NOTE this is just the end of sintable 0x80099AD0:("","s80085320",False), 0x80099AF0:("","UNK_TYPE",False), 0x80099EF0:("","UNK_TYPE",False), @@ -134,10 +136,49 @@ known_vars = { 0x801ADE80:("","UNK_TYPE",False), 0x801ADEAC:("","UNK_TYPE",False), 0x801ADEB0:("D_801ADEB0","int",True), # TODO better array representation + 0x801ADEE0:("D_801ADEE0","UNK_TYPE",False), + 0x801ADF0C:("D_801ADF0C","UNK_TYPE",False), + 0x801ADF10:("D_801ADF10","UNK_TYPE",False), + 0x801ADF14:("D_801ADF14","UNK_TYPE",False), + 0x801ADF18:("D_801ADF18","UNK_TYPE",False), # z_vector3D + 0x801ADF24:("D_801ADF24","UNK_TYPE",False), # z_vector3D + 0x801ADF30:("D_801ADF30","UNK_TYPE",True), # length 5 + 0x801ADF44:("D_801ADF44","UNK_TYPE",True), + 0x801ADF74:("D_801ADF74","u8",True), + 0x801AE084:("D_801AE084","u8",True), + 0x801AE194:("D_801AE194","s32",True), # length 32 + 0x801AE214:("D_801AE214","u8",True), # length 32 0x801AEFD0:("","s800BF9A0",False), 0x801B4610:("","UNK_TYPE",False), 0x801B9F20:("","s800E03A0",False), # actually an array of size 23? 0x801BDB30:("","u8",True), + 0x801C2078:("D_801C2078","u8",True), + 0x801C2079:("D_801C2079","u8",False), + 0x801C207E:("D_801C207E","u8",False), + 0x801DBE68:("D_801DBE68","f32",False), + 0x801DBE6C:("D_801DBE6C","f32",False), + 0x801DBE70:("D_801DBE70","f32",False), + 0x801DBE74:("D_801DBE74","f32",False), + 0x801DBE78:("D_801DBE78","f32",False), + 0x801DBE7C:("D_801DBE7C","f32",False), + 0x801DBE80:("D_801DBE80","f32",False), + 0x801DBE84:("D_801DBE84","f32",False), + 0x801DBE88:("D_801DBE88","f32",False), + 0x801DBE8C:("D_801DBE8C","f32",False), + 0x801DBE90:("D_801DBE90","f32",False), + 0x801DBE94:("D_801DBE94","f32",False), + 0x801DBE98:("D_801DBE98","f32",False), + 0x801DBE9C:("D_801DBE9C","f32",False), + 0x801DBEA0:("D_801DBEA0","f32",False), + 0x801DBF10:("D_801DBF10","f32",False), + 0x801DBF14:("D_801DBF14","f32",False), + 0x801DBF18:("D_801DBF18","f32",False), + 0x801DBF1C:("D_801DBF1C","f32",False), + 0x801DBF20:("D_801DBF20","f32",False), + 0x801DC068:("D_801DC068","f32",False), + 0x801DC06C:("D_801DC06C","f32",False), + 0x801DC070:("D_801DC070","f32",False), + 0x801DC074:("D_801DC074","f32",False), 0x801DCBB0:("","UNK_TYPE",False), 0x801DCBC4:("","UNK_TYPE",False), 0x801DCBE4:("","UNK_TYPE",False), @@ -145,6 +186,8 @@ known_vars = { 0x801E3FA0:("","UNK_TYPE",False), 0x801ED930:("","UNK_TYPE",False), 0x801ED940:("","UNK_TYPE",False), + 0x801EF670:("D_801EF670","u8",False), # save info/link struct? + 0x801EF677:("D_801EF677","u8",False), # part of save info/link struct? 0x80208EA0:("","UNK_TYPE",False), # En_Test