Decompile functions: sub_50F04, nullsub_20 sub_50DE8, sub_50DB8, sub_50B80, added variables and fixed currentpinballgame struct (#127)
Some checks are pending
CI / build (push) Waiting to run

* Decompiled sub_50F04, nullsub_20 sub_50DE8, sub_50DB8, and sub_50B80 added gUnknown_0200C668,gUnknown_0200EA58,gUnknown_0200BAE8,gUnknown_0200BBA0 to variables.h

* Correct PinballGame struct field at offset 0x1BC thanks to @Retn
Correct struct access in sub_50B80
Remove section .text50AD4 from linker script

* Deleted expected objects

* cleanup

---------

Co-authored-by: THCFree <me@thcfree.dev>
Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
Δelta 2025-07-05 17:27:15 +02:00 committed by GitHub
parent 71b5a5def6
commit a1ddcdc356
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 168 additions and 530 deletions

View File

@ -7258,531 +7258,3 @@ _08050AC8: .4byte 0x00002B38
_08050ACC: .4byte 0x000029C8
_08050AD0: .4byte 0x00000A28
.section .text50AD4
thumb_func_start sub_50B80
sub_50B80: @ 0x08050B80
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
movs r0, #0x37
ldr r1, _08050CF0 @ =gMain
mov sb, r1
mov r5, sb
movs r4, #0xb8
movs r3, #0xbe
lsls r3, r3, #2
movs r2, #0
_08050B9A:
lsls r1, r0, #0x10
asrs r1, r1, #0x10
adds r0, r1, #0
muls r0, r4, r0
adds r0, r0, r5
adds r0, r0, r3
strh r2, [r0]
adds r1, #1
lsls r1, r1, #0x10
lsrs r0, r1, #0x10
asrs r1, r1, #0x10
cmp r1, #0x46
ble _08050B9A
mov r5, sb
ldr r2, _08050CF4 @ =0x00002858
adds r7, r5, r2
movs r0, #0
strh r0, [r7]
ldr r1, _08050CF8 @ =0x000036B8
adds r1, r1, r5
mov r8, r1
strh r0, [r1]
ldr r2, _08050CFC @ =gUnknown_0200C668
strh r0, [r2]
ldr r1, _08050D00 @ =0x000027A0
adds r6, r5, r1
strh r0, [r6]
ldr r2, _08050D04 @ =gUnknown_0200EA58
strh r0, [r2]
ldr r1, _08050D08 @ =0x000038E0
adds r1, r1, r5
mov sl, r1
strh r0, [r1]
ldr r2, _08050D0C @ =gUnknown_0200BAE8
strh r0, [r2]
ldr r1, _08050D10 @ =gUnknown_0200BBA0
strh r0, [r1]
ldr r2, _08050D14 @ =gCurrentPinballGame
ldr r4, [r2]
ldr r0, [r5, #0x4c]
movs r1, #0x19
bl __umodsi3
movs r2, #0xde
lsls r2, r2, #1
adds r1, r4, r2
strh r0, [r1]
adds r4, #0x68
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0x59
bgt _08050C08
movs r0, #1
strh r0, [r7]
strh r0, [r6]
_08050C08:
ldr r2, _08050D14 @ =gCurrentPinballGame
ldr r0, [r2]
adds r4, r0, #0
adds r4, #0x68
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0xdb
bgt _08050C1E
movs r0, #1
mov r2, r8
strh r0, [r2]
_08050C1E:
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0x95
bgt _08050C34
ldr r2, _08050D18 @ =0x00002E18
adds r0, r5, r2
movs r1, #1
strh r1, [r0]
ldr r2, _08050D1C @ =0x00003490
adds r0, r5, r2
strh r1, [r0]
_08050C34:
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0xc3
bgt _08050C4A
movs r2, #0xc1
lsls r2, r2, #6
adds r1, r5, r2
movs r0, #1
strh r0, [r1]
mov r1, sl
strh r0, [r1]
_08050C4A:
movs r2, #0
ldrsh r0, [r4, r2]
cmp r0, #0xc9
bgt _08050C70
ldr r1, _08050D20 @ =0x00002ED0
adds r0, r5, r1
movs r1, #1
strh r1, [r0]
ldr r2, _08050D24 @ =0x00002CA8
adds r0, r5, r2
strh r1, [r0]
ldr r2, _08050D28 @ =0x00002F88
adds r0, r5, r2
strh r1, [r0]
ldr r2, _08050D2C @ =0x00002D60
adds r0, r5, r2
strh r1, [r0]
ldr r0, _08050D04 @ =gUnknown_0200EA58
strh r1, [r0]
_08050C70:
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0x76
ble _08050CA2
ldr r2, _08050D30 @ =0x00003548
adds r1, r5, r2
movs r0, #1
strh r0, [r1]
ldr r1, _08050CFC @ =gUnknown_0200C668
strh r0, [r1]
ldr r2, _08050D34 @ =0x000030F8
adds r1, r5, r2
strh r0, [r1]
ldr r2, _08050D38 @ =0x000033D8
adds r1, r5, r2
strh r0, [r1]
ldr r2, _08050D3C @ =0x000031B0
adds r1, r5, r2
strh r0, [r1]
adds r2, #0xb8
adds r1, r5, r2
strh r0, [r1]
adds r2, #0xb8
adds r1, r5, r2
strh r0, [r1]
_08050CA2:
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0xd8
ble _08050CC8
ldr r2, _08050D40 @ =0x00002BF0
adds r0, r5, r2
movs r1, #1
strh r1, [r0]
movs r2, #0xaa
lsls r2, r2, #6
adds r0, r5, r2
strh r1, [r0]
adds r2, #0xb8
adds r0, r5, r2
strh r1, [r0]
ldr r0, _08050D0C @ =gUnknown_0200BAE8
strh r1, [r0]
ldr r2, _08050D10 @ =gUnknown_0200BBA0
strh r1, [r2]
_08050CC8:
mov r0, sb
ldrb r1, [r0, #4]
lsls r1, r1, #3
ldr r2, _08050D44 @ =gUnknown_086B155C
adds r1, r1, r2
ldr r0, [r1]
ldrh r1, [r1, #4]
movs r2, #0xbe
lsls r2, r2, #2
add r2, sb
bl LoadSpriteSets
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08050CF0: .4byte gMain
_08050CF4: .4byte 0x00002858
_08050CF8: .4byte 0x000036B8
_08050CFC: .4byte gUnknown_0200C668
_08050D00: .4byte 0x000027A0
_08050D04: .4byte gUnknown_0200EA58
_08050D08: .4byte 0x000038E0
_08050D0C: .4byte gUnknown_0200BAE8
_08050D10: .4byte gUnknown_0200BBA0
_08050D14: .4byte gCurrentPinballGame
_08050D18: .4byte 0x00002E18
_08050D1C: .4byte 0x00003490
_08050D20: .4byte 0x00002ED0
_08050D24: .4byte 0x00002CA8
_08050D28: .4byte 0x00002F88
_08050D2C: .4byte 0x00002D60
_08050D30: .4byte 0x00003548
_08050D34: .4byte 0x000030F8
_08050D38: .4byte 0x000033D8
_08050D3C: .4byte 0x000031B0
_08050D40: .4byte 0x00002BF0
_08050D44: .4byte gUnknown_086B155C
thumb_func_start sub_50D48
sub_50D48: @ 0x08050D48
push {r4, r5, r6, r7, lr}
movs r1, #0
ldr r6, _08050D74 @ =gMain
ldr r0, _08050D78 @ =gUnknown_086B155C
mov ip, r0
adds r5, r6, #0
movs r4, #0xb8
movs r2, #0xbe
lsls r2, r2, #2
movs r7, #1
_08050D5C:
lsls r0, r1, #0x10
asrs r1, r0, #0x10
adds r3, r0, #0
cmp r1, #4
bgt _08050D7C
adds r0, r1, #0
muls r0, r4, r0
adds r0, r0, r5
adds r0, r0, r2
strh r7, [r0]
b _08050D88
.align 2, 0
_08050D74: .4byte gMain
_08050D78: .4byte gUnknown_086B155C
_08050D7C:
adds r0, r1, #0
muls r0, r4, r0
adds r0, r0, r5
adds r0, r0, r2
movs r1, #0
strh r1, [r0]
_08050D88:
movs r1, #0x80
lsls r1, r1, #9
adds r0, r3, r1
lsrs r1, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xe
ble _08050D5C
ldr r0, [r6, #0x44]
ldr r1, [r0]
movs r0, #1
strh r0, [r1]
ldrb r1, [r6, #4]
lsls r1, r1, #3
add r1, ip
ldr r0, [r1]
ldrh r1, [r1, #4]
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r6, r3
bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
thumb_func_start sub_50DB8
sub_50DB8: @ 0x08050DB8
push {lr}
ldr r0, _08050DD8 @ =gUnknown_086B155C
ldr r2, _08050DDC @ =gMain
ldrb r1, [r2, #4]
lsls r1, r1, #3
adds r1, r1, r0
ldr r0, [r1]
ldrh r1, [r1, #4]
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
_08050DD8: .4byte gUnknown_086B155C
_08050DDC: .4byte gMain
thumb_func_start sub_50DE0
sub_50DE0: @ 0x08050DE0
push {r4, r5, r6, r7, lr}
movs r1, #0
ldr r2, _08050E0C @ =gMain
ldr r0, _08050E10 @ =gUnknown_086B155C
mov ip, r0
adds r6, r2, #0
movs r5, #0xb8
movs r4, #0xbe
lsls r4, r4, #2
movs r7, #1
_08050DF4:
lsls r0, r1, #0x10
asrs r1, r0, #0x10
adds r3, r0, #0
cmp r1, #4
bgt _08050E14
adds r0, r1, #0
muls r0, r5, r0
adds r0, r0, r6
adds r0, r0, r4
strh r7, [r0]
b _08050E20
.align 2, 0
_08050E0C: .4byte gMain
_08050E10: .4byte gUnknown_086B155C
_08050E14:
adds r0, r1, #0
muls r0, r5, r0
adds r0, r0, r6
adds r0, r0, r4
movs r1, #0
strh r1, [r0]
_08050E20:
movs r1, #0x80
lsls r1, r1, #9
adds r0, r3, r1
lsrs r1, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0x20
ble _08050DF4
ldr r0, [r2, #0x44]
ldr r1, [r0]
movs r0, #1
strh r0, [r1]
movs r3, #0x9c
lsls r3, r3, #5
adds r1, r2, r3
strh r0, [r1]
movs r3, #0x97
lsls r3, r3, #4
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EE8 @ =0x00001438
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EEC @ =0x00000E78
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
movs r3, #0x80
lsls r3, r3, #4
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EF0 @ =0x00000A28
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EF4 @ =0x00000FE8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EF8 @ =0x000014F0
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
movs r3, #0xca
lsls r3, r3, #5
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
ldr r3, _08050EFC @ =0x000017D0
adds r1, r2, r3
strh r0, [r1]
adds r3, #0xb8
adds r1, r2, r3
strh r0, [r1]
ldrb r1, [r2, #4]
lsls r1, r1, #3
add r1, ip
ldr r0, [r1]
ldrh r1, [r1, #4]
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08050EE8: .4byte 0x00001438
_08050EEC: .4byte 0x00000E78
_08050EF0: .4byte 0x00000A28
_08050EF4: .4byte 0x00000FE8
_08050EF8: .4byte 0x000014F0
_08050EFC: .4byte 0x000017D0
thumb_func_start nullsub_20
nullsub_20: @ 0x08050F00
bx lr
thumb_func_start sub_50F04
sub_50F04: @ 0x08050F04
push {r4, r5, r6, r7, lr}
movs r1, #0
ldr r2, _08050F30 @ =gMain
ldr r0, _08050F34 @ =gUnknown_086B155C
mov ip, r0
adds r6, r2, #0
movs r5, #0xb8
movs r4, #0xbe
lsls r4, r4, #2
movs r7, #1
_08050F18:
lsls r0, r1, #0x10
asrs r1, r0, #0x10
adds r3, r0, #0
cmp r1, #4
bgt _08050F38
adds r0, r1, #0
muls r0, r5, r0
adds r0, r0, r6
adds r0, r0, r4
strh r7, [r0]
b _08050F44
.align 2, 0
_08050F30: .4byte gMain
_08050F34: .4byte gUnknown_086B155C
_08050F38:
adds r0, r1, #0
muls r0, r5, r0
adds r0, r0, r6
adds r0, r0, r4
movs r1, #0
strh r1, [r0]
_08050F44:
movs r1, #0x80
lsls r1, r1, #9
adds r0, r3, r1
lsrs r1, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0x1a
ble _08050F18
ldr r0, [r2, #0x44]
ldr r0, [r0]
movs r1, #1
strh r1, [r0]
movs r3, #0xae
lsls r3, r3, #4
adds r0, r2, r3
strh r1, [r0]
adds r3, #0xb8
adds r0, r2, r3
strh r1, [r0]
adds r3, #0xb8
adds r0, r2, r3
strh r1, [r0]
adds r3, #0xb8
adds r0, r2, r3
strh r1, [r0]
ldr r3, _08050FA8 @ =0x00001210
adds r0, r2, r3
strh r1, [r0]
adds r3, #0xb8
adds r0, r2, r3
strh r1, [r0]
adds r3, #0xb8
adds r0, r2, r3
strh r1, [r0]
movs r3, #0xdc
lsls r3, r3, #4
adds r0, r2, r3
strh r1, [r0]
ldrb r1, [r2, #4]
lsls r1, r1, #3
add r1, ip
ldr r0, [r1]
ldrh r1, [r1, #4]
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08050FA8: .4byte 0x00001210

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -219,7 +219,8 @@ struct PinballGame
/*0x1B4*/ u16 unk1B4;
/*0x1B6*/ u8 filler1B6[0x4];
/*0x1BA*/ u16 unk1BA;
/*0x1BC*/ u8 filler1BC[0x4];
/*0x1BC*/ u16 unk1BC;
/*0x1BE*/ u8 filler1BE[0x2];
/*0x1C0*/ u16 unk1C0;
/*0x1C2*/ s8 unk1C2;
/*0x1C3*/ u8 filler1C3[0x1];

View File

@ -72,7 +72,6 @@ SECTIONS
src/rom_4E598.o(.text);
asm/rom_4CEA8.o(.text4E598);
src/rom_50AD4.o(.text);
asm/rom_4CEA8.o(.text50AD4);
src/rom_50FAC.o(.text);
src/options.o(.text);
src/pokemon_cry.o(.text);

View File

@ -1,6 +1,172 @@
#include "global.h"
#include "main.h"
void sub_50B80(void)
{
s16 i;
for (i = 55; i < 71; i++)
gMain.spriteGroups[i].available = 0;
gMain.spriteGroups[52].available = 0;
gMain.spriteGroups[72].available = 0;
gMain.spriteGroups[26].available = 0;
gMain.spriteGroups[51].available = 0;
gMain.spriteGroups[76].available = 0;
gMain.spriteGroups[75].available = 0;
gMain.spriteGroups[10].available = 0;
gMain.spriteGroups[11].available = 0;
gCurrentPinballGame->unk1BC = gMain.systemFrameCount % 25;
if (gCurrentPinballGame->unk68 < 90)
{
gMain.spriteGroups[52].available = 1;
gMain.spriteGroups[51].available = 1;
}
if (gCurrentPinballGame->unk68 < 220)
{
gMain.spriteGroups[72].available = 1;
}
if (gCurrentPinballGame->unk68 < 150)
{
gMain.spriteGroups[60].available = 1;
gMain.spriteGroups[69].available = 1;
}
if (gCurrentPinballGame->unk68 < 196)
{
gMain.spriteGroups[63].available = 1;
gMain.spriteGroups[75].available = 1;
}
if (gCurrentPinballGame->unk68 < 202)
{
gMain.spriteGroups[61].available = 1;
gMain.spriteGroups[58].available = 1;
gMain.spriteGroups[62].available = 1;
gMain.spriteGroups[59].available = 1;
gMain.spriteGroups[76].available = 1;
}
if (gCurrentPinballGame->unk68 > 118)
{
gMain.spriteGroups[70].available = 1;
gMain.spriteGroups[26].available = 1;
gMain.spriteGroups[64].available = 1;
gMain.spriteGroups[68].available = 1;
gMain.spriteGroups[65].available = 1;
gMain.spriteGroups[66].available = 1;
gMain.spriteGroups[67].available = 1;
}
if (gCurrentPinballGame->unk68 > 216)
{
gMain.spriteGroups[57].available = 1;
gMain.spriteGroups[55].available = 1;
gMain.spriteGroups[56].available = 1;
gMain.spriteGroups[10].available = 1;
gMain.spriteGroups[11].available = 1;
}
LoadSpriteSets(gUnknown_086B155C[gMain.selectedField].spriteSets, gUnknown_086B155C[gMain.selectedField].numSpriteSets, gMain.spriteGroups);
}
void sub_50D48(void)
{
s16 i;
for (i = 0; i < 15; i++)
{
if (i < 5)
gMain.spriteGroups[i].available = 1;
else
gMain.spriteGroups[i].available = 0;
}
gMain.unk44[0]->available = 1;
LoadSpriteSets(gUnknown_086B155C[gMain.selectedField].spriteSets,
gUnknown_086B155C[gMain.selectedField].numSpriteSets,
gMain.spriteGroups);
}
void sub_50DB8(void)
{
LoadSpriteSets(gUnknown_086B155C[gMain.selectedField].spriteSets,
gUnknown_086B155C[gMain.selectedField].numSpriteSets,
gMain.spriteGroups);
}
void sub_50DE0(void)
{
s16 i;
for (i = 0; i < 33; i++)
{
if (i < 5)
gMain.spriteGroups[i].available = 1;
else
gMain.spriteGroups[i].available = 0;
}
gMain.unk44[0]->available = 1;
gMain.spriteGroups[23].available = 1;
gMain.spriteGroups[9].available = 1;
gMain.spriteGroups[24].available = 1;
gMain.spriteGroups[16].available = 1;
gMain.spriteGroups[17].available = 1;
gMain.spriteGroups[7].available = 1;
gMain.spriteGroups[10].available = 1;
gMain.spriteGroups[11].available = 1;
gMain.spriteGroups[12].available = 1;
gMain.spriteGroups[13].available = 1;
gMain.spriteGroups[14].available = 1;
gMain.spriteGroups[15].available = 1;
gMain.spriteGroups[18].available = 1;
gMain.spriteGroups[19].available = 1;
gMain.spriteGroups[20].available = 1;
gMain.spriteGroups[21].available = 1;
gMain.spriteGroups[25].available = 1;
gMain.spriteGroups[26].available = 1;
gMain.spriteGroups[27].available = 1;
gMain.spriteGroups[28].available = 1;
gMain.spriteGroups[31].available = 1;
gMain.spriteGroups[32].available = 1;
gMain.spriteGroups[29].available = 1;
gMain.spriteGroups[30].available = 1;
LoadSpriteSets(
gUnknown_086B155C[gMain.selectedField].spriteSets,
gUnknown_086B155C[gMain.selectedField].numSpriteSets,
gMain.spriteGroups
);
}
void nullsub_20(void)
{}
void sub_50F04()
{
s16 i;
for (i = 0; i < 27; i++)
{
if (i < 5)
gMain.spriteGroups[i].available = 1;
else
gMain.spriteGroups[i].available = 0;
}
gMain.unk44[0]->available = 1;
gMain.spriteGroups[11].available = 1;
gMain.spriteGroups[12].available = 1;
gMain.spriteGroups[13].available = 1;
gMain.spriteGroups[14].available = 1;
gMain.spriteGroups[21].available = 1;
gMain.spriteGroups[22].available = 1;
gMain.spriteGroups[23].available = 1;
gMain.spriteGroups[15].available = 1;
LoadSpriteSets(gUnknown_086B155C[gMain.selectedField].spriteSets,
gUnknown_086B155C[gMain.selectedField].numSpriteSets,
gMain.spriteGroups);
}
void sub_50FAC(void)
{
LoadSpriteSets(gUnknown_086B155C[gMain.selectedField].spriteSets,