diff --git a/Makefile b/Makefile index 849e379246..00bc0155ec 100644 --- a/Makefile +++ b/Makefile @@ -349,7 +349,7 @@ CC_CHECK ?= gcc CC_CHECK_CFLAGS := -fsyntax-only -fsigned-char $(CC_CFLAGS) $(TARGET_CFLAGS) -std=gnu90 -Wall -Wempty-body -Wextra -Wno-format-security -Wno-main -DNON_MATCHING -DAVOID_UB $(DEF_INC_CFLAGS) # C compiler options -HIDE_WARNINGS := -woff 838,649 +HIDE_WARNINGS := -woff 838,649,807 CFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS) ifeq ($(COMPILER),gcc) CFLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra diff --git a/include/spline.h b/include/spline.h index 0d06a0ece8..97d64b3863 100644 --- a/include/spline.h +++ b/include/spline.h @@ -18,7 +18,7 @@ This stuff is all about the b-splines used objects like Lakitu and the Boos on B For splines used during the award ceremony and credits, see src/ending/ceremony_and_credits.h */ -typedef struct { +typedef struct SplineControlPoint { /* 0x0 */ Vec3s pos; // Don't really know what to call this member. // It somehow controls the speed of travel along a segment of the spline but I don't really get how it works @@ -28,7 +28,7 @@ typedef struct { // WARNING!!! // You really, really shouldn't use this type for actual spline data. This is intended as a generic SplineData // type. I would use a union, but that would cause significant ugliness elsewhere in the codebase -typedef struct { +typedef struct SplineData { // This name is a little misleading // The control point arrays have more control points in them than this number indicates. Not sure why though. s16 numControlPoints; diff --git a/src/audio/external.c b/src/audio/external.c index f65c2d2b97..e7ae17b60a 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -111,7 +111,7 @@ u16 D_800EA1C4 = 0; Vec3f D_800EA1C8 = { 0.0f, 0.0f, 0.0f }; f32 D_800EA1D4 = 1.0f; u32 external_unused_u32_0 = 0x00000000; -u8 D_800EA1DC = 0; +s8 D_800EA1DC = 0; u32 external_unused_u32_1 = 0x00000000; u8 D_800EA1E4 = 0; u8 D_800EA1E8 = 0; @@ -1828,11 +1828,11 @@ void func_800C5E38(u8 playerId) { if ((s32) D_800EA1C0 < 2) { play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF9, 0x26), &D_800E9F7C[playerId].pos, playerId, &D_800E9F7C[playerId].unk_38, &D_800E9F04[playerId], - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } else { play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0x80, 0x26), &D_800E9F7C[playerId].pos, playerId, &D_800E9F7C[playerId].unk_38, &D_800E9F04[playerId], - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } } break; @@ -1998,144 +1998,144 @@ void func_800C683C(u8 cameraId) { switch (D_800E9E74[cameraId]) { case 3: play_sound(SOUND_ACTION_TYRE_SQUEAL, &D_800E9F7C[cameraId].pos, cameraId, &D_800E9F14[cameraId], - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ACTION_TYRE_SQUEAL; break; case 18: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF8, 0x1D), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF8, 0x1D); break; case 19: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF8, 0x22), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF8, 0x22); break; case 1: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x09), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x09); break; case 2: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF4, 0x0A), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF4, 0x0A); break; case 17: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x1E), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x1E); break; case 15: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x1F), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x1F); break; case 16: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x21), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x21); break; case 20: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x27), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x27); break; case 25: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x20), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x20); break; case 26: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x23), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x23); break; case 27: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0x80, 0x46), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0x80, 0x46); break; case 28: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x25), &D_800E9F7C[cameraId].pos, cameraId, - &D_800E9F14[cameraId], &D_800EA1D4, (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9F14[cameraId], &D_800EA1D4, (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x25); break; case 4: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0B), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0B); break; case 5: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0C), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0C); break; case 6: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0D), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0D); break; case 7: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0E), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0E); break; case 8: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0F), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x0F); break; case 9: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x10), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x10); break; case 10: case 14: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x11), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x11); break; case 11: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x12), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x12); break; case 12: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x13), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x13); break; case 29: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x48), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x48); break; case 30: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x49), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x49); break; case 31: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x4A), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x4A); break; case 13: case 22: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x29), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x29); break; case 23: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x2A), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x2A); break; case 24: play_sound(SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x2B), &D_800E9F7C[cameraId].pos, cameraId, &D_800EA1D4, - &D_800E9EF4[cameraId], (u8*) &D_800E9F7C[cameraId].unk_14); + &D_800E9EF4[cameraId], (s8*) &D_800E9F7C[cameraId].unk_14); D_800E9E94[cameraId] = SOUND_ARG_LOAD(0x01, 0x00, 0xF0, 0x2B); break; default: @@ -2653,7 +2653,7 @@ void func_800C847C(u8 playerId) { (D_800EA0EC[playerId] == 0)) { play_sound((gPlayers[playerId].characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x05), &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, &D_800EA1D4, - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } } } else { @@ -2665,7 +2665,7 @@ void func_800C847C(u8 playerId) { if ((gCurrentCourseId == COURSE_KOOPA_BEACH) && (D_800EA0EC[playerId] == 0)) { play_sound((gPlayers[playerId].characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x08), &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, &D_800EA1D4, - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } } } @@ -2869,7 +2869,7 @@ void func_800C9060(u8 playerId, u32 soundBits) { D_800EA0EC[playerId] = 1; case 0: play_sound(soundBits, &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, &D_800EA1D4, - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); break; } } @@ -2888,10 +2888,10 @@ void func_800C90F4(u8 playerId, u32 soundBits) { } if (((gPlayers[playerId].effects & 0x40000000) == 0x40000000) && ((s32) D_800E9F2C[playerId] >= 0x1F)) { play_sound(soundBits, &D_800E9F7C[playerId].pos, playerId, &D_800EA150, &D_800EA1D4, - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } else { play_sound(soundBits, &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, &D_800EA1D4, - (u8*) &D_800E9F7C[playerId].unk_14); + (s8*) &D_800E9F7C[playerId].unk_14); } break; default: @@ -2917,10 +2917,10 @@ void func_800C92CC(u8 playerId, u32 soundBits) { temp_v0->unk34 = 170.0f; if (((gPlayers[playerId].effects & 0x40000000) == 0x40000000) && ((s32) D_800E9F2C[playerId] >= 0x1F)) { play_sound((gPlayers[playerId].characterId * 0x10) + soundBits, &temp_v0->unk18, var_s0, - &D_800EA150, &D_800EA1D4, &D_800EA06C[playerId].unk0C); + &D_800EA150, &D_800EA1D4, (s8*) &D_800EA06C[playerId].unk0C); } else { play_sound((gPlayers[playerId].characterId * 0x10) + soundBits, &temp_v0->unk18, var_s0, - &temp_v0->unk2C, &D_800EA1D4, &D_800EA06C[playerId].unk0C); + &temp_v0->unk2C, &D_800EA1D4, (s8*) &D_800EA06C[playerId].unk0C); } } } @@ -3011,7 +3011,7 @@ void func_800C94A4(u8 playerId) { break; } play_sound(var_a0, &D_800E9F7C[playerId].pos, playerId, &D_800E9F7C[playerId].unk_0C, - &D_800E9F7C[playerId].unk_10, (u8*) &D_800E9F7C[playerId].unk_14); + &D_800E9F7C[playerId].unk_10, (s8*) &D_800E9F7C[playerId].unk_14); break; default: break; @@ -3099,7 +3099,7 @@ void func_800C9A88(u8 playerId) { if (temp_v0_6 != NULL) { temp_v0_6->unk34 = 40.0f; play_sound(soundBits, &temp_v0_6->unk18, var_s0, &temp_v0_6->unk2C, - &D_800EA06C[playerId].unk00[2], &D_800EA06C[playerId].unk0C); + &D_800EA06C[playerId].unk00[2], (s8*) &D_800EA06C[playerId].unk0C); } } } @@ -3292,7 +3292,7 @@ void func_800CA49C(u8 arg0) { void func_800CA59C(u8 playerId) { if ((D_800EA0EC[playerId] == 0) && (D_800EA108 == 0)) { play_sound((gPlayers[playerId].characterId * 0x10) + 0x29008001, &D_800E9F7C[playerId].pos, playerId, - &D_800EA1D4, &D_800EA1D4, (u8*) &D_800E9F7C[playerId].unk_14); + &D_800EA1D4, &D_800EA1D4, (s8*) &D_800E9F7C[playerId].unk_14); D_800EA164 = 1; if ((s32) D_800EA1C0 >= 2) { func_800C8F80(playerId, 0x0100FF2C); @@ -3320,7 +3320,7 @@ void func_800CA730(u8 arg0) { if (D_800EA0EC[arg0] == 0) { if ((D_800EA108 == 0) && (D_800EA10C[arg0] != 0)) { play_sound(gPlayers[arg0].characterId * 0x10 + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x08), - &D_800E9F7C[arg0].pos, arg0, &D_800EA1D4, &D_800EA1D4, (u8*) &D_800E9F7C[arg0].unk_14); + &D_800E9F7C[arg0].pos, arg0, &D_800EA1D4, &D_800EA1D4, (s8*) &D_800E9F7C[arg0].unk_14); if (D_800EA10C[arg0] != 0) { if ((s32) D_800EA1C0 >= 2) { func_800C9018(arg0, SOUND_ARG_LOAD(0x01, 0x00, 0xFF, 0x2C)); @@ -3442,7 +3442,7 @@ void func_800CADD0(u8 arg0, f32 arg1) { } D_800EA110[arg0] = arg1; play_sound(0x1900A209U, &D_800E9F7C[arg0].pos, arg0, &D_800EA1D4, &D_800EA110[arg0], - (u8*) &D_800E9F7C[arg0].unk_14); + (s8*) &D_800E9F7C[arg0].unk_14); break; default: break; @@ -3466,7 +3466,7 @@ void func_800CAEC4(u8 playerId, f32 arg1) { } D_800EA120[playerId] = arg1; play_sound(gCurrentCourseId + 0x19007020, &D_800E9F7C[playerId].pos, playerId, &D_800EA1D4, - &D_800EA120[playerId], (u8*) &D_800E9F7C[playerId].unk_14); + &D_800EA120[playerId], (s8*) &D_800E9F7C[playerId].unk_14); break; default: break; diff --git a/src/audio/external.h b/src/audio/external.h index 4eb118eaff..2c74093577 100644 --- a/src/audio/external.h +++ b/src/audio/external.h @@ -416,7 +416,7 @@ extern u16 D_800EA1C4; // a sound source, its usage makes it look like a 0'd Vec3f for general usage extern Vec3f D_800EA1C8; // = {0.0f, 0.0f, 0.0f} extern f32 D_800EA1D4; -extern u8 D_800EA1DC; // = 0; +extern s8 D_800EA1DC; // = 0; extern u8 D_800EA1E4; extern u8 D_800EA1E8; extern u8 D_800EA1EC; diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index 584c76a81c..838087f30b 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -165,7 +165,7 @@ void func_8006EF60(void) { s16 huh; u8* wut; - wut = gMenuCompressedBuffer + 0xFFFF0000; + wut = (u8*) &gMenuCompressedBuffer[0x3FFFC000]; // clang-format off // God forgive me for my sins... huh = 0x14; if (0) {} for (i = 0; i < huh; i++) { D_8018D248[i] = dma_copy_base_misc_textures(gCourseOutlineTextures[i], wut, D_800E5520[i], D_800E5520[i]); wut += D_800E5520[i]; } diff --git a/src/main.c b/src/main.c index d462a9e764..2309478997 100644 --- a/src/main.c +++ b/src/main.c @@ -40,14 +40,10 @@ #include "crash_screen.h" #include "buffers/gfx_output_buffer.h" -// Declarations (not in this file) void func_80091B78(void); - -void audio_init(); - +void audio_init(void); void create_debug_thread(void); void start_debug_thread(void); - struct SPTask* create_next_audio_frame_task(void); struct VblankHandler* gVblankHandler1 = NULL; diff --git a/src/menu_items.c b/src/menu_items.c index 855a169a03..8a06b1a4ba 100644 --- a/src/menu_items.c +++ b/src/menu_items.c @@ -42,7 +42,7 @@ void guMtxCatL(Mtx* m, Mtx* n, Mtx* res); u16* gMenuTextureBuffer; -u8* gMenuCompressedBuffer; +u32* gMenuCompressedBuffer; u8* sTKMK00_LowResBuffer; u8* sGPPointsCopy; void* gSomeDLBuffer; @@ -1251,7 +1251,7 @@ void func_80091B78(void) { gNextFreeMemoryAddress = gFreeMemoryResetAnchor; // Hypothetically, this should be a ptr... But only hypothetically. gMenuTextureBuffer = get_next_available_memory_addr(0x000900B0); - gMenuCompressedBuffer = (u8*) get_next_available_memory_addr(0x0000CE00); + gMenuCompressedBuffer = get_next_available_memory_addr(0x0000CE00); sTKMK00_LowResBuffer = (u8*) get_next_available_memory_addr(SCREEN_WIDTH * SCREEN_HEIGHT); gSomeDLBuffer = (struct_8018EE10_entry*) get_next_available_memory_addr(0x00001000); func_800AF9B0(); @@ -1348,7 +1348,7 @@ void func_80091FA4(void) { s32 i; //! @todo These sizes need to be sizeof() for shiftability if possible - gMenuCompressedBuffer = (u8*) get_next_available_memory_addr(0x00002800); + gMenuCompressedBuffer = get_next_available_memory_addr(0x00002800); gMenuTextureBuffer = (u16*) get_next_available_memory_addr(0x000124F8); sTKMK00_LowResBuffer = (u8*) get_next_available_memory_addr(0x00001000); sGPPointsCopy = get_next_available_memory_addr(4); @@ -3441,7 +3441,7 @@ void load_menu_img(MenuTexture* addr) { size = ((size / 8) * 8) + 8; } dma_copy_mio0_segment(texAddr->textureData, size, gMenuCompressedBuffer); - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); + mio0decode((u8*) gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); } else { dma_copy_mio0_segment(texAddr->textureData, (texAddr->height * texAddr->width) * 2, &gMenuTextureBuffer[sMenuTextureBufferIndex]); @@ -3505,7 +3505,7 @@ void func_8009952C(MenuTexture* addr) { if (imgLoaded == false) { dma_copy_mio0_segment(texAddr->textureData, 0x00008000U, gMenuCompressedBuffer); - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); + mio0decode((u8*) gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); texMap[sMenuTextureEntries].textureData = texAddr->textureData; texMap[sMenuTextureEntries].offset = sMenuTextureBufferIndex; sMenuTextureBufferIndex += texAddr->height * texAddr->width; @@ -3561,7 +3561,7 @@ void load_menu_img_comp_type(MenuTexture* addr, s32 compType) { switch (compType) { case LOAD_MENU_IMG_MIO0_ONCE: case LOAD_MENU_IMG_MIO0_FORCE: - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); + mio0decode((u8*) gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); break; case LOAD_MENU_IMG_TKMK00_ONCE: case LOAD_MENU_IMG_TKMK00_FORCE: @@ -3572,7 +3572,7 @@ void load_menu_img_comp_type(MenuTexture* addr, s32 compType) { } if (1) {} tkmk00decode(gMenuCompressedBuffer, sTKMK00_LowResBuffer, - (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex], clearBit); + &gMenuTextureBuffer[sMenuTextureBufferIndex], clearBit); break; } @@ -3602,7 +3602,7 @@ void func_80099958(MenuTexture* addr, s32 arg1, s32 arg2) { size = ((size / 8) * 8) + 8; } dma_copy_mio0_segment(texAddr->textureData, size, gMenuCompressedBuffer); - mio0decode(gMenuCompressedBuffer, D_802BFB80.arraySize4[arg2][arg1 / 2][(arg1 % 2) + 2].pixel_index_array); + mio0decode((u8*) gMenuCompressedBuffer, (u8*) D_802BFB80.arraySize4[arg2][arg1 / 2][(arg1 % 2) + 2].pixel_index_array); texAddr++; } } @@ -3625,101 +3625,103 @@ void func_80099A94(MenuTexture* arg0, s32 arg1) { var_v1->texNum = arg1; } -#ifdef NON_MATCHING -// https://decomp.me/scratch/rxEoi -// Something's up with the handling of `_textures_0aSegmentRomStart`, I don't know how to fix it void func_80099AEC(void) { + s32 some_var; s8 texEnd; - s32 size; - UNUSED s32 stackPadding0; - UNUSED s32 stackPadding1; - s32 texSize; + struct_8018E060_entry* var_s1; + TextureMap* entry; + MenuTexture* texPtr; OSIoMesg mb; - OSMesg msg; - UNUSED u8* test; + OSMesg sp64; + s32 cacheSize; s32 bufSize; - MenuTexture* texAddr; - struct_8018E060_entry* var_s1; if (gGamestate == RACING) { - bufSize = 0x00000500; + bufSize = 0x500; } else { - bufSize = 0x00001000; + bufSize = 0x1000; } texEnd = 0; - var_s1 = D_8018E060; - texAddr = var_s1->texture; + entry = &sMenuTextureMap[0]; + var_s1 = &D_8018E060[0]; + texPtr = var_s1->texture; - if (texAddr == NULL) + if (texPtr == NULL) { return; + } - texSize = texAddr->size; - if (texSize != 0) { - size = texSize; + if (texPtr->size) { + cacheSize = texPtr->size; } else { - size = 0x1400; + cacheSize = 0x1400; } - if (size % 8) { - size = ((size / 8) * 8) + 8; + if (cacheSize % 8) { + cacheSize = ((cacheSize / 8) * 8) + 8; } - osInvalDCache(gMenuCompressedBuffer, size); - osPiStartDma(&mb, 0, 0, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(texAddr->textureData)], - gMenuCompressedBuffer, size, &gDmaMesgQueue); - osRecvMesg(&gDmaMesgQueue, &msg, 1); + + osInvalDCache(gMenuCompressedBuffer, cacheSize); + osPiStartDma(&mb, 0, 0, (uintptr_t) _textures_0aSegmentRomStart + SEGMENT_OFFSET(texPtr->textureData), + gMenuCompressedBuffer, cacheSize, &gDmaMesgQueue); + osRecvMesg(&gDmaMesgQueue, &sp64, 1); + while (1) { if ((var_s1 + 1)->texture == NULL) { texEnd += 1; } else { - texAddr = (var_s1 + 1)->texture; - texSize = (var_s1 + 1)->texture->size; - if (texSize != 0) { - size = texSize; + texPtr = (var_s1 + 1)->texture; + if (texPtr->size) { + cacheSize = texPtr->size; } else { - size = 0x1400; + cacheSize = 0x1400; } - if (size % 8) { - size = ((size / 8) * 8) + 8; + if (cacheSize % 8) { + cacheSize = ((cacheSize / 8) * 8) + 8; } - osInvalDCache(gMenuCompressedBuffer + bufSize * 4, size); - osPiStartDma(&mb, 0, 0, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(texAddr->textureData)], - gMenuCompressedBuffer + bufSize * 4, size, &gDmaMesgQueue); + osInvalDCache(&gMenuCompressedBuffer[bufSize], cacheSize); + osPiStartDma(&mb, 0, 0, (uintptr_t) _textures_0aSegmentRomStart + SEGMENT_OFFSET(texPtr->textureData), + &gMenuCompressedBuffer[bufSize], cacheSize, &gDmaMesgQueue); } - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureMap[var_s1->texNum].offset]); + + some_var = (entry + var_s1->texNum)->offset; + + mio0decode((u8*) gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[some_var]); + var_s1->texture = NULL; var_s1++; - if (texEnd != 0) + if (texEnd) { break; - osRecvMesg(&gDmaMesgQueue, &msg, 1); + } + + osRecvMesg(&gDmaMesgQueue, &sp64, 1); + if ((var_s1 + 1)->texture == NULL) { texEnd += 1; } else { - texAddr = (var_s1 + 1)->texture; - texSize = (var_s1 + 1)->texture->size; - if (texSize != 0) { - size = texSize; + texPtr = (var_s1 + 1)->texture; + if (texPtr->size) { + cacheSize = texPtr->size; } else { - size = 0x1400; + cacheSize = 0x1400; } - if (size % 8) { - size = ((size / 8) * 8) + 8; + if (cacheSize % 8) { + cacheSize = ((cacheSize / 8) * 8) + 8; } - osInvalDCache(gMenuCompressedBuffer, size); - osPiStartDma(&mb, 0, 0, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(texAddr->textureData)], - gMenuCompressedBuffer, size, &gDmaMesgQueue); + osInvalDCache(gMenuCompressedBuffer, cacheSize); + osPiStartDma(&mb, 0, 0, (uintptr_t) _textures_0aSegmentRomStart + SEGMENT_OFFSET(texPtr->textureData), + gMenuCompressedBuffer, cacheSize, &gDmaMesgQueue); } - mio0decode(gMenuCompressedBuffer + bufSize * 4, - (u8*) &gMenuTextureBuffer[sMenuTextureMap[var_s1->texNum].offset]); + + some_var = (entry + var_s1->texNum)->offset; + mio0decode((u8*) &gMenuCompressedBuffer[bufSize], (u8*) &gMenuTextureBuffer[some_var]); var_s1->texture = NULL; var_s1++; - if (texEnd != 0) + if (texEnd) { break; - osRecvMesg(&gDmaMesgQueue, &msg, 1); + } + osRecvMesg(&gDmaMesgQueue, &sp64, 1); } } -#else -GLOBAL_ASM("asm/non_matchings/menu_items/func_80099AEC.s") -#endif void func_80099E54(void) { D_8018E0E8[0].mk64Texture = NULL; @@ -3794,8 +3796,8 @@ void func_80099EC4(void) { osPiStartDma(&sp68, 0, 0, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(temp_s2->textureData)], gMenuCompressedBuffer + 0x1400, var_s0, &gDmaMesgQueue); } - mio0decode(gMenuCompressedBuffer, - D_802BFB80.arraySize4[var_s1->unk6][var_s1->unk4 / 2][(var_s1->unk4 % 2) + 2].pixel_index_array); + mio0decode((u8*) gMenuCompressedBuffer, + (u8*) D_802BFB80.arraySize4[var_s1->unk6][var_s1->unk4 / 2][(var_s1->unk4 % 2) + 2].pixel_index_array); var_s1->mk64Texture = NULL; var_s1++; if (var_s4 != 0) @@ -3818,8 +3820,8 @@ void func_80099EC4(void) { osPiStartDma(&sp68, 0, 0, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(temp_s2->textureData)], gMenuCompressedBuffer, var_s0, &gDmaMesgQueue); } - mio0decode(gMenuCompressedBuffer + 0x1400, - D_802BFB80.arraySize4[var_s1->unk6][var_s1->unk4 / 2][(var_s1->unk4 % 2) + 2].pixel_index_array); + mio0decode((u8*) gMenuCompressedBuffer + 0x1400, + (u8*) D_802BFB80.arraySize4[var_s1->unk6][var_s1->unk4 / 2][(var_s1->unk4 % 2) + 2].pixel_index_array); var_s1->mk64Texture = NULL; var_s1++; if (var_s4 != 0) @@ -3844,7 +3846,7 @@ void func_8009A238(MenuTexture* arg0, s32 arg1) { var_a3 = ((var_a3 / 8) * 8) + 8; } dma_tkmk00_textures(sp24, var_a3, gMenuCompressedBuffer); - tkmk00decode(gMenuCompressedBuffer, sTKMK00_LowResBuffer, (u8*) &gMenuTextureBuffer[temp_v1], 1); + tkmk00decode(gMenuCompressedBuffer, sTKMK00_LowResBuffer, &gMenuTextureBuffer[temp_v1], 1); sMenuTextureMap[arg1].textureData = sp24; } @@ -4640,7 +4642,7 @@ void func_8009CBE4(s32 arg0, s32 arg1, s32 arg2) { color->green, color->blue, 0xFF - (D_8018E7D0[arg0] * 0xFF / D_8018E7B8[arg0])); if ((arg1 == 0) && (D_8018E7D0[arg0] += 1, (D_8018E7D0[arg0] >= D_8018E7B8[arg0]))) { - if (gGamestate == 4) { + if (gGamestate == RACING) { D_8018E7AC[arg0] = 6; return; } @@ -4690,7 +4692,7 @@ void func_8009CE64(s32 arg0) { gGotoMenu = 1; gMenuSelection = 0x0000000B; } - } else if (gGamestate == 4) { + } else if (gGamestate == RACING) { if (D_8018E7AC[arg0] == 2) { if (arg0 != 4) { D_8018E7AC[arg0] = 5; @@ -7582,7 +7584,7 @@ void render_lap_times(s32 recordType, s32 column, s32 row) { char sp38[3]; MenuItem* temp_v0; s32 sp30; - if (gGamestate == 4) { + if (gGamestate == RACING) { sp30 = 0; } else { sp30 = 1; diff --git a/src/menu_items.h b/src/menu_items.h index 9444badc84..937abd8555 100644 --- a/src/menu_items.h +++ b/src/menu_items.h @@ -638,7 +638,7 @@ void func_800AF740(MenuItem*); // This really, really shouldn't be in this header file, but I don't know where else to put it void rmonPrintf(const char*, ...); -void tkmk00decode(u8*, u8*, u8*, s32); +void tkmk00decode(u32*, u8*, u16*, s32); /* File specific defines */ @@ -657,7 +657,7 @@ extern s32 D_800DDB24; extern s16 gGetPlayerByCharacterId[]; extern u16* gMenuTextureBuffer; -extern u8* gMenuCompressedBuffer; +extern u32* gMenuCompressedBuffer; extern u8* sTKMK00_LowResBuffer; extern u8* sGPPointsCopy; extern void* gSomeDLBuffer; diff --git a/src/render_objects.c b/src/render_objects.c index bb35f3b960..f1027e231a 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -1809,6 +1809,7 @@ void render_texture_tile_rgba32_block(s16 x, s16 y, u8* texture, u32 width, u32 gSPDisplayList(gDisplayListHead++, D_0D007EB8); } #else +void render_texture_tile_rgba32_block(s16 x, s16 y, u8* texture, u32 width, u32 height); GLOBAL_ASM("asm/non_matchings/render_objects/render_texture_tile_rgba32_block.s") #endif diff --git a/src/save.c b/src/save.c index 93f0bc06f0..899fea0eb7 100644 --- a/src/save.c +++ b/src/save.c @@ -771,7 +771,7 @@ s32 func_800B6178(s32 arg0) { default: return -1; } - if (gGamestate == 4) { + if (gGamestate == RACING) { func_800051C4(); } temp_s3 = &D_8018EE10[arg0]; @@ -787,7 +787,7 @@ s32 func_800B6178(s32 arg0) { 0x00003C00, (u8*) D_800DC714); if (var_v0 == 0) { temp_s3->ghostDataSaved = 1; - if (gGamestate == 4) { + if (gGamestate == RACING) { temp_s3->courseIndex = (gCupSelection * 4) + gCourseIndexInCup; } temp_s3->unk_00 = D_80162DFC;