Decomp sub_17C1C (#139)

* Updated all global values and the changes the resulting refactor.

* decomp sub_17C1C

* removed expected objects
This commit is contained in:
Smileynator 2025-07-27 21:45:20 +02:00 committed by GitHub
parent 0b936116c5
commit 605ef7de26
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 162 additions and 408 deletions

View File

@ -5914,407 +5914,7 @@ _08017628: .4byte 0x000003AB
_0801762C: .4byte 0x000003DA
_08017630: .4byte 0x000003A2
.section .text17C1C
thumb_func_start sub_17C1C
sub_17C1C: @ 0x08017C1C
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #4
adds r3, r0, #0
ldr r0, _08017CF8 @ =gCurrentPinballGame
ldr r1, [r0]
movs r2, #0xfe
lsls r2, r2, #2
adds r1, r1, r2
movs r2, #1
strb r2, [r1]
movs r1, #0
ldrsh r4, [r3, r1]
adds r1, r4, #0
mov ip, r0
cmp r4, #0
bge _08017C42
adds r1, r4, #7
_08017C42:
asrs r1, r1, #3
lsls r0, r1, #0x10
lsrs r0, r0, #0x10
ldr r2, _08017CFC @ =0xFFFF0000
mov r8, r2
ands r6, r2
orrs r6, r0
movs r0, #2
ldrsh r3, [r3, r0]
adds r0, r3, #0
cmp r3, #0
bge _08017C5C
adds r0, r3, #7
_08017C5C:
asrs r0, r0, #3
lsls r2, r0, #0x10
ldr r5, _08017D00 @ =0x0000FFFF
ands r6, r5
lsls r1, r1, #3
subs r1, r4, r1
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
mov r4, r8
ands r7, r4
orrs r7, r1
lsls r0, r0, #3
subs r0, r3, r0
lsls r0, r0, #0x10
ands r7, r5
orrs r7, r0
orrs r6, r2
asrs r4, r2, #0x10
adds r2, r4, #0
cmp r4, #0
bge _08017C88
adds r2, #0x3f
_08017C88:
asrs r2, r2, #6
mov r0, ip
ldr r0, [r0]
mov r8, r0
adds r0, #0x24
movs r3, #0
ldrsb r3, [r0, r3]
lsls r1, r2, #6
subs r1, r4, r1
lsls r1, r1, #0x10
ands r6, r5
ldr r4, _08017D04 @ =gUnknown_02031520
adds r3, r3, r2
lsls r3, r3, #2
adds r2, r4, #0
adds r2, #0x38
adds r2, r3, r2
lsls r0, r6, #0x10
asrs r0, r0, #0x10
asrs r1, r1, #0xa
adds r1, r1, r0
ldr r0, [r2]
lsls r1, r1, #1
adds r1, r1, r0
movs r0, #0
ldrsh r2, [r1, r0]
asrs r1, r7, #0x10
lsls r0, r7, #0x10
asrs r0, r0, #0x10
lsls r1, r1, #3
lsls r2, r2, #6
adds r1, r1, r2
adds r1, r1, r0
adds r4, #0x58
adds r3, r3, r4
ldr r0, [r3]
adds r0, r0, r1
ldrb r1, [r0]
lsrs r1, r1, #4
movs r0, #0x80
lsls r0, r0, #3
add r0, r8
ldrh r3, [r0]
ldr r2, _08017D08 @ =0x00000402
add r2, r8
ldrh r4, [r2]
adds r0, r1, #0
subs r0, #8
cmp r0, #4
bls _08017CEE
b _08017F18
_08017CEE:
lsls r0, r0, #2
ldr r1, _08017D0C @ =_08017D10
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08017CF8: .4byte gCurrentPinballGame
_08017CFC: .4byte 0xFFFF0000
_08017D00: .4byte 0x0000FFFF
_08017D04: .4byte gUnknown_02031520
_08017D08: .4byte 0x00000402
_08017D0C: .4byte _08017D10
_08017D10: @ jump table
.4byte _08017D24 @ case 0
.4byte _08017D74 @ case 1
.4byte _08017DBE @ case 2
.4byte _08017E9C @ case 3
.4byte _08017EEC @ case 4
_08017D24:
lsls r0, r3, #0x10
asrs r0, r0, #0x10
cmp r0, #0x72
bgt _08017D50
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x38
bgt _08017D40
mov r3, ip
ldr r0, [r3]
ldr r4, _08017D3C @ =0x0000041C
b _08017F0A
.align 2, 0
_08017D3C: .4byte 0x0000041C
_08017D40:
mov r1, ip
ldr r0, [r1]
ldr r2, _08017D4C @ =0x0000041D
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017D4C: .4byte 0x0000041D
_08017D50:
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x63
bgt _08017D64
mov r3, ip
ldr r0, [r3]
ldr r4, _08017D60 @ =0x0000041F
b _08017F0A
.align 2, 0
_08017D60: .4byte 0x0000041F
_08017D64:
mov r1, ip
ldr r0, [r1]
ldr r2, _08017D70 @ =0x0000041E
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017D70: .4byte 0x0000041E
_08017D74:
lsls r0, r3, #0x10
asrs r0, r0, #0x10
cmp r0, #0x72
bgt _08017DA0
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x45
bgt _08017D90
mov r3, ip
ldr r0, [r3]
ldr r4, _08017D8C @ =0x00000427
b _08017F0A
.align 2, 0
_08017D8C: .4byte 0x00000427
_08017D90:
mov r1, ip
ldr r0, [r1]
ldr r2, _08017D9C @ =0x00000425
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017D9C: .4byte 0x00000425
_08017DA0:
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x45
bgt _08017DB2
mov r3, ip
ldr r0, [r3]
movs r4, #0x85
lsls r4, r4, #3
b _08017F0A
_08017DB2:
mov r1, ip
ldr r0, [r1]
movs r2, #0x84
lsls r2, r2, #3
adds r1, r0, r2
b _08017F0C
_08017DBE:
mov r3, ip
ldr r0, [r3]
movs r4, #0xfe
lsls r4, r4, #2
adds r0, r0, r4
movs r1, #0
strb r1, [r0]
ldr r2, [r3]
ldr r1, _08017E10 @ =0x00000412
adds r0, r2, r1
movs r3, #0
ldrsh r0, [r0, r3]
cmp r0, #0
bne _08017E18
adds r4, #8
adds r0, r2, r4
ldr r1, [r0]
ldr r3, _08017E14 @ =0x00000434
adds r0, r2, r3
ldr r0, [r0]
cmp r1, r0
bne _08017DEC
b _08017F18
_08017DEC:
adds r4, #0x2e
adds r1, r2, r4
movs r0, #0x11
strb r0, [r1]
mov r0, ip
ldr r1, [r0]
movs r2, #0x80
lsls r2, r2, #3
adds r0, r1, r2
ldrh r2, [r0]
adds r0, r1, r3
strh r2, [r0]
subs r3, #0x32
adds r0, r1, r3
ldrh r0, [r0]
adds r4, #8
b _08017E90
.align 2, 0
_08017E10: .4byte 0x00000412
_08017E14: .4byte 0x00000434
_08017E18:
cmp r0, #8
bne _08017E58
movs r1, #0x80
lsls r1, r1, #3
adds r0, r2, r1
ldr r1, [r0]
movs r3, #0x87
lsls r3, r3, #3
adds r0, r2, r3
ldr r0, [r0]
cmp r1, r0
beq _08017F18
ldr r4, _08017E54 @ =0x0000042F
adds r1, r2, r4
movs r0, #0x11
strb r0, [r1]
mov r0, ip
ldr r1, [r0]
movs r2, #0x80
lsls r2, r2, #3
adds r0, r1, r2
ldrh r2, [r0]
adds r0, r1, r3
strh r2, [r0]
subs r3, #0x36
adds r0, r1, r3
ldrh r0, [r0]
adds r4, #0xb
b _08017E90
.align 2, 0
_08017E54: .4byte 0x0000042F
_08017E58:
cmp r0, #0x10
bne _08017F18
movs r1, #0x80
lsls r1, r1, #3
adds r0, r2, r1
ldr r1, [r0]
ldr r3, _08017E98 @ =0x0000043C
adds r0, r2, r3
ldr r0, [r0]
cmp r1, r0
beq _08017F18
movs r4, #0x86
lsls r4, r4, #3
adds r1, r2, r4
movs r0, #0x11
strb r0, [r1]
mov r0, ip
ldr r1, [r0]
movs r2, #0x80
lsls r2, r2, #3
adds r0, r1, r2
ldrh r2, [r0]
adds r0, r1, r3
strh r2, [r0]
subs r3, #0x3a
adds r0, r1, r3
ldrh r0, [r0]
adds r4, #0xe
_08017E90:
adds r1, r1, r4
strh r0, [r1]
b _08017F18
.align 2, 0
_08017E98: .4byte 0x0000043C
_08017E9C:
lsls r0, r3, #0x10
asrs r0, r0, #0x10
cmp r0, #0x72
bgt _08017EC8
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x45
bgt _08017EBC
mov r1, ip
ldr r0, [r1]
ldr r2, _08017EB8 @ =0x00000429
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017EB8: .4byte 0x00000429
_08017EBC:
mov r3, ip
ldr r0, [r3]
ldr r4, _08017EC4 @ =0x00000422
b _08017F0A
.align 2, 0
_08017EC4: .4byte 0x00000422
_08017EC8:
lsls r0, r4, #0x10
asrs r0, r0, #0x10
cmp r0, #0x45
bgt _08017EE0
mov r1, ip
ldr r0, [r1]
ldr r2, _08017EDC @ =0x00000426
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017EDC: .4byte 0x00000426
_08017EE0:
mov r3, ip
ldr r0, [r3]
ldr r4, _08017EE8 @ =0x00000421
b _08017F0A
.align 2, 0
_08017EE8: .4byte 0x00000421
_08017EEC:
lsls r0, r3, #0x10
asrs r0, r0, #0x10
cmp r0, #0x72
bgt _08017F04
mov r1, ip
ldr r0, [r1]
ldr r2, _08017F00 @ =0x00000424
adds r1, r0, r2
b _08017F0C
.align 2, 0
_08017F00: .4byte 0x00000424
_08017F04:
mov r3, ip
ldr r0, [r3]
ldr r4, _08017F24 @ =0x00000423
_08017F0A:
adds r1, r0, r4
_08017F0C:
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
bgt _08017F18
movs r0, #0x18
strb r0, [r1]
_08017F18:
add sp, #4
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08017F24: .4byte 0x00000423
.section .text17F28
thumb_func_start sub_17F28
sub_17F28: @ 0x08017F28

Binary file not shown.

Binary file not shown.

View File

@ -393,8 +393,7 @@ struct PinballGame
/*0x3FA*/ s16 unk3FA;
/*0x3FC*/ s16 unk3FC;
/*0x3FE*/ u8 filler3FE[0x2];
/*0x400*/ s16 unk400;
/*0x402*/ s16 unk402;
/*0x400*/ struct Vector16 unk400;
/*0x404*/ s8 unk404;
/*0x405*/ u8 unk405;
/*0x406*/ s8 unk406;
@ -410,7 +409,11 @@ struct PinballGame
/*0x41C*/ s8 unk41C[4];
/*0x420*/ s8 unk420[10];
/*0x42A*/ u8 unk42A[7];
/*0x431*/ u8 filler431[0x21];
/*0x431*/ u8 filler431[0x3];
/*0x434*/ struct Vector16 unk434;
/*0x438*/ struct Vector16 unk438;
/*0x43C*/ struct Vector16 unk43C;
/*0x440*/ u8 filler440[0x12];
/*0x452*/ u16 unk452;
/*0x454*/ u8 filler454[0xD8];
/*0x52C*/ s8 unk52C;

View File

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

View File

@ -286,4 +286,155 @@ void sub_179D0(u8 arg0, u16 *arg1, u16 *arg2)
}
break;
}
}
void sub_17C1C(struct Vector16 *arg0)
{
struct Vector16 vec1;
struct Vector16 vec2;
s16 x, y;
u16 sp00;
u8 sp02;
s16 unk0;
s32 unk1;
s32 unk2;
u32 some_enum;
gCurrentPinballGame->unk3F8 = 1;
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.unk14.unk38[unk2 + unk1][vec1.y * 64 + vec1.x];
sp00 = gUnknown_02031520.unk14.unk48[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x];
sp02 = gUnknown_02031520.unk14.unk58[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x];
some_enum = (sp02 >> 2) >> 2;
x = gCurrentPinballGame->unk400.x;
y = gCurrentPinballGame->unk400.y;
switch (some_enum)
{
case 8:
if (x <= 0x72)
{
if (y <= 0x38)
{
if (gCurrentPinballGame->unk41C[0] <= 0)
gCurrentPinballGame->unk41C[0] = 0x18;
}
else
{
if (gCurrentPinballGame->unk41C[1] <= 0)
gCurrentPinballGame->unk41C[1] = 0x18;
}
}
else if (y <= 0x63)
{
if (gCurrentPinballGame->unk41C[3] <= 0)
gCurrentPinballGame->unk41C[3] = 0x18;
}
else
{
if (gCurrentPinballGame->unk41C[2] <= 0)
gCurrentPinballGame->unk41C[2] = 0x18;
}
break;
case 9:
if (x <= 0x72)
{
if (y <= 0x45)
{
if (gCurrentPinballGame->unk420[7] <= 0)
gCurrentPinballGame->unk420[7] = 0x18;
}
else
{
if (gCurrentPinballGame->unk420[5] <= 0)
gCurrentPinballGame->unk420[5] = 0x18;
}
}
else if (y <= 0x45)
{
if (gCurrentPinballGame->unk420[8] <= 0)
gCurrentPinballGame->unk420[8] = 0x18;
}
else
{
if (gCurrentPinballGame->unk420[0] <= 0)
gCurrentPinballGame->unk420[0] = 0x18;
}
break;
case 10:
gCurrentPinballGame->unk3F8 = 0;
if (gCurrentPinballGame->unk412 == 0)
{
if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk434.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk434.y)
{
gCurrentPinballGame->unk42A[4] = 0x11;
gCurrentPinballGame->unk434.x = gCurrentPinballGame->unk400.x;
gCurrentPinballGame->unk434.y = gCurrentPinballGame->unk400.y;
}
}
else if (gCurrentPinballGame->unk412 == 8)
{
if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk438.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk438.y)
{
gCurrentPinballGame->unk42A[5] = 0x11;
gCurrentPinballGame->unk438.x = gCurrentPinballGame->unk400.x;
gCurrentPinballGame->unk438.y = gCurrentPinballGame->unk400.y;
}
}
else if (gCurrentPinballGame->unk412 == 16)
{
if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk43C.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk43C.y)
{
gCurrentPinballGame->unk42A[6] = 0x11;
gCurrentPinballGame->unk43C.x = gCurrentPinballGame->unk400.x;
gCurrentPinballGame->unk43C.y = gCurrentPinballGame->unk400.y;
}
}
break;
case 11:
if (x <= 0x72)
{
if (y <= 0x45)
{
if (gCurrentPinballGame->unk420[9] <= 0)
gCurrentPinballGame->unk420[9] = 0x18;
}
else
{
if (gCurrentPinballGame->unk420[2] <= 0)
gCurrentPinballGame->unk420[2] = 0x18;
}
}
else if (y <= 0x45)
{
if (gCurrentPinballGame->unk420[6] <= 0)
gCurrentPinballGame->unk420[6] = 0x18;
}
else
{
if (gCurrentPinballGame->unk420[1] <= 0)
gCurrentPinballGame->unk420[1] = 0x18;
}
break;
case 12:
if (x <= 0x72)
{
if (gCurrentPinballGame->unk420[4] <= 0)
gCurrentPinballGame->unk420[4] = 0x18;
}
else
{
if (gCurrentPinballGame->unk420[3] <= 0)
gCurrentPinballGame->unk420[3] = 0x18;
}
break;
}
}

View File

@ -183,7 +183,7 @@ void sub_35860(void)
gCurrentPinballGame->unk42A[i] = 0;
gCurrentPinballGame->unk1A = 0;
gCurrentPinballGame->unk402 = gCurrentPinballGame->unk3EA / 10 + 58;
gCurrentPinballGame->unk400.y = gCurrentPinballGame->unk3EA / 10 + 58;
sub_38218();
gCurrentPinballGame->unk387 = 1;
sub_35D54();
@ -892,8 +892,8 @@ void sub_36CB4(void)
gCurrentPinballGame->unk387 = 1;
}
gCurrentPinballGame->unk400 = (gCurrentPinballGame->unk3E8 / 10) + 120;
gCurrentPinballGame->unk402 = (gCurrentPinballGame->unk3EA / 10) + 58;
gCurrentPinballGame->unk400.x = (gCurrentPinballGame->unk3E8 / 10) + 120;
gCurrentPinballGame->unk400.y = (gCurrentPinballGame->unk3EA / 10) + 58;
if (gCurrentPinballGame->unk40E > 7)
gCurrentPinballGame->unk3F7 = 1;
else if (gCurrentPinballGame->unk3FA > 15)