sub_11C14
Some checks are pending
CI / build (push) Waiting to run

This commit is contained in:
Marcus Huderle 2025-02-21 08:03:17 -06:00
parent 0ac318979e
commit 2afa19326c
9 changed files with 112 additions and 151 deletions

View File

@ -8,75 +8,6 @@
.section .text11C14
.align 2, 0
thumb_func_start sub_11C14
sub_11C14: @ 0x08011C14
push {r4, r5, lr}
ldr r3, _08011C6C @ =gCurrentPinballGame
lsls r0, r0, #0x10
asrs r0, r0, #0x10
lsls r1, r0, #4
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08011C70 @ =0x00001334
adds r1, r1, r0
ldr r0, [r3]
adds r4, r0, r1
ldr r1, _08011C74 @ =gUnknown_02031520
ldrh r0, [r1, #0x26]
movs r2, #0
strh r0, [r4, #0x10]
ldrh r0, [r1, #0x28]
strh r0, [r4, #0x12]
movs r5, #0x10
ldrsh r0, [r4, r5]
lsls r0, r0, #8
str r0, [r4, #0x34]
movs r5, #0x12
ldrsh r0, [r4, r5]
lsls r0, r0, #8
str r0, [r4, #0x38]
movs r5, #0x26
ldrsh r0, [r1, r5]
lsls r0, r0, #1
strh r0, [r4, #0x28]
movs r5, #0x28
ldrsh r0, [r1, r5]
lsls r0, r0, #1
strh r0, [r4, #0x2a]
movs r0, #0x80
lsls r0, r0, #1
strh r0, [r4, #0xe]
strh r2, [r4, #0x30]
strh r2, [r4, #0x32]
ldr r0, _08011C78 @ =gMain
ldrb r0, [r0, #4]
cmp r0, #0
bne _08011C7C
movs r0, #3
b _08011C7E
.align 2, 0
_08011C6C: .4byte gCurrentPinballGame
_08011C70: .4byte 0x00001334
_08011C74: .4byte gUnknown_02031520
_08011C78: .4byte gMain
_08011C7C:
movs r0, #1
_08011C7E:
strb r0, [r4, #1]
movs r0, #0
strh r0, [r4, #6]
ldr r0, [r3]
ldr r1, _08011C94 @ =0x000005B2
adds r0, r0, r1
movs r1, #1
strb r1, [r0]
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08011C94: .4byte 0x000005B2
thumb_func_start sub_11C98
sub_11C98: @ 0x08011C98
push {r4, r5, r6, r7, lr}

Binary file not shown.

View File

@ -74,31 +74,23 @@ struct BgOffsets
u16 yOffset;
};
struct UnkPinballGame1334_unk2C
{
s16 unk0;
s16 unk2;
};
// This struct holds data about the ball's velocity, position, etc.
struct UnkPinballGame1334
{
/*0x00*/ u8 unk0;
/*0x01*/ u8 filler1[0x5];
/*0x01*/ u8 unk1;
/*0x02*/ u8 filler2[0x4];
/*0x06*/ u16 unk6;
/*0x08*/ u8 filler8[0x6];
/*0x0E*/ u16 unkE;
/*0x10*/ s16 unk10;
/*0x12*/ s16 unk12;
/*0x10*/ struct Coords16 unk10;
/*0x14*/ u8 filler14[0xB];
/*0x1F*/ u8 unk1F;
/*0x20*/ u8 filler20[0x8];
/*0x28*/ struct UnkPinballGame1334_unk2C unk28;
/*0x2C*/ struct UnkPinballGame1334_unk2C unk2C;
/*0x30*/ s16 xVelocity;
/*0x32*/ s16 yVelocity;
/*0x34*/ u32 xPosition; // fixed-point Q_24_8 values?
/*0x38*/ u32 yPosition;
/*0x28*/ struct Coords16 unk28;
/*0x2C*/ struct Coords16 unk2C;
/*0x30*/ struct Coords16 velocity;
/*0x34*/ struct Coords32 position; // fixed-point Q_24_8 values
/*0x3C*/ u8 filler3C[0x8];
};
@ -237,7 +229,9 @@ struct PinballGame
/*0x59A*/ u8 filler59A[0x2];
/*0x59C*/ u16 lastCatchSpecies; // Previous catch mode species?
/*0x59E*/ u16 lastEggSpecies; // Previous hatch/evo mode species?
/*0x5A0*/ u8 filler5A0[0x50];
/*0x5A0*/ u8 filler5A0[0x12];
/*0x5B2*/ u8 unk5B2;
/*0x5B3*/ u8 filler5B3[0x3D];
/*0x5F0*/ u16 caughtMonCount; // Number of mons caught in this game
/*0x5F2*/ u8 filler5F2[0x4];
/*0x5F6*/ s8 unk5F6;
@ -321,7 +315,9 @@ struct Unk02031520
/*0x0A*/ u8 fillerA[0x2];
/*0x0C*/ struct PinballGame *unkC;
/*0x10*/ struct Unk02031520_unk10 *unk10;
/*0x14*/ u8 filler14[0x18];
/*0x14*/ u8 filler14[0x12];
/*0x26*/ s16 unk26;
/*0x28*/ s16 unk28;
/*0x2C*/ u8 *unk2C;
};

View File

@ -32,13 +32,25 @@ struct SpriteGroup
};
// size: 0xB8
struct Coord16
struct Coords16
{
s16 x;
s16 y;
};
struct UCoords16
{
u16 x;
u16 y;
};
struct Coord32
struct Coords32
{
s32 x;
s32 y;
};
struct UCoords32
{
u32 x;
u32 y;

View File

@ -136,7 +136,7 @@ extern const s16 gEReaderAccessButtonSequence[];
//extern ? gMonHatchSpriteGroup3_Gfx;
//extern ? gMonHatchSpriteGroup4_Gfx;
//extern ? gMonHatchSpriteGroup5_Gfx;
extern struct Coord16 gUnknown_086A6B28[];
extern struct UCoords16 gUnknown_086A6B28[];
extern const struct SpriteSet *const gUnknown_086A6AD4[];
extern const struct SpriteSet *const gUnknown_086A7DA8[];
extern const struct SpriteSet *const gUnknown_086A7DB0[];
@ -195,11 +195,11 @@ extern const u16 gTitlescreenSprites_Pals[];
//extern ? gMonPortraitsGroup11_Pals;
//extern ? gMonPortraitsGroup12_Pals;
//extern ? gMonPortraitsGroup13_Pals;
extern struct Coord16 gUnknown_086A9684[];
extern struct Coord16 gUnknown_086A9694[];
extern struct Coord16 gUnknown_086A96AC[];
extern struct Coord16 gUnknown_086A96C0[];
extern const struct Coord32 gUnknown_080797F0[2][8];
extern struct UCoords16 gUnknown_086A9684[];
extern struct UCoords16 gUnknown_086A9694[];
extern struct UCoords16 gUnknown_086A96AC[];
extern struct UCoords16 gUnknown_086A96C0[];
extern const struct UCoords32 gUnknown_080797F0[2][8];
extern u16 gUnknown_02019C40[];
extern s16 gUnknown_0201A514;

View File

@ -18,8 +18,8 @@ EWRAM_DATA u8 gUnknown_0202BEE8 = 0;
extern void (*const gBonusFieldSelectStateFuncs[])(void);
extern const struct SpriteSet *const gUnknown_086A4C80[16];
extern const struct Coord16 gUnknown_086A4CC0[];
extern const struct Coord16 gUnknown_086A4CD8[];
extern const struct UCoords16 gUnknown_086A4CC0[];
extern const struct UCoords16 gUnknown_086A4CD8[];
extern const u8 gUnknown_086A4CF0[];
extern const u8 gUnknown_0807AAE0[];

View File

@ -396,13 +396,13 @@ void sub_4A6A0(void)
switch (gCurrentPinballGame->unk282)
{
case 0:
gCurrentPinballGame->unk132c->unk10 = 119;
gCurrentPinballGame->unk132c->unk12 = 279;
gCurrentPinballGame->unk132c->xVelocity = 0;
gCurrentPinballGame->unk132c->yVelocity = 0;
gCurrentPinballGame->unk132c->unk10.x = 119;
gCurrentPinballGame->unk132c->unk10.y = 279;
gCurrentPinballGame->unk132c->velocity.x = 0;
gCurrentPinballGame->unk132c->velocity.y = 0;
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8;
gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8;
gCurrentPinballGame->unk132c->position.x = gCurrentPinballGame->unk132c->unk10.x << 8;
gCurrentPinballGame->unk132c->position.y = gCurrentPinballGame->unk132c->unk10.y << 8;
gCurrentPinballGame->unk132c->unkE = 128;
gCurrentPinballGame->unk132c->unk0 = 1;
gCurrentPinballGame->unk1F = 1;
@ -418,13 +418,13 @@ void sub_4A6A0(void)
gCurrentPinballGame->unk4E = 215;
break;
case 1:
gCurrentPinballGame->unk132c->unk10 = 140;
gCurrentPinballGame->unk132c->unk12 = 183;
gCurrentPinballGame->unk132c->xVelocity = 0;
gCurrentPinballGame->unk132c->yVelocity = 0;
gCurrentPinballGame->unk132c->unk10.x = 140;
gCurrentPinballGame->unk132c->unk10.y = 183;
gCurrentPinballGame->unk132c->velocity.x = 0;
gCurrentPinballGame->unk132c->velocity.y = 0;
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8;
gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8;
gCurrentPinballGame->unk132c->position.x = gCurrentPinballGame->unk132c->unk10.x << 8;
gCurrentPinballGame->unk132c->position.y = gCurrentPinballGame->unk132c->unk10.y << 8;
gCurrentPinballGame->unk132c->unkE = 128;
gCurrentPinballGame->unk132c->unk0 = 1;
gCurrentPinballGame->unk1F = 1;
@ -434,13 +434,13 @@ void sub_4A6A0(void)
gCurrentPinballGame->unk4E = 118;
break;
case 2:
gCurrentPinballGame->unk132c->unk10 = -28;
gCurrentPinballGame->unk132c->unk12 = -10;
gCurrentPinballGame->unk132c->xVelocity = 0;
gCurrentPinballGame->unk132c->yVelocity = 0;
gCurrentPinballGame->unk132c->unk10.x = -28;
gCurrentPinballGame->unk132c->unk10.y = -10;
gCurrentPinballGame->unk132c->velocity.x = 0;
gCurrentPinballGame->unk132c->velocity.y = 0;
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8;
gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8;
gCurrentPinballGame->unk132c->position.x = gCurrentPinballGame->unk132c->unk10.x << 8;
gCurrentPinballGame->unk132c->position.y = gCurrentPinballGame->unk132c->unk10.y << 8;
gCurrentPinballGame->unk132c->unkE = 128;
gCurrentPinballGame->unk132c->unk0 = 1;
gCurrentPinballGame->unk1F = 1;

View File

@ -1,8 +1,9 @@
#include "constants/bg_music.h"
#include "main.h"
#include "global.h"
#include "main.h"
#include "constants/bg_music.h"
#include "constants/fields.h"
void sub_11C14(s32);
void sub_11C14(s16);
void sub_12524(void);
void sub_12BF8(void);
@ -25,3 +26,24 @@ void sub_11B9C(void)
sub_12BF8();
}
}
void sub_11C14(s16 arg0)
{
struct UnkPinballGame1334 *var0 = &gCurrentPinballGame->unk1334[arg0];
var0->unk10.x = gUnknown_02031520.unk26;
var0->unk10.y = gUnknown_02031520.unk28;
var0->position.x = Q_24_8(var0->unk10.x);
var0->position.y = Q_24_8(var0->unk10.y);
var0->unk28.x = gUnknown_02031520.unk26 * 2;
var0->unk28.y = gUnknown_02031520.unk28 * 2;
var0->unkE = 0x100;
var0->velocity.x = 0;
var0->velocity.y = 0;
if (gMain.selectedField == FIELD_RUBY)
var0->unk1 = 3;
else
var0->unk1 = 1;
var0->unk6 = 0;
gCurrentPinballGame->unk5B2 = 1;
}

View File

@ -493,14 +493,14 @@ void sub_329F4(void)
gCurrentPinballGame->unk132c->unk0 = 1;
gCurrentPinballGame->unk1F = 1;
gCurrentPinballGame->unk28--;
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->xPosition = gCurrentPinballGame->unk132c->unk10 << 8;
gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8;
gCurrentPinballGame->unk132c->velocity.x = 0;
gCurrentPinballGame->unk132c->velocity.y = 0;
gCurrentPinballGame->unk132c->unk10.x = 58;
gCurrentPinballGame->unk132c->unk10.y = 178;
gCurrentPinballGame->unk132c->unk28.x = gCurrentPinballGame->unk132c->unk10.x * 2;
gCurrentPinballGame->unk132c->unk28.y = gCurrentPinballGame->unk132c->unk10.y * 2;
gCurrentPinballGame->unk132c->position.x = gCurrentPinballGame->unk132c->unk10.x << 8;
gCurrentPinballGame->unk132c->position.y = gCurrentPinballGame->unk132c->unk10.y << 8;
if (gCurrentPinballGame->unk28 <= 0x31)
{
@ -528,14 +528,14 @@ void sub_329F4(void)
gCurrentPinballGame->unk132c->unk0 = 0;
gCurrentPinballGame->unk1F = 0;
gCurrentPinballGame->unk26 = 0x3C;
gCurrentPinballGame->unk132c->xVelocity = 0x60;
gCurrentPinballGame->unk132c->yVelocity = 0xC0;
gCurrentPinballGame->unk132c->unk10 = 0x3C;
gCurrentPinballGame->unk132c->unk12 = 0xB4;
gCurrentPinballGame->unk132c->velocity.x = 0x60;
gCurrentPinballGame->unk132c->velocity.y = 0xC0;
gCurrentPinballGame->unk132c->unk10.x = 0x3C;
gCurrentPinballGame->unk132c->unk10.y = 0xB4;
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk5F7 = 0;
gCurrentPinballGame->unk132c->unk28.unk0 = gCurrentPinballGame->unk132c->unk10 * 2;
gCurrentPinballGame->unk132c->unk28.unk2 = gCurrentPinballGame->unk132c->unk12 * 2;
gCurrentPinballGame->unk132c->unk28.x = gCurrentPinballGame->unk132c->unk10.x * 2;
gCurrentPinballGame->unk132c->unk28.y = gCurrentPinballGame->unk132c->unk10.y * 2;
gCurrentPinballGame->unk25 = 0;
m4aSongNumStart(SE_UNKNOWN_0xC3);
@ -569,21 +569,21 @@ void sub_32BE4(void)
gCurrentPinballGame->unk5F7 = 1;
gCurrentPinballGame->unk1F = 1;
gCurrentPinballGame->unk28--;
gCurrentPinballGame->unk132c->xVelocity = 0;
gCurrentPinballGame->unk132c->yVelocity = 0;
gCurrentPinballGame->unk132c->velocity.x = 0;
gCurrentPinballGame->unk132c->velocity.y = 0;
gCurrentPinballGame->unk132c->unk6 = 0;
if (gCurrentPinballGame->unk28 > 97)
{
gCurrentPinballGame->unk5FA = 1;
gCurrentPinballGame->unk2F4 = 2;
gCurrentPinballGame->unk132c->unk10 = 0xb5;
gCurrentPinballGame->unk132c->unk12 = 0xc3;
gCurrentPinballGame->unk132c->unk10.x = 0xb5;
gCurrentPinballGame->unk132c->unk10.y = 0xc3;
}
else if (gCurrentPinballGame->unk28 > 94)
{
gCurrentPinballGame->unk2F4 = 3;
gCurrentPinballGame->unk132c->unk10 = 0xb8;
gCurrentPinballGame->unk132c->unk12 = 0xbb;
gCurrentPinballGame->unk132c->unk10.x = 0xb8;
gCurrentPinballGame->unk132c->unk10.y = 0xbb;
}
else if (gCurrentPinballGame->unk28 > 91)
{
@ -618,20 +618,20 @@ void sub_32BE4(void)
{
gCurrentPinballGame->unk132c->unk0 = 0;
gCurrentPinballGame->unk2F4 = 10;
gCurrentPinballGame->unk132c->unk10 = 0xb5;
gCurrentPinballGame->unk132c->unk12 = 0xc3;
gCurrentPinballGame->unk132c->unk10.x = 0xb5;
gCurrentPinballGame->unk132c->unk10.y = 0xc3;
}
else
{
gCurrentPinballGame->unk2F4 = 11;
gCurrentPinballGame->unk132c->unk10 = 0xb0;
gCurrentPinballGame->unk132c->unk12 = 0xca;
gCurrentPinballGame->unk132c->unk10.x = 0xb0;
gCurrentPinballGame->unk132c->unk10.y = 0xca;
}
gCurrentPinballGame->unk132c->unk28.unk0 = gCurrentPinballGame->unk132c->unk10 * 2;
gCurrentPinballGame->unk132c->unk28.unk2 = gCurrentPinballGame->unk132c->unk12 * 2;
gCurrentPinballGame->unk132c->xPosition = gCurrentPinballGame->unk132c->unk10 << 8;
gCurrentPinballGame->unk132c->yPosition = gCurrentPinballGame->unk132c->unk12 << 8;
gCurrentPinballGame->unk132c->unk28.x = gCurrentPinballGame->unk132c->unk10.x * 2;
gCurrentPinballGame->unk132c->unk28.y = gCurrentPinballGame->unk132c->unk10.y * 2;
gCurrentPinballGame->unk132c->position.x = gCurrentPinballGame->unk132c->unk10.x << 8;
gCurrentPinballGame->unk132c->position.y = gCurrentPinballGame->unk132c->unk10.y << 8;
}
else
{
@ -639,14 +639,14 @@ void sub_32BE4(void)
gCurrentPinballGame->unk1F = 0;
gCurrentPinballGame->unk26 = 60;
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk132c->xVelocity = -0x66;
gCurrentPinballGame->unk132c->yVelocity = 0xC8;
gCurrentPinballGame->unk132c->velocity.x = -0x66;
gCurrentPinballGame->unk132c->velocity.y = 0xC8;
sub_11B0(7);
gCurrentPinballGame->unk132c->unk6 = 0;
gCurrentPinballGame->unk132c->unk10 = 0xAB;
gCurrentPinballGame->unk132c->unk12 = 0xD4;
gCurrentPinballGame->unk132c->unk28.unk0 = gCurrentPinballGame->unk132c->unk10 * 2;
gCurrentPinballGame->unk132c->unk28.unk2 = gCurrentPinballGame->unk132c->unk12 * 2;
gCurrentPinballGame->unk132c->unk10.x = 0xAB;
gCurrentPinballGame->unk132c->unk10.y = 0xD4;
gCurrentPinballGame->unk132c->unk28.x = gCurrentPinballGame->unk132c->unk10.x * 2;
gCurrentPinballGame->unk132c->unk28.y = gCurrentPinballGame->unk132c->unk10.y * 2;
gCurrentPinballGame->unk132c->unk2C = gCurrentPinballGame->unk132c->unk28;
gCurrentPinballGame->unk25 = 0;
gCurrentPinballGame->unk5F7 = 0;