Decompile sub_176B0 (#131)
Some checks failed
CI / build (push) Has been cancelled

* Decompile sub_176B0

* removed exp object
This commit is contained in:
Smileynator 2025-07-06 17:31:13 +02:00 committed by GitHub
parent a1ddcdc356
commit 32cd26024c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 77 additions and 245 deletions

View File

@ -6264,243 +6264,7 @@ _08017628: .4byte 0x000003AB
_0801762C: .4byte 0x000003DA
_08017630: .4byte 0x000003A2
.section .text176B0
thumb_func_start sub_176B0
sub_176B0: @ 0x080176B0
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov r8, r0
mov sl, r1
add r2, sp, #4
movs r1, #0
strh r1, [r2]
ldr r0, _080177B0 @ =gCurrentPinballGame
ldr r0, [r0]
mov sb, r0
ldr r0, _080177B4 @ =0x0000132C
add r0, sb
ldr r0, [r0]
strh r1, [r0, #4]
mov r0, r8
movs r1, #0
ldrsh r4, [r0, r1]
adds r0, r4, #0
cmp r4, #0
bge _080176E2
adds r0, r4, #7
_080176E2:
asrs r1, r0, #3
lsls r0, r1, #0x10
lsrs r0, r0, #0x10
ldr r2, _080177B8 @ =0xFFFF0000
mov ip, r2
ands r5, r2
orrs r5, r0
mov r0, r8
movs r2, #2
ldrsh r3, [r0, r2]
adds r0, r3, #0
cmp r3, #0
bge _080176FE
adds r0, r3, #7
_080176FE:
asrs r0, r0, #3
lsls r2, r0, #0x10
ldr r7, _080177BC @ =0x0000FFFF
ands r5, r7
lsls r1, r1, #3
subs r1, r4, r1
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
mov r4, ip
ands r6, r4
orrs r6, r1
lsls r0, r0, #3
subs r0, r3, r0
lsls r0, r0, #0x10
ands r6, r7
orrs r6, r0
orrs r5, r2
asrs r4, r2, #0x10
adds r2, r4, #0
cmp r4, #0
bge _0801772A
adds r2, #0x3f
_0801772A:
asrs r2, r2, #6
mov r0, sb
adds r0, #0x24
movs r3, #0
ldrsb r3, [r0, r3]
lsls r1, r2, #6
subs r1, r4, r1
lsls r1, r1, #0x10
ands r5, r7
ldr r0, _080177C0 @ =gUnknown_02031520
mov ip, r0
adds r3, r3, r2
lsls r3, r3, #2
mov r2, ip
adds r2, #0x38
adds r2, r3, r2
lsls r0, r5, #0x10
asrs r0, r0, #0x10
asrs r1, r1, #0xa
adds r1, r1, r0
ldr r0, [r2]
lsls r1, r1, #1
adds r1, r1, r0
mov r4, ip
adds r4, #0x48
adds r4, r3, r4
movs r0, #0
ldrsh r2, [r1, r0]
asrs r1, r6, #0x10
lsls r0, r6, #0x10
asrs r0, r0, #0x10
lsls r1, r1, #3
lsls r2, r2, #6
adds r1, r1, r2
adds r1, r1, r0
ldr r2, [r4]
lsls r0, r1, #1
adds r0, r0, r2
ldrh r2, [r0]
mov r0, sp
strh r2, [r0]
mov r0, ip
adds r0, #0x58
adds r3, r3, r0
ldr r0, [r3]
adds r0, r0, r1
ldrb r0, [r0]
mov r4, sp
adds r4, #2
strb r0, [r4]
mov r0, r8
mov r1, sp
adds r2, r4, #0
bl sub_17898
ldrb r0, [r4]
movs r3, #0xf
ands r3, r0
lsrs r5, r0, #4
subs r0, r3, #1
cmp r0, #5
bhi _08017876
lsls r0, r0, #2
ldr r1, _080177C4 @ =_080177C8
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080177B0: .4byte gCurrentPinballGame
_080177B4: .4byte 0x0000132C
_080177B8: .4byte 0xFFFF0000
_080177BC: .4byte 0x0000FFFF
_080177C0: .4byte gUnknown_02031520
_080177C4: .4byte _080177C8
_080177C8: @ jump table
.4byte _080177E0 @ case 0
.4byte _08017804 @ case 1
.4byte _08017804 @ case 2
.4byte _080177E0 @ case 3
.4byte _08017874 @ case 4
.4byte _080177E0 @ case 5
_080177E0:
ldr r2, _08017800 @ =gCurrentPinballGame
ldr r0, [r2]
subs r1, r3, #1
adds r0, #0x23
strb r1, [r0]
ldr r0, [r2]
adds r0, #0x22
movs r1, #1
strb r1, [r0]
mov r0, sp
ldrh r0, [r0]
mov r2, sl
strh r0, [r2]
mov r4, sp
strh r1, [r4, #4]
b _08017876
.align 2, 0
_08017800: .4byte gCurrentPinballGame
_08017804:
ldr r2, _0801785C @ =gCurrentPinballGame
ldr r0, [r2]
adds r0, #0x23
movs r1, #0
strb r1, [r0]
ldr r0, [r2]
adds r0, #0x22
movs r3, #1
strb r3, [r0]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08017860 @ =0x0000FFF0
ands r0, r1
mov r1, sl
strh r0, [r1]
mov r4, sp
strh r3, [r4, #4]
ldr r1, [r2]
ldr r0, _08017864 @ =0x00000404
adds r3, r1, r0
movs r0, #0
ldrsb r0, [r3, r0]
adds r4, r2, #0
cmp r0, #0
bne _0801784E
ldr r2, _08017868 @ =0x00000406
adds r0, r1, r2
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #0
bne _0801784E
movs r0, #1
strb r0, [r3]
ldr r0, [r4]
ldr r1, _0801786C @ =0x0000040A
adds r0, r0, r1
strh r2, [r0]
_0801784E:
ldr r0, [r4]
ldr r2, _08017870 @ =0x0000040C
adds r0, r0, r2
movs r1, #0x28
strh r1, [r0]
b _08017876
.align 2, 0
_0801785C: .4byte gCurrentPinballGame
_08017860: .4byte 0x0000FFF0
_08017864: .4byte 0x00000404
_08017868: .4byte 0x00000406
_0801786C: .4byte 0x0000040A
_08017870: .4byte 0x0000040C
_08017874:
movs r5, #4
_08017876:
adds r0, r5, #0
add r1, sp, #4
mov r2, sl
bl sub_179D0
mov r4, sp
movs r1, #4
ldrsh r0, [r4, r1]
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.section .text17898
thumb_func_start sub_17898
sub_17898: @ 0x08017898

Binary file not shown.

View File

@ -394,8 +394,8 @@ extern void sub_1493C(void);
//extern ? sub_173FC();
extern void sub_17634(u8);
//extern ? sub_176B0();
//extern ? sub_17898();
//extern ? sub_179D0();
extern void sub_17898(struct Vector16 *, u16 *, u8 *);
extern void sub_179D0(u8, u16 *, u16 *);
//extern ? sub_17C1C();
//extern ? sub_17F28();
//extern ? sub_18180();

View File

@ -369,9 +369,9 @@ struct PinballGame
/*0x3FE*/ u8 filler3FE[0x2];
/*0x400*/ s16 unk400;
/*0x402*/ s16 unk402;
/*0x404*/ u8 unk404;
/*0x404*/ s8 unk404;
/*0x405*/ u8 unk405;
/*0x406*/ u8 unk406;
/*0x406*/ s8 unk406;
/*0x407*/ u8 filler407[0x1];
/*0x408*/ s16 unk408;
/*0x40A*/ s16 unk40A;

View File

@ -48,7 +48,7 @@ SECTIONS
src/rom_13D24.o(.text);
asm/rom_11B9C.o(.text14488);
src/rom_17634.o(.text);
asm/rom_11B9C.o(.text176B0);
asm/rom_11B9C.o(.text17898);
src/rom_18784.o(.text);
src/rom_19B64.o(.text);
src/rom_19D04.o(.text);

View File

@ -1,8 +1,8 @@
#include "global.h"
void sub_17634(u8 param)
void sub_17634(u8 arg0)
{
switch (param)
switch (arg0)
{
case 1:
case 2:
@ -26,4 +26,72 @@ void sub_17634(u8 param)
case 15:
break;
}
}
}
s16 sub_176B0(struct Vector16 *arg0, u16 *arg1)
{
struct Vector16 vec1;
struct Vector16 vec2;
u16 sp00;
u8 sp02;
u16 return_val;
s16 unk0;
s32 unk1;
s32 unk2;
u32 some_enum;
u32 switch_enum;
return_val = 0;
gCurrentPinballGame->ball->unk4 = 0;
vec1.x = arg0->x / 8;
vec1.y = arg0->y / 8;
vec2.x = arg0->x % 8;
vec2.y = arg0->y % 8;
unk1 = vec1.y / 64;
unk2 = gCurrentPinballGame->unk24;
vec1.y %= 64;
unk0 = gUnknown_02031520.unk38[unk2 + unk1][vec1.y * 64 + vec1.x];
sp00 = gUnknown_02031520.unk48[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x];
sp02 = gUnknown_02031520.unk58[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x];
sub_17898(arg0, &sp00, &sp02);
switch_enum = sp02 & 0xF;
some_enum = sp02 >> 4;
switch (switch_enum)
{
case 1:
case 4:
case 6:
gCurrentPinballGame->unk23 = switch_enum - 1;
gCurrentPinballGame->unk22 = 1;
*arg1 = sp00;
return_val = 1;
break;
case 2:
case 3:
gCurrentPinballGame->unk23 = 0;
gCurrentPinballGame->unk22 = 1;
*arg1 = sp00 & 0x0000FFF0;
return_val = 1;
if (gCurrentPinballGame->unk404 == 0)
{
s32 unk3 = gCurrentPinballGame->unk406;
if (unk3 == 0)
{
gCurrentPinballGame->unk404 = 1;
gCurrentPinballGame->unk40A = unk3;
}
}
gCurrentPinballGame->unk40C = 40;
break;
case 5:
some_enum = 4;
break;
}
sub_179D0(some_enum, &return_val, arg1);
return return_val;
}