From 8d533d5615a89ff6bbc289228aa9fc7ee16bea87 Mon Sep 17 00:00:00 2001 From: dark-samus Date: Fri, 15 Jan 2021 12:01:44 -0500 Subject: [PATCH] stuff --- asm/nonmatchings/code_102c80/func_802E246C.s | 125 ++++++++ .../code_1060_len_310/func_80025C60.s | 28 -- .../code_1060_len_310/func_80025CC0.s | 19 -- .../code_1060_len_310/func_80025CFC.s | 19 -- .../code_1060_len_310/func_80025D38.s | 19 -- .../code_1060_len_310/func_80025D74.s | 126 -------- .../code_1060_len_310/func_80025F44.s | 16 - .../world => code_341d0}/func_80058DD0.s | 0 .../world => code_341d0}/func_80058E84.s | 0 .../world => code_341d0}/func_80058F88.s | 0 .../world => code_341d0}/func_80059008.s | 0 .../world => code_341d0}/func_8005904C.s | 0 .../world => code_341d0}/func_80059310.s | 0 .../world => code_341d0}/func_800598A0.s | 0 .../world => code_341d0}/func_80059AB8.s | 0 .../world => code_341d0}/func_80059BD4.s | 0 .../world => code_341d0}/func_80059C88.s | 0 .../world => code_341d0}/func_80059C9C.s | 0 .../world => code_341d0}/func_80059D50.s | 0 .../world => code_341d0}/func_80059F94.s | 0 asm/nonmatchings/world/world/play_effect.s | 101 ------- include/PR/gbi.h | 2 +- include/common.h | 1 + include/common_structs.h | 36 ++- include/enums.h | 2 +- include/stdarg.h | 205 +++++++++++++ include/va-mips.h | 276 ++++++++++++++++++ include/varargs.h | 220 ++++++++++++++ src/code_102c80.c | 56 +++- src/code_1060_len_310.c | 84 +++++- src/code_197F40.c | 2 +- src/code_1b40_len_20b0.c | 54 ++-- src/code_331940.c | 151 ---------- src/code_341d0.c | 225 ++++++++++++++ src/world/world.c | 230 --------------- tools/splat.yaml | 6 +- 36 files changed, 1249 insertions(+), 754 deletions(-) create mode 100644 asm/nonmatchings/code_102c80/func_802E246C.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025C60.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025CC0.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025CFC.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025D38.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025D74.s delete mode 100644 asm/nonmatchings/code_1060_len_310/func_80025F44.s rename asm/nonmatchings/{world/world => code_341d0}/func_80058DD0.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80058E84.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80058F88.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059008.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_8005904C.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059310.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_800598A0.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059AB8.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059BD4.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059C88.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059C9C.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059D50.s (100%) rename asm/nonmatchings/{world/world => code_341d0}/func_80059F94.s (100%) delete mode 100644 asm/nonmatchings/world/world/play_effect.s create mode 100644 include/stdarg.h create mode 100644 include/va-mips.h create mode 100644 include/varargs.h create mode 100644 src/code_341d0.c diff --git a/asm/nonmatchings/code_102c80/func_802E246C.s b/asm/nonmatchings/code_102c80/func_802E246C.s new file mode 100644 index 0000000000..f2f5be683a --- /dev/null +++ b/asm/nonmatchings/code_102c80/func_802E246C.s @@ -0,0 +1,125 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches + +glabel func_802E246C +/* 103CEC 802E246C 27BDFF40 */ addiu $sp, $sp, -0xc0 +/* 103CF0 802E2470 AFB500A4 */ sw $s5, 0xa4($sp) +/* 103CF4 802E2474 0080A82D */ daddu $s5, $a0, $zero +/* 103CF8 802E2478 AFB600A8 */ sw $s6, 0xa8($sp) +/* 103CFC 802E247C 00C0B02D */ daddu $s6, $a2, $zero +/* 103D00 802E2480 27A40050 */ addiu $a0, $sp, 0x50 +/* 103D04 802E2484 30A5FFFF */ andi $a1, $a1, 0xffff +/* 103D08 802E2488 AFBF00B0 */ sw $ra, 0xb0($sp) +/* 103D0C 802E248C AFB700AC */ sw $s7, 0xac($sp) +/* 103D10 802E2490 AFB400A0 */ sw $s4, 0xa0($sp) +/* 103D14 802E2494 AFB3009C */ sw $s3, 0x9c($sp) +/* 103D18 802E2498 AFB20098 */ sw $s2, 0x98($sp) +/* 103D1C 802E249C AFB10094 */ sw $s1, 0x94($sp) +/* 103D20 802E24A0 AFB00090 */ sw $s0, 0x90($sp) +/* 103D24 802E24A4 F7B400B8 */ sdc1 $f20, 0xb8($sp) +/* 103D28 802E24A8 8EA20044 */ lw $v0, 0x44($s5) +/* 103D2C 802E24AC 8EB00040 */ lw $s0, 0x40($s5) +/* 103D30 802E24B0 00451021 */ addu $v0, $v0, $a1 +/* 103D34 802E24B4 AE020034 */ sw $v0, 0x34($s0) +/* 103D38 802E24B8 3C02802E */ lui $v0, %hi(func_802E2BA4) +/* 103D3C 802E24BC 24422BA4 */ addiu $v0, $v0, %lo(func_802E2BA4) +/* 103D40 802E24C0 AEA2003C */ sw $v0, 0x3c($s5) +/* 103D44 802E24C4 240200FF */ addiu $v0, $zero, 0xff +/* 103D48 802E24C8 A2A2000B */ sb $v0, 0xb($s5) +/* 103D4C 802E24CC C6000038 */ lwc1 $f0, 0x38($s0) +/* 103D50 802E24D0 8EA50048 */ lw $a1, 0x48($s5) +/* 103D54 802E24D4 8EA70050 */ lw $a3, 0x50($s5) +/* 103D58 802E24D8 44060000 */ mfc1 $a2, $f0 +/* 103D5C 802E24DC 24170002 */ addiu $s7, $zero, 2 +/* 103D60 802E24E0 0C019E40 */ jal guTranslateF +/* 103D64 802E24E4 AEA6004C */ sw $a2, 0x4c($s5) +/* 103D68 802E24E8 0C044AC8 */ jal func_80112B20 +/* 103D6C 802E24EC 02A0202D */ daddu $a0, $s5, $zero +/* 103D70 802E24F0 50400001 */ beql $v0, $zero, .L802E24F8 +/* 103D74 802E24F4 24170001 */ addiu $s7, $zero, 1 +.L802E24F8: +/* 103D78 802E24F8 0000A02D */ daddu $s4, $zero, $zero +/* 103D7C 802E24FC 0200902D */ daddu $s2, $s0, $zero +/* 103D80 802E2500 0240882D */ daddu $s1, $s2, $zero +/* 103D84 802E2504 0240982D */ daddu $s3, $s2, $zero +/* 103D88 802E2508 240200FF */ addiu $v0, $zero, 0xff +/* 103D8C 802E250C A640003E */ sh $zero, 0x3e($s2) +/* 103D90 802E2510 A642003C */ sh $v0, 0x3c($s2) +.L802E2514: +/* 103D94 802E2514 32C2FFFF */ andi $v0, $s6, 0xffff +/* 103D98 802E2518 26D60040 */ addiu $s6, $s6, 0x40 +/* 103D9C 802E251C 8EA50044 */ lw $a1, 0x44($s5) +/* 103DA0 802E2520 27A40010 */ addiu $a0, $sp, 0x10 +/* 103DA4 802E2524 0C019D60 */ jal guMtxL2F +/* 103DA8 802E2528 00A22821 */ addu $a1, $a1, $v0 +/* 103DAC 802E252C 27A40050 */ addiu $a0, $sp, 0x50 +/* 103DB0 802E2530 27A50010 */ addiu $a1, $sp, 0x10 +/* 103DB4 802E2534 0C019D80 */ jal guMtxCatF +/* 103DB8 802E2538 00A0302D */ daddu $a2, $a1, $zero +/* 103DBC 802E253C C7A00040 */ lwc1 $f0, 0x40($sp) +/* 103DC0 802E2540 E64000C0 */ swc1 $f0, 0xc0($s2) +/* 103DC4 802E2544 C7A00044 */ lwc1 $f0, 0x44($sp) +/* 103DC8 802E2548 E6400124 */ swc1 $f0, 0x124($s2) +/* 103DCC 802E254C C7A00048 */ lwc1 $f0, 0x48($sp) +/* 103DD0 802E2550 240400FF */ addiu $a0, $zero, 0xff +/* 103DD4 802E2554 0C00A67F */ jal rand_int +/* 103DD8 802E2558 E6400188 */ swc1 $f0, 0x188($s2) +/* 103DDC 802E255C 00021023 */ negu $v0, $v0 +/* 103DE0 802E2560 A2220072 */ sb $v0, 0x72($s1) +/* 103DE4 802E2564 24020001 */ addiu $v0, $zero, 1 +/* 103DE8 802E2568 16E20008 */ bne $s7, $v0, .L802E258C +/* 103DEC 802E256C 24100028 */ addiu $s0, $zero, 0x28 +/* 103DF0 802E2570 24100014 */ addiu $s0, $zero, 0x14 +/* 103DF4 802E2574 96620000 */ lhu $v0, ($s3) +/* 103DF8 802E2578 3C0140CC */ lui $at, 0x40cc +/* 103DFC 802E257C 3421CCCD */ ori $at, $at, 0xcccd +/* 103E00 802E2580 4481A000 */ mtc1 $at, $f20 +/* 103E04 802E2584 080B8968 */ j .L802E25A0 +/* 103E08 802E2588 34420001 */ ori $v0, $v0, 1 +.L802E258C: +/* 103E0C 802E258C 96620000 */ lhu $v0, ($s3) +/* 103E10 802E2590 3C014109 */ lui $at, 0x4109 +/* 103E14 802E2594 3421999A */ ori $at, $at, 0x999a +/* 103E18 802E2598 4481A000 */ mtc1 $at, $f20 +/* 103E1C 802E259C 34420002 */ ori $v0, $v0, 2 +.L802E25A0: +/* 103E20 802E25A0 A6620000 */ sh $v0, ($s3) +/* 103E24 802E25A4 0C00A67F */ jal rand_int +/* 103E28 802E25A8 2404000A */ addiu $a0, $zero, 0xa +/* 103E2C 802E25AC 02028021 */ addu $s0, $s0, $v0 +/* 103E30 802E25B0 32820001 */ andi $v0, $s4, 1 +/* 103E34 802E25B4 14400003 */ bnez $v0, .L802E25C4 +/* 103E38 802E25B8 A2300059 */ sb $s0, 0x59($s1) +/* 103E3C 802E25BC 00101023 */ negu $v0, $s0 +/* 103E40 802E25C0 A2220059 */ sb $v0, 0x59($s1) +.L802E25C4: +/* 103E44 802E25C4 0C00A64D */ jal func_80029934 +/* 103E48 802E25C8 26730002 */ addiu $s3, $s3, 2 +/* 103E4C 802E25CC 3C01802F */ lui $at, %hi(D_802EB130) +/* 103E50 802E25D0 D422B130 */ ldc1 $f2, %lo(D_802EB130)($at) +/* 103E54 802E25D4 46000021 */ cvt.d.s $f0, $f0 +/* 103E58 802E25D8 46220002 */ mul.d $f0, $f0, $f2 +/* 103E5C 802E25DC 00000000 */ nop +/* 103E60 802E25E0 46200020 */ cvt.s.d $f0, $f0 +/* 103E64 802E25E4 4600A000 */ add.s $f0, $f20, $f0 +/* 103E68 802E25E8 26940001 */ addiu $s4, $s4, 1 +/* 103E6C 802E25EC 2A820018 */ slti $v0, $s4, 0x18 +/* 103E70 802E25F0 E64001EC */ swc1 $f0, 0x1ec($s2) +/* 103E74 802E25F4 26520004 */ addiu $s2, $s2, 4 +/* 103E78 802E25F8 A2200040 */ sb $zero, 0x40($s1) +/* 103E7C 802E25FC A220008B */ sb $zero, 0x8b($s1) +/* 103E80 802E2600 A22000A4 */ sb $zero, 0xa4($s1) +/* 103E84 802E2604 1440FFC3 */ bnez $v0, .L802E2514 +/* 103E88 802E2608 26310001 */ addiu $s1, $s1, 1 +/* 103E8C 802E260C 8FBF00B0 */ lw $ra, 0xb0($sp) +/* 103E90 802E2610 8FB700AC */ lw $s7, 0xac($sp) +/* 103E94 802E2614 8FB600A8 */ lw $s6, 0xa8($sp) +/* 103E98 802E2618 8FB500A4 */ lw $s5, 0xa4($sp) +/* 103E9C 802E261C 8FB400A0 */ lw $s4, 0xa0($sp) +/* 103EA0 802E2620 8FB3009C */ lw $s3, 0x9c($sp) +/* 103EA4 802E2624 8FB20098 */ lw $s2, 0x98($sp) +/* 103EA8 802E2628 8FB10094 */ lw $s1, 0x94($sp) +/* 103EAC 802E262C 8FB00090 */ lw $s0, 0x90($sp) +/* 103EB0 802E2630 D7B400B8 */ ldc1 $f20, 0xb8($sp) +/* 103EB4 802E2634 03E00008 */ jr $ra +/* 103EB8 802E2638 27BD00C0 */ addiu $sp, $sp, 0xc0 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025C60.s b/asm/nonmatchings/code_1060_len_310/func_80025C60.s deleted file mode 100644 index f57ce2f17f..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025C60.s +++ /dev/null @@ -1,28 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025C60 -/* 1060 80025C60 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1064 80025C64 3C05B3FF */ lui $a1, 0xb3ff -/* 1068 80025C68 34A50014 */ ori $a1, $a1, 0x14 -/* 106C 80025C6C AFB00010 */ sw $s0, 0x10($sp) -/* 1070 80025C70 3C10800A */ lui $s0, %hi(carthandle) -/* 1074 80025C74 2610A638 */ addiu $s0, $s0, %lo(carthandle) -/* 1078 80025C78 AFBF0014 */ sw $ra, 0x14($sp) -/* 107C 80025C7C 8E040000 */ lw $a0, ($s0) -/* 1080 80025C80 0C018358 */ jal osEPiWriteIo -/* 1084 80025C84 0000302D */ daddu $a2, $zero, $zero -/* 1088 80025C88 3C05B3FF */ lui $a1, 0xb3ff -/* 108C 80025C8C 34A50004 */ ori $a1, $a1, 4 -/* 1090 80025C90 8E040000 */ lw $a0, ($s0) -/* 1094 80025C94 0C018358 */ jal osEPiWriteIo -/* 1098 80025C98 0000302D */ daddu $a2, $zero, $zero -/* 109C 80025C9C 3C05B3FF */ lui $a1, 0xb3ff -/* 10A0 80025CA0 3C064953 */ lui $a2, 0x4953 -/* 10A4 80025CA4 8E040000 */ lw $a0, ($s0) -/* 10A8 80025CA8 0C018358 */ jal osEPiWriteIo -/* 10AC 80025CAC 34C63634 */ ori $a2, $a2, 0x3634 -/* 10B0 80025CB0 8FBF0014 */ lw $ra, 0x14($sp) -/* 10B4 80025CB4 8FB00010 */ lw $s0, 0x10($sp) -/* 10B8 80025CB8 03E00008 */ jr $ra -/* 10BC 80025CBC 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025CC0.s b/asm/nonmatchings/code_1060_len_310/func_80025CC0.s deleted file mode 100644 index 3936f75df9..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025CC0.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025CC0 -/* 10C0 80025CC0 AFA40000 */ sw $a0, ($sp) -/* 10C4 80025CC4 AFA50004 */ sw $a1, 4($sp) -/* 10C8 80025CC8 AFA60008 */ sw $a2, 8($sp) -/* 10CC 80025CCC AFA7000C */ sw $a3, 0xc($sp) -/* 10D0 80025CD0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 10D4 80025CD4 0080302D */ daddu $a2, $a0, $zero -/* 10D8 80025CD8 3C048002 */ lui $a0, %hi(func_80025D74) -/* 10DC 80025CDC 24845D74 */ addiu $a0, $a0, %lo(func_80025D74) -/* 10E0 80025CE0 0000282D */ daddu $a1, $zero, $zero -/* 10E4 80025CE4 AFBF0010 */ sw $ra, 0x10($sp) -/* 10E8 80025CE8 0C0192A8 */ jal _Printf -/* 10EC 80025CEC 27A7001C */ addiu $a3, $sp, 0x1c -/* 10F0 80025CF0 8FBF0010 */ lw $ra, 0x10($sp) -/* 10F4 80025CF4 03E00008 */ jr $ra -/* 10F8 80025CF8 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025CFC.s b/asm/nonmatchings/code_1060_len_310/func_80025CFC.s deleted file mode 100644 index a01264ce6d..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025CFC.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025CFC -/* 10FC 80025CFC AFA40000 */ sw $a0, ($sp) -/* 1100 80025D00 AFA50004 */ sw $a1, 4($sp) -/* 1104 80025D04 AFA60008 */ sw $a2, 8($sp) -/* 1108 80025D08 AFA7000C */ sw $a3, 0xc($sp) -/* 110C 80025D0C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1110 80025D10 0080302D */ daddu $a2, $a0, $zero -/* 1114 80025D14 3C048002 */ lui $a0, %hi(func_80025D74) -/* 1118 80025D18 24845D74 */ addiu $a0, $a0, %lo(func_80025D74) -/* 111C 80025D1C 0000282D */ daddu $a1, $zero, $zero -/* 1120 80025D20 AFBF0010 */ sw $ra, 0x10($sp) -/* 1124 80025D24 0C0192A8 */ jal _Printf -/* 1128 80025D28 27A7001C */ addiu $a3, $sp, 0x1c -/* 112C 80025D2C 8FBF0010 */ lw $ra, 0x10($sp) -/* 1130 80025D30 03E00008 */ jr $ra -/* 1134 80025D34 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025D38.s b/asm/nonmatchings/code_1060_len_310/func_80025D38.s deleted file mode 100644 index 81be205538..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025D38.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025D38 -/* 1138 80025D38 AFA40000 */ sw $a0, ($sp) -/* 113C 80025D3C AFA50004 */ sw $a1, 4($sp) -/* 1140 80025D40 AFA60008 */ sw $a2, 8($sp) -/* 1144 80025D44 AFA7000C */ sw $a3, 0xc($sp) -/* 1148 80025D48 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 114C 80025D4C 0080302D */ daddu $a2, $a0, $zero -/* 1150 80025D50 3C048002 */ lui $a0, %hi(func_80025D74) -/* 1154 80025D54 24845D74 */ addiu $a0, $a0, %lo(func_80025D74) -/* 1158 80025D58 0000282D */ daddu $a1, $zero, $zero -/* 115C 80025D5C AFBF0010 */ sw $ra, 0x10($sp) -/* 1160 80025D60 0C0192A8 */ jal _Printf -/* 1164 80025D64 27A7001C */ addiu $a3, $sp, 0x1c -/* 1168 80025D68 8FBF0010 */ lw $ra, 0x10($sp) -/* 116C 80025D6C 03E00008 */ jr $ra -/* 1170 80025D70 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025D74.s b/asm/nonmatchings/code_1060_len_310/func_80025D74.s deleted file mode 100644 index ac017a4851..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025D74.s +++ /dev/null @@ -1,126 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025D74 -/* 1174 80025D74 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 1178 80025D78 AFB30024 */ sw $s3, 0x24($sp) -/* 117C 80025D7C 00A0982D */ daddu $s3, $a1, $zero -/* 1180 80025D80 AFB40028 */ sw $s4, 0x28($sp) -/* 1184 80025D84 00C0A02D */ daddu $s4, $a2, $zero -/* 1188 80025D88 3C05B3FF */ lui $a1, 0xb3ff -/* 118C 80025D8C AFB1001C */ sw $s1, 0x1c($sp) -/* 1190 80025D90 3C11800A */ lui $s1, %hi(carthandle) -/* 1194 80025D94 2631A638 */ addiu $s1, $s1, %lo(carthandle) -/* 1198 80025D98 AFB00018 */ sw $s0, 0x18($sp) -/* 119C 80025D9C 27B00010 */ addiu $s0, $sp, 0x10 -/* 11A0 80025DA0 AFBF003C */ sw $ra, 0x3c($sp) -/* 11A4 80025DA4 AFBE0038 */ sw $fp, 0x38($sp) -/* 11A8 80025DA8 AFB70034 */ sw $s7, 0x34($sp) -/* 11AC 80025DAC AFB60030 */ sw $s6, 0x30($sp) -/* 11B0 80025DB0 AFB5002C */ sw $s5, 0x2c($sp) -/* 11B4 80025DB4 AFB20020 */ sw $s2, 0x20($sp) -/* 11B8 80025DB8 8E240000 */ lw $a0, ($s1) -/* 11BC 80025DBC 0C018370 */ jal osEPiReadIo -/* 11C0 80025DC0 0200302D */ daddu $a2, $s0, $zero -/* 11C4 80025DC4 3C034953 */ lui $v1, 0x4953 -/* 11C8 80025DC8 8FA20010 */ lw $v0, 0x10($sp) -/* 11CC 80025DCC 34633634 */ ori $v1, $v1, 0x3634 -/* 11D0 80025DD0 14430050 */ bne $v0, $v1, .L80025F14 -/* 11D4 80025DD4 24020001 */ addiu $v0, $zero, 1 -/* 11D8 80025DD8 3C05B3FF */ lui $a1, 0xb3ff -/* 11DC 80025DDC 34A50004 */ ori $a1, $a1, 4 -/* 11E0 80025DE0 8E240000 */ lw $a0, ($s1) -/* 11E4 80025DE4 0C018370 */ jal osEPiReadIo -/* 11E8 80025DE8 0200302D */ daddu $a2, $s0, $zero -/* 11EC 80025DEC 3C05B3FF */ lui $a1, 0xb3ff -/* 11F0 80025DF0 0200302D */ daddu $a2, $s0, $zero -/* 11F4 80025DF4 8E240000 */ lw $a0, ($s1) -/* 11F8 80025DF8 8FB00010 */ lw $s0, 0x10($sp) -/* 11FC 80025DFC 0C018370 */ jal osEPiReadIo -/* 1200 80025E00 34A50014 */ ori $a1, $a1, 0x14 -/* 1204 80025E04 8FB20010 */ lw $s2, 0x10($sp) -/* 1208 80025E08 3402FFDF */ ori $v0, $zero, 0xffdf -/* 120C 80025E0C 02541821 */ addu $v1, $s2, $s4 -/* 1210 80025E10 0043102A */ slt $v0, $v0, $v1 -/* 1214 80025E14 1040000B */ beqz $v0, .L80025E44 -/* 1218 80025E18 3C02FFFF */ lui $v0, 0xffff -/* 121C 80025E1C 34420020 */ ori $v0, $v0, 0x20 -/* 1220 80025E20 00621821 */ addu $v1, $v1, $v0 -/* 1224 80025E24 0203102A */ slt $v0, $s0, $v1 -/* 1228 80025E28 1440003A */ bnez $v0, .L80025F14 -/* 122C 80025E2C 24020001 */ addiu $v0, $zero, 1 -/* 1230 80025E30 0250102A */ slt $v0, $s2, $s0 -/* 1234 80025E34 10400008 */ beqz $v0, .L80025E58 -/* 1238 80025E38 24020001 */ addiu $v0, $zero, 1 -/* 123C 80025E3C 080097C5 */ j .L80025F14 -/* 1240 80025E40 00000000 */ nop -.L80025E44: -/* 1244 80025E44 0250102A */ slt $v0, $s2, $s0 -/* 1248 80025E48 10400003 */ beqz $v0, .L80025E58 -/* 124C 80025E4C 0203102A */ slt $v0, $s0, $v1 -/* 1250 80025E50 14400030 */ bnez $v0, .L80025F14 -/* 1254 80025E54 24020001 */ addiu $v0, $zero, 1 -.L80025E58: -/* 1258 80025E58 12800027 */ beqz $s4, .L80025EF8 -/* 125C 80025E5C 3C1E0FFF */ lui $fp, 0xfff -/* 1260 80025E60 37DEFFFC */ ori $fp, $fp, 0xfffc -/* 1264 80025E64 3C17B3FF */ lui $s7, 0xb3ff -/* 1268 80025E68 36F70020 */ ori $s7, $s7, 0x20 -/* 126C 80025E6C 3C15800A */ lui $s5, %hi(carthandle) -/* 1270 80025E70 26B5A638 */ addiu $s5, $s5, %lo(carthandle) -/* 1274 80025E74 3C16FFFF */ lui $s6, 0xffff -/* 1278 80025E78 36D60020 */ ori $s6, $s6, 0x20 -.L80025E7C: -/* 127C 80025E7C 92620000 */ lbu $v0, ($s3) -/* 1280 80025E80 1040001A */ beqz $v0, .L80025EEC -/* 1284 80025E84 025E8824 */ and $s1, $s2, $fp -/* 1288 80025E88 02378821 */ addu $s1, $s1, $s7 -/* 128C 80025E8C 0220282D */ daddu $a1, $s1, $zero -/* 1290 80025E90 27A60010 */ addiu $a2, $sp, 0x10 -/* 1294 80025E94 32500003 */ andi $s0, $s2, 3 -/* 1298 80025E98 26520001 */ addiu $s2, $s2, 1 -/* 129C 80025E9C 24070003 */ addiu $a3, $zero, 3 -/* 12A0 80025EA0 00F08023 */ subu $s0, $a3, $s0 -/* 12A4 80025EA4 8EA40000 */ lw $a0, ($s5) -/* 12A8 80025EA8 0C018370 */ jal osEPiReadIo -/* 12AC 80025EAC 00F08004 */ sllv $s0, $s0, $a3 -/* 12B0 80025EB0 0220282D */ daddu $a1, $s1, $zero -/* 12B4 80025EB4 240700FF */ addiu $a3, $zero, 0xff -/* 12B8 80025EB8 02071004 */ sllv $v0, $a3, $s0 -/* 12BC 80025EBC 00021027 */ nor $v0, $zero, $v0 -/* 12C0 80025EC0 8EA40000 */ lw $a0, ($s5) -/* 12C4 80025EC4 8FA30010 */ lw $v1, 0x10($sp) -/* 12C8 80025EC8 92660000 */ lbu $a2, ($s3) -/* 12CC 80025ECC 00621824 */ and $v1, $v1, $v0 -/* 12D0 80025ED0 02063004 */ sllv $a2, $a2, $s0 -/* 12D4 80025ED4 0C018358 */ jal osEPiWriteIo -/* 12D8 80025ED8 00663025 */ or $a2, $v1, $a2 -/* 12DC 80025EDC 3407FFDF */ ori $a3, $zero, 0xffdf -/* 12E0 80025EE0 00F2102A */ slt $v0, $a3, $s2 -/* 12E4 80025EE4 54400001 */ bnel $v0, $zero, .L80025EEC -/* 12E8 80025EE8 02569021 */ addu $s2, $s2, $s6 -.L80025EEC: -/* 12EC 80025EEC 2694FFFF */ addiu $s4, $s4, -1 -/* 12F0 80025EF0 1680FFE2 */ bnez $s4, .L80025E7C -/* 12F4 80025EF4 26730001 */ addiu $s3, $s3, 1 -.L80025EF8: -/* 12F8 80025EF8 3C04800A */ lui $a0, %hi(carthandle) -/* 12FC 80025EFC 8C84A638 */ lw $a0, %lo(carthandle)($a0) -/* 1300 80025F00 3C05B3FF */ lui $a1, 0xb3ff -/* 1304 80025F04 34A50014 */ ori $a1, $a1, 0x14 -/* 1308 80025F08 0C018358 */ jal osEPiWriteIo -/* 130C 80025F0C 0240302D */ daddu $a2, $s2, $zero -/* 1310 80025F10 24020001 */ addiu $v0, $zero, 1 -.L80025F14: -/* 1314 80025F14 8FBF003C */ lw $ra, 0x3c($sp) -/* 1318 80025F18 8FBE0038 */ lw $fp, 0x38($sp) -/* 131C 80025F1C 8FB70034 */ lw $s7, 0x34($sp) -/* 1320 80025F20 8FB60030 */ lw $s6, 0x30($sp) -/* 1324 80025F24 8FB5002C */ lw $s5, 0x2c($sp) -/* 1328 80025F28 8FB40028 */ lw $s4, 0x28($sp) -/* 132C 80025F2C 8FB30024 */ lw $s3, 0x24($sp) -/* 1330 80025F30 8FB20020 */ lw $s2, 0x20($sp) -/* 1334 80025F34 8FB1001C */ lw $s1, 0x1c($sp) -/* 1338 80025F38 8FB00018 */ lw $s0, 0x18($sp) -/* 133C 80025F3C 03E00008 */ jr $ra -/* 1340 80025F40 27BD0040 */ addiu $sp, $sp, 0x40 diff --git a/asm/nonmatchings/code_1060_len_310/func_80025F44.s b/asm/nonmatchings/code_1060_len_310/func_80025F44.s deleted file mode 100644 index b51f3b3b1a..0000000000 --- a/asm/nonmatchings/code_1060_len_310/func_80025F44.s +++ /dev/null @@ -1,16 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80025F44 -/* 1344 80025F44 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1348 80025F48 AFBF0010 */ sw $ra, 0x10($sp) -/* 134C 80025F4C 0080382D */ daddu $a3, $a0, $zero -/* 1350 80025F50 3C048009 */ lui $a0, %hi(D_80097D30) -/* 1354 80025F54 24847D30 */ addiu $a0, $a0, %lo(D_80097D30) -/* 1358 80025F58 0C00973F */ jal func_80025CFC -/* 135C 80025F5C 00000000 */ nop -.L80025F60: -/* 1360 80025F60 080097D8 */ j .L80025F60 -/* 1364 80025F64 00000000 */ nop -/* 1368 80025F68 00000000 */ nop -/* 136C 80025F6C 00000000 */ nop diff --git a/asm/nonmatchings/world/world/func_80058DD0.s b/asm/nonmatchings/code_341d0/func_80058DD0.s similarity index 100% rename from asm/nonmatchings/world/world/func_80058DD0.s rename to asm/nonmatchings/code_341d0/func_80058DD0.s diff --git a/asm/nonmatchings/world/world/func_80058E84.s b/asm/nonmatchings/code_341d0/func_80058E84.s similarity index 100% rename from asm/nonmatchings/world/world/func_80058E84.s rename to asm/nonmatchings/code_341d0/func_80058E84.s diff --git a/asm/nonmatchings/world/world/func_80058F88.s b/asm/nonmatchings/code_341d0/func_80058F88.s similarity index 100% rename from asm/nonmatchings/world/world/func_80058F88.s rename to asm/nonmatchings/code_341d0/func_80058F88.s diff --git a/asm/nonmatchings/world/world/func_80059008.s b/asm/nonmatchings/code_341d0/func_80059008.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059008.s rename to asm/nonmatchings/code_341d0/func_80059008.s diff --git a/asm/nonmatchings/world/world/func_8005904C.s b/asm/nonmatchings/code_341d0/func_8005904C.s similarity index 100% rename from asm/nonmatchings/world/world/func_8005904C.s rename to asm/nonmatchings/code_341d0/func_8005904C.s diff --git a/asm/nonmatchings/world/world/func_80059310.s b/asm/nonmatchings/code_341d0/func_80059310.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059310.s rename to asm/nonmatchings/code_341d0/func_80059310.s diff --git a/asm/nonmatchings/world/world/func_800598A0.s b/asm/nonmatchings/code_341d0/func_800598A0.s similarity index 100% rename from asm/nonmatchings/world/world/func_800598A0.s rename to asm/nonmatchings/code_341d0/func_800598A0.s diff --git a/asm/nonmatchings/world/world/func_80059AB8.s b/asm/nonmatchings/code_341d0/func_80059AB8.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059AB8.s rename to asm/nonmatchings/code_341d0/func_80059AB8.s diff --git a/asm/nonmatchings/world/world/func_80059BD4.s b/asm/nonmatchings/code_341d0/func_80059BD4.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059BD4.s rename to asm/nonmatchings/code_341d0/func_80059BD4.s diff --git a/asm/nonmatchings/world/world/func_80059C88.s b/asm/nonmatchings/code_341d0/func_80059C88.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059C88.s rename to asm/nonmatchings/code_341d0/func_80059C88.s diff --git a/asm/nonmatchings/world/world/func_80059C9C.s b/asm/nonmatchings/code_341d0/func_80059C9C.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059C9C.s rename to asm/nonmatchings/code_341d0/func_80059C9C.s diff --git a/asm/nonmatchings/world/world/func_80059D50.s b/asm/nonmatchings/code_341d0/func_80059D50.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059D50.s rename to asm/nonmatchings/code_341d0/func_80059D50.s diff --git a/asm/nonmatchings/world/world/func_80059F94.s b/asm/nonmatchings/code_341d0/func_80059F94.s similarity index 100% rename from asm/nonmatchings/world/world/func_80059F94.s rename to asm/nonmatchings/code_341d0/func_80059F94.s diff --git a/asm/nonmatchings/world/world/play_effect.s b/asm/nonmatchings/world/world/play_effect.s deleted file mode 100644 index 6934b218ac..0000000000 --- a/asm/nonmatchings/world/world/play_effect.s +++ /dev/null @@ -1,101 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel play_effect -/* 35964 8005A564 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 35968 8005A568 AFB20020 */ sw $s2, 0x20($sp) -/* 3596C 8005A56C 0080902D */ daddu $s2, $a0, $zero -/* 35970 8005A570 3C038008 */ lui $v1, %hi(D_8007F210) -/* 35974 8005A574 2463F210 */ addiu $v1, $v1, %lo(D_8007F210) -/* 35978 8005A578 00121040 */ sll $v0, $s2, 1 -/* 3597C 8005A57C 00521021 */ addu $v0, $v0, $s2 -/* 35980 8005A580 000210C0 */ sll $v0, $v0, 3 -/* 35984 8005A584 AFB1001C */ sw $s1, 0x1c($sp) -/* 35988 8005A588 00438821 */ addu $s1, $v0, $v1 -/* 3598C 8005A58C 0000202D */ daddu $a0, $zero, $zero -/* 35990 8005A590 AFB00018 */ sw $s0, 0x18($sp) -/* 35994 8005A594 3C10800A */ lui $s0, %hi(D_800A4000) -/* 35998 8005A598 26104000 */ addiu $s0, $s0, %lo(D_800A4000) -/* 3599C 8005A59C AFBF0024 */ sw $ra, 0x24($sp) -.L8005A5A0: -/* 359A0 8005A5A0 8E020000 */ lw $v0, ($s0) -/* 359A4 8005A5A4 30420001 */ andi $v0, $v0, 1 -/* 359A8 8005A5A8 50400005 */ beql $v0, $zero, .L8005A5C0 -/* 359AC 8005A5AC 24840001 */ addiu $a0, $a0, 1 -/* 359B0 8005A5B0 8E020004 */ lw $v0, 4($s0) -/* 359B4 8005A5B4 10520006 */ beq $v0, $s2, .L8005A5D0 -/* 359B8 8005A5B8 2882000F */ slti $v0, $a0, 0xf -/* 359BC 8005A5BC 24840001 */ addiu $a0, $a0, 1 -.L8005A5C0: -/* 359C0 8005A5C0 2882000F */ slti $v0, $a0, 0xf -/* 359C4 8005A5C4 1440FFF6 */ bnez $v0, .L8005A5A0 -/* 359C8 8005A5C8 26100020 */ addiu $s0, $s0, 0x20 -/* 359CC 8005A5CC 2882000F */ slti $v0, $a0, 0xf -.L8005A5D0: -/* 359D0 8005A5D0 14400030 */ bnez $v0, .L8005A694 -/* 359D4 8005A5D4 24020001 */ addiu $v0, $zero, 1 -/* 359D8 8005A5D8 0000202D */ daddu $a0, $zero, $zero -/* 359DC 8005A5DC 3C10800A */ lui $s0, %hi(D_800A4000) -/* 359E0 8005A5E0 26104000 */ addiu $s0, $s0, %lo(D_800A4000) -.L8005A5E4: -/* 359E4 8005A5E4 8E020000 */ lw $v0, ($s0) -/* 359E8 8005A5E8 30420001 */ andi $v0, $v0, 1 -/* 359EC 8005A5EC 10400006 */ beqz $v0, .L8005A608 -/* 359F0 8005A5F0 2882000F */ slti $v0, $a0, 0xf -/* 359F4 8005A5F4 24840001 */ addiu $a0, $a0, 1 -/* 359F8 8005A5F8 2882000F */ slti $v0, $a0, 0xf -/* 359FC 8005A5FC 1440FFF9 */ bnez $v0, .L8005A5E4 -/* 35A00 8005A600 26100020 */ addiu $s0, $s0, 0x20 -/* 35A04 8005A604 2882000F */ slti $v0, $a0, 0xf -.L8005A608: -/* 35A08 8005A608 14400003 */ bnez $v0, .L8005A618 -/* 35A0C 8005A60C 3C0700FF */ lui $a3, 0xff -.L8005A610: -/* 35A10 8005A610 08016984 */ j .L8005A610 -/* 35A14 8005A614 00000000 */ nop -.L8005A618: -/* 35A18 8005A618 34E7FFFF */ ori $a3, $a3, 0xffff -/* 35A1C 8005A61C 0000282D */ daddu $a1, $zero, $zero -/* 35A20 8005A620 2402FFFF */ addiu $v0, $zero, -1 -/* 35A24 8005A624 3C038019 */ lui $v1, %hi(D_80197000) -/* 35A28 8005A628 24637000 */ addiu $v1, $v1, %lo(D_80197000) -/* 35A2C 8005A62C AFA20010 */ sw $v0, 0x10($sp) -/* 35A30 8005A630 AFA20014 */ sw $v0, 0x14($sp) -/* 35A34 8005A634 00041300 */ sll $v0, $a0, 0xc -/* 35A38 8005A638 00431021 */ addu $v0, $v0, $v1 -/* 35A3C 8005A63C 8E26000C */ lw $a2, 0xc($s1) -/* 35A40 8005A640 0C0199E8 */ jal osMapTLB -/* 35A44 8005A644 00473824 */ and $a3, $v0, $a3 -/* 35A48 8005A648 8E240004 */ lw $a0, 4($s1) -/* 35A4C 8005A64C 8E250008 */ lw $a1, 8($s1) -/* 35A50 8005A650 0C00A5CF */ jal dma_copy -/* 35A54 8005A654 8E26000C */ lw $a2, 0xc($s1) -/* 35A58 8005A658 8E220010 */ lw $v0, 0x10($s1) -/* 35A5C 8005A65C 5040000D */ beql $v0, $zero, .L8005A694 -/* 35A60 8005A660 24020001 */ addiu $v0, $zero, 1 -/* 35A64 8005A664 8E240014 */ lw $a0, 0x14($s1) -/* 35A68 8005A668 0C00AB0A */ jal general_heap_malloc -/* 35A6C 8005A66C 00822023 */ subu $a0, $a0, $v0 -/* 35A70 8005A670 14400003 */ bnez $v0, .L8005A680 -/* 35A74 8005A674 AE02001C */ sw $v0, 0x1c($s0) -.L8005A678: -/* 35A78 8005A678 0801699E */ j .L8005A678 -/* 35A7C 8005A67C 00000000 */ nop -.L8005A680: -/* 35A80 8005A680 8E240010 */ lw $a0, 0x10($s1) -/* 35A84 8005A684 8E250014 */ lw $a1, 0x14($s1) -/* 35A88 8005A688 0C00A5CF */ jal dma_copy -/* 35A8C 8005A68C 8E06001C */ lw $a2, 0x1c($s0) -/* 35A90 8005A690 24020001 */ addiu $v0, $zero, 1 -.L8005A694: -/* 35A94 8005A694 0040182D */ daddu $v1, $v0, $zero -/* 35A98 8005A698 AE120004 */ sw $s2, 4($s0) -/* 35A9C 8005A69C AE000008 */ sw $zero, 8($s0) -/* 35AA0 8005A6A0 AE030000 */ sw $v1, ($s0) -/* 35AA4 8005A6A4 8FBF0024 */ lw $ra, 0x24($sp) -/* 35AA8 8005A6A8 8FB20020 */ lw $s2, 0x20($sp) -/* 35AAC 8005A6AC 8FB1001C */ lw $s1, 0x1c($sp) -/* 35AB0 8005A6B0 8FB00018 */ lw $s0, 0x18($sp) -/* 35AB4 8005A6B4 03E00008 */ jr $ra -/* 35AB8 8005A6B8 27BD0028 */ addiu $sp, $sp, 0x28 -/* 35ABC 8005A6BC 00000000 */ nop diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 9c76ae06b5..595bc2b7b0 100755 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -1361,7 +1361,7 @@ typedef struct { typedef union { Light_t l; - long long int force_structure_alignment[2]; + //long long int force_structure_alignment[2]; } Light; typedef union { diff --git a/include/common.h b/include/common.h index 8e785491ea..58307f008e 100644 --- a/include/common.h +++ b/include/common.h @@ -11,5 +11,6 @@ #include "si.h" #include "messages.h" #include "ld_addrs.h" +#include "stdarg.h" #endif diff --git a/include/common_structs.h b/include/common_structs.h index dcc77b0f54..bb9c7c341d 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -477,7 +477,9 @@ typedef struct Camera { /* 0x084 */ f32 trueRotation[3]; /* 0x090 */ f32 currentBlendedYawNegated; /* 0x094 */ f32 currentPitch; - /* 0x098 */ char unk_98[60]; + /* 0x098 */ char unk_98[8]; + /* 0x0A0 */ Vp viewport; + /* 0x0B0 */ char unk_B0[0x24]; /* 0x0D4 */ struct Matrix4f perspectiveMatrix; /* 0x114 */ struct Matrix4f viewMtxPlayer; /* centers on player */ /* 0x154 */ struct Matrix4f viewMtxLeading; /* leads player slightly */ @@ -779,7 +781,7 @@ typedef struct StaticItem { typedef struct EffectInstance { /* 0x00 */ s32 flags; /* 0x04 */ s32 effectIndex; - /* 0x08 */ char unk_08[4]; + /* 0x08 */ s32 totalMatricies; /* 0x0C */ void* unk_0C; /* 0x10 */ struct Effect* effect; } EffectInstance; @@ -805,7 +807,7 @@ typedef struct Effect { } Effect; // size = 0x20 typedef struct EffectTableEntry { - /* 0x00 */ UNK_FUN_PTR(entryPoint); + /* 0x00 */ void (*entryPoint)(s32 arg0, s32 arg1, s32 arg2, s32 arg3, f32 x, f32 y, f32 z); /* 0x04 */ void* dmaStart; /* 0x08 */ void* dmaEnd; /* 0x0C */ void* dmaDest; @@ -813,7 +815,6 @@ typedef struct EffectTableEntry { /* 0x14 */ void* unkEndRom; } EffectTableEntry; // size = 0x18 - typedef struct ItemEntity { /* 0x00 */ s32 flags; /* 0x04 */ s16 boundVar; /* see make_item_entity */ @@ -953,7 +954,8 @@ typedef struct GameStatus { /* 0x08A */ s16 changedArea; /* (1 = yes) */ /* 0x08C */ s16 mapID; /* 0x08E */ s16 entryID; - /* 0x090 */ char unk_90[4]; + /* 0x090 */ u16 unk_90; + /* 0x092 */ u16 unk_92; /* 0x094 */ f32 exitAngle; /* 0x098 */ Vec3f playerPos; /* 0x0A4 */ f32 playerYaw; @@ -1630,6 +1632,11 @@ typedef struct { // BEGIN ENTITY-SPECIFIC STRUCTS +typedef struct struct802E2BA4 { + /* 0x00 */ char unk_00[2]; + /* 0x02 */ u16 unk_02[24][2]; +} struct802E2BA4; + // from code_102c80, size unknown. typedef struct struct802E1400 { /* 0x000 */ Vec3f unk_00; @@ -1639,10 +1646,25 @@ typedef struct struct802E1400 { /* 0x014 */ Vec3f unk_14; /* 0x020 */ u16 unk_20; /* 0x022 */ s16 unk_22; - /* 0x024 */ char unk_24[4]; + /* 0x024 */ s16 unk_24; /* 0x028 */ Entity* attachedEntity; - /* 0x02C */ char unk_2C[12]; + /* 0x02C */ char unk_2C[8]; + /* 0x034 */ struct802E2BA4* unk_34; /* 0x038 */ f32 unk_38; + /* 0x03C */ union { + /* */ s16 s; + /* */ s8 b[2]; + /* */ } unk_3C; + /* 0x03E */ char unk_3E[0x4D]; + /* 0x08B */ u8 unk_8B[24]; + /* 0x0A3 */ char unk_A3; // padding? + /* 0x0A4 */ u8 unk_A4[24]; + /* 0x0BC */ char unk_BC[4]; + /* 0x0C0 */ f32 unk_C0[24]; + /* 0x120 */ char unk_120[4]; + /* 0x124 */ f32 unk_124[24]; + /* 0x184 */ char unk_184[4]; + /* 0x188 */ f32 unk_188[24]; } struct802E1400; // from code_104940_len_dc0, size unknown diff --git a/include/enums.h b/include/enums.h index 68349ca77d..bc473bbd07 100644 --- a/include/enums.h +++ b/include/enums.h @@ -782,7 +782,7 @@ typedef UNK_TYPE Phase; #define Phase_MERLEE_EXP_BONUS 0x00000016 #define Phase_PLAYER_HAPPY 0x0000001E -typedef UNK_TYPE ActorID; +typedef s32 ActorID; #define ActorID_SELF 0xFFFFFF81 #define ActorID_PLAYER 0x00000000 #define ActorID_PARTNER 0x00000100 diff --git a/include/stdarg.h b/include/stdarg.h new file mode 100644 index 0000000000..24f3383198 --- /dev/null +++ b/include/stdarg.h @@ -0,0 +1,205 @@ +/* stdarg.h for GNU. + Note that the type used in va_arg is supposed to match the + actual type **after default promotions**. + Thus, va_arg (..., short) is not valid. */ + +#ifndef _STDARG_H +#ifndef _ANSI_STDARG_H_ +#ifndef __need___va_list +#define _STDARG_H +#define _ANSI_STDARG_H_ +#endif /* not __need___va_list */ +#undef __need___va_list + +#ifdef __clipper__ +#include "va-clipper.h" +#else +#ifdef __m88k__ +#include "va-m88k.h" +#else +#ifdef __i860__ +#include "va-i860.h" +#else +#ifdef __hppa__ +#include "va-pa.h" +#else +#ifdef __mips__ +#include "va-mips.h" +#else +#ifdef __sparc__ +#include "va-sparc.h" +#else +#ifdef __i960__ +#include "va-i960.h" +#else +#ifdef __alpha__ +#include "va-alpha.h" +#else +#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) +#include "va-h8300.h" +#else +#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32)) +#include "va-ppc.h" +#else +#ifdef __arc__ +#include "va-arc.h" +#else +#ifdef __M32R__ +#include "va-m32r.h" +#else +#ifdef __sh__ +#include "va-sh.h" +#else +#ifdef __mn10300__ +#include "va-mn10300.h" +#else +#ifdef __mn10200__ +#include "va-mn10200.h" +#else +#ifdef __v850__ +#include "va-v850.h" +#else + +/* Define __gnuc_va_list. */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +#if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) || defined(__NetBSD__) +typedef char *__gnuc_va_list; +#else +typedef void *__gnuc_va_list; +#endif +#endif + +/* Define the standard macros for the user, + if this invocation was from the user program. */ +#ifdef _STDARG_H + +/* Amount of space required in an argument list for an arg of type TYPE. + TYPE may alternatively be an expression whose type is used. */ + +#if defined(sysV68) +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (short) - 1) / sizeof (short)) * sizeof (short)) +#else +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) +#endif + +#define va_start(AP, LASTARG) \ + (AP = ((__gnuc_va_list) __builtin_next_arg (LASTARG))) + +#undef va_end +void va_end (__gnuc_va_list); /* Defined in libgcc.a */ +#define va_end(AP) ((void)0) + +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ + +#if (defined (__arm__) && ! defined (__ARMEB__)) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__) +/* This is for little-endian machines; small args are padded upward. */ +#define va_arg(AP, TYPE) \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))) +#else /* big-endian */ +/* This is for big-endian machines; small args are padded downward. */ +#define va_arg(AP, TYPE) \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + *((TYPE *) (void *) ((char *) (AP) \ + - ((sizeof (TYPE) < __va_rounded_size (char) \ + ? sizeof (TYPE) : __va_rounded_size (TYPE)))))) +#endif /* big-endian */ + +/* Copy __gnuc_va_list into another variable of this type. */ +#define __va_copy(dest, src) (dest) = (src) + +#endif /* _STDARG_H */ + +#endif /* not v850 */ +#endif /* not mn10200 */ +#endif /* not mn10300 */ +#endif /* not sh */ +#endif /* not m32r */ +#endif /* not arc */ +#endif /* not powerpc with V.4 calling sequence */ +#endif /* not h8300 */ +#endif /* not alpha */ +#endif /* not i960 */ +#endif /* not sparc */ +#endif /* not mips */ +#endif /* not hppa */ +#endif /* not i860 */ +#endif /* not m88k */ +#endif /* not clipper */ + +#ifdef _STDARG_H +/* Define va_list, if desired, from __gnuc_va_list. */ +/* We deliberately do not define va_list when called from + stdio.h, because ANSI C says that stdio.h is not supposed to define + va_list. stdio.h needs to have access to that data type, + but must not use that name. It should use the name __gnuc_va_list, + which is safe because it is reserved for the implementation. */ + +#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */ +#undef _VA_LIST +#endif + +#ifdef _BSD_VA_LIST +#undef _BSD_VA_LIST +#endif + +#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST)) +/* SVR4.2 uses _VA_LIST for an internal alias for va_list, + so we must avoid testing it and setting it here. + SVR4 uses _VA_LIST as a flag in stdarg.h, but we should + have no conflict with that. */ +#ifndef _VA_LIST_ +#define _VA_LIST_ +#ifdef __i860__ +#ifndef _VA_LIST +#define _VA_LIST va_list +#endif +#endif /* __i860__ */ +typedef __gnuc_va_list va_list; +#ifdef _SCO_DS +#define __VA_LIST +#endif +#endif /* _VA_LIST_ */ +#else /* not __svr4__ || _SCO_DS */ + +/* The macro _VA_LIST_ is the same thing used by this file in Ultrix. + But on BSD NET2 we must not test or define or undef it. + (Note that the comments in NET 2's ansi.h + are incorrect for _VA_LIST_--see stdio.h!) */ +#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT) +/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */ +#ifndef _VA_LIST_DEFINED +/* The macro _VA_LIST is used in SCO Unix 3.2. */ +#ifndef _VA_LIST +/* The macro _VA_LIST_T_H is used in the Bull dpx2 */ +#ifndef _VA_LIST_T_H +typedef __gnuc_va_list va_list; +#endif /* not _VA_LIST_T_H */ +#endif /* not _VA_LIST */ +#endif /* not _VA_LIST_DEFINED */ +#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) +#define _VA_LIST_ +#endif +#ifndef _VA_LIST +#define _VA_LIST +#endif +#ifndef _VA_LIST_DEFINED +#define _VA_LIST_DEFINED +#endif +#ifndef _VA_LIST_T_H +#define _VA_LIST_T_H +#endif + +#endif /* not _VA_LIST_, except on certain systems */ + +#endif /* not __svr4__ */ + +#endif /* _STDARG_H */ + +#endif /* not _ANSI_STDARG_H_ */ +#endif /* not _STDARG_H */ diff --git a/include/va-mips.h b/include/va-mips.h new file mode 100644 index 0000000000..a622199388 --- /dev/null +++ b/include/va-mips.h @@ -0,0 +1,276 @@ +/* ---------------------------------------- */ +/* VARARGS for MIPS/GNU CC */ +/* */ +/* */ +/* */ +/* */ +/* ---------------------------------------- */ + + +/* These macros implement varargs for GNU C--either traditional or ANSI. */ + +/* Define __gnuc_va_list. */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +#if defined (__mips_eabi) && ! defined (__mips_soft_float) && ! defined (__mips_single_float) + +typedef struct { + /* Pointer to FP regs. */ + char *__fp_regs; + /* Number of FP regs remaining. */ + int __fp_left; + /* Pointer to GP regs followed by stack parameters. */ + char *__gp_regs; +} __gnuc_va_list; + +#else /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ + +typedef char * __gnuc_va_list; + +#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#endif /* not __GNUC_VA_LIST */ + +/* If this is for internal libc use, don't define anything but + __gnuc_va_list. */ +#if defined (_STDARG_H) || defined (_VARARGS_H) + +#ifndef _VA_MIPS_H_ENUM +#define _VA_MIPS_H_ENUM +enum { + __no_type_class = -1, + __void_type_class, + __integer_type_class, + __char_type_class, + __enumeral_type_class, + __boolean_type_class, + __pointer_type_class, + __reference_type_class, + __offset_type_class, + __real_type_class, + __complex_type_class, + __function_type_class, + __method_type_class, + __record_type_class, + __union_type_class, + __array_type_class, + __string_type_class, + __set_type_class, + __file_type_class, + __lang_type_class +}; +#endif + +/* In GCC version 2, we want an ellipsis at the end of the declaration + of the argument list. GCC version 1 can't parse it. */ + +#if __GNUC__ > 1 +#define __va_ellipsis ... +#else +#define __va_ellipsis +#endif + +#ifdef __mips64 +#define __va_rounded_size(__TYPE) \ + (((sizeof (__TYPE) + 8 - 1) / 8) * 8) +#else +#define __va_rounded_size(__TYPE) \ + (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) +#endif + +#ifdef __mips64 +#define __va_reg_size 8 +#else +#define __va_reg_size 4 +#endif + +/* Get definitions for _MIPS_SIM_ABI64 etc. */ +#ifdef _MIPS_SIM +#include +#endif + +#ifdef _STDARG_H +#if defined (__mips_eabi) +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define va_start(__AP, __LASTARG) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : 0)), \ + __AP.__fp_left = 8 - __builtin_args_info (3), \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size) +#else /* ! defined (__mips64) */ +#define va_start(__AP, __LASTARG) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : 0)), \ + __AP.__fp_left = (8 - __builtin_args_info (3)) / 2, \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * 8, \ + __AP.__fp_regs = (char *) ((int) __AP.__fp_regs & -8)) +#endif /* ! defined (__mips64) */ +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float) ) */ +#define va_start(__AP, __LASTARG) \ + (__AP = ((__gnuc_va_list) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) >= 8 ? 0 \ + : (8 - __builtin_args_info (2)) * __va_reg_size))) +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float) ) */ +#else /* ! defined (__mips_eabi) */ +#define va_start(__AP, __LASTARG) \ + (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG)) +#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#else /* ! _STDARG_H */ +#define va_alist __builtin_va_alist +#ifdef __mips64 +/* This assumes that `long long int' is always a 64 bit type. */ +#define va_dcl long long int __builtin_va_alist; __va_ellipsis +#else +#define va_dcl int __builtin_va_alist; __va_ellipsis +#endif +#if defined (__mips_eabi) +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define va_start(__AP) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg () \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : __va_reg_size)), \ + __AP.__fp_left = 8 - __builtin_args_info (3), \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size) +#else /* ! defined (__mips64) */ +#define va_start(__AP) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg () \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : __va_reg_size)), \ + __AP.__fp_left = (8 - __builtin_args_info (3)) / 2, \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * 8, \ + __AP.__fp_regs = (char *) ((int) __AP.__fp_regs & -8)) +#endif /* ! defined (__mips64) */ +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#define va_start(__AP) \ + (__AP = ((__gnuc_va_list) __builtin_next_arg () \ + - (__builtin_args_info (2) >= 8 ? __va_reg_size \ + : (8 - __builtin_args_info (2)) * __va_reg_size))) +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +/* Need alternate code for _MIPS_SIM_ABI64. */ +#elif defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32) +#define va_start(__AP) \ + (__AP = (__gnuc_va_list) __builtin_next_arg () \ + + (__builtin_args_info (2) >= 8 ? -8 : 0)) +#else +#define va_start(__AP) __AP = (char *) &__builtin_va_alist +#endif +#endif /* ! _STDARG_H */ + +#ifndef va_end +void va_end (__gnuc_va_list); /* Defined in libgcc.a */ +#endif +#define va_end(__AP) ((void)0) + +#if defined (__mips_eabi) + +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define __va_next_addr(__AP, __type) \ + ((__builtin_classify_type (*(__type *) 0) == __real_type_class \ + && __AP.__fp_left > 0) \ + ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8) \ + : (__AP.__gp_regs += __va_reg_size) - __va_reg_size) +#else +#define __va_next_addr(__AP, __type) \ + ((__builtin_classify_type (*(__type *) 0) == __real_type_class \ + && __AP.__fp_left > 0) \ + ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8) \ + : (((__builtin_classify_type (* (__type *) 0) < __record_type_class \ + && __alignof__ (__type) > 4) \ + ? __AP.__gp_regs = (char *) (((int) __AP.__gp_regs + 8 - 1) & -8) \ + : (char *) 0), \ + (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? (__AP.__gp_regs += __va_reg_size) - __va_reg_size \ + : ((__AP.__gp_regs += __va_rounded_size (__type)) \ + - __va_rounded_size (__type))))) +#endif +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#ifdef __mips64 +#define __va_next_addr(__AP, __type) \ + ((__AP += __va_reg_size) - __va_reg_size) +#else +#define __va_next_addr(__AP, __type) \ + (((__builtin_classify_type (* (__type *) 0) < __record_type_class \ + && __alignof__ (__type) > 4) \ + ? __AP = (char *) (((int) __AP + 8 - 1) & -8) \ + : (char *) 0), \ + (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? (__AP += __va_reg_size) - __va_reg_size \ + : ((__AP += __va_rounded_size (__type)) \ + - __va_rounded_size (__type)))) +#endif +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ + +#ifdef __MIPSEB__ +#define va_arg(__AP, __type) \ + ((__va_rounded_size (__type) <= __va_reg_size) \ + ? *(__type *) (void *) (__va_next_addr (__AP, __type) \ + + __va_reg_size \ + - sizeof (__type)) \ + : (__builtin_classify_type (*(__type *) 0) >= __record_type_class \ + ? **(__type **) (void *) (__va_next_addr (__AP, __type) \ + + __va_reg_size \ + - sizeof (char *)) \ + : *(__type *) (void *) __va_next_addr (__AP, __type))) +#else +#define va_arg(__AP, __type) \ + ((__va_rounded_size (__type) <= __va_reg_size) \ + ? *(__type *) (void *) __va_next_addr (__AP, __type) \ + : (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? **(__type **) (void *) __va_next_addr (__AP, __type) \ + : *(__type *) (void *) __va_next_addr (__AP, __type))) +#endif + +#else /* ! defined (__mips_eabi) */ + +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ +/* The __mips64 cases are reversed from the 32 bit cases, because the standard + 32 bit calling convention left-aligns all parameters smaller than a word, + whereas the __mips64 calling convention does not (and hence they are + right aligned). */ +#ifdef __mips64 +#ifdef __MIPSEB__ +#define va_arg(__AP, __type) \ + ((__type *) (void *) (__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ + + __va_rounded_size (__type))))[-1] +#else +#define va_arg(__AP, __type) \ + ((__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ + + __va_rounded_size (__type))), \ + *(__type *) (void *) (__AP - __va_rounded_size (__type))) +#endif + +#else /* not __mips64 */ + +#ifdef __MIPSEB__ +/* For big-endian machines. */ +#define va_arg(__AP, __type) \ + ((__AP = (char *) ((__alignof__ (__type) > 4 \ + ? ((int)__AP + 8 - 1) & -8 \ + : ((int)__AP + 4 - 1) & -4) \ + + __va_rounded_size (__type))), \ + *(__type *) (void *) (__AP - __va_rounded_size (__type))) +#else +/* For little-endian machines. */ +#define va_arg(__AP, __type) \ + ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \ + ? ((int)__AP + 8 - 1) & -8 \ + : ((int)__AP + 4 - 1) & -4) \ + + __va_rounded_size(__type))))[-1] +#endif +#endif +#endif /* ! defined (__mips_eabi) */ + +/* Copy __gnuc_va_list into another variable of this type. */ +#define __va_copy(dest, src) (dest) = (src) + +#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ diff --git a/include/varargs.h b/include/varargs.h new file mode 100644 index 0000000000..410d06aac6 --- /dev/null +++ b/include/varargs.h @@ -0,0 +1,220 @@ +/* Record that this is varargs.h; this turns off stdarg.h. */ + +#ifndef _VARARGS_H +#define _VARARGS_H + +#ifdef __sparc__ +#include "va-sparc.h" +#else +#ifdef __spur__ +#include "va-spur.h" +#else +#ifdef __mips__ +#include "va-mips.h" +#else +#ifdef __i860__ +#include "va-i860.h" +#else +#ifdef __pyr__ +#include "va-pyr.h" +#else +#ifdef __clipper__ +#include "va-clipper.h" +#else +#ifdef __m88k__ +#include "va-m88k.h" +#else +#if defined(__hppa__) || defined(hp800) +#include "va-pa.h" +#else +#ifdef __i960__ +#include "va-i960.h" +#else +#ifdef __alpha__ +#include "va-alpha.h" +#else +#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) +#include "va-h8300.h" +#else +#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32)) +#include "va-ppc.h" +#else +#ifdef __arc__ +#include "va-arc.h" +#else +#ifdef __M32R__ +#include "va-m32r.h" +#else +#ifdef __sh__ +#include "va-sh.h" +#else +#ifdef __mn10300__ +#include "va-mn10300.h" +#else +#ifdef __mn10200__ +#include "va-mn10200.h" +#else +#ifdef __v850__ +#include "va-v850.h" +#else + +#ifdef __NeXT__ + +/* On Next, erase any vestiges of stdarg.h. */ + +#ifdef _ANSI_STDARG_H_ +#define _VA_LIST_ +#endif +#define _ANSI_STDARG_H_ + +#undef va_alist +#undef va_dcl +#undef va_list +#undef va_start +#undef va_end +#undef __va_rounded_size +#undef va_arg +#endif /* __NeXT__ */ + +/* In GCC version 2, we want an ellipsis at the end of the declaration + of the argument list. GCC version 1 can't parse it. */ + +#if __GNUC__ > 1 +#define __va_ellipsis ... +#else +#define __va_ellipsis +#endif + +/* These macros implement traditional (non-ANSI) varargs + for GNU C. */ + +#define va_alist __builtin_va_alist +/* The ... causes current_function_varargs to be set in cc1. */ +#define va_dcl int __builtin_va_alist; __va_ellipsis + +/* Define __gnuc_va_list, just as in gstdarg.h. */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +#if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) +typedef char *__gnuc_va_list; +#else +typedef void *__gnuc_va_list; +#endif +#endif + +#define va_start(AP) AP=(char *) &__builtin_va_alist + +#define va_end(AP) ((void)0) + +#if defined(sysV68) +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (short) - 1) / sizeof (short)) * sizeof (short)) +#else +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) +#endif + +#if (defined (__arm__) && ! defined (__ARMEB__)) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__) +/* This is for little-endian machines; small args are padded upward. */ +#define va_arg(AP, TYPE) \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))) +#else /* big-endian */ +/* This is for big-endian machines; small args are padded downward. */ +#define va_arg(AP, TYPE) \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + *((TYPE *) (void *) ((char *) (AP) \ + - ((sizeof (TYPE) < __va_rounded_size (char) \ + ? sizeof (TYPE) : __va_rounded_size (TYPE)))))) +#endif /* big-endian */ + +/* Copy __gnuc_va_list into another variable of this type. */ +#define __va_copy(dest, src) (dest) = (src) + +#endif /* not v850 */ +#endif /* not mn10200 */ +#endif /* not mn10300 */ +#endif /* not sh */ +#endif /* not m32r */ +#endif /* not arc */ +#endif /* not powerpc with V.4 calling sequence */ +#endif /* not h8300 */ +#endif /* not alpha */ +#endif /* not i960 */ +#endif /* not hppa */ +#endif /* not m88k */ +#endif /* not clipper */ +#endif /* not pyr */ +#endif /* not i860 */ +#endif /* not mips */ +#endif /* not spur */ +#endif /* not sparc */ +#endif /* not _VARARGS_H */ + +/* Define va_list from __gnuc_va_list. */ + +#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */ +#undef _VA_LIST +#endif + +#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST)) +/* SVR4.2 uses _VA_LIST for an internal alias for va_list, + so we must avoid testing it and setting it here. + SVR4 uses _VA_LIST as a flag in stdarg.h, but we should + have no conflict with that. */ +#ifndef _VA_LIST_ +#define _VA_LIST_ +#ifdef __i860__ +#ifndef _VA_LIST +#define _VA_LIST va_list +#endif +#endif /* __i860__ */ +typedef __gnuc_va_list va_list; +#ifdef _SCO_DS +#define __VA_LIST +#endif +#endif /* _VA_LIST_ */ + +#else /* not __svr4__ || _SCO_DS */ + +/* The macro _VA_LIST_ is the same thing used by this file in Ultrix. + But on BSD NET2 we must not test or define or undef it. + (Note that the comments in NET 2's ansi.h + are incorrect for _VA_LIST_--see stdio.h!) */ +/* Michael Eriksson at Thu Sep 30 11:00:57 1993: + Sequent defines _VA_LIST_ in to be the type to + use for va_list (``typedef _VA_LIST_ va_list'') */ +#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT) +/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */ +#ifndef _VA_LIST_DEFINED +/* The macro _VA_LIST is used in SCO Unix 3.2. */ +#ifndef _VA_LIST +/* The macro _VA_LIST_T_H is used in the Bull dpx2 */ +#ifndef _VA_LIST_T_H +typedef __gnuc_va_list va_list; +#endif /* not _VA_LIST_T_H */ +#endif /* not _VA_LIST */ +#endif /* not _VA_LIST_DEFINED */ +#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) +#define _VA_LIST_ +#endif +#ifndef _VA_LIST +#define _VA_LIST +#endif +#ifndef _VA_LIST_DEFINED +#define _VA_LIST_DEFINED +#endif +#ifndef _VA_LIST_T_H +#define _VA_LIST_T_H +#endif + +#endif /* not _VA_LIST_, except on certain systems */ + +#endif /* not __svr4__ */ + +/* The next BSD release (if there is one) wants this symbol to be + undefined instead of _VA_LIST_. */ +#ifdef _BSD_VA_LIST +#undef _BSD_VA_LIST +#endif diff --git a/src/code_102c80.c b/src/code_102c80.c index 638941971d..53e22ca0a2 100644 --- a/src/code_102c80.c +++ b/src/code_102c80.c @@ -522,8 +522,62 @@ INCLUDE_ASM(void, "code_102c80", func_802E246C, Entity* entity, void* arg1, void INCLUDE_ASM(s32, "code_102c80", func_802E263C); -INCLUDE_ASM(s32, "code_102c80", func_802E2BA4); +#ifdef NON_MATCHING +// display list issues +void func_802E2BA4(s32 entityIndex) { + Gfx* temp_s2; + struct802E1400* temp_s4; + struct802E2BA4* phi_fp; + Matrix4f subroutine_arg6; + Matrix4f subroutine_arg16; + Matrix4f subroutine_arg36; + Matrix4f subroutine_arg48; + s32 i; + f32 x_inv; + f32 y_inv; + f32 z_inv; + Entity* entity; + f32 threeSixty; + f32 someFloat; + f32 one; + s16 temp; + temp_s2 = gMasterGfxPos; + threeSixty = 360.0f; + someFloat = 0.00390625f; + entity = get_entity_by_index(entityIndex); + temp_s4 = entity->dataBuf; + x_inv = -entity->position.x; + y_inv = -entity->position.y; + z_inv = -entity->position.z; + phi_fp = temp_s4->unk_34; + for(i = 0; i < 24; i++) { + if (temp_s4->unk_3C.s == 0xFF) { + gDPSetRenderMode(temp_s2++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + gDPSetCombineMode(temp_s2++, G_CC_MODULATEIA, G_CC_MODULATEIA); + } else { + gDPSetCombineLERP(temp_s2++, 0, 0, 0, TEXEL0, SHADE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, SHADE, 0); + gDPSetPrimColor(temp_s2++, 0, 0, 0x00, 0x00, 0x00, temp_s4->unk_3C.b[1]) + } + guTranslateF(&subroutine_arg6, x_inv, y_inv, z_inv); + guRotateF(&subroutine_arg36, temp_s4->unk_8B[i] * threeSixty * someFloat, 1.0f, 0.0f, 0.0f); + guRotateF(&subroutine_arg48, temp_s4->unk_A4[i] * threeSixty * someFloat, 0.0f, 1.0f, 0.0f); + guMtxCatF(&subroutine_arg36, &subroutine_arg48, &subroutine_arg48); + guMtxCatF(&subroutine_arg48, &subroutine_arg6, &subroutine_arg6); + guTranslateF(&subroutine_arg16, temp_s4->unk_C0[i], temp_s4->unk_124[i], temp_s4->unk_188[i]); + guMtxCatF(&subroutine_arg6, &subroutine_arg16, &subroutine_arg16); + guMtxF2L(&subroutine_arg16, &gDisplayContext->matrixStack[gMatrixListPos]); + gSPMatrix(temp_s2++, &gDisplayContext->matrixStack[++gMatrixListPos], G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList(temp_s2++, entity->vertexData + phi_fp->unk_02[i][0]); + gSPPopMatrix(temp_s2++, G_MTX_MODELVIEW); + } + gMasterGfxPos = temp_s2; +} +#else +INCLUDE_ASM(s32, "code_102c80", func_802E2BA4); +#endif + +// file split #ifdef NON_MATCHING // Needs rodata support void func_802E2EB0(Entity* entity) { diff --git a/src/code_1060_len_310.c b/src/code_1060_len_310.c index 57f3c89846..90eba64fc0 100644 --- a/src/code_1060_len_310.c +++ b/src/code_1060_len_310.c @@ -1,13 +1,85 @@ #include "common.h" -INCLUDE_ASM(s32, "code_1060_len_310", func_80025C60); +u32 func_80025D74(void* arg0, const unsigned char* str, s32 count); -INCLUDE_ASM(s32, "code_1060_len_310", func_80025CC0); +void func_80025C60(void) { + OSPiHandle** handle = &carthandle; + osEPiWriteIo(*handle, 0xB3FF0014, 0); + osEPiWriteIo(*handle, 0xB3FF0004, 0); + osEPiWriteIo(*handle, 0xB3FF0000, 0x49533634); +} -INCLUDE_ASM(s32, "code_1060_len_310", func_80025CFC); +void func_80025CC0(const char* fmt, ...) { + va_list args; + va_start(args, fmt); -INCLUDE_ASM(s32, "code_1060_len_310", func_80025D38); + _Printf(&func_80025D74, NULL, fmt, args); +} -INCLUDE_ASM(s32, "code_1060_len_310", func_80025D74); +void func_80025CFC(const char* fmt, ...) { + va_list args; + va_start(args, fmt); -INCLUDE_ASM(s32, "code_1060_len_310", func_80025F44); + _Printf(&func_80025D74, NULL, fmt, args); +} + +void func_80025D38(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + _Printf(&func_80025D74, NULL, fmt, args); +} + +u32 func_80025D74(void* arg0, const unsigned char* str, s32 count) { + u32 data; + s32 pos; + s32 start; + s32 end; + OSPiHandle** handle = &carthandle; + + osEPiReadIo(*handle, 0xB3FF0000, &data); + if (data != 0x49533634) { + return 1; + } + osEPiReadIo(*handle, 0xB3FF0004, &data); + pos = data; + osEPiReadIo(*handle, 0xB3FF0014, &data); + start = data; + end = start + count; + if (end >= 0xffe0) { + end -= 0xffe0; + if (pos < end || start < pos) { + return 1; + } + } else { + if (start < pos && pos < end) { + return 1; + } + } + while (count) { + if (*str) { + u32 addr = 0xB3FF0020 + (start & 0xffffffc); + s32 shift = ((3 - (start & 3)) * 8); + OSPiHandle** handle2 = &carthandle; + + osEPiReadIo(*handle2, addr, &data); + osEPiWriteIo(*handle2, addr, (data & ~(0xff << shift)) | (*str << shift)); + + start++; + if (start >= 0xffe0) { + start -= 0xffe0; + } + } + count--; + str++; + } + osEPiWriteIo(carthandle, 0xB3FF0014, start); + return 1; +} + +extern const char D_80097D30[]; + +void func_80025F44(char* arg0, char* file, s32 line, char* arg3) { + func_80025CFC(&D_80097D30, file, line, arg0); + PANIC(); +} diff --git a/src/code_197F40.c b/src/code_197F40.c index 9f1a52e929..f5751b4e1f 100644 --- a/src/code_197F40.c +++ b/src/code_197F40.c @@ -79,7 +79,7 @@ void set_actor_home_position(ActorID actorID, f32 x, f32 y, f32 z) { actor->homePos.z = z; } -Actor* get_actor(s32 actorID) { +Actor* get_actor(ActorID actorID) { Actor* ret = NULL; BattleStatus* battleStatus = BATTLE_STATUS; s32 idFlag = actorID & 0x700; diff --git a/src/code_1b40_len_20b0.c b/src/code_1b40_len_20b0.c index 28bb9f7440..33ba9b6624 100644 --- a/src/code_1b40_len_20b0.c +++ b/src/code_1b40_len_20b0.c @@ -1,7 +1,7 @@ #include "common.h" -extern Gfx D_00074210[]; -extern Gfx D_00074230[]; +extern Gfx D_80074210[]; +extern Gfx D_80074230[]; extern int D_000759B0[]; extern int D_000759B0_end[]; // A55D0 @@ -37,9 +37,9 @@ INCLUDE_ASM(s32, "code_1b40_len_20b0", func_800269EC); INCLUDE_ASM(s32, "code_1b40_len_20b0", gfx_draw_frame); -INCLUDE_ASM(s32, "code_1b40_len_20b0", load_engine_data); -/*void load_engine_data(void) { - game_status *phi_s0; +#ifdef NON_MATCHING +void load_engine_data(void) { + GameStatus *phi_s0; s32 i; dma_copy(D_000FEE30, D_000FEE30_end, D_802DBD40); @@ -50,19 +50,19 @@ INCLUDE_ASM(s32, "code_1b40_len_20b0", load_engine_data); dma_copy(D_0010CC10, D_0010CC10_end, D_802EB3D0); D_8009A650[0] = 0; phi_s0 = *gGameStatusPtr; - (*gGameStatusPtr)->unk_79 = 0; - (*gGameStatusPtr)->musicEnabled = 1; + GAME_STATUS->unk_79 = 0; + GAME_STATUS->musicEnabled = 1; phi_s0->unk_148 = 0; - (*gGameStatusPtr)->unk_7C = 1; - (*gGameStatusPtr)->unk_A8 = -1; - (*gGameStatusPtr)->unk_AA = 0; - (*gGameStatusPtr)->unk_81 = 0; - (*gGameStatusPtr)->unk_82 = -8; - (*gGameStatusPtr)->unk_83 = 4; + GAME_STATUS->unk_7C = 1; + GAME_STATUS->unk_A8 = -1; + GAME_STATUS->unk_AA = 0; + GAME_STATUS->unk_81 = 0; + GAME_STATUS->unk_82 = -8; + GAME_STATUS->unk_83 = 4; D_8009A5D8 = 0; - (*gGameStatusPtr)->unk_75 = (*gGameStatusPtr)->unk_13C = 0; + GAME_STATUS->unk_75 = GAME_STATUS->unk_13C = 0; D_80074021 = 5; - (*gGameStatusPtr)->unk_168 = 0; + GAME_STATUS->unk_168 = 0; fio_init_flash(); func_80028838(); general_heap_create(); @@ -97,7 +97,7 @@ INCLUDE_ASM(s32, "code_1b40_len_20b0", load_engine_data); func_8002BA40(); poll_rumble(); - phi_s0 = *gGameStatusPtr; + phi_s0 = GAME_STATUS; for(i = 0; i < 4; i++) { phi_s0->unk_50[i] = 3; @@ -106,7 +106,10 @@ INCLUDE_ASM(s32, "code_1b40_len_20b0", load_engine_data); D_8009A650[0] |= 8; set_game_mode(0); -}*/ +} +#else +INCLUDE_ASM(s32, "code_1b40_len_20b0", load_engine_data); +#endif INCLUDE_ASM(void, "code_1b40_len_20b0", func_80027088, s32 arg0); @@ -114,16 +117,15 @@ s32 func_80027190(void) { return D_8009A5D8; } +#ifdef NON_MATCHING +void func_800271A0(void) { + gSPSegment(gMasterGfxPos++, 0x00, 0x0); + gSPDisplayList(gMasterGfxPos++, OS_K0_TO_PHYSICAL(&D_80074230)); + gSPDisplayList(gMasterGfxPos++, OS_K0_TO_PHYSICAL(&D_80074210)); +} +#else INCLUDE_ASM(s32, "code_1b40_len_20b0", func_800271A0); -/*void func_800271A0(void) { - Gfx *temp = gMasterGfxPos[0] + 1; - - gSPSegment(gMasterGfxPos[0], 0x00, 0x00000000); - gMasterGfxPos[0] = temp; - gSPDisplayList(temp, &D_00074230); - gMasterGfxPos[0]++; - gSPDisplayList(gMasterGfxPos[0]++, &D_00074210); -}*/ +#endif INCLUDE_ASM(s32, "code_1b40_len_20b0", func_800271FC); diff --git a/src/code_331940.c b/src/code_331940.c index 151c6139ec..adc657aa05 100644 --- a/src/code_331940.c +++ b/src/code_331940.c @@ -1,157 +1,6 @@ #include "common.h" -typedef struct structE001E000 { - /* 0x000 */ s32 unk_00; - /* 0x004 */ Vec3f unk_04; - /* 0x010 */ Vec3f unk_10; - /* 0x01C */ s32 unk_1C; - /* 0x020 */ char unk_20[4]; - /* 0x024 */ f32 unk_24; - /* 0x028 */ s32 unk_28; - /* 0x02C */ f32 unk_2C; - /* 0x030 */ f32 unk_30; - /* 0x034 */ f32 unk_34; - /* 0x038 */ char unk_38[4]; - /* 0x03C */ s32 unk_3C; - /* 0x040 */ char unk_40[0x200]; - /* 0x240 */ f32 unk_240; - /* 0x244 */ s32 unk_244; - /* 0x248 */ s32 unk_248; - /* 0x24C */ s32 unk_24C; -} structE001E000; // size = 0x250 - -extern Camera D_800B1DEC[2]; - INCLUDE_ASM(s32, "code_331940", func_E001E000); -/* -void *func_E001E000(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) { - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f12; - f32 temp_f20; - f32 temp_f20_2; - f32 temp_f20_3; - f32 temp_f20_4; - f32 temp_f22; - f32 temp_f22_2; - f32 temp_f24; - f32 temp_f26; - f32 temp_f2; - f32 temp_f4; - s32 temp_a0; - s32 temp_a1; - s32 temp_s0; - s32 temp_v0_2; - s32 temp_v0_3; - void *temp_s0_2; - void *temp_s1; - void *temp_s2; - void *temp_v0; - void *temp_v0_4; - f32 phi_f4; - f32 phi_f0; - f32 phi_f12; - f32 phi_f26; - void *phi_v0; - void *phi_v1; - s32 phi_a1; - f32 phi_f12_2; - void *phi_a0; - - temp_s2 = func_E0200490(&subroutine_arg4, 0, 0xF, &D_E001E370, &D_E001E378, &D_E001E6E8, 0); - temp_s2->unk8 = 1; - temp_v0 = func_E02004B0(0x250); // some kind of allocation function. - temp_s1 = temp_v0; - temp_s2->unkC = temp_v0; - ASSERT(temp_s1 != NULL); - temp_s1->unk_00 = 1; - temp_s1->unk_04.x = arg1; - temp_s1->unk_04.y = arg2; - temp_s1->unk_04.z = arg3; - temp_s1->unk_1C = 0; - temp_s1->unk_24 = 0.0f; - temp_s1->unk_28 = 0; - temp_s1->unk_38 = arg0; - if (arg0 == 3) { - temp_s1->unk_240 = 0.2f; - temp_v0_2 = func_E02004E0(0xFF); - temp_a0 = 0xFF - temp_v0_2; - temp_s1->unk_244 = temp_v0_2; - temp_v0_3 = func_E02004E0(temp_a0); - temp_s0 = 0xFF - temp_v0_3; - temp_s1->unk_248 = temp_v0_3; - temp_s1->unk_24C = (s32) (temp_s0 - temp_s1->unk_244); - } else { - temp_s1->unk_244 = 0xD2; - temp_s1->unk_248 = 0xBA; - temp_s1->unk_24C = 0x5A; - temp_s1->unk_240 = 0.5f; - } - temp_f24 = arg4 - arg1; - temp_f22 = arg5 - arg2; - temp_f20 = arg6 - arg3; - temp_f26 = (temp_f24 * temp_f24) + (temp_f22 * temp_f22) + (temp_f20 * temp_f20); - phi_f4 = temp_f26; - phi_f26 = temp_f26; - if (temp_f26 != 0.0f) { - temp_f0 = func_E0200550(temp_f26); - phi_f4 = arg7 / temp_f0; - phi_f26 = temp_f0; - } - temp_s1->unk10.x = (f32) (temp_f24 * phi_f4); - temp_s1->unk10.y = (f32) (temp_f22 * phi_f4); - temp_s1->unk10.z = (f32) (temp_f20 * phi_f4); - temp_f20_2 = *(&D_800B1DEC + (gCurrentCameraID * 0x558)); - temp_f22_2 = -func_E0200510(temp_f20_2); - temp_f4 = temp_f22_2 * temp_s1->unk10; - temp_f20_3 = -func_E0200500(temp_f20_2); - temp_f2 = temp_f20_3 * temp_s1->unk18; - temp_f12 = (temp_f4 * temp_f4) + (temp_f2 * temp_f2); - phi_f12_2 = temp_f12; - if (temp_f12 != 0.0f) { - phi_f12_2 = func_E0200550(temp_f12); - } - if (((temp_f22_2 * temp_s1->unk10) + (temp_f20_3 * temp_s1->unk18)) < 0.0f) { - phi_f0 = -20.0f; - phi_f12 = -phi_f12_2; - } else { - phi_f0 = 20.0f; - phi_f12 = phi_f12_2; - } - temp_s1->unk2C = phi_f0; - temp_f20_4 = -phi_f12; - temp_f0_2 = func_E0200520(0, 0, -temp_s1->unk14, temp_f20_4); - temp_s1->unk_30 = (bitwise f32) (s32) (phi_f26 / arg7); - temp_s0_2 = temp_s1 + 0x40; - temp_s1->unk24 = temp_f0_2; - temp_s1->unk20 = temp_f0_2; - temp_s1->unk34 = temp_f20_4; - func_E0200430(temp_s0_2, (bitwise s32) temp_s1->unk4, (bitwise s32) temp_s1->unk8, (bitwise s32) temp_s1->unkC); - phi_a1 = 1; - phi_a0 = temp_s0_2; -loop_13: - phi_v0 = temp_s0_2; - phi_v1 = phi_a0 + 0x40; -loop_14: - phi_v1->unk0 = (s32) phi_v0->unk0; - phi_v1->unk4 = (s32) phi_v0->unk4; - phi_v1->unk8 = (s32) phi_v0->unk8; - phi_v1->unkC = (s32) phi_v0->unkC; - temp_v0_4 = phi_v0 + 0x10; - phi_v0 = temp_v0_4; - phi_v1 = phi_v1 + 0x10; - if (temp_v0_4 != (temp_s1 + 0x80)) { - goto loop_14; - } - temp_a1 = phi_a1 + 1; - phi_a1 = temp_a1; - phi_a0 = phi_a0 + 0x40; - if (temp_a1 < 8) { - goto loop_13; - } - temp_s1->unk3C = -1; - return temp_s2; -}*/ INCLUDE_ASM(s32, "code_331940", func_E001E370); diff --git a/src/code_341d0.c b/src/code_341d0.c new file mode 100644 index 0000000000..5fc3c74161 --- /dev/null +++ b/src/code_341d0.c @@ -0,0 +1,225 @@ +#include "common.h" + +INCLUDE_ASM(s32, "code_341d0", func_80058DD0); + +INCLUDE_ASM(s32, "code_341d0", func_80058E84); + +INCLUDE_ASM(s32, "code_341d0", func_80058F88); + +INCLUDE_ASM(s32, "code_341d0", func_80059008); + +INCLUDE_ASM(s32, "code_341d0", func_8005904C); + +INCLUDE_ASM(s32, "code_341d0", func_80059310); + +INCLUDE_ASM(s32, "code_341d0", func_800598A0); + +INCLUDE_ASM(s32, "code_341d0", func_80059AB8); + +INCLUDE_ASM(s32, "code_341d0", func_80059BD4); + +void func_80059C80(EffectInstance* effectInst) { +} + +INCLUDE_ASM(s32, "code_341d0", func_80059C88); + +INCLUDE_ASM(s32, "code_341d0", func_80059C9C); + +void func_80059D48(void) { +} + +INCLUDE_ASM(s32, "code_341d0", func_80059D50); + +#define EFFECT_LOADED 1 + +extern EffectInstance* D_800B4398[96]; //effectInstanceList +extern Effect D_800A4000[15]; +extern void* D_80059C80; + +s32 render_effects(void) { + EffectInstance** curEffectInst; + s32 i; + + curEffectInst = &D_800B4398[0]; + for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { + if ((curEffectInst[i] != NULL) && ((curEffectInst[i]->flags & 1) != 0) && ((curEffectInst[i]->flags & 8) != 0)) { + if(GAME_STATUS->isBattle) { + if((curEffectInst[i]->flags & 4) != 0) { + curEffectInst[i]->effect->renderWorld(curEffectInst[i]); + } + } else if((curEffectInst[i]->flags & 4) == 0) { + curEffectInst[i]->effect->renderWorld(curEffectInst[i]); + } + } + } +} + +INCLUDE_ASM(s32, "code_341d0", func_80059F94); + +EffectInstance* func_8005A2BC(EffectBlueprint* effectBp) { + EffectInstance *newEffectInst; + Effect* curEffect; + s32 i; + EffectInstance** temp = &D_800B4398[0]; + + // Search for an unused instance + for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { + if (temp[i] == NULL) { + break; + } + } + + ASSERT(i < ARRAY_COUNT(D_800B4398)); + + // Allocate space for the new instance + D_800B4398[i] = newEffectInst = general_heap_malloc(sizeof(EffectInstance)); + ASSERT(newEffectInst != NULL); + + curEffect = &D_800A4000[0]; + newEffectInst->effectIndex = effectBp->effectIndex; + newEffectInst->flags = 1; + + // Look for a loaded effect of the proper index + for(i = 0; i < ARRAY_COUNT(D_800A4000); i++) { + if ((curEffect->flags & EFFECT_LOADED) && (curEffect->effectIndex == effectBp->effectIndex)) { + break; + } + curEffect++; + } + + ASSERT(i < ARRAY_COUNT(D_800A4000)); + + // If this is the first new instance of the effect, initialize the function pointers + if (curEffect->instanceCounter == 0) { + curEffect->update = effectBp->update; + if (curEffect->update == NULL) { + curEffect->renderWorld = func_80059C80; + } + + curEffect->renderWorld = effectBp->renderWorld; + if (curEffect->unk_18 == NULL) { + curEffect->unk_18 = func_80059C80; + } + + curEffect->unk_18 = effectBp->unk_14; + if (curEffect->unk_18 == NULL) { + curEffect->unk_18 = func_80059C80; + } + } + + curEffect->instanceCounter++; + newEffectInst->effect = curEffect; + + if (effectBp->init != NULL) { + effectBp->init(newEffectInst); + } + + if (GAME_STATUS->isBattle) { + newEffectInst->flags |= 4; + } + return newEffectInst; +} + +void remove_effect(EffectInstance* arg0) { + s32 i; + EffectInstance** temp = &D_800B4398[0]; + + for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { + if (temp[i] == arg0) { + break; + } + } + + ASSERT(i < ARRAY_COUNT(D_800B4398)); + + if (arg0->unk_0C == NULL) { + general_heap_free(arg0); + D_800B4398[i] = NULL; + return; + } + + general_heap_free(arg0->unk_0C); + general_heap_free(arg0); + D_800B4398[i] = NULL; +} + +void remove_all_effects(void) { + s32 i; + EffectInstance** temp = &D_800B4398[0]; + + for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { + EffectInstance* temp2 = temp[i]; + if (temp2 != NULL && temp2->flags & 4) { + if(temp2->unk_0C != NULL) { + general_heap_free(temp2->unk_0C); + } + general_heap_free(temp2); + temp[i] = NULL; + } + } +} + +typedef s32 TlbEntry[0x1000 / 4]; +typedef TlbEntry TlbMappablePage[15]; + +extern TlbMappablePage D_80197000; +extern EffectTableEntry D_8007F210[135]; + +s32 play_effect(s32 effectIndex) { + + EffectTableEntry* effectTable = &D_8007F210[0]; + EffectTableEntry* effectEntry; + Effect* curEffect; + TlbMappablePage* tlbMappablePages; + s32 i; + + effectEntry = &effectTable[effectIndex]; + + // Look for a loaded effect matching the desired index + for(i = 0, curEffect = &D_800A4000[0]; i < ARRAY_COUNT(D_800A4000); i++) { + if ((curEffect->flags & EFFECT_LOADED) && (curEffect->effectIndex == effectIndex)) { + break; + } + curEffect++; + } + + // If an effect was found within the table, initialize it and return + if (i < ARRAY_COUNT(D_800A4000)) { + curEffect->effectIndex = effectIndex; + curEffect->instanceCounter = 0; + curEffect->flags = EFFECT_LOADED; + return 1; + } + + // If a loaded effect wasn't found, look for the first empty space + for(i = 0, curEffect = &D_800A4000[0]; i < ARRAY_COUNT(D_800A4000); i++) { + if (!(curEffect->flags & EFFECT_LOADED)) { + break; + } + curEffect++; + } + + // If no empty space was found, panic + ASSERT(i < ARRAY_COUNT(D_800A4000)); + + // Map space for the effect + tlbMappablePages = &D_80197000; + osMapTLB(i, 0, effectEntry->dmaDest, (s32)((*tlbMappablePages)[i]) & 0xFFFFFF, -1, -1); + + // Copy the effect into the newly mapped space + dma_copy(effectEntry->dmaStart, effectEntry->dmaEnd, effectEntry->dmaDest); + + // If there's extra data the effect normally loads, allocate space and copy into the new space + if (effectEntry->unkStartRom != NULL) { + void* effectDataBuf = general_heap_malloc(effectEntry->unkEndRom - effectEntry->unkStartRom); + curEffect->unk_1C = effectDataBuf; + ASSERT(effectDataBuf != NULL); + dma_copy(effectEntry->unkStartRom, effectEntry->unkEndRom, curEffect->unk_1C); + } + + // Initialize the newly loaded effect data + curEffect->effectIndex = effectIndex; + curEffect->instanceCounter = 0; + curEffect->flags = EFFECT_LOADED; + return 1; +} diff --git a/src/world/world.c b/src/world/world.c index 1decd55bb9..d95dfa8090 100644 --- a/src/world/world.c +++ b/src/world/world.c @@ -2,236 +2,6 @@ #include "ld_addrs.h" #include "map.h" -INCLUDE_ASM(s32, "world/world", func_80058DD0); - -INCLUDE_ASM(s32, "world/world", func_80058E84); - -INCLUDE_ASM(s32, "world/world", func_80058F88); - -INCLUDE_ASM(s32, "world/world", func_80059008); - -INCLUDE_ASM(s32, "world/world", func_8005904C); - -INCLUDE_ASM(s32, "world/world", func_80059310); - -INCLUDE_ASM(s32, "world/world", func_800598A0); - -INCLUDE_ASM(s32, "world/world", func_80059AB8); - -INCLUDE_ASM(s32, "world/world", func_80059BD4); - -void func_80059C80(EffectInstance* effectInst) { -} - -INCLUDE_ASM(s32, "world/world", func_80059C88); - -INCLUDE_ASM(s32, "world/world", func_80059C9C); - -void func_80059D48(void) { -} - -INCLUDE_ASM(s32, "world/world", func_80059D50); - -#define EFFECT_LOADED 1 - -extern EffectInstance* D_800B4398[96]; //effectInstanceList -extern Effect D_800A4000[15]; -extern void* D_80059C80; - -s32 render_effects(void) { - EffectInstance** curEffectInst; - s32 i; - - curEffectInst = &D_800B4398[0]; - for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { - if ((curEffectInst[i] != NULL) && ((curEffectInst[i]->flags & 1) != 0) && ((curEffectInst[i]->flags & 8) != 0)) { - if(GAME_STATUS->isBattle) { - if((curEffectInst[i]->flags & 4) != 0) { - curEffectInst[i]->effect->renderWorld(curEffectInst[i]); - } - } else if((curEffectInst[i]->flags & 4) == 0) { - curEffectInst[i]->effect->renderWorld(curEffectInst[i]); - } - } - } -} - -INCLUDE_ASM(s32, "world/world", func_80059F94); - -EffectInstance* func_8005A2BC(EffectBlueprint* effectBp) { - EffectInstance *newEffectInst; - Effect* curEffect; - s32 i; - EffectInstance** temp = &D_800B4398[0]; - - // Search for an unused instance - for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { - if (temp[i] == NULL) { - break; - } - } - - ASSERT(i < ARRAY_COUNT(D_800B4398)); - - // Allocate space for the new instance - D_800B4398[i] = newEffectInst = general_heap_malloc(sizeof(EffectInstance)); - ASSERT(newEffectInst != NULL); - - curEffect = &D_800A4000[0]; - newEffectInst->effectIndex = effectBp->effectIndex; - newEffectInst->flags = 1; - - // Look for a loaded effect of the proper index - for(i = 0; i < ARRAY_COUNT(D_800A4000); i++) { - if ((curEffect->flags & EFFECT_LOADED) && (curEffect->effectIndex == effectBp->effectIndex)) { - break; - } - curEffect++; - } - - ASSERT(i < ARRAY_COUNT(D_800A4000)); - - // If this is the first new instance of the effect, initialize the function pointers - if (curEffect->instanceCounter == 0) { - curEffect->update = effectBp->update; - if (curEffect->update == NULL) { - curEffect->renderWorld = func_80059C80; - } - - curEffect->renderWorld = effectBp->renderWorld; - if (curEffect->unk_18 == NULL) { - curEffect->unk_18 = func_80059C80; - } - - curEffect->unk_18 = effectBp->unk_14; - if (curEffect->unk_18 == NULL) { - curEffect->unk_18 = func_80059C80; - } - } - - curEffect->instanceCounter++; - newEffectInst->effect = curEffect; - - if (effectBp->init != NULL) { - effectBp->init(newEffectInst); - } - - if (GAME_STATUS->isBattle) { - newEffectInst->flags |= 4; - } - return newEffectInst; -} - -void remove_effect(EffectInstance* arg0) { - s32 i; - EffectInstance** temp = &D_800B4398[0]; - - for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { - if (temp[i] == arg0) { - break; - } - } - - ASSERT(i < ARRAY_COUNT(D_800B4398)); - - if (arg0->unk_0C == NULL) { - general_heap_free(arg0); - D_800B4398[i] = NULL; - return; - } - - general_heap_free(arg0->unk_0C); - general_heap_free(arg0); - D_800B4398[i] = NULL; -} - -void remove_all_effects(void) { - s32 i; - EffectInstance** temp = &D_800B4398[0]; - - for(i = 0; i < ARRAY_COUNT(D_800B4398); i++) { - EffectInstance* temp2 = temp[i]; - if (temp2 != NULL && temp2->flags & 4) { - if(temp2->unk_0C != NULL) { - general_heap_free(temp2->unk_0C); - } - general_heap_free(temp2); - temp[i] = NULL; - } - } -} - -typedef s32 TlbEntry[0x1000 / 4]; -typedef TlbEntry TlbMappablePage[15]; - -extern TlbMappablePage D_80197000; -extern EffectTableEntry D_8007F210[135]; - -#ifdef NON_MATCHING -// Matching, but needs a file split -s32 play_effect(s32 effectIndex) { - - EffectTableEntry* effectTable = &D_8007F210[0]; - EffectTableEntry* effectEntry; - Effect* curEffect; - TlbMappablePage* tlbMappablePages; - s32 i; - - effectEntry = &effectTable[effectIndex]; - - // Look for a loaded effect matching the desired index - for(i = 0, curEffect = &D_800A4000[0]; i < ARRAY_COUNT(D_800A4000); i++) { - if ((curEffect->flags & EFFECT_LOADED) && (curEffect->effectIndex == effectIndex)) { - break; - } - curEffect++; - } - - // If an effect was found within the table, initialize it and return - if (i < ARRAY_COUNT(D_800A4000)) { - curEffect->effectIndex = effectIndex; - curEffect->unk_08 = NULL; - curEffect->flags = EFFECT_LOADED; - return 1; - } - - // If a loaded effect wasn't found, look for the first empty space - for(i = 0, curEffect = &D_800A4000[0]; i < ARRAY_COUNT(D_800A4000); i++) { - if (!(curEffect->flags & EFFECT_LOADED)) { - break; - } - curEffect++; - } - - // If no empty space was found, panic - ASSERT(i < ARRAY_COUNT(D_800A4000)); - - // Map space for the effect - tlbMappablePages = &D_80197000; - osMapTLB(i, 0, effectEntry->dmaDest, (s32)((*tlbMappablePages)[i]) & 0xFFFFFF, -1, -1); - - // Copy the effect into the newly mapped space - dma_copy(effectEntry->dmaStart, effectEntry->dmaEnd, effectEntry->dmaDest); - - // If there's extra data the effect normally loads, allocate space and copy into the new space - if (effectEntry->unkStartRom != NULL) { - void* effectDataBuf = general_heap_malloc(effectEntry->unkEndRom - effectEntry->unkStartRom); - curEffect->unk_1C = effectDataBuf; - ASSERT(effectDataBuf != NULL); - dma_copy(effectEntry->unkStartRom, effectEntry->unkEndRom, curEffect->unk_1C); - } - - // Initialize the newly loaded effect data - curEffect->effectIndex = effectIndex; - curEffect->unk_08 = NULL; - curEffect->flags = EFFECT_LOADED; - return 1; -} -#else -INCLUDE_ASM(s32, "world/world", play_effect); -#endif - -// FILE SPLIT void load_world_script_api(void) { dma_copy(&world_script_api_ROM_START, &world_script_api_ROM_END, &world_script_api_VRAM); } diff --git a/tools/splat.yaml b/tools/splat.yaml index 1e5a08b4a4..b587d47a4b 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -63,7 +63,8 @@ segments: - [0x2e230, c, code_2e230_len_2190] - [0x303c0, c, code_303c0_len_3e10] - [0x31650, c, code_31650] - - [0x341d0, c, world/world] + - [0x341d0, c, code_341d0] + - [0x35ac0, c, world/world] - [0x362a0, c, code_362a0_len_2f70] - [0x39210, c, code_39210_len_aa0] - [0x39cb0, c, os/code_39cb0_len_100] @@ -214,7 +215,8 @@ segments: - [0x6EAC0, data] # has scripts - [0x70E30, .data, battle/battle] - [0x71430, data] - - [0x73130, rodata] + - [0x73130, .rodata, code_1060_len_310] + - [0x73148, rodata] - [0x73DA0, .rodata, world/world] - [0x74EA0, rodata] - [0x75240, .rodata, battle/battle] # ram 80099E40