From 0ac318979e215c4ea4b837bfa69fa50f44397b23 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 20 Feb 2025 20:23:41 -0600 Subject: [PATCH] Document some basic ball physics stuff --- data/rom.s | 6 +++--- include/global.h | 9 +++++---- src/pinball_game_main.c | 24 ++++++++++++------------ src/rom_31F6C.c | 24 ++++++++++++------------ 4 files changed, 32 insertions(+), 31 deletions(-) diff --git a/data/rom.s b/data/rom.s index 1fc4e0c..339d486 100644 --- a/data/rom.s +++ b/data/rom.s @@ -1061,13 +1061,13 @@ gUnknown_08118680:: @ 0x08118680 .include "data/graphics/titlescreen.inc" gUnknown_08137900:: @ 0x08137900 - .incbin "baserom.gba", 0x137900, 0x8 + .2byte 1, 1, 1, 0 gUnknown_08137908:: @ 0x08137908 - .incbin "baserom.gba", 0x137908, 0x8 + .2byte 1, 0, 1, 0 gUnknown_08137910:: @ 0x08137910 - .incbin "baserom.gba", 0x137910, 0x8 + .2byte 1, 0, 0, 0 gIdlePinballGameStateFuncs:: @ 0x08137918 .4byte sub_19048 diff --git a/include/global.h b/include/global.h index 87fdf87..dde062d 100644 --- a/include/global.h +++ b/include/global.h @@ -80,6 +80,7 @@ struct UnkPinballGame1334_unk2C s16 unk2; }; +// This struct holds data about the ball's velocity, position, etc. struct UnkPinballGame1334 { /*0x00*/ u8 unk0; @@ -94,10 +95,10 @@ struct UnkPinballGame1334 /*0x20*/ u8 filler20[0x8]; /*0x28*/ struct UnkPinballGame1334_unk2C unk28; /*0x2C*/ struct UnkPinballGame1334_unk2C unk2C; - /*0x30*/ u16 unk30; - /*0x32*/ u16 unk32; - /*0x34*/ u32 unk34; - /*0x38*/ u32 unk38; + /*0x30*/ s16 xVelocity; + /*0x32*/ s16 yVelocity; + /*0x34*/ u32 xPosition; // fixed-point Q_24_8 values? + /*0x38*/ u32 yPosition; /*0x3C*/ u8 filler3C[0x8]; }; diff --git a/src/pinball_game_main.c b/src/pinball_game_main.c index 575b6e1..ea21754 100644 --- a/src/pinball_game_main.c +++ b/src/pinball_game_main.c @@ -398,11 +398,11 @@ void sub_4A6A0(void) case 0: gCurrentPinballGame->unk132c->unk10 = 119; gCurrentPinballGame->unk132c->unk12 = 279; - gCurrentPinballGame->unk132c->unk30 = 0; - gCurrentPinballGame->unk132c->unk32 = 0; + gCurrentPinballGame->unk132c->xVelocity = 0; + gCurrentPinballGame->unk132c->yVelocity = 0; gCurrentPinballGame->unk132c->unk6 = 0; - gCurrentPinballGame->unk132c->unk34 = gCurrentPinballGame->unk132c->unk10 << 8; - gCurrentPinballGame->unk132c->unk38 = gCurrentPinballGame->unk132c->unk12 << 8; + gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8; + gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8; gCurrentPinballGame->unk132c->unkE = 128; gCurrentPinballGame->unk132c->unk0 = 1; gCurrentPinballGame->unk1F = 1; @@ -420,11 +420,11 @@ void sub_4A6A0(void) case 1: gCurrentPinballGame->unk132c->unk10 = 140; gCurrentPinballGame->unk132c->unk12 = 183; - gCurrentPinballGame->unk132c->unk30 = 0; - gCurrentPinballGame->unk132c->unk32 = 0; + gCurrentPinballGame->unk132c->xVelocity = 0; + gCurrentPinballGame->unk132c->yVelocity = 0; gCurrentPinballGame->unk132c->unk6 = 0; - gCurrentPinballGame->unk132c->unk34 = gCurrentPinballGame->unk132c->unk10 << 8; - gCurrentPinballGame->unk132c->unk38 = gCurrentPinballGame->unk132c->unk12 << 8; + gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8; + gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8; gCurrentPinballGame->unk132c->unkE = 128; gCurrentPinballGame->unk132c->unk0 = 1; gCurrentPinballGame->unk1F = 1; @@ -436,11 +436,11 @@ void sub_4A6A0(void) case 2: gCurrentPinballGame->unk132c->unk10 = -28; gCurrentPinballGame->unk132c->unk12 = -10; - gCurrentPinballGame->unk132c->unk30 = 0; - gCurrentPinballGame->unk132c->unk32 = 0; + gCurrentPinballGame->unk132c->xVelocity = 0; + gCurrentPinballGame->unk132c->yVelocity = 0; gCurrentPinballGame->unk132c->unk6 = 0; - gCurrentPinballGame->unk132c->unk34 = gCurrentPinballGame->unk132c->unk10 << 8; - gCurrentPinballGame->unk132c->unk38 = gCurrentPinballGame->unk132c->unk12 << 8; + gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8; + gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8; gCurrentPinballGame->unk132c->unkE = 128; gCurrentPinballGame->unk132c->unk0 = 1; gCurrentPinballGame->unk1F = 1; diff --git a/src/rom_31F6C.c b/src/rom_31F6C.c index c77a9a5..4522825 100644 --- a/src/rom_31F6C.c +++ b/src/rom_31F6C.c @@ -493,14 +493,14 @@ void sub_329F4(void) gCurrentPinballGame->unk132c->unk0 = 1; gCurrentPinballGame->unk1F = 1; gCurrentPinballGame->unk28--; - gCurrentPinballGame->unk132c->unk30 = 0; - gCurrentPinballGame->unk132c->unk32 = 0; + gCurrentPinballGame->unk132c->xVelocity = 0; + gCurrentPinballGame->unk132c->yVelocity = 0; gCurrentPinballGame->unk132c->unk10 = 58; gCurrentPinballGame->unk132c->unk12 = 178; gCurrentPinballGame->unk132c->unk28.unk0 = gCurrentPinballGame->unk132c->unk10 * 2; gCurrentPinballGame->unk132c->unk28.unk2 = gCurrentPinballGame->unk132c->unk12 * 2; - gCurrentPinballGame->unk132c->unk34 = gCurrentPinballGame->unk132c->unk10 * 256; - gCurrentPinballGame->unk132c->unk38 = gCurrentPinballGame->unk132c->unk12 * 256; + gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8; + gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8; if (gCurrentPinballGame->unk28 <= 0x31) { @@ -528,8 +528,8 @@ void sub_329F4(void) gCurrentPinballGame->unk132c->unk0 = 0; gCurrentPinballGame->unk1F = 0; gCurrentPinballGame->unk26 = 0x3C; - gCurrentPinballGame->unk132c->unk30 = 0x60; - gCurrentPinballGame->unk132c->unk32 = 0xC0; + gCurrentPinballGame->unk132c->xVelocity = 0x60; + gCurrentPinballGame->unk132c->yVelocity = 0xC0; gCurrentPinballGame->unk132c->unk10 = 0x3C; gCurrentPinballGame->unk132c->unk12 = 0xB4; gCurrentPinballGame->unk132c->unk6 = 0; @@ -569,8 +569,8 @@ void sub_32BE4(void) gCurrentPinballGame->unk5F7 = 1; gCurrentPinballGame->unk1F = 1; gCurrentPinballGame->unk28--; - gCurrentPinballGame->unk132c->unk30 = 0; - gCurrentPinballGame->unk132c->unk32 = 0; + gCurrentPinballGame->unk132c->xVelocity = 0; + gCurrentPinballGame->unk132c->yVelocity = 0; gCurrentPinballGame->unk132c->unk6 = 0; if (gCurrentPinballGame->unk28 > 97) { @@ -630,8 +630,8 @@ void sub_32BE4(void) gCurrentPinballGame->unk132c->unk28.unk0 = gCurrentPinballGame->unk132c->unk10 * 2; gCurrentPinballGame->unk132c->unk28.unk2 = gCurrentPinballGame->unk132c->unk12 * 2; - gCurrentPinballGame->unk132c->unk34 = gCurrentPinballGame->unk132c->unk10 * 256; - gCurrentPinballGame->unk132c->unk38 = gCurrentPinballGame->unk132c->unk12 * 256; + gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8; + gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8; } else { @@ -639,8 +639,8 @@ void sub_32BE4(void) gCurrentPinballGame->unk1F = 0; gCurrentPinballGame->unk26 = 60; gCurrentPinballGame->unk132c->unk6 = 0; - gCurrentPinballGame->unk132c->unk30 = 0xFF9A; - gCurrentPinballGame->unk132c->unk32 = 200; + gCurrentPinballGame->unk132c->xVelocity = -0x66; + gCurrentPinballGame->unk132c->yVelocity = 0xC8; sub_11B0(7); gCurrentPinballGame->unk132c->unk6 = 0; gCurrentPinballGame->unk132c->unk10 = 0xAB;