sub_11F88
Some checks failed
CI / build (push) Has been cancelled

This commit is contained in:
Marcus Huderle 2025-02-25 08:33:09 -06:00
parent 16b857a46a
commit ef63743724
6 changed files with 123 additions and 653 deletions

View File

@ -8,657 +8,6 @@
.section .text11C14
.align 2, 0
thumb_func_start sub_11F88
sub_11F88: @ 0x08011F88
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r2, _08011FD0 @ =gCurrentPinballGame
ldr r3, [r2]
ldr r1, _08011FD4 @ =0x0000132C
adds r0, r3, r1
ldr r6, [r0]
ldr r0, [r6, #0x34]
ldr r1, [r6, #0x38]
str r0, [r6, #0x3c]
str r1, [r6, #0x40]
ldr r1, _08011FD8 @ =0x000005A4
adds r0, r3, r1
ldrb r0, [r0]
cmp r0, #2
bne _08011FAE
b _080124E4
_08011FAE:
ldrb r0, [r3, #0x1f]
cmp r0, #0
bne _08011FFE
ldr r1, _08011FDC @ =0x00000383
adds r0, r3, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _08011FFE
ldrh r4, [r6, #0x32]
movs r1, #0x32
ldrsh r0, [r6, r1]
cmp r0, #0x96
ble _08011FE4
ldr r0, _08011FE0 @ =gGravityDeltas_Light
b _08011FF2
.align 2, 0
_08011FD0: .4byte gCurrentPinballGame
_08011FD4: .4byte 0x0000132C
_08011FD8: .4byte 0x000005A4
_08011FDC: .4byte 0x00000383
_08011FE0: .4byte gGravityDeltas_Light
_08011FE4:
cmp r0, #0x4b
ble _08011FF0
ldr r0, _08011FEC @ =gGravityDeltas_Medium
b _08011FF2
.align 2, 0
_08011FEC: .4byte gGravityDeltas_Medium
_08011FF0:
ldr r0, _0801208C @ =gGravityDeltas_Strong
_08011FF2:
ldrb r1, [r3, #0x1e]
lsls r1, r1, #1
adds r1, r1, r0
ldrh r0, [r1]
adds r0, r4, r0
strh r0, [r6, #0x32]
_08011FFE:
ldr r0, [r2]
adds r0, #0x31
ldrb r0, [r0]
cmp r0, #0
bne _0801200A
b _08012270
_0801200A:
movs r2, #0x30
ldrsh r0, [r6, r2]
ldrh r1, [r6, #0x32]
rsbs r1, r1, #0
lsls r1, r1, #0x10
asrs r1, r1, #0x10
bl ArcTan2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r0
mov sb, r8
movs r1, #0x30
ldrsh r0, [r6, r1]
adds r1, r0, #0
muls r1, r0, r1
movs r2, #0x32
ldrsh r0, [r6, r2]
adds r2, r0, #0
muls r2, r0, r2
adds r0, r2, #0
adds r1, r1, r0
ldr r0, _08012090 @ =gMain
ldrb r0, [r0, #4]
cmp r0, #3
bhi _080120FC
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0x95
bgt _080120A4
movs r7, #0x88
lsls r7, r7, #1
ldr r0, _08012094 @ =0x00012100
cmp r1, r0
bgt _08012052
b _080124C8
_08012052:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _08012098 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _0801209C @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _080120A0 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_0801208C: .4byte gGravityDeltas_Strong
_08012090: .4byte gMain
_08012094: .4byte 0x00012100
_08012098: .4byte 0x00004E20
_0801209C: .4byte 0xFFFF0000
_080120A0: .4byte 0x0000FFFF
_080120A4:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _080120EC @ =0x00027100
cmp r1, r0
bgt _080120B0
b _080124C8
_080120B0:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _080120F0 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _080120F4 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _080120F8 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_080120EC: .4byte 0x00027100
_080120F0: .4byte 0x00004E20
_080120F4: .4byte 0xFFFF0000
_080120F8: .4byte 0x0000FFFF
_080120FC:
cmp r0, #7
bne _080121B8
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0xd9
bgt _08012160
movs r7, #0x88
lsls r7, r7, #1
ldr r0, _08012150 @ =0x00012100
cmp r1, r0
bgt _08012114
b _080124C8
_08012114:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _08012154 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08012158 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _0801215C @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_08012150: .4byte 0x00012100
_08012154: .4byte 0x00004E20
_08012158: .4byte 0xFFFF0000
_0801215C: .4byte 0x0000FFFF
_08012160:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _080121A8 @ =0x00027100
cmp r1, r0
bgt _0801216C
b _080124C8
_0801216C:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _080121AC @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _080121B0 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _080121B4 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_080121A8: .4byte 0x00027100
_080121AC: .4byte 0x00004E20
_080121B0: .4byte 0xFFFF0000
_080121B4: .4byte 0x0000FFFF
_080121B8:
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0xd9
bgt _08012218
movs r7, #0x88
lsls r7, r7, #1
ldr r0, _08012208 @ =0x00012100
cmp r1, r0
bgt _080121CC
b _080124C8
_080121CC:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _0801220C @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08012210 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _08012214 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_08012208: .4byte 0x00012100
_0801220C: .4byte 0x00004E20
_08012210: .4byte 0xFFFF0000
_08012214: .4byte 0x0000FFFF
_08012218:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _08012260 @ =0x00027100
cmp r1, r0
bgt _08012224
b _080124C8
_08012224:
mov r0, sb
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _08012264 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08012268 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, sb
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _0801226C @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_08012260: .4byte 0x00027100
_08012264: .4byte 0x00004E20
_08012268: .4byte 0xFFFF0000
_0801226C: .4byte 0x0000FFFF
_08012270:
movs r1, #0x30
ldrsh r0, [r6, r1]
ldrh r1, [r6, #0x32]
rsbs r1, r1, #0
lsls r1, r1, #0x10
asrs r1, r1, #0x10
bl ArcTan2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r0
movs r2, #0x30
ldrsh r0, [r6, r2]
adds r1, r0, #0
muls r1, r0, r1
movs r2, #0x32
ldrsh r0, [r6, r2]
adds r2, r0, #0
muls r2, r0, r2
adds r0, r2, #0
adds r1, r1, r0
ldr r0, _080122F0 @ =gMain
ldrb r0, [r0, #4]
cmp r0, #3
bhi _0801235C
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0x95
bgt _08012304
movs r7, #0x98
lsls r7, r7, #1
ldr r0, _080122F4 @ =0x00016900
cmp r1, r0
bgt _080122B6
b _080124C8
_080122B6:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _080122F8 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _080122FC @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _08012300 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_080122F0: .4byte gMain
_080122F4: .4byte 0x00016900
_080122F8: .4byte 0x00004E20
_080122FC: .4byte 0xFFFF0000
_08012300: .4byte 0x0000FFFF
_08012304:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _0801234C @ =0x00027100
cmp r1, r0
bgt _08012310
b _080124C8
_08012310:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _08012350 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08012354 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _08012358 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_0801234C: .4byte 0x00027100
_08012350: .4byte 0x00004E20
_08012354: .4byte 0xFFFF0000
_08012358: .4byte 0x0000FFFF
_0801235C:
cmp r0, #7
bne _08012418
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0xd9
bgt _080123C0
movs r7, #0x88
lsls r7, r7, #1
ldr r0, _080123B0 @ =0x00012100
cmp r1, r0
bgt _08012374
b _080124C8
_08012374:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _080123B4 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _080123B8 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _080123BC @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_080123B0: .4byte 0x00012100
_080123B4: .4byte 0x00004E20
_080123B8: .4byte 0xFFFF0000
_080123BC: .4byte 0x0000FFFF
_080123C0:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _08012408 @ =0x00027100
cmp r1, r0
bgt _080123CC
b _080124C8
_080123CC:
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _0801240C @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08012410 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _08012414 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_08012408: .4byte 0x00027100
_0801240C: .4byte 0x00004E20
_08012410: .4byte 0xFFFF0000
_08012414: .4byte 0x0000FFFF
_08012418:
movs r2, #0x12
ldrsh r0, [r6, r2]
cmp r0, #0xd9
bgt _08012474
movs r7, #0x98
lsls r7, r7, #1
ldr r0, _08012464 @ =0x00016900
cmp r1, r0
ble _080124C8
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _08012468 @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _0801246C @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _08012470 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_08012464: .4byte 0x00016900
_08012468: .4byte 0x00004E20
_0801246C: .4byte 0xFFFF0000
_08012470: .4byte 0x0000FFFF
_08012474:
movs r7, #0xc8
lsls r7, r7, #1
ldr r0, _080124B8 @ =0x00027100
cmp r1, r0
ble _080124C8
mov r0, r8
bl Cos
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r7, r0
ldr r4, _080124BC @ =0x00004E20
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _080124C0 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
mov r0, r8
bl Sin
rsbs r1, r7, #0
lsls r0, r0, #0x10
asrs r0, r0, #0x10
muls r0, r1, r0
adds r1, r4, #0
bl __divsi3
lsls r0, r0, #0x10
ldr r1, _080124C4 @ =0x0000FFFF
ands r5, r1
b _080124CE
.align 2, 0
_080124B8: .4byte 0x00027100
_080124BC: .4byte 0x00004E20
_080124C0: .4byte 0xFFFF0000
_080124C4: .4byte 0x0000FFFF
_080124C8:
ldrh r0, [r6, #0x32]
lsls r0, r0, #0x10
ldrh r5, [r6, #0x30]
_080124CE:
orrs r5, r0
lsls r1, r5, #0x10
asrs r1, r1, #0x10
ldr r0, [r6, #0x34]
adds r0, r0, r1
str r0, [r6, #0x34]
asrs r1, r5, #0x10
ldr r0, [r6, #0x38]
adds r0, r0, r1
str r0, [r6, #0x38]
b _080124E8
_080124E4:
bl sub_2AADC
_080124E8:
ldr r0, [r6, #0x28]
str r0, [r6, #0x2c]
ldr r1, [r6, #0x34]
adds r0, r1, #0
adds r0, #0x40
cmp r0, #0
bge _080124F8
adds r0, #0x7f
_080124F8:
asrs r0, r0, #7
strh r0, [r6, #0x28]
ldr r1, [r6, #0x38]
adds r0, r1, #0
adds r0, #0x40
cmp r0, #0
bge _08012508
adds r0, #0x7f
_08012508:
asrs r0, r0, #7
strh r0, [r6, #0x2a]
ldrh r0, [r6, #6]
strh r0, [r6, #8]
ldrh r1, [r6, #0xa]
adds r0, r0, r1
strh r0, [r6, #0xa]
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
thumb_func_start sub_12524
sub_12524: @ 0x08012524
push {r4, r5, r6, r7, lr}

Binary file not shown.

Binary file not shown.

View File

@ -371,7 +371,6 @@ extern void ClearSomeArray(void);
//extern ? sub_11B9C();
//extern ? sub_11C14();
//extern ? sub_11C98();
//extern ? sub_11F88();
//extern ? sub_12524();
//extern ? sub_12BF8();
//extern ? sub_1332C();

View File

@ -250,7 +250,7 @@ struct PinballGame
/*0x36C*/ u8 unk36C[0x2];
/*0x36E*/ u16 unk36E[0x2];
/*0x372*/ u8 filler372[0x11];
/*0x383*/ u8 unk383;
/*0x383*/ s8 unk383;
/*0x384*/ u8 unk384;
/*0x385*/ u8 unk385;
/*0x386*/ u8 unk386;

View File

@ -88,6 +88,7 @@ void sub_11C98(void)
if (gCurrentPinballGame->ballSpeed != 0)
{
u16 angle;
if (!gCurrentPinballGame->unk1F)
{
// Gravity is applied at different strengths, depending on fast the ball is
@ -156,3 +157,124 @@ void sub_11C98(void)
unk132c->unk8 = unk132c->unk6;
unk132c->unkA += unk132c->unk6;
}
void sub_11F88(void)
{
struct Vector16 velocity;
struct UnkPinballGame1334 *unk132c;
int xx, yy;
int squaredMagnitude;
int maxSpeed;
unk132c = gCurrentPinballGame->unk132c;
unk132c->prevPosition = unk132c->position;
if (gCurrentPinballGame->unk5A4 != 2)
{
if (!gCurrentPinballGame->unk1F && !gCurrentPinballGame->unk383)
{
// Gravity is applied at different strengths, depending on fast the ball is
// currently moving downwards.
if (unk132c->velocity.y > 150)
unk132c->velocity.y += gGravityDeltas_Light[gCurrentPinballGame->unk1E];
else if (unk132c->velocity.y > 75)
unk132c->velocity.y += gGravityDeltas_Medium[gCurrentPinballGame->unk1E];
else
unk132c->velocity.y += gGravityDeltas_Strong[gCurrentPinballGame->unk1E];
}
if (gCurrentPinballGame->ballSpeed != 0)
{
u16 angle;
angle = ArcTan2(unk132c->velocity.x, -unk132c->velocity.y);
xx = unk132c->velocity.x * unk132c->velocity.x;
yy = unk132c->velocity.y * unk132c->velocity.y;
squaredMagnitude = xx + yy;
if (gMain.selectedField <= FIELD_KECLEON)
{
if (unk132c->unk10.y < 150)
{
UPDATE_BALL_POSITION(272, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
else if (gMain.selectedField == FIELD_SPHEAL)
{
if (unk132c->unk10.y < 218)
{
UPDATE_BALL_POSITION(272, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
else
{
if (unk132c->unk10.y < 218)
{
UPDATE_BALL_POSITION(272, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
}
else
{
u16 angle;
angle = ArcTan2(unk132c->velocity.x, -unk132c->velocity.y);
xx = unk132c->velocity.x * unk132c->velocity.x;
yy = unk132c->velocity.y * unk132c->velocity.y;
squaredMagnitude = xx + yy;
if (gMain.selectedField <= FIELD_KECLEON)
{
if (unk132c->unk10.y < 150)
{
UPDATE_BALL_POSITION(304, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
else if (gMain.selectedField == FIELD_SPHEAL)
{
if (unk132c->unk10.y < 218)
{
UPDATE_BALL_POSITION(272, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
else
{
if (unk132c->unk10.y < 218)
{
UPDATE_BALL_POSITION(304, angle);
}
else
{
UPDATE_BALL_POSITION(400, angle);
}
}
}
}
else
{
sub_2AADC();
}
unk132c->unk2C = unk132c->unk28;
unk132c->unk28.x = (unk132c->position.x + 64) / 128;
unk132c->unk28.y = (unk132c->position.y + 64) / 128;
unk132c->unk8 = unk132c->unk6;
unk132c->unkA += unk132c->unk6;
}