From 7376b736d01e4f7625ca0022a463b67d3106ae20 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 12:08:00 -0400 Subject: [PATCH 01/12] a couple --- Makefile | 6 +- asm/nonmatchings/code_F5750/PlayerMoveTo.s | 86 --------------------- asm/nonmatchings/code_F5750/func_802D249C.s | 27 ------- include/functions.h | 1 + src/code_7bb60_len_41b0.c | 2 +- src/code_F5750.c | 38 ++++++++- 6 files changed, 41 insertions(+), 119 deletions(-) delete mode 100644 asm/nonmatchings/code_F5750/PlayerMoveTo.s delete mode 100644 asm/nonmatchings/code_F5750/func_802D249C.s diff --git a/Makefile b/Makefile index 0bb9ba311e..f838e6f178 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ CPP := cpp LD := $(CROSS)ld OBJCOPY := $(CROSS)objcopy -CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment -MP -MD +CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment ASFLAGS := -EB -Iinclude -march=vr4300 -mtune=vr4300 OLDASFLAGS := -EB -Iinclude -G 0 CFLAGS := -O2 -quiet -G 0 -mcpu=vr4300 -mfix4300 -mips3 -mgp32 -mfp32 -Wimplicit -Wuninitialized -Wshadow @@ -133,12 +133,12 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 # Compile C files $(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -MP -MD -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Compile C files (with DSL macros) $(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -MP -MD -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Assemble handwritten ASM $(BUILD_DIR)/%.s.o: %.s diff --git a/asm/nonmatchings/code_F5750/PlayerMoveTo.s b/asm/nonmatchings/code_F5750/PlayerMoveTo.s deleted file mode 100644 index 50896c8d7a..0000000000 --- a/asm/nonmatchings/code_F5750/PlayerMoveTo.s +++ /dev/null @@ -1,86 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel PlayerMoveTo -/* F5AE4 802D1134 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* F5AE8 802D1138 AFB10014 */ sw $s1, 0x14($sp) -/* F5AEC 802D113C 0080882D */ daddu $s1, $a0, $zero -/* F5AF0 802D1140 AFB20018 */ sw $s2, 0x18($sp) -/* F5AF4 802D1144 3C128011 */ lui $s2, %hi(gPlayerStatus) -/* F5AF8 802D1148 2652EFC8 */ addiu $s2, $s2, %lo(gPlayerStatus) -/* F5AFC 802D114C AFBF001C */ sw $ra, 0x1c($sp) -/* F5B00 802D1150 AFB00010 */ sw $s0, 0x10($sp) -/* F5B04 802D1154 F7B60028 */ sdc1 $f22, 0x28($sp) -/* F5B08 802D1158 F7B40020 */ sdc1 $f20, 0x20($sp) -/* F5B0C 802D115C 10A00038 */ beqz $a1, .L802D1240 -/* F5B10 802D1160 8E30000C */ lw $s0, 0xc($s1) -/* F5B14 802D1164 8E050000 */ lw $a1, ($s0) -/* F5B18 802D1168 0C0B1EAF */ jal get_variable -/* F5B1C 802D116C 26100004 */ addiu $s0, $s0, 4 -/* F5B20 802D1170 8E050000 */ lw $a1, ($s0) -/* F5B24 802D1174 26100004 */ addiu $s0, $s0, 4 -/* F5B28 802D1178 4482B000 */ mtc1 $v0, $f22 -/* F5B2C 802D117C 00000000 */ nop -/* F5B30 802D1180 4680B5A0 */ cvt.s.w $f22, $f22 -/* F5B34 802D1184 0C0B1EAF */ jal get_variable -/* F5B38 802D1188 0220202D */ daddu $a0, $s1, $zero -/* F5B3C 802D118C 8E050000 */ lw $a1, ($s0) -/* F5B40 802D1190 4482A000 */ mtc1 $v0, $f20 -/* F5B44 802D1194 00000000 */ nop -/* F5B48 802D1198 4680A520 */ cvt.s.w $f20, $f20 -/* F5B4C 802D119C 0C0B1EAF */ jal get_variable -/* F5B50 802D11A0 0220202D */ daddu $a0, $s1, $zero -/* F5B54 802D11A4 AE220070 */ sw $v0, 0x70($s1) -/* F5B58 802D11A8 C64C0028 */ lwc1 $f12, 0x28($s2) -/* F5B5C 802D11AC C64E0030 */ lwc1 $f14, 0x30($s2) -/* F5B60 802D11B0 4406B000 */ mfc1 $a2, $f22 -/* F5B64 802D11B4 4407A000 */ mfc1 $a3, $f20 -/* F5B68 802D11B8 0C00A720 */ jal atan2 -/* F5B6C 802D11BC 00000000 */ nop -/* F5B70 802D11C0 E6400080 */ swc1 $f0, 0x80($s2) -/* F5B74 802D11C4 8E220070 */ lw $v0, 0x70($s1) -/* F5B78 802D11C8 1440000F */ bnez $v0, .L802D1208 -/* F5B7C 802D11CC 00000000 */ nop -/* F5B80 802D11D0 C64C0028 */ lwc1 $f12, 0x28($s2) -/* F5B84 802D11D4 C64E0030 */ lwc1 $f14, 0x30($s2) -/* F5B88 802D11D8 4406B000 */ mfc1 $a2, $f22 -/* F5B8C 802D11DC 4407A000 */ mfc1 $a3, $f20 -/* F5B90 802D11E0 0C00A7B5 */ jal dist2D -/* F5B94 802D11E4 00000000 */ nop -/* F5B98 802D11E8 3C02802E */ lui $v0, %hi(gPlayerNpcPtr) -/* F5B9C 802D11EC 8C429D20 */ lw $v0, %lo(gPlayerNpcPtr)($v0) -/* F5BA0 802D11F0 C4420018 */ lwc1 $f2, 0x18($v0) -/* F5BA4 802D11F4 46020003 */ div.s $f0, $f0, $f2 -/* F5BA8 802D11F8 4600010D */ trunc.w.s $f4, $f0 -/* F5BAC 802D11FC E6240070 */ swc1 $f4, 0x70($s1) -/* F5BB0 802D1200 080B448B */ j .L802D122C -/* F5BB4 802D1204 C4400018 */ lwc1 $f0, 0x18($v0) -.L802D1208: -/* F5BB8 802D1208 C64C0028 */ lwc1 $f12, 0x28($s2) -/* F5BBC 802D120C C64E0030 */ lwc1 $f14, 0x30($s2) -/* F5BC0 802D1210 4406B000 */ mfc1 $a2, $f22 -/* F5BC4 802D1214 4407A000 */ mfc1 $a3, $f20 -/* F5BC8 802D1218 0C00A7B5 */ jal dist2D -/* F5BCC 802D121C 00000000 */ nop -/* F5BD0 802D1220 C6220070 */ lwc1 $f2, 0x70($s1) -/* F5BD4 802D1224 468010A0 */ cvt.s.w $f2, $f2 -/* F5BD8 802D1228 46020003 */ div.s $f0, $f0, $f2 -.L802D122C: -/* F5BDC 802D122C 8E240070 */ lw $a0, 0x70($s1) -/* F5BE0 802D1230 8E450080 */ lw $a1, 0x80($s2) -/* F5BE4 802D1234 44060000 */ mfc1 $a2, $f0 -/* F5BE8 802D1238 0C0389DE */ jal move_player -/* F5BEC 802D123C 00000000 */ nop -.L802D1240: -/* F5BF0 802D1240 8E230070 */ lw $v1, 0x70($s1) -/* F5BF4 802D1244 2463FFFF */ addiu $v1, $v1, -1 -/* F5BF8 802D1248 AE230070 */ sw $v1, 0x70($s1) -/* F5BFC 802D124C 8FBF001C */ lw $ra, 0x1c($sp) -/* F5C00 802D1250 8FB20018 */ lw $s2, 0x18($sp) -/* F5C04 802D1254 8FB10014 */ lw $s1, 0x14($sp) -/* F5C08 802D1258 8FB00010 */ lw $s0, 0x10($sp) -/* F5C0C 802D125C D7B60028 */ ldc1 $f22, 0x28($sp) -/* F5C10 802D1260 D7B40020 */ ldc1 $f20, 0x20($sp) -/* F5C14 802D1264 000317C2 */ srl $v0, $v1, 0x1f -/* F5C18 802D1268 03E00008 */ jr $ra -/* F5C1C 802D126C 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/nonmatchings/code_F5750/func_802D249C.s b/asm/nonmatchings/code_F5750/func_802D249C.s deleted file mode 100644 index 7202fe94dc..0000000000 --- a/asm/nonmatchings/code_F5750/func_802D249C.s +++ /dev/null @@ -1,27 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802D249C -/* F6E4C 802D249C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* F6E50 802D24A0 AFB10014 */ sw $s1, 0x14($sp) -/* F6E54 802D24A4 0080882D */ daddu $s1, $a0, $zero -/* F6E58 802D24A8 3C028016 */ lui $v0, 0x8016 -/* F6E5C 802D24AC 8442A552 */ lh $v0, -0x5aae($v0) -/* F6E60 802D24B0 AFBF0018 */ sw $ra, 0x18($sp) -/* F6E64 802D24B4 AFB00010 */ sw $s0, 0x10($sp) -/* F6E68 802D24B8 8E30000C */ lw $s0, 0xc($s1) -/* F6E6C 802D24BC 04400004 */ bltz $v0, .L802D24D0 -/* F6E70 802D24C0 0000302D */ daddu $a2, $zero, $zero -/* F6E74 802D24C4 0C0B48FE */ jal func_802D23F8 -/* F6E78 802D24C8 00000000 */ nop -/* F6E7C 802D24CC 0002302B */ sltu $a2, $zero, $v0 -.L802D24D0: -/* F6E80 802D24D0 8E050000 */ lw $a1, ($s0) -/* F6E84 802D24D4 0C0B2026 */ jal set_variable -/* F6E88 802D24D8 0220202D */ daddu $a0, $s1, $zero -/* F6E8C 802D24DC 8FBF0018 */ lw $ra, 0x18($sp) -/* F6E90 802D24E0 8FB10014 */ lw $s1, 0x14($sp) -/* F6E94 802D24E4 8FB00010 */ lw $s0, 0x10($sp) -/* F6E98 802D24E8 24020002 */ addiu $v0, $zero, 2 -/* F6E9C 802D24EC 03E00008 */ jr $ra -/* F6EA0 802D24F0 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/include/functions.h b/include/functions.h index 033f72bb6e..c4333481bb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -102,6 +102,7 @@ s32 make_item_entity_nodelay(s32 itemID, f32 x, f32 y, f32 z, ItemSpawnMode item void set_cam_viewport(s16 id, s16 x, s16 y, s16 width, s16 height); void disable_player_shadow(void); +void move_player(s32 duration, f32 heading, f32 speed); Npc* get_npc_safe(NpcId npcId); Npc* get_npc_unsafe(NpcId npcId); diff --git a/src/code_7bb60_len_41b0.c b/src/code_7bb60_len_41b0.c index 35841f3fcf..7becacbe3f 100644 --- a/src/code_7bb60_len_41b0.c +++ b/src/code_7bb60_len_41b0.c @@ -10,7 +10,7 @@ INCLUDE_ASM(s32, "code_7bb60_len_41b0", func_800E26C4); void set_action_state(s32 actionState); -void move_player(s16 duration, f32 heading, f32 speed) { +void move_player(s32 duration, f32 heading, f32 speed) { PlayerStatus* playerStatus = &gPlayerStatus; playerStatus->flags |= 0x4000; diff --git a/src/code_F5750.c b/src/code_F5750.c index 02b1382646..2654cfc464 100644 --- a/src/code_F5750.c +++ b/src/code_F5750.c @@ -122,7 +122,32 @@ ApiStatus SetPlayerAnimationSpeed(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_F5750", PlayerMoveTo, ScriptInstance* script, s32 isInitialCall); +ApiStatus PlayerMoveTo(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + PlayerStatus* playerStatus = PLAYER_STATUS; + f32 var0; + f32 var1; + f32 moveSpeed; + + if (isInitialCall) { + var1 = get_variable(script, *args++); + var0 = get_variable(script, *args++); + script->functionTemp[0].s = get_variable(script, *args++); + playerStatus->targetYaw = atan2(playerStatus->position.x, playerStatus->position.z, var1, var0); + + if (script->functionTemp[0].s == 0) { + script->functionTemp[0].s = (dist2D(playerStatus->position.x, playerStatus->position.z, var1, + var0) / gPlayerNpcPtr->moveSpeed); + moveSpeed = gPlayerNpcPtr->moveSpeed; + } else { + moveSpeed = dist2D(playerStatus->position.x, playerStatus->position.z, var1, var0) / script->functionTemp[0].s; + } + move_player(script->functionTemp[0].s, playerStatus->targetYaw, moveSpeed); + } + + script->functionTemp[0].s--; + return script->functionTemp[0].s < 0; +} INCLUDE_ASM(s32, "code_F5750", func_802D1270); @@ -236,7 +261,16 @@ INCLUDE_ASM(s32, "code_F5750", func_802D244C); INCLUDE_ASM(s32, "code_F5750", func_802D2484); -INCLUDE_ASM(s32, "code_F5750", func_802D249C); +ApiStatus func_802D249C(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + s32 val = 0; + if (gCollisionStatus.currentFloor >= 0) { + val = func_802D23F8() != 0; + } + set_variable(script, *args, val); + + return ApiStatus_DONE2; +} ApiStatus func_802D24F4(ScriptInstance* script, s32 isInitialCall) { return (gPlayerStatus.moveFrames == 0) * ApiStatus_DONE2; From 977fa7117d092043348b280f8c7f12a62361cbde Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 15:56:58 -0400 Subject: [PATCH 02/12] InterpPlayerYaw --- asm/nonmatchings/code_F5750/InterpPlayerYaw.s | 122 ------------------ src/code_F5750.c | 42 +++++- 2 files changed, 41 insertions(+), 123 deletions(-) delete mode 100644 asm/nonmatchings/code_F5750/InterpPlayerYaw.s diff --git a/asm/nonmatchings/code_F5750/InterpPlayerYaw.s b/asm/nonmatchings/code_F5750/InterpPlayerYaw.s deleted file mode 100644 index 4cb76428ce..0000000000 --- a/asm/nonmatchings/code_F5750/InterpPlayerYaw.s +++ /dev/null @@ -1,122 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel InterpPlayerYaw -/* F62EC 802D193C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* F62F0 802D1940 AFB10014 */ sw $s1, 0x14($sp) -/* F62F4 802D1944 0080882D */ daddu $s1, $a0, $zero -/* F62F8 802D1948 AFB50024 */ sw $s5, 0x24($sp) -/* F62FC 802D194C 3C158011 */ lui $s5, %hi(gPlayerStatus) -/* F6300 802D1950 26B5EFC8 */ addiu $s5, $s5, %lo(gPlayerStatus) -/* F6304 802D1954 AFB60028 */ sw $s6, 0x28($sp) -/* F6308 802D1958 26360074 */ addiu $s6, $s1, 0x74 -/* F630C 802D195C AFB40020 */ sw $s4, 0x20($sp) -/* F6310 802D1960 26340078 */ addiu $s4, $s1, 0x78 -/* F6314 802D1964 AFB3001C */ sw $s3, 0x1c($sp) -/* F6318 802D1968 AFBF002C */ sw $ra, 0x2c($sp) -/* F631C 802D196C AFB20018 */ sw $s2, 0x18($sp) -/* F6320 802D1970 AFB00010 */ sw $s0, 0x10($sp) -/* F6324 802D1974 8E32000C */ lw $s2, 0xc($s1) -/* F6328 802D1978 10A0002C */ beqz $a1, .L802D1A2C -/* F632C 802D197C 2633007C */ addiu $s3, $s1, 0x7c -/* F6330 802D1980 3C10802E */ lui $s0, %hi(gPlayerNpcPtr) -/* F6334 802D1984 26109D20 */ addiu $s0, $s0, %lo(gPlayerNpcPtr) -/* F6338 802D1988 8E020000 */ lw $v0, ($s0) -/* F633C 802D198C C6A00080 */ lwc1 $f0, 0x80($s5) -/* F6340 802D1990 E440000C */ swc1 $f0, 0xc($v0) -/* F6344 802D1994 E6200074 */ swc1 $f0, 0x74($s1) -/* F6348 802D1998 8E450000 */ lw $a1, ($s2) -/* F634C 802D199C 0C0B210B */ jal get_float_variable -/* F6350 802D19A0 26520004 */ addiu $s2, $s2, 4 -/* F6354 802D19A4 C6220074 */ lwc1 $f2, 0x74($s1) -/* F6358 802D19A8 46020001 */ sub.s $f0, $f0, $f2 -/* F635C 802D19AC E6200078 */ swc1 $f0, 0x78($s1) -/* F6360 802D19B0 8E450000 */ lw $a1, ($s2) -/* F6364 802D19B4 0C0B1EAF */ jal get_variable -/* F6368 802D19B8 0220202D */ daddu $a0, $s1, $zero -/* F636C 802D19BC AE22007C */ sw $v0, 0x7c($s1) -/* F6370 802D19C0 8E020000 */ lw $v0, ($s0) -/* F6374 802D19C4 3C01C334 */ lui $at, 0xc334 -/* F6378 802D19C8 44810000 */ mtc1 $at, $f0 -/* F637C 802D19CC A440008E */ sh $zero, 0x8e($v0) -/* F6380 802D19D0 C6220078 */ lwc1 $f2, 0x78($s1) -/* F6384 802D19D4 4600103C */ c.lt.s $f2, $f0 -/* F6388 802D19D8 00000000 */ nop -/* F638C 802D19DC 45000007 */ bc1f .L802D19FC -/* F6390 802D19E0 00000000 */ nop -/* F6394 802D19E4 3C0143B4 */ lui $at, 0x43b4 -/* F6398 802D19E8 44810000 */ mtc1 $at, $f0 -/* F639C 802D19EC 00000000 */ nop -/* F63A0 802D19F0 46001000 */ add.s $f0, $f2, $f0 -/* F63A4 802D19F4 E6200078 */ swc1 $f0, 0x78($s1) -/* F63A8 802D19F8 C6220078 */ lwc1 $f2, 0x78($s1) -.L802D19FC: -/* F63AC 802D19FC 3C014334 */ lui $at, 0x4334 -/* F63B0 802D1A00 44810000 */ mtc1 $at, $f0 -/* F63B4 802D1A04 00000000 */ nop -/* F63B8 802D1A08 4602003C */ c.lt.s $f0, $f2 -/* F63BC 802D1A0C 00000000 */ nop -/* F63C0 802D1A10 45000006 */ bc1f .L802D1A2C -/* F63C4 802D1A14 00000000 */ nop -/* F63C8 802D1A18 3C0143B4 */ lui $at, 0x43b4 -/* F63CC 802D1A1C 44810000 */ mtc1 $at, $f0 -/* F63D0 802D1A20 00000000 */ nop -/* F63D4 802D1A24 46001001 */ sub.s $f0, $f2, $f0 -/* F63D8 802D1A28 E6200078 */ swc1 $f0, 0x78($s1) -.L802D1A2C: -/* F63DC 802D1A2C 8E620000 */ lw $v0, ($s3) -/* F63E0 802D1A30 1C40000E */ bgtz $v0, .L802D1A6C -/* F63E4 802D1A34 00000000 */ nop -/* F63E8 802D1A38 3C10802E */ lui $s0, %hi(gPlayerNpcPtr) -/* F63EC 802D1A3C 26109D20 */ addiu $s0, $s0, %lo(gPlayerNpcPtr) -/* F63F0 802D1A40 8E020000 */ lw $v0, ($s0) -/* F63F4 802D1A44 C6800000 */ lwc1 $f0, ($s4) -/* F63F8 802D1A48 C44C000C */ lwc1 $f12, 0xc($v0) -/* F63FC 802D1A4C 46006300 */ add.s $f12, $f12, $f0 -/* F6400 802D1A50 0C00A6C9 */ jal clamp_angle -/* F6404 802D1A54 E44C000C */ swc1 $f12, 0xc($v0) -/* F6408 802D1A58 8E030000 */ lw $v1, ($s0) -/* F640C 802D1A5C 24020002 */ addiu $v0, $zero, 2 -/* F6410 802D1A60 E460000C */ swc1 $f0, 0xc($v1) -/* F6414 802D1A64 080B46B7 */ j .L802D1ADC -/* F6418 802D1A68 E6A00080 */ swc1 $f0, 0x80($s5) -.L802D1A6C: -/* F641C 802D1A6C 3C10802E */ lui $s0, %hi(gPlayerNpcPtr) -/* F6420 802D1A70 26109D20 */ addiu $s0, $s0, %lo(gPlayerNpcPtr) -/* F6424 802D1A74 8E030000 */ lw $v1, ($s0) -/* F6428 802D1A78 9462008E */ lhu $v0, 0x8e($v1) -/* F642C 802D1A7C 24420001 */ addiu $v0, $v0, 1 -/* F6430 802D1A80 A462008E */ sh $v0, 0x8e($v1) -/* F6434 802D1A84 00021400 */ sll $v0, $v0, 0x10 -/* F6438 802D1A88 00021403 */ sra $v0, $v0, 0x10 -/* F643C 802D1A8C C6800000 */ lwc1 $f0, ($s4) -/* F6440 802D1A90 44821000 */ mtc1 $v0, $f2 -/* F6444 802D1A94 00000000 */ nop -/* F6448 802D1A98 468010A0 */ cvt.s.w $f2, $f2 -/* F644C 802D1A9C 46020002 */ mul.s $f0, $f0, $f2 -/* F6450 802D1AA0 00000000 */ nop -/* F6454 802D1AA4 C6CC0000 */ lwc1 $f12, ($s6) -/* F6458 802D1AA8 C6620000 */ lwc1 $f2, ($s3) -/* F645C 802D1AAC 468010A0 */ cvt.s.w $f2, $f2 -/* F6460 802D1AB0 46020003 */ div.s $f0, $f0, $f2 -/* F6464 802D1AB4 46006300 */ add.s $f12, $f12, $f0 -/* F6468 802D1AB8 0C00A6C9 */ jal clamp_angle -/* F646C 802D1ABC E46C000C */ swc1 $f12, 0xc($v1) -/* F6470 802D1AC0 8E020000 */ lw $v0, ($s0) -/* F6474 802D1AC4 E440000C */ swc1 $f0, 0xc($v0) -/* F6478 802D1AC8 E6A00080 */ swc1 $f0, 0x80($s5) -/* F647C 802D1ACC 8442008E */ lh $v0, 0x8e($v0) -/* F6480 802D1AD0 8E630000 */ lw $v1, ($s3) -/* F6484 802D1AD4 0043102A */ slt $v0, $v0, $v1 -/* F6488 802D1AD8 38420001 */ xori $v0, $v0, 1 -.L802D1ADC: -/* F648C 802D1ADC 8FBF002C */ lw $ra, 0x2c($sp) -/* F6490 802D1AE0 8FB60028 */ lw $s6, 0x28($sp) -/* F6494 802D1AE4 8FB50024 */ lw $s5, 0x24($sp) -/* F6498 802D1AE8 8FB40020 */ lw $s4, 0x20($sp) -/* F649C 802D1AEC 8FB3001C */ lw $s3, 0x1c($sp) -/* F64A0 802D1AF0 8FB20018 */ lw $s2, 0x18($sp) -/* F64A4 802D1AF4 8FB10014 */ lw $s1, 0x14($sp) -/* F64A8 802D1AF8 8FB00010 */ lw $s0, 0x10($sp) -/* F64AC 802D1AFC 03E00008 */ jr $ra -/* F64B0 802D1B00 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/src/code_F5750.c b/src/code_F5750.c index 2654cfc464..e473f39c32 100644 --- a/src/code_F5750.c +++ b/src/code_F5750.c @@ -167,7 +167,47 @@ void PlayerJump2(ScriptInstance* script, s32 isInitialCall) { player_jump(script, isInitialCall, 2); } -INCLUDE_ASM(s32, "code_F5750", InterpPlayerYaw, ScriptInstance* script, s32 isInitialCall); +ApiStatus InterpPlayerYaw(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + PlayerStatus* playerStatus = PLAYER_STATUS; + f32* t1 = &script->functionTemp[1].f; + f32* t2 = &script->functionTemp[2].f; + s32* t3 = &script->functionTemp[3].s; + + if (isInitialCall) { + Npc** player = &gPlayerNpcPtr; + + (*player)->yaw = playerStatus->targetYaw; + *t1 = (*player)->yaw; + *t2 = get_float_variable(script, *args++) - *t1; + *t3 = get_variable(script, *args++); + (*player)->duration = 0; + + if (*t2 < -180.0f) { + *t2 += 360.0f; + } + if (*t2 > 180.0f) { + *t2 -= 360.0f; + } + } + + if (*t3 > 0) { + Npc** player = &gPlayerNpcPtr; + + (*player)->duration++; + (*player)->yaw = *t1 + ((*t2 * (*player)->duration) / *t3); + (*player)->yaw = clamp_angle((*player)->yaw); + playerStatus->targetYaw = (*player)->yaw; + return ((*player)->duration < *t3) ^ 1; + } else { + Npc** player = &gPlayerNpcPtr; + + (*player)->yaw += *t2; + (*player)->yaw = clamp_angle((*player)->yaw);; + playerStatus->targetYaw = (*player)->yaw; + return ApiStatus_DONE2; + } +} INCLUDE_ASM(s32, "code_F5750", PlayerFaceNpc, ScriptInstance* script, s32 isInitialCall); From d0d833cd1d5fbe0dffe6773190692bbbbb57a969 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 16:16:39 -0400 Subject: [PATCH 03/12] LoadPath --- .../code_f8f60_len_1560/LoadPath.s | 65 --------------- include/common_structs.h | 82 +++++++++++-------- src/code_f8f60_len_1560.c | 22 ++++- 3 files changed, 67 insertions(+), 102 deletions(-) delete mode 100644 asm/nonmatchings/code_f8f60_len_1560/LoadPath.s diff --git a/asm/nonmatchings/code_f8f60_len_1560/LoadPath.s b/asm/nonmatchings/code_f8f60_len_1560/LoadPath.s deleted file mode 100644 index 27425f3455..0000000000 --- a/asm/nonmatchings/code_f8f60_len_1560/LoadPath.s +++ /dev/null @@ -1,65 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel LoadPath -/* F9DE0 802D5430 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* F9DE4 802D5434 AFB20018 */ sw $s2, 0x18($sp) -/* F9DE8 802D5438 0080902D */ daddu $s2, $a0, $zero -/* F9DEC 802D543C AFBF0028 */ sw $ra, 0x28($sp) -/* F9DF0 802D5440 AFB50024 */ sw $s5, 0x24($sp) -/* F9DF4 802D5444 AFB40020 */ sw $s4, 0x20($sp) -/* F9DF8 802D5448 AFB3001C */ sw $s3, 0x1c($sp) -/* F9DFC 802D544C AFB10014 */ sw $s1, 0x14($sp) -/* F9E00 802D5450 AFB00010 */ sw $s0, 0x10($sp) -/* F9E04 802D5454 8E50000C */ lw $s0, 0xc($s2) -/* F9E08 802D5458 8E050000 */ lw $a1, ($s0) -/* F9E0C 802D545C 0C0B1EAF */ jal get_variable -/* F9E10 802D5460 26100004 */ addiu $s0, $s0, 4 -/* F9E14 802D5464 8E050000 */ lw $a1, ($s0) -/* F9E18 802D5468 26100004 */ addiu $s0, $s0, 4 -/* F9E1C 802D546C 0240202D */ daddu $a0, $s2, $zero -/* F9E20 802D5470 0C0B1EAF */ jal get_variable -/* F9E24 802D5474 0040982D */ daddu $s3, $v0, $zero -/* F9E28 802D5478 8E050000 */ lw $a1, ($s0) -/* F9E2C 802D547C 26100004 */ addiu $s0, $s0, 4 -/* F9E30 802D5480 0240202D */ daddu $a0, $s2, $zero -/* F9E34 802D5484 0C0B1EAF */ jal get_variable -/* F9E38 802D5488 0040A02D */ daddu $s4, $v0, $zero -/* F9E3C 802D548C 0240202D */ daddu $a0, $s2, $zero -/* F9E40 802D5490 8E050000 */ lw $a1, ($s0) -/* F9E44 802D5494 0C0B1EAF */ jal get_variable -/* F9E48 802D5498 0040882D */ daddu $s1, $v0, $zero -/* F9E4C 802D549C 2404001C */ addiu $a0, $zero, 0x1c -/* F9E50 802D54A0 0C00AB39 */ jal heap_malloc -/* F9E54 802D54A4 0040A82D */ daddu $s5, $v0, $zero -/* F9E58 802D54A8 00112080 */ sll $a0, $s1, 2 -/* F9E5C 802D54AC 0040802D */ daddu $s0, $v0, $zero -/* F9E60 802D54B0 AE5000C0 */ sw $s0, 0xc0($s2) -/* F9E64 802D54B4 0C00AB39 */ jal heap_malloc -/* F9E68 802D54B8 AE110000 */ sw $s1, ($s0) -/* F9E6C 802D54BC 00112040 */ sll $a0, $s1, 1 -/* F9E70 802D54C0 00912021 */ addu $a0, $a0, $s1 -/* F9E74 802D54C4 00042080 */ sll $a0, $a0, 2 -/* F9E78 802D54C8 AE020004 */ sw $v0, 4($s0) -/* F9E7C 802D54CC 0C00AB39 */ jal heap_malloc -/* F9E80 802D54D0 AE140008 */ sw $s4, 8($s0) -/* F9E84 802D54D4 8E040000 */ lw $a0, ($s0) -/* F9E88 802D54D8 8E050004 */ lw $a1, 4($s0) -/* F9E8C 802D54DC 8E060008 */ lw $a2, 8($s0) -/* F9E90 802D54E0 0040382D */ daddu $a3, $v0, $zero -/* F9E94 802D54E4 0C0B536B */ jal setup_path_data -/* F9E98 802D54E8 AE02000C */ sw $v0, 0xc($s0) -/* F9E9C 802D54EC 2673FFFF */ addiu $s3, $s3, -1 -/* F9EA0 802D54F0 AE000010 */ sw $zero, 0x10($s0) -/* F9EA4 802D54F4 AE130014 */ sw $s3, 0x14($s0) -/* F9EA8 802D54F8 AE150018 */ sw $s5, 0x18($s0) -/* F9EAC 802D54FC 8FBF0028 */ lw $ra, 0x28($sp) -/* F9EB0 802D5500 8FB50024 */ lw $s5, 0x24($sp) -/* F9EB4 802D5504 8FB40020 */ lw $s4, 0x20($sp) -/* F9EB8 802D5508 8FB3001C */ lw $s3, 0x1c($sp) -/* F9EBC 802D550C 8FB20018 */ lw $s2, 0x18($sp) -/* F9EC0 802D5510 8FB10014 */ lw $s1, 0x14($sp) -/* F9EC4 802D5514 8FB00010 */ lw $s0, 0x10($sp) -/* F9EC8 802D5518 24020002 */ addiu $v0, $zero, 2 -/* F9ECC 802D551C 03E00008 */ jr $ra -/* F9ED0 802D5520 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/include/common_structs.h b/include/common_structs.h index 56eb064d23..c2c2be9b11 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -49,7 +49,7 @@ typedef struct CamPosSettings { /* 0x04 */ f32 boomLength; /* 0x08 */ f32 boomPitch; /* 0x0C */ f32 viewPitch; - /* 0x10 */ struct Vec3f position; + /* 0x10 */ Vec3f position; } CamPosSettings; // size = 0x1C typedef struct PartnerData { @@ -90,12 +90,12 @@ typedef struct Npc { /* 0x02C */ char unk_2C[4]; /* 0x030 */ f32 animationSpeed; /* 0x034 */ char unk_34[4]; - /* 0x038 */ struct Vec3f pos; - /* 0x044 */ struct Vec3f rotation; + /* 0x038 */ Vec3f pos; + /* 0x044 */ Vec3f rotation; /* 0x050 */ f32 unk_50; - /* 0x054 */ struct Vec3f scale; - /* 0x060 */ struct Vec3f moveToPos; - /* 0x06C */ struct Vec3f colliderPos; /* used during collision with player */ + /* 0x054 */ Vec3f scale; + /* 0x060 */ Vec3f moveToPos; + /* 0x06C */ Vec3f colliderPos; /* used during collision with player */ /* 0x078 */ s32 shadowIndex; /* 0x07C */ f32 shadowScale; /* 0x080 */ s32 unk_80; @@ -431,7 +431,7 @@ typedef struct Camera { /* 0x054 */ f32 unk_54; /* 0x058 */ f32 unk_58; /* 0x05C */ f32 unk_5C; - /* 0x060 */ struct Vec3f targetPos; + /* 0x060 */ Vec3f targetPos; /* 0x06C */ f32 currentYaw; /* 0x070 */ char unk_70[4]; /* 0x074 */ f32 currentBoomYaw; @@ -458,13 +458,13 @@ typedef struct Camera { /* 0x48C */ f32 linearInterpScale; /* 3.0? */ /* 0x490 */ f32 moveSpeed; /* 0x494 */ char unk_494[28]; - /* 0x4B0 */ struct Vec3f movePos; + /* 0x4B0 */ Vec3f movePos; /* 0x4BC */ char unk_4BC[28]; /* 0x4D8 */ s32 controllerType; /* 0x4DC */ f32 controllerBoomLen; /* 0x4E0 */ f32 controllerBoomPitch; - /* 0x4E4 */ struct Vec3f posA; - /* 0x4F0 */ struct Vec3f posB; + /* 0x4E4 */ Vec3f posA; + /* 0x4F0 */ Vec3f posB; /* 0x4FC */ f32 controllerViewPitch; /* 0x500 */ s32 unk_500; /* 0x504 */ s16 boolTargetPlayer; @@ -767,7 +767,7 @@ typedef struct ItemEntity { /* 0x00 */ s32 flags; /* 0x04 */ s16 boundVar; /* see make_item_entity */ /* 0x06 */ char unk_06[2]; - /* 0x08 */ struct Vec3f position; + /* 0x08 */ Vec3f position; /* 0x14 */ struct ItemEntityPhysicsData* physicsData; /* 0x18 */ s16 itemID; /* into item table, also worldIconID */ /* 0x1A */ u8 state; @@ -806,10 +806,10 @@ typedef struct SpriteComponent { /* 0x10 */ s32 loopCounter; /* 0x14 */ s32 currentRaster; /* 0x18 */ s32 currentPalette; - /* 0x1C */ struct Vec3f posOffset; - /* 0x28 */ struct Vec3f compPos; - /* 0x34 */ struct Vec3f rotation; - /* 0x40 */ struct Vec3f scale; + /* 0x1C */ Vec3f posOffset; + /* 0x28 */ Vec3f compPos; + /* 0x34 */ Vec3f rotation; + /* 0x40 */ Vec3f scale; /* 0x4C */ char unk_4C[4]; } SpriteComponent; // size = 0x50 @@ -897,7 +897,7 @@ typedef struct GameStatus { /* 0x08E */ s16 entryID; /* 0x090 */ char unk_90[4]; /* 0x094 */ f32 exitAngle; - /* 0x098 */ struct Vec3f playerPos; + /* 0x098 */ Vec3f playerPos; /* 0x0A4 */ f32 playerYaw; /* 0x0A8 */ s8 unk_A8; /* 0x0A9 */ s8 unk_A9; @@ -942,8 +942,8 @@ typedef struct PartnerAnimations { typedef struct Shadow { /* 0x00 */ s32 flags; /* 0x04 */ char unk_04[12]; - /* 0x10 */ struct Vec3f position; - /* 0x1C */ struct Vec3f scale; + /* 0x10 */ Vec3f position; + /* 0x1C */ Vec3f scale; /* 0x28 */ char unk_28[80]; } Shadow; // size = 0x78 @@ -1005,13 +1005,13 @@ typedef struct ActorPart { /* 0x10 */ struct ActorPartMovement* movement; /* 0x14 */ s16 partOffset[3]; /* 0x1A */ s16 visualOffset[3]; - /* 0x20 */ struct Vec3f partOffsetFloat; - /* 0x2C */ struct Vec3f absolutePosition; - /* 0x38 */ struct Vec3f rotation; + /* 0x20 */ Vec3f partOffsetFloat; + /* 0x2C */ Vec3f absolutePosition; + /* 0x38 */ Vec3f rotation; /* 0x44 */ s16 rotationPivotOffset[3]; /* 0x4A */ char unk_4A[2]; /* 0x4C */ f32 scale[3]; - /* 0x58 */ struct Vec3f currentPos; + /* 0x58 */ Vec3f currentPos; /* 0x64 */ f32 yaw; /* 0x68 */ s16 unkOffset[2]; /* 0x6C */ s16 targetOffset[2]; @@ -1142,14 +1142,14 @@ typedef struct Encounter { typedef struct PlayerPathElement { /* 0x00 */ char unk_00[4]; - /* 0x04 */ struct Vec3f pos; + /* 0x04 */ Vec3f pos; } PlayerPathElement; // size = 0x10 typedef struct AnimatedModel { /* 0x00 */ s32 animModelID; - /* 0x04 */ struct Vec3f pos; /* Created by retype action */ - /* 0x10 */ struct Vec3f rot; - /* 0x1C */ struct Vec3f scale; + /* 0x04 */ Vec3f pos; /* Created by retype action */ + /* 0x10 */ Vec3f rot; + /* 0x1C */ Vec3f scale; /* 0x28 */ struct Matrix4s* mtx; /* 0x2C */ char unk_2C[60]; /* 0x68 */ u32 currentAnimData; @@ -1182,9 +1182,9 @@ typedef struct Actor { /* 0x000 */ s32 flags; /* 0x004 */ char unk_04[4]; /* 0x008 */ struct StaticActorData* staticActorData; - /* 0x00C */ struct Vec3f moveCurrentPos; - /* 0x018 */ struct Vec3f moveGoalPos; - /* 0x024 */ struct Vec3f moveEndPos; /* where other actors should target this one at. saved before partner switching */ + /* 0x00C */ Vec3f moveCurrentPos; + /* 0x018 */ Vec3f moveGoalPos; + /* 0x024 */ Vec3f moveEndPos; /* where other actors should target this one at. saved before partner switching */ /* 0x030 */ char unk_30[24]; /* 0x048 */ f32 jumpAccel; /* 0x04C */ f32 moveSpeed; @@ -1202,9 +1202,9 @@ typedef struct Actor { /* 0x077 */ u8 jumpPartIndex; /* 0x078 */ char unk_78[16]; /* 0x088 */ s32 varTable[16]; - /* 0x0C8 */ struct Vec3f flyCurrentPos; - /* 0x0D4 */ struct Vec3f flyGoalPos; - /* 0x0E0 */ struct Vec3f flyTempPos; /* used for start in fly functions, end in flyrun functions */ + /* 0x0C8 */ Vec3f flyCurrentPos; + /* 0x0D4 */ Vec3f flyGoalPos; + /* 0x0E0 */ Vec3f flyTempPos; /* used for start in fly functions, end in flyrun functions */ /* 0x0EC */ char unk_EC[24]; /* 0x104 */ f32 flyJumpAccel; /* 0x108 */ f32 flySpeed; @@ -1219,8 +1219,8 @@ typedef struct Actor { /* 0x135 */ u8 footStepCounter; /* 0x136 */ u8 actorType; /* 0x137 */ char unk_137; - /* 0x138 */ struct Vec3f homePos; - /* 0x144 */ struct Vec3f currentPos; + /* 0x138 */ Vec3f homePos; + /* 0x144 */ Vec3f currentPos; /* 0x150 */ Vec3s headOffset; /* 0x156 */ s16 healthBarPosition[3]; /* 0x15C */ f32 rotation[3]; @@ -1382,8 +1382,8 @@ typedef struct PlayerStatus { /* 0x014 */ s8 enableCollisionOverlapsCheck; /* 0x015 */ s8 statusMenuCounterinputEnabledCounter; /* whether the C-up menu can appear */ /* 0x016 */ Vec3s lastGoodPosition; - /* 0x01C */ struct Vec3f extraVelocity; - /* 0x028 */ struct Vec3f position; + /* 0x01C */ Vec3f extraVelocity; + /* 0x028 */ Vec3f position; /* 0x034 */ char unk_34[16]; /* 0x044 */ f32 decorationPos[2]; /* 0x04C */ char unk_4C[4]; @@ -1501,4 +1501,14 @@ typedef struct SaveData { /* 0x1304 */ char unk_1304[0x7C]; } SaveData; // size = 0x1380 +typedef struct { + /* 0x00 */ s32 numVectors; + /* 0x04 */ s32 unk_04; + /* 0x08 */ Vec3f* staticVectorList; + /* 0x0C */ Vec3f* vectors; + /* 0x10 */ s32 timeElapsed; + /* 0x14 */ s32 timeLeft; + /* 0x18 */ s32 easingType; +} Path; // size = 0x1C + #endif diff --git a/src/code_f8f60_len_1560.c b/src/code_f8f60_len_1560.c index 92191c1926..a369e6073a 100644 --- a/src/code_f8f60_len_1560.c +++ b/src/code_f8f60_len_1560.c @@ -351,7 +351,27 @@ INCLUDE_ASM(s32, "code_f8f60_len_1560", setup_path_data); INCLUDE_ASM(s32, "code_f8f60_len_1560", func_802D5270); -INCLUDE_ASM(s32, "code_f8f60_len_1560", LoadPath, ScriptInstance* script, s32 isInitialCall); +s32 LoadPath(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + s32 time = get_variable(script, *args++); + s32 vectorList = get_variable(script, *args++); + s32 numVectors = get_variable(script, *args++); + s32 easingType = get_variable(script, *args++); + Path* path = heap_malloc(sizeof(Path)); + + script->varTable[15] = path; + path->numVectors = numVectors; + path->unk_04 = heap_malloc(numVectors * sizeof(f32)); + path->staticVectorList = vectorList; + path->vectors = heap_malloc(numVectors * sizeof(Vec3f)); + setup_path_data(path->numVectors, path->unk_04, path->staticVectorList, path->vectors); + + path->timeElapsed = 0; + path->timeLeft = time - 1; + path->easingType = easingType; + + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_f8f60_len_1560", GetNextPathPos, ScriptInstance* script, s32 isInitialCall); From 0fb1e1ab307819a076de7c853bea188475b089cc Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 16:58:34 -0400 Subject: [PATCH 04/12] :dog: --- Makefile | 6 +- asm/nonmatchings/code_FBE10/func_802D7CF8.s | 72 --------------------- include/variables.h | 1 + src/code_FBE10.c | 22 ++++++- tools/symbol_addrs.txt | 1 + undefined_syms.txt | 2 + 6 files changed, 28 insertions(+), 76 deletions(-) delete mode 100644 asm/nonmatchings/code_FBE10/func_802D7CF8.s diff --git a/Makefile b/Makefile index f838e6f178..0bb9ba311e 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ CPP := cpp LD := $(CROSS)ld OBJCOPY := $(CROSS)objcopy -CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment +CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment -MP -MD ASFLAGS := -EB -Iinclude -march=vr4300 -mtune=vr4300 OLDASFLAGS := -EB -Iinclude -G 0 CFLAGS := -O2 -quiet -G 0 -mcpu=vr4300 -mfix4300 -mips3 -mgp32 -mfp32 -Wimplicit -Wuninitialized -Wshadow @@ -133,12 +133,12 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 # Compile C files $(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -MP -MD -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Compile C files (with DSL macros) $(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -MP -MD -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Assemble handwritten ASM $(BUILD_DIR)/%.s.o: %.s diff --git a/asm/nonmatchings/code_FBE10/func_802D7CF8.s b/asm/nonmatchings/code_FBE10/func_802D7CF8.s deleted file mode 100644 index 508e87c920..0000000000 --- a/asm/nonmatchings/code_FBE10/func_802D7CF8.s +++ /dev/null @@ -1,72 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802D7CF8 -/* FC6A8 802D7CF8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* FC6AC 802D7CFC AFB10014 */ sw $s1, 0x14($sp) -/* FC6B0 802D7D00 0080882D */ daddu $s1, $a0, $zero -/* FC6B4 802D7D04 AFBF002C */ sw $ra, 0x2c($sp) -/* FC6B8 802D7D08 AFB60028 */ sw $s6, 0x28($sp) -/* FC6BC 802D7D0C AFB50024 */ sw $s5, 0x24($sp) -/* FC6C0 802D7D10 AFB40020 */ sw $s4, 0x20($sp) -/* FC6C4 802D7D14 AFB3001C */ sw $s3, 0x1c($sp) -/* FC6C8 802D7D18 AFB20018 */ sw $s2, 0x18($sp) -/* FC6CC 802D7D1C AFB00010 */ sw $s0, 0x10($sp) -/* FC6D0 802D7D20 8E30000C */ lw $s0, 0xc($s1) -/* FC6D4 802D7D24 8E050000 */ lw $a1, ($s0) -/* FC6D8 802D7D28 0C0B1EAF */ jal get_variable -/* FC6DC 802D7D2C 26100004 */ addiu $s0, $s0, 4 -/* FC6E0 802D7D30 8E050000 */ lw $a1, ($s0) -/* FC6E4 802D7D34 26100004 */ addiu $s0, $s0, 4 -/* FC6E8 802D7D38 0220202D */ daddu $a0, $s1, $zero -/* FC6EC 802D7D3C 0C0B1EAF */ jal get_variable -/* FC6F0 802D7D40 0040B02D */ daddu $s6, $v0, $zero -/* FC6F4 802D7D44 8E050000 */ lw $a1, ($s0) -/* FC6F8 802D7D48 26100004 */ addiu $s0, $s0, 4 -/* FC6FC 802D7D4C 0220202D */ daddu $a0, $s1, $zero -/* FC700 802D7D50 0C0B1EAF */ jal get_variable -/* FC704 802D7D54 0040A82D */ daddu $s5, $v0, $zero -/* FC708 802D7D58 8E050000 */ lw $a1, ($s0) -/* FC70C 802D7D5C 26100004 */ addiu $s0, $s0, 4 -/* FC710 802D7D60 0220202D */ daddu $a0, $s1, $zero -/* FC714 802D7D64 0C0B1EAF */ jal get_variable -/* FC718 802D7D68 0040A02D */ daddu $s4, $v0, $zero -/* FC71C 802D7D6C 8E050000 */ lw $a1, ($s0) -/* FC720 802D7D70 26100004 */ addiu $s0, $s0, 4 -/* FC724 802D7D74 0220202D */ daddu $a0, $s1, $zero -/* FC728 802D7D78 0C0B1EAF */ jal get_variable -/* FC72C 802D7D7C 0040982D */ daddu $s3, $v0, $zero -/* FC730 802D7D80 8E050000 */ lw $a1, ($s0) -/* FC734 802D7D84 26100004 */ addiu $s0, $s0, 4 -/* FC738 802D7D88 0220202D */ daddu $a0, $s1, $zero -/* FC73C 802D7D8C 0C0B1EAF */ jal get_variable -/* FC740 802D7D90 0040902D */ daddu $s2, $v0, $zero -/* FC744 802D7D94 0220202D */ daddu $a0, $s1, $zero -/* FC748 802D7D98 8E050000 */ lw $a1, ($s0) -/* FC74C 802D7D9C 0C0B1EAF */ jal get_variable -/* FC750 802D7DA0 0040882D */ daddu $s1, $v0, $zero -/* FC754 802D7DA4 3C04802E */ lui $a0, 0x802e -/* FC758 802D7DA8 24849D50 */ addiu $a0, $a0, -0x62b0 -/* FC75C 802D7DAC 24050001 */ addiu $a1, $zero, 1 -/* FC760 802D7DB0 0040802D */ daddu $s0, $v0, $zero -/* FC764 802D7DB4 0C0B0CF8 */ jal start_script -/* FC768 802D7DB8 0000302D */ daddu $a2, $zero, $zero -/* FC76C 802D7DBC 0040182D */ daddu $v1, $v0, $zero -/* FC770 802D7DC0 AC760084 */ sw $s6, 0x84($v1) -/* FC774 802D7DC4 AC750088 */ sw $s5, 0x88($v1) -/* FC778 802D7DC8 AC74008C */ sw $s4, 0x8c($v1) -/* FC77C 802D7DCC AC730090 */ sw $s3, 0x90($v1) -/* FC780 802D7DD0 AC720094 */ sw $s2, 0x94($v1) -/* FC784 802D7DD4 AC710098 */ sw $s1, 0x98($v1) -/* FC788 802D7DD8 AC70009C */ sw $s0, 0x9c($v1) -/* FC78C 802D7DDC 8FBF002C */ lw $ra, 0x2c($sp) -/* FC790 802D7DE0 8FB60028 */ lw $s6, 0x28($sp) -/* FC794 802D7DE4 8FB50024 */ lw $s5, 0x24($sp) -/* FC798 802D7DE8 8FB40020 */ lw $s4, 0x20($sp) -/* FC79C 802D7DEC 8FB3001C */ lw $s3, 0x1c($sp) -/* FC7A0 802D7DF0 8FB20018 */ lw $s2, 0x18($sp) -/* FC7A4 802D7DF4 8FB10014 */ lw $s1, 0x14($sp) -/* FC7A8 802D7DF8 8FB00010 */ lw $s0, 0x10($sp) -/* FC7AC 802D7DFC 24020002 */ addiu $v0, $zero, 2 -/* FC7B0 802D7E00 03E00008 */ jr $ra -/* FC7B4 802D7E04 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/include/variables.h b/include/variables.h index ccdc405f99..1adaf1c1ef 100644 --- a/include/variables.h +++ b/include/variables.h @@ -164,5 +164,6 @@ extern s32 mapScriptLibVram; extern Bytecode* SCRIPT_NpcDefeat; extern Bytecode* ShakeCam1; extern Bytecode* ShakeCamX; +extern Bytecode* D_802D9D50; #endif diff --git a/src/code_FBE10.c b/src/code_FBE10.c index 559197088e..c2ee2333cc 100644 --- a/src/code_FBE10.c +++ b/src/code_FBE10.c @@ -67,7 +67,27 @@ ApiStatus func_802D7B74(ScriptInstance* script, s32 isInitialCall) { INCLUDE_ASM(s32, "code_FBE10", func_802D7BA4); -INCLUDE_ASM(s32, "code_FBE10", func_802D7CF8); +ApiStatus func_802D7CF8(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + s32 var0 = get_variable(script, *args++); + s32 var1 = get_variable(script, *args++); + s32 var2 = get_variable(script, *args++); + s32 var3 = get_variable(script, *args++); + s32 var4 = get_variable(script, *args++); + s32 var5 = get_variable(script, *args++); + s32 var6 = get_variable(script, *args++); + ScriptInstance* newScript = start_script(&D_802D9D50, 1, 0); + + newScript->varTable[0] = var0; + newScript->varTable[1] = var1; + newScript->varTable[2] = var2; + newScript->varTable[3] = var3; + newScript->varTable[4] = var4; + newScript->varTable[5] = var5; + newScript->varTable[6] = var6; + + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_FBE10", func_802D7E08); diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index 57d0da9329..b78c0e7827 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1897,3 +1897,4 @@ gSpeakingActorPart;0x8029FA78 EnterWalk;0x80285960 EnemyNpcHit;0x80077F70 EnemyNpcDefeat;0x8007809C +D_802D9D50;0x802D9D50 diff --git a/undefined_syms.txt b/undefined_syms.txt index 6f335270e1..1574ba51ba 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -214,6 +214,8 @@ gWorldDynamicEntityList = 0x801543A0; gBattleDynamicEntityList = 0x801543E0; gCurrentDynamicEntityListPtr = 0x80154420; +D_802D9D50 = 0x802D9D50; + gScriptIndexList = 0x802DA898; gScriptIdList = 0x802DAA98; gScriptListCount = 0x802DAC98; From 484fba8d4d62b7e5e0feb2f06cbe6893bb9f8e03 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Thu, 29 Oct 2020 22:42:34 +0000 Subject: [PATCH 05/12] name transition_music_volume_to --- .../code_e0b30_len_b80/func_8014A548.s | 28 +++++++++---------- src/code_e0b30_len_b80.c | 6 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/asm/nonmatchings/code_e0b30_len_b80/func_8014A548.s b/asm/nonmatchings/code_e0b30_len_b80/func_8014A548.s index 5c779984ab..c9dbd5c772 100644 --- a/asm/nonmatchings/code_e0b30_len_b80/func_8014A548.s +++ b/asm/nonmatchings/code_e0b30_len_b80/func_8014A548.s @@ -27,7 +27,7 @@ glabel func_8014A548 /* E0C9C 8014A59C 00220821 */ addu $at, $at, $v0 /* E0CA0 8014A5A0 8C221290 */ lw $v0, 0x1290($at) /* E0CA4 8014A5A4 00400008 */ jr $v0 -/* E0CA8 8014A5A8 00000000 */ nop +/* E0CA8 8014A5A8 00000000 */ nop /* E0CAC 8014A5AC 96230000 */ lhu $v1, ($s1) /* E0CB0 8014A5B0 30620001 */ andi $v0, $v1, 1 /* E0CB4 8014A5B4 1040001D */ beqz $v0, .L8014A62C @@ -37,24 +37,24 @@ glabel func_8014A548 /* E0CC4 8014A5C4 1040000B */ beqz $v0, .L8014A5F4 /* E0CC8 8014A5C8 30620004 */ andi $v0, $v1, 4 /* E0CCC 8014A5CC 14400005 */ bnez $v0, .L8014A5E4 -/* E0CD0 8014A5D0 00000000 */ nop +/* E0CD0 8014A5D0 00000000 */ nop /* E0CD4 8014A5D4 0C015671 */ jal func_800559C4 /* E0CD8 8014A5D8 8E040016 */ lw $a0, 0x16($s0) /* E0CDC 8014A5DC 08052987 */ j .L8014A61C -/* E0CE0 8014A5E0 00000000 */ nop +/* E0CE0 8014A5E0 00000000 */ nop .L8014A5E4: /* E0CE4 8014A5E4 0C0156BC */ jal func_80055AF0 /* E0CE8 8014A5E8 8E040016 */ lw $a0, 0x16($s0) /* E0CEC 8014A5EC 08052987 */ j .L8014A61C -/* E0CF0 8014A5F0 00000000 */ nop +/* E0CF0 8014A5F0 00000000 */ nop .L8014A5F4: /* E0CF4 8014A5F4 14400006 */ bnez $v0, .L8014A610 -/* E0CF8 8014A5F8 00000000 */ nop +/* E0CF8 8014A5F8 00000000 */ nop /* E0CFC 8014A5FC 8E040016 */ lw $a0, 0x16($s0) /* E0D00 8014A600 0C0156AF */ jal func_80055ABC /* E0D04 8014A604 0000302D */ daddu $a2, $zero, $zero /* E0D08 8014A608 08052987 */ j .L8014A61C -/* E0D0C 8014A60C 00000000 */ nop +/* E0D0C 8014A60C 00000000 */ nop .L8014A610: /* E0D10 8014A610 8E040016 */ lw $a0, 0x16($s0) /* E0D14 8014A614 0C0156EE */ jal func_80055BB8 @@ -82,7 +82,7 @@ glabel func_8014A548 /* E0D5C 8014A65C A6220000 */ sh $v0, ($s1) /* E0D60 8014A660 8E040016 */ lw $a0, 0x16($s0) /* E0D64 8014A664 0C01567F */ jal func_800559FC -/* E0D68 8014A668 00000000 */ nop +/* E0D68 8014A668 00000000 */ nop /* E0D6C 8014A66C 5440004D */ bnel $v0, $zero, .L8014A7A4 /* E0D70 8014A670 26520001 */ addiu $s2, $s2, 1 /* E0D74 8014A674 96220000 */ lhu $v0, ($s1) @@ -100,7 +100,7 @@ glabel func_8014A548 /* E0DA4 8014A6A4 30620010 */ andi $v0, $v1, 0x10 /* E0DA8 8014A6A8 8E04000E */ lw $a0, 0xe($s0) /* E0DAC 8014A6AC 04810003 */ bgez $a0, .L8014A6BC -/* E0DB0 8014A6B0 00000000 */ nop +/* E0DB0 8014A6B0 00000000 */ nop /* E0DB4 8014A6B4 080529E8 */ j .L8014A7A0 /* E0DB8 8014A6B8 A6000000 */ sh $zero, ($s0) .L8014A6BC: @@ -113,7 +113,7 @@ glabel func_8014A548 /* E0DD4 8014A6D4 96220000 */ lhu $v0, ($s1) /* E0DD8 8014A6D8 30420020 */ andi $v0, $v0, 0x20 /* E0DDC 8014A6DC 1040000C */ beqz $v0, .L8014A710 -/* E0DE0 8014A6E0 00000000 */ nop +/* E0DE0 8014A6E0 00000000 */ nop /* E0DE4 8014A6E4 8602000C */ lh $v0, 0xc($s0) /* E0DE8 8014A6E8 8607000A */ lh $a3, 0xa($s0) /* E0DEC 8014A6EC AFA20010 */ sw $v0, 0x10($sp) @@ -128,8 +128,8 @@ glabel func_8014A548 .L8014A710: /* E0E10 8014A710 3C048016 */ lui $a0, 0x8016 /* E0E14 8014A714 84849AE0 */ lh $a0, -0x6520($a0) -/* E0E18 8014A718 0C052B21 */ jal func_8014AC84 -/* E0E1C 8014A71C 00000000 */ nop +/* E0E18 8014A718 0C052B21 */ jal transition_music_volume_to +/* E0E1C 8014A71C 00000000 */ nop .L8014A720: /* E0E20 8014A720 8E040016 */ lw $a0, 0x16($s0) /* E0E24 8014A724 0C01565C */ jal func_80055970 @@ -143,7 +143,7 @@ glabel func_8014A548 /* E0E44 8014A744 A6000000 */ sh $zero, ($s0) .L8014A748: /* E0E48 8014A748 10400005 */ beqz $v0, .L8014A760 -/* E0E4C 8014A74C 00000000 */ nop +/* E0E4C 8014A74C 00000000 */ nop /* E0E50 8014A750 A6000000 */ sh $zero, ($s0) /* E0E54 8014A754 96220000 */ lhu $v0, ($s1) /* E0E58 8014A758 080529E7 */ j .L8014A79C @@ -151,7 +151,7 @@ glabel func_8014A548 .L8014A760: /* E0E60 8014A760 8E04002A */ lw $a0, 0x2a($s0) /* E0E64 8014A764 0C0156CA */ jal func_80055B28 -/* E0E68 8014A768 00000000 */ nop +/* E0E68 8014A768 00000000 */ nop /* E0E6C 8014A76C 5440000D */ bnel $v0, $zero, .L8014A7A4 /* E0E70 8014A770 26520001 */ addiu $s2, $s2, 1 /* E0E74 8014A774 8E020022 */ lw $v0, 0x22($s0) @@ -174,7 +174,7 @@ glabel func_8014A548 /* E0EAC 8014A7AC 1440FF75 */ bnez $v0, .L8014A584 /* E0EB0 8014A7B0 26310030 */ addiu $s1, $s1, 0x30 /* E0EB4 8014A7B4 0C052B25 */ jal func_8014AC94 -/* E0EB8 8014A7B8 00000000 */ nop +/* E0EB8 8014A7B8 00000000 */ nop /* E0EBC 8014A7BC 8FBF0030 */ lw $ra, 0x30($sp) /* E0EC0 8014A7C0 8FB5002C */ lw $s5, 0x2c($sp) /* E0EC4 8014A7C4 8FB40028 */ lw $s4, 0x28($sp) diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index bd04bf4db9..1aff819a74 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -1,7 +1,7 @@ #include "common.h" #include "map.h" -void func_8014AC84(s16 volume); +void transition_music_volume_to(s16 volume); /// If the given song ID is present in gSongsUsingVariationFlag, returns the current /// map's `flags2 & 1` value. Otherwise, returns -1. @@ -57,7 +57,7 @@ s32 _set_music_track(s32 playerIndex, SongID songID, s32 variation, s32 fadeOutT } if (musicPlayer->songID == songID && musicPlayer->variation == variation) { - func_8014AC84(volume); // transition volume to? + transition_music_volume_to(volume); if (musicPlayer->flags & 4) { func_80055B80(musicPlayer->unk_18); @@ -196,7 +196,7 @@ void func_8014AC70(void) { gMusicUnkVolume2 = 8; } -void func_8014AC84(s16 volume) { +void transition_music_volume_to(s16 volume) { gMusicTargetVolume = volume; } From 9193d0a4ca81622ec1e13c303240af88c31af152 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 19:23:22 -0400 Subject: [PATCH 06/12] PR comments --- src/code_F5750.c | 50 +++++++++++++++++++++++++----------------------- src/code_FBE10.c | 2 +- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/code_F5750.c b/src/code_F5750.c index e473f39c32..6e1ee4993a 100644 --- a/src/code_F5750.c +++ b/src/code_F5750.c @@ -125,26 +125,26 @@ ApiStatus SetPlayerAnimationSpeed(ScriptInstance* script, s32 isInitialCall) { ApiStatus PlayerMoveTo(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; PlayerStatus* playerStatus = PLAYER_STATUS; - f32 var0; - f32 var1; - f32 moveSpeed; if (isInitialCall) { - var1 = get_variable(script, *args++); - var0 = get_variable(script, *args++); + f32 targetX = get_variable(script, *args++); + f32 targetZ = get_variable(script, *args++); + f32 moveSpeed; + script->functionTemp[0].s = get_variable(script, *args++); - playerStatus->targetYaw = atan2(playerStatus->position.x, playerStatus->position.z, var1, var0); + playerStatus->targetYaw = atan2(playerStatus->position.x, playerStatus->position.z, targetX, targetZ); if (script->functionTemp[0].s == 0) { - script->functionTemp[0].s = (dist2D(playerStatus->position.x, playerStatus->position.z, var1, - var0) / gPlayerNpcPtr->moveSpeed); + script->functionTemp[0].s = dist2D(playerStatus->position.x, playerStatus->position.z, targetX, + targetZ) / gPlayerNpcPtr->moveSpeed; moveSpeed = gPlayerNpcPtr->moveSpeed; } else { - moveSpeed = dist2D(playerStatus->position.x, playerStatus->position.z, var1, var0) / script->functionTemp[0].s; + moveSpeed = dist2D(playerStatus->position.x, playerStatus->position.z, targetX, targetZ) / script->functionTemp[0].s; } move_player(script->functionTemp[0].s, playerStatus->targetYaw, moveSpeed); } + // functionTemp 0 is the time left script->functionTemp[0].s--; return script->functionTemp[0].s < 0; } @@ -170,41 +170,43 @@ void PlayerJump2(ScriptInstance* script, s32 isInitialCall) { ApiStatus InterpPlayerYaw(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; PlayerStatus* playerStatus = PLAYER_STATUS; - f32* t1 = &script->functionTemp[1].f; - f32* t2 = &script->functionTemp[2].f; - s32* t3 = &script->functionTemp[3].s; + f32* initialYaw = &script->functionTemp[1].f; + f32* deltaYaw = &script->functionTemp[2].f; + s32* time = &script->functionTemp[3].s; if (isInitialCall) { Npc** player = &gPlayerNpcPtr; (*player)->yaw = playerStatus->targetYaw; - *t1 = (*player)->yaw; - *t2 = get_float_variable(script, *args++) - *t1; - *t3 = get_variable(script, *args++); + *initialYaw = (*player)->yaw; + *deltaYaw = get_float_variable(script, *args++) - *initialYaw; + *time = get_variable(script, *args++); (*player)->duration = 0; - if (*t2 < -180.0f) { - *t2 += 360.0f; + if (*deltaYaw < -180.0f) { + *deltaYaw += 360.0f; } - if (*t2 > 180.0f) { - *t2 -= 360.0f; + if (*deltaYaw > 180.0f) { + *deltaYaw -= 360.0f; } } - if (*t3 > 0) { + if (*time > 0) { Npc** player = &gPlayerNpcPtr; (*player)->duration++; - (*player)->yaw = *t1 + ((*t2 * (*player)->duration) / *t3); + (*player)->yaw = *initialYaw + ((*deltaYaw * (*player)->duration) / *time); (*player)->yaw = clamp_angle((*player)->yaw); playerStatus->targetYaw = (*player)->yaw; - return ((*player)->duration < *t3) ^ 1; + + return !((*player)->duration < *time); } else { Npc** player = &gPlayerNpcPtr; - (*player)->yaw += *t2; - (*player)->yaw = clamp_angle((*player)->yaw);; + (*player)->yaw += *deltaYaw; + (*player)->yaw = clamp_angle((*player)->yaw); playerStatus->targetYaw = (*player)->yaw; + return ApiStatus_DONE2; } } diff --git a/src/code_FBE10.c b/src/code_FBE10.c index c2ee2333cc..4b8ec5e185 100644 --- a/src/code_FBE10.c +++ b/src/code_FBE10.c @@ -67,7 +67,7 @@ ApiStatus func_802D7B74(ScriptInstance* script, s32 isInitialCall) { INCLUDE_ASM(s32, "code_FBE10", func_802D7BA4); -ApiStatus func_802D7CF8(ScriptInstance* script, s32 isInitialCall) { +ApiStatus Spawn802D9D50(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; s32 var0 = get_variable(script, *args++); s32 var1 = get_variable(script, *args++); From e8ba79a88c5e2d52bc34bc3e0bff98e1ee37fc11 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 29 Oct 2020 19:27:23 -0400 Subject: [PATCH 07/12] PR comment ;( --- src/code_FBE10.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code_FBE10.c b/src/code_FBE10.c index 4b8ec5e185..374adb7b5c 100644 --- a/src/code_FBE10.c +++ b/src/code_FBE10.c @@ -76,8 +76,8 @@ ApiStatus Spawn802D9D50(ScriptInstance* script, s32 isInitialCall) { s32 var4 = get_variable(script, *args++); s32 var5 = get_variable(script, *args++); s32 var6 = get_variable(script, *args++); - ScriptInstance* newScript = start_script(&D_802D9D50, 1, 0); + ScriptInstance* newScript = start_script(&D_802D9D50, 1, 0); newScript->varTable[0] = var0; newScript->varTable[1] = var1; newScript->varTable[2] = var2; From cce065d5299e257be21b0ea609d82bf35c70c313 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Thu, 29 Oct 2020 23:52:24 +0000 Subject: [PATCH 08/12] badly match func_8014A498 --- include/variables.h | 3 ++- src/code_e0b30_len_b80.c | 16 +++++++++++++++- tools/symbol_addrs.txt | 2 +- undefined_syms.txt | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/variables.h b/include/variables.h index d892d99244..753be45c0d 100644 --- a/include/variables.h +++ b/include/variables.h @@ -167,6 +167,7 @@ extern s16 gMusicUnkVolume; extern s16 gMusicUnkVolume2; extern s16 gMusicCurrentVolume; extern s16 gMusicTargetVolume; -extern MusicPlayer gMusicPlayers[]; // TODO: how many? +extern MusicPlayer gMusicPlayers[4]; +extern MusicPlayer D_8014F6F0; #endif diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index 1aff819a74..0b81071ac3 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -26,7 +26,21 @@ s32 get_song_variation_override_for_cur_map(SongID songID) { return -1; } -INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014A498); +//INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014A498); +void func_8014A498(void) { + MusicPlayer* src; + s32 i; + + for (i = 0; i < 2; i++) { + MusicPlayer *musicPlayers = gMusicPlayers; + musicPlayers[i] = *(src = &D_8014F6F0); + } + + gMusicTargetVolume = 8; + gMusicUnkVolume2 = 8; + gMusicCurrentVolume = 8; + func_800561A4(8); +} void func_8014A52C(void) { gMusicTargetVolume = 8; diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index a82b45a98d..a88c409173 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1903,6 +1903,6 @@ gMusicPlayers;0x80159AF0 gMusicUnkVolume;0x80159AE0 gMusicUnkVolume2;0x80159AE4 gMusicTargetVolume;0x80159AE2 -gMusicCurVolume;0x80159AE6 +gMusicCurrentVolume;0x80159AE6 gAreas;0x800934F0 gSongArray;0x8014F720 diff --git a/undefined_syms.txt b/undefined_syms.txt index cf1496998c..fa88c9a7e9 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -182,8 +182,9 @@ D_801595A0 = 0x801595A0; gMusicUnkVolume = 0x80159AE0; gMusicTargetVolume = 0x80159AE2; gMusicUnkVolume2 = 0x80159AE4; -gMusicCurVolume = 0x80159AE6; +gMusicCurrentVolume = 0x80159AE6; gMusicPlayers = 0x80159AF0; +D_8014F6F0 = 0x8014F6F0; gCollisionStatus = 0x8015A550; D_8015C7C0 = 0x8015C7C0; From 0f4b4f8db073e16ecdf8a31006460875af742f1c Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 30 Oct 2020 00:01:11 +0000 Subject: [PATCH 09/12] add comment about .data --- src/code_e0b30_len_b80.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index 0b81071ac3..c9a96443c1 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -26,9 +26,8 @@ s32 get_song_variation_override_for_cur_map(SongID songID) { return -1; } -//INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014A498); void func_8014A498(void) { - MusicPlayer* src; + MusicPlayer* src; // TODO: remove this temp when .data section for this file (incl. D_8014F6F0) is set up s32 i; for (i = 0; i < 2; i++) { From 2a1c35a80ced96622222398a3ce05ae64f8003df Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 30 Oct 2020 17:50:58 +0000 Subject: [PATCH 10/12] lint --- .../code_e0b30_len_b80/func_8014A498.s | 43 ------------------- include/map.h | 2 +- src/code_28910_len_5090.c | 2 +- src/code_e0b30_len_b80.c | 2 +- 4 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 asm/nonmatchings/code_e0b30_len_b80/func_8014A498.s diff --git a/asm/nonmatchings/code_e0b30_len_b80/func_8014A498.s b/asm/nonmatchings/code_e0b30_len_b80/func_8014A498.s deleted file mode 100644 index 69f5b7c302..0000000000 --- a/asm/nonmatchings/code_e0b30_len_b80/func_8014A498.s +++ /dev/null @@ -1,43 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8014A498 -/* E0B98 8014A498 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* E0B9C 8014A49C AFBF0010 */ sw $ra, 0x10($sp) -/* E0BA0 8014A4A0 0000282D */ daddu $a1, $zero, $zero -/* E0BA4 8014A4A4 3C068015 */ lui $a2, 0x8015 -/* E0BA8 8014A4A8 24C6F6F0 */ addiu $a2, $a2, -0x910 -/* E0BAC 8014A4AC 24C70030 */ addiu $a3, $a2, 0x30 -/* E0BB0 8014A4B0 3C048016 */ lui $a0, 0x8016 -/* E0BB4 8014A4B4 24849AF0 */ addiu $a0, $a0, -0x6510 -.L8014A4B8: -/* E0BB8 8014A4B8 0080182D */ daddu $v1, $a0, $zero -/* E0BBC 8014A4BC 00C0102D */ daddu $v0, $a2, $zero -.L8014A4C0: -/* E0BC0 8014A4C0 8C480000 */ lw $t0, ($v0) -/* E0BC4 8014A4C4 8C490004 */ lw $t1, 4($v0) -/* E0BC8 8014A4C8 8C4A0008 */ lw $t2, 8($v0) -/* E0BCC 8014A4CC 8C4B000C */ lw $t3, 0xc($v0) -/* E0BD0 8014A4D0 AC680000 */ sw $t0, ($v1) -/* E0BD4 8014A4D4 AC690004 */ sw $t1, 4($v1) -/* E0BD8 8014A4D8 AC6A0008 */ sw $t2, 8($v1) -/* E0BDC 8014A4DC AC6B000C */ sw $t3, 0xc($v1) -/* E0BE0 8014A4E0 24420010 */ addiu $v0, $v0, 0x10 -/* E0BE4 8014A4E4 1447FFF6 */ bne $v0, $a3, .L8014A4C0 -/* E0BE8 8014A4E8 24630010 */ addiu $v1, $v1, 0x10 -/* E0BEC 8014A4EC 24A50001 */ addiu $a1, $a1, 1 -/* E0BF0 8014A4F0 28A20002 */ slti $v0, $a1, 2 -/* E0BF4 8014A4F4 1440FFF0 */ bnez $v0, .L8014A4B8 -/* E0BF8 8014A4F8 24840030 */ addiu $a0, $a0, 0x30 -/* E0BFC 8014A4FC 24020008 */ addiu $v0, $zero, 8 -/* E0C00 8014A500 3C018016 */ lui $at, %hi(gMusicTargetVolume) -/* E0C04 8014A504 A4229AE2 */ sh $v0, %lo(gMusicTargetVolume)($at) -/* E0C08 8014A508 3C018016 */ lui $at, %hi(gMusicUnkVolume2) -/* E0C0C 8014A50C A4229AE4 */ sh $v0, %lo(gMusicUnkVolume2)($at) -/* E0C10 8014A510 3C018016 */ lui $at, 0x8016 -/* E0C14 8014A514 A4229AE6 */ sh $v0, -0x651a($at) -/* E0C18 8014A518 0C015869 */ jal func_800561A4 -/* E0C1C 8014A51C 24040008 */ addiu $a0, $zero, 8 -/* E0C20 8014A520 8FBF0010 */ lw $ra, 0x10($sp) -/* E0C24 8014A524 03E00008 */ jr $ra -/* E0C28 8014A528 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/include/map.h b/include/map.h index f40c65c2b9..b06d236645 100644 --- a/include/map.h +++ b/include/map.h @@ -41,7 +41,7 @@ typedef struct Map { /* 0x0C */ void* dmaEnd; /* 0x10 */ void* dmaDest; /* 0x14 */ char* bgName; - /* 0x18 */ s32 (*init)(void); ///< Return TRUE to skip normal asset (shape/hit/bg/tex) loading. + /* 0x18 */ s32(*init)(void); ///< Return TRUE to skip normal asset (shape/hit/bg/tex) loading. /* 0x1C */ s16 flags1; /* 0x1E */ s8 flags2; /* 0x1F */ s8 flags3; diff --git a/src/code_28910_len_5090.c b/src/code_28910_len_5090.c index 62fe271554..40274bd6f0 100644 --- a/src/code_28910_len_5090.c +++ b/src/code_28910_len_5090.c @@ -33,7 +33,7 @@ s32 func_8004DA0C(UNK_TYPE arg0) { INCLUDE_ASM(s32, "code_28910_len_5090", func_8004DA74); -void func_8004DAA8(UnkStructFor8004DAA8 *arg0) { +void func_8004DAA8(UnkStructFor8004DAA8* arg0) { if (arg0->unk_221 != 0) { arg0->unk_221 = 4; arg0->unk_010 = 1; diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index c9a96443c1..3592d23ed6 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -31,7 +31,7 @@ void func_8014A498(void) { s32 i; for (i = 0; i < 2; i++) { - MusicPlayer *musicPlayers = gMusicPlayers; + MusicPlayer* musicPlayers = gMusicPlayers; musicPlayers[i] = *(src = &D_8014F6F0); } From 7fa97805b921ab0367db0a7aedee8ff1b2d3ed74 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 30 Oct 2020 19:19:17 +0000 Subject: [PATCH 11/12] clean up get_song_variation_override_for_cur_map --- src/code_e0b30_len_b80.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index 3592d23ed6..4cf4fdfe38 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -12,12 +12,10 @@ s32 get_song_variation_override_for_cur_map(SongID songID) { u32 i = 0; Area* areas = gAreas; SongID* allowed = gSongsUsingVariationFlag; - GameStatus** gameStatusPtr = gGameStatusPtr; for (i = 0; i < ARRAY_COUNT(gSongsUsingVariationFlag); i++) { if (allowed[i] == songID) { - GameStatus* gameStatus = *gameStatusPtr; - Map* map = &areas[gameStatus->areaID].maps[gameStatus->mapID]; + Map* map = &areas[GAME_STATUS->areaID].maps[GAME_STATUS->mapID]; return map->flags2 & 1; } From 984b7667ca7512c082bd18c6e643c74b80b8e2ed Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 30 Oct 2020 20:33:06 +0000 Subject: [PATCH 12/12] install python-setuptools Requirement of PyYAML --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index efbc4324cc..472281d052 100755 --- a/install.sh +++ b/install.sh @@ -4,7 +4,7 @@ if command -v apt &> /dev/null; then echo "Installing packages for Ubuntu (apt)" - sudo apt install -y git python3 python3-pip build-essential binutils-mips-linux-gnu zlib1g-dev libyaml-dev || exit 1 + sudo apt install -y git python3 python3-pip python3-setuptools build-essential binutils-mips-linux-gnu zlib1g-dev libyaml-dev || exit 1 python3 -m pip install -U -r requirements.txt if [[ $1 == "--extra" ]]; then @@ -25,7 +25,7 @@ if command -v pacman &> /dev/null; then sudo pacman -Syu || exit 1 # Install dependencies - sudo pacman -S --noconfirm --needed git python python-pip base-devel zlib libyaml || exit 1 + sudo pacman -S --noconfirm --needed git python python-pip python-setuptools base-devel zlib libyaml || exit 1 python3 -m pip install -U -r requirements.txt # Install binutils if required @@ -62,7 +62,7 @@ fi if command -v zypper &> /dev/null; then echo "Installing packages for openSUSE (zypper)" - sudo zypper -n install git python3 python3-devel python3-pip gcc gcc-c++ glibc-devel make cross-mips-binutils zlib-devel libyaml-devel + sudo zypper -n install git python3 python3-devel python3-pip python3-setuptools gcc gcc-c++ glibc-devel make cross-mips-binutils zlib-devel libyaml-devel # Link the openSUSE locations for binutils tools to their usual GNU locations sudo ln -s /usr/bin/mips-suse-linux-addr2line /usr/bin/mips-linux-gnu-addr2line