decomp sub_173FC and 171C8 (#169)

This commit is contained in:
Retnuhytnuob 2025-09-01 19:28:05 -05:00 committed by GitHub
parent 2ce6570915
commit 7e0d797380
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 204 additions and 571 deletions

View File

@ -2175,569 +2175,3 @@ _080171B8:
bx r0
.align 2, 0
_080171C4: .4byte 0x00000306
thumb_func_start COLLISION_CHECK_DUSCLOPS_171C8
COLLISION_CHECK_DUSCLOPS_171C8: @ 0x080171C8
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov sb, r0
mov r8, r1
add r2, sp, #4
movs r1, #0
strh r1, [r2]
ldr r0, _080172CC @ =gCurrentPinballGame
ldr r0, [r0]
mov sl, r0
ldr r0, _080172D0 @ =0x0000132C
add r0, sl
ldr r0, [r0]
strh r1, [r0, #4]
mov r0, sb
movs r1, #0
ldrsh r4, [r0, r1]
adds r0, r4, #0
cmp r4, #0
bge _080171FA
adds r0, r4, #7
_080171FA:
asrs r1, r0, #3
lsls r0, r1, #0x10
lsrs r0, r0, #0x10
ldr r2, _080172D4 @ =0xFFFF0000
mov ip, r2
ands r5, r2
orrs r5, r0
mov r7, sb
movs r0, #2
ldrsh r3, [r7, r0]
adds r0, r3, #0
cmp r3, #0
bge _08017216
adds r0, r3, #7
_08017216:
asrs r0, r0, #3
lsls r2, r0, #0x10
ldr r7, _080172D8 @ =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 _08017242
adds r2, #0x3f
_08017242:
asrs r2, r2, #6
mov r0, sl
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 r7, _080172DC @ =gUnknown_02031520
mov ip, r7
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, sb
mov r1, sp
adds r2, r4, #0
bl sub_173FC
ldrb r0, [r4]
movs r3, #0xf
ands r3, r0
lsrs r6, r0, #4
subs r0, r3, #1
cmp r0, #5
bls _080172C0
b _080173DA
_080172C0:
lsls r0, r0, #2
ldr r1, _080172E0 @ =_080172E4
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080172CC: .4byte gCurrentPinballGame
_080172D0: .4byte 0x0000132C
_080172D4: .4byte 0xFFFF0000
_080172D8: .4byte 0x0000FFFF
_080172DC: .4byte gUnknown_02031520
_080172E0: .4byte _080172E4
_080172E4: @ jump table
.4byte _080172FC @ case 0
.4byte _080173A8 @ case 1
.4byte _080173A8 @ case 2
.4byte _080172FC @ case 3
.4byte _080173D8 @ case 4
.4byte _080172FC @ case 5
_080172FC:
ldr r2, _08017374 @ =gCurrentPinballGame
ldr r0, [r2]
subs r1, r3, #1
adds r0, #0x23
strb r1, [r0]
ldr r0, [r2]
adds r0, #0x22
movs r5, #1
strb r5, [r0]
mov r0, sp
ldrh r0, [r0]
mov r1, r8
strh r0, [r1]
ldr r4, _08017378 @ =0xFFFFC010
adds r0, r0, r4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x20
bhi _0801739C
ldr r0, [r2]
ldr r7, _0801737C @ =0x0000132C
adds r3, r0, r7
ldr r2, [r3]
movs r0, #0x10
ldrsh r1, [r2, r0]
ldr r4, _08017380 @ =gUnknown_02031520
movs r7, #0x26
ldrsh r0, [r4, r7]
subs r0, #8
cmp r1, r0
blt _08017348
movs r0, #0x12
ldrsh r1, [r2, r0]
movs r7, #0x28
ldrsh r0, [r4, r7]
subs r0, #8
cmp r1, r0
bge _0801739C
_08017348:
movs r1, #6
ldrsh r0, [r2, r1]
cmp r0, #0
bgt _08017366
cmp r0, #0
bne _08017392
ldr r0, _08017384 @ =gMain
ldr r0, [r0, #0x4c]
ands r0, r5
cmp r0, #0
beq _08017388
movs r0, #0x28
strh r0, [r2, #4]
ldr r0, [r3]
strh r5, [r0, #6]
_08017366:
movs r2, #0xf8
lsls r2, r2, #6
adds r0, r2, #0
mov r4, r8
strh r0, [r4]
b _0801739C
.align 2, 0
_08017374: .4byte gCurrentPinballGame
_08017378: .4byte 0xFFFFC010
_0801737C: .4byte 0x0000132C
_08017380: .4byte gUnknown_02031520
_08017384: .4byte gMain
_08017388:
ldr r0, _080173A4 @ =0x0000FFD8
strh r0, [r2, #4]
ldr r1, [r3]
adds r0, #0x27
strh r0, [r1, #6]
_08017392:
movs r7, #0x82
lsls r7, r7, #7
adds r0, r7, #0
mov r1, r8
strh r0, [r1]
_0801739C:
movs r0, #1
mov r2, sp
strh r0, [r2, #4]
b _080173DA
.align 2, 0
_080173A4: .4byte 0x0000FFD8
_080173A8:
ldr r2, _080173D0 @ =gCurrentPinballGame
ldr r0, [r2]
subs r1, r3, #1
adds r0, #0x23
strb r1, [r0]
ldr r0, [r2]
adds r0, #0x22
movs r1, #2
strb r1, [r0]
mov r0, sp
ldrh r1, [r0]
ldr r0, _080173D4 @ =0x0000FFF0
ands r0, r1
mov r4, r8
strh r0, [r4]
movs r0, #1
mov r7, sp
strh r0, [r7, #4]
b _080173DA
.align 2, 0
_080173D0: .4byte gCurrentPinballGame
_080173D4: .4byte 0x0000FFF0
_080173D8:
movs r6, #4
_080173DA:
adds r0, r6, #0
add r1, sp, #4
mov r2, r8
bl sub_17634
mov r1, sp
movs r2, #4
ldrsh r0, [r1, r2]
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
thumb_func_start sub_173FC
sub_173FC: @ 0x080173FC
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r6, r0, #0
mov sb, r1
mov ip, r2
movs r7, #0
movs r3, #0
ldr r1, _08017494 @ =gCurrentPinballGame
ldr r5, [r1]
ldr r2, _08017498 @ =0x00000387
adds r0, r5, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
mov r8, r1
cmp r0, #2
bne _080174C0
mov r1, ip
ldrb r0, [r1]
cmp r0, #0
beq _0801742C
b _080175FE
_0801742C:
adds r2, #0x69
adds r0, r5, r2
ldrh r2, [r6]
ldrh r0, [r0]
subs r2, r2, r0
ldr r0, _0801749C @ =0x000003F2
adds r1, r5, r0
ldrh r0, [r6, #2]
ldrh r1, [r1]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r1, r0, #0x10
lsls r3, r2, #0x10
lsrs r0, r3, #0x10
cmp r0, #0x5f
bls _0801744E
b _080175FE
_0801744E:
lsls r1, r1, #0x10
lsrs r0, r1, #0x10
cmp r0, #0x77
bls _08017458
b _080175FE
_08017458:
ldr r2, _080174A0 @ =gUnknown_083071D4
asrs r1, r1, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #5
asrs r1, r3, #0x10
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldr r7, _080174A4 @ =0x0000FFF0
ands r7, r0
movs r3, #0xf
ands r3, r0
cmp r3, #0
bne _0801747A
b _080175FE
_0801747A:
movs r1, #0xf7
lsls r1, r1, #2
adds r0, r5, r1
ldrb r0, [r0]
subs r0, #3
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #1
bhi _080174A8
movs r0, #1
mov r2, ip
strb r0, [r2]
b _080174AC
.align 2, 0
_08017494: .4byte gCurrentPinballGame
_08017498: .4byte 0x00000387
_0801749C: .4byte 0x000003F2
_080174A0: .4byte gUnknown_083071D4
_080174A4: .4byte 0x0000FFF0
_080174A8:
mov r0, ip
strb r3, [r0]
_080174AC:
mov r1, r8
ldr r0, [r1]
movs r2, #0xf7
lsls r2, r2, #2
adds r0, r0, r2
movs r1, #4
strb r1, [r0]
mov r0, sb
strh r7, [r0]
b _080175FE
_080174C0:
cmp r0, #1
beq _080174C6
b _080175FE
_080174C6:
mov r1, ip
ldrb r0, [r1]
cmp r0, #0
beq _080174D0
b _080175FE
_080174D0:
ldr r2, _0801760C @ =0x000003A9
adds r0, r5, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0801752C
movs r1, #0xf4
lsls r1, r1, #2
adds r0, r5, r1
ldrh r2, [r6]
ldrh r0, [r0]
subs r2, r2, r0
ldr r0, _08017610 @ =0x000003D2
adds r1, r5, r0
ldrh r0, [r6, #2]
ldrh r1, [r1]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r1, r0, #0x10
lsls r4, r2, #0x10
lsrs r0, r4, #0x10
cmp r0, #0x3f
bhi _0801752C
lsls r1, r1, #0x10
lsrs r0, r1, #0x10
cmp r0, #0x3f
bhi _0801752C
ldr r2, _08017614 @ =gUnknown_08252B10
asrs r0, r1, #0xa
asrs r1, r4, #0x10
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldr r7, _08017618 @ =0x0000FFF0
ands r7, r0
movs r3, #0xf
ands r3, r0
cmp r3, #0
beq _08017530
movs r2, #0xe8
lsls r2, r2, #2
adds r1, r5, r2
movs r0, #4
strb r0, [r1]
_0801752C:
cmp r3, #0
bne _080175F4
_08017530:
mov r0, r8
ldr r5, [r0]
ldr r1, _0801761C @ =0x000003AA
adds r0, r5, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0801758E
movs r2, #0xf5
lsls r2, r2, #2
adds r0, r5, r2
ldrh r2, [r6]
ldrh r0, [r0]
subs r2, r2, r0
ldr r0, _08017620 @ =0x000003D6
adds r1, r5, r0
ldrh r0, [r6, #2]
ldrh r1, [r1]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r1, r0, #0x10
lsls r4, r2, #0x10
lsrs r0, r4, #0x10
cmp r0, #0x3f
bhi _0801758E
lsls r1, r1, #0x10
lsrs r0, r1, #0x10
cmp r0, #0x3f
bhi _0801758E
ldr r2, _08017614 @ =gUnknown_08252B10
asrs r0, r1, #0xa
asrs r1, r4, #0x10
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldr r7, _08017618 @ =0x0000FFF0
ands r7, r0
movs r3, #0xf
ands r3, r0
cmp r3, #0
beq _08017592
ldr r2, _08017624 @ =0x000003A1
adds r1, r5, r2
movs r0, #4
strb r0, [r1]
_0801758E:
cmp r3, #0
bne _080175F4
_08017592:
mov r0, r8
ldr r5, [r0]
ldr r1, _08017628 @ =0x000003AB
adds r0, r5, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _080175F0
movs r2, #0xf6
lsls r2, r2, #2
adds r0, r5, r2
ldrh r2, [r6]
ldrh r0, [r0]
subs r2, r2, r0
ldr r0, _0801762C @ =0x000003DA
adds r1, r5, r0
ldrh r0, [r6, #2]
ldrh r1, [r1]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r1, r0, #0x10
lsls r4, r2, #0x10
lsrs r0, r4, #0x10
cmp r0, #0x3f
bhi _080175F0
lsls r1, r1, #0x10
lsrs r0, r1, #0x10
cmp r0, #0x3f
bhi _080175F0
ldr r2, _08017614 @ =gUnknown_08252B10
asrs r0, r1, #0xa
asrs r1, r4, #0x10
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldr r7, _08017618 @ =0x0000FFF0
ands r7, r0
movs r3, #0xf
ands r3, r0
cmp r3, #0
beq _080175FE
ldr r2, _08017630 @ =0x000003A2
adds r1, r5, r2
movs r0, #4
strb r0, [r1]
_080175F0:
cmp r3, #0
beq _080175FE
_080175F4:
mov r0, sb
strh r7, [r0]
movs r0, #6
mov r1, ip
strb r0, [r1]
_080175FE:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0801760C: .4byte 0x000003A9
_08017610: .4byte 0x000003D2
_08017614: .4byte gUnknown_08252B10
_08017618: .4byte 0x0000FFF0
_0801761C: .4byte 0x000003AA
_08017620: .4byte 0x000003D6
_08017624: .4byte 0x000003A1
_08017628: .4byte 0x000003AB
_0801762C: .4byte 0x000003DA
_08017630: .4byte 0x000003A2

Binary file not shown.

Binary file not shown.

View File

@ -391,8 +391,8 @@ void sub_153CC(s32, s16*, u16*);
//extern ? sub_162B8();
//extern ? sub_1642C();
//extern ? COLLISION_CHECK_DUSCLOPS_171C8();
//extern ? sub_173FC();
extern void sub_17634(u8);
void sub_173FC(struct Vector16 *arg0, s16* arg1, u8* arg2);
extern void sub_17634(u8, u16*, u16*);
//extern ? COLLISION_CHECK_KECLEON_176B0();
extern void sub_17898(struct Vector16 *, u16 *, u8 *);
extern void sub_179D0(u8, u16 *, u16 *);

View File

@ -503,7 +503,7 @@ struct PinballGame
/*0x3A0*/ s8 unk3A0[3];
/*0x3A3*/ s8 unk3A3[3];
/*0x3A6*/ s8 unk3A6[3];
/*0x3A9*/ u8 unk3A9[3];
/*0x3A9*/ s8 unk3A9[3];
/*0x3AC*/ s8 unk3AC[3];
/*0x3B0*/ u16 unk3B0[3];
/*0x3B6*/ u16 unk3B6[3];
@ -962,4 +962,7 @@ extern u8 gUnknown_081B4784[];
extern const u16 gUnknown_086AD000[][4];
extern u32 gUnknown_086AD50C[];
extern const u16 gUnknown_08252B10[];
extern const u16 gUnknown_083071D4[];
#endif // GUARD_GLOBAL_H

View File

@ -3,7 +3,6 @@
#include "m4a.h"
#include "constants/bg_music.h"
extern const u16 gUnknown_08252B10[];
extern const u16 gUnknown_08254B10[];
extern const u16 gUnknown_08257390[];
extern const u16 gUnknown_08259C10[];

View File

@ -1,7 +1,204 @@
#include "global.h"
#include "main.h"
void sub_17634(u8 arg0)
s16 COLLISION_CHECK_DUSCLOPS_171C8(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.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];
sub_173FC(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;
if (*arg1 >= 0x3FF0 && *arg1 <= 0x4010)
{
if (gCurrentPinballGame->ball->positionQ0.x < gUnknown_02031520.unk14.unk26 - 8 ||
gCurrentPinballGame->ball->positionQ0.y < gUnknown_02031520.unk14.unk28 - 8)
{
if (gCurrentPinballGame->ball->unk6 > 0)
{
*arg1 = 0x3E00;
}
else if (gCurrentPinballGame->ball->unk6 != 0)
{
*arg1 = 0x4100;
}
else
{
if (gMain.systemFrameCount & 1)
{
gCurrentPinballGame->ball->unk4 = 0x28;
gCurrentPinballGame->ball->unk6 = 1;
*arg1 = 0x3E00;
}
else
{
gCurrentPinballGame->ball->unk4 = 0xFFD8;
gCurrentPinballGame->ball->unk6 = 0xFFFF;
*arg1 = 0x4100;
}
}
}
}
return_val = 1;
break;
case 2:
case 3:
gCurrentPinballGame->unk23 = switch_enum - 1;
gCurrentPinballGame->unk22 = 2;
*arg1 = sp00 & 0x0000FFF0;
return_val = 1;
break;
case 5:
some_enum = 4;
break;
}
sub_17634(some_enum, &return_val, arg1);
return return_val;
}
void sub_173FC(struct Vector16 *arg0, s16* arg1, u8* arg2) {
s16 deltaX;
s16 deltaY;
u16 maskedResult;
u8 lowerNibble;
u8 temp;
maskedResult = 0;
lowerNibble = 0;
if(gCurrentPinballGame->unk387 == 2)
{
if (*arg2 != 0)
return;
deltaX = arg0->x -gCurrentPinballGame->unk3F0;
deltaY = arg0->y -gCurrentPinballGame->unk3F2;
if (deltaX > 95U || deltaY > 119U)
return;
maskedResult = 0xFFF0 & gUnknown_083071D4[(deltaY * 96 ) + deltaX];
lowerNibble = 0xF & gUnknown_083071D4[(deltaY * 96 ) + deltaX];
if (lowerNibble == 0)
return;
temp = gCurrentPinballGame->unk3DC -3;
if (temp <= 1U)
*arg2 = 1;
else
*arg2 = lowerNibble;
gCurrentPinballGame->unk3DC = 4;
*arg1 = maskedResult;
return;
}
if(gCurrentPinballGame->unk387 == 1)
{
if (*arg2 != 0)
return;
if (gCurrentPinballGame->unk3A9[0] != 0)
{
deltaX = arg0->x - gCurrentPinballGame->unk3D0[0].x;
deltaY = arg0->y - gCurrentPinballGame->unk3D0[0].y;
if (deltaX < 64U && deltaY < 64U)
{
maskedResult = 0xFFF0 & gUnknown_08252B10[deltaY * 64 + deltaX];
lowerNibble = 0xF & gUnknown_08252B10[deltaY * 64 + deltaX];
if (lowerNibble != 0)
gCurrentPinballGame->unk3A0[0] = 4;
}
}
if (lowerNibble == 0)
{
if (gCurrentPinballGame->unk3A9[1] != 0)
{
deltaX = arg0->x - gCurrentPinballGame->unk3D0[1].x;
deltaY = arg0->y - gCurrentPinballGame->unk3D0[1].y;
if (deltaX < 64U && deltaY < 64U)
{
maskedResult = 0xFFF0 & gUnknown_08252B10[deltaY * 64 + deltaX];
lowerNibble = 0xF & gUnknown_08252B10[deltaY * 64 + deltaX];
if (lowerNibble != 0)
gCurrentPinballGame->unk3A0[1] = 4;
}
}
}
if (lowerNibble == 0)
{
if ( gCurrentPinballGame->unk3A9[2] != 0)
{
deltaX = arg0->x - gCurrentPinballGame->unk3D0[2].x;
deltaY = arg0->y - gCurrentPinballGame->unk3D0[2].y;
if (deltaX < 64U && deltaY < 64U)
{
maskedResult = 0xFFF0 & gUnknown_08252B10[deltaY * 64 + deltaX];
lowerNibble = 0xF & gUnknown_08252B10[deltaY * 64 + deltaX];
if (lowerNibble != 0)
{
gCurrentPinballGame->unk3A0[2] = 4;
}
}
}
}
if (lowerNibble != 0)
{
*arg1 = maskedResult;
*arg2 = 6;
}
return;
}
}
void sub_17634(u8 arg0, u16 *arg1, u16 *arg2)
{
switch (arg0)
{