More decomping

This commit is contained in:
Seth Barberee 2024-01-29 12:47:56 -08:00
parent 287b7e6539
commit 86a9f61835
2 changed files with 281 additions and 545 deletions

View File

@ -5,549 +5,6 @@
.text
thumb_func_start sub_809C770
sub_809C770:
push {r4-r7,lr}
mov r7, r8
push {r7}
lsls r0, 16
asrs r0, 16
mov r8, r0
lsls r1, 16
asrs r6, r1, 16
ldr r4, _0809C790
ldr r1, [r4]
ldrb r0, [r1, 0xE]
cmp r0, 0
beq _0809C794
movs r0, 0
strb r0, [r1, 0xE]
b _0809CA10
.align 2, 0
_0809C790: .4byte gUnknown_3001B68
_0809C794:
ldrh r0, [r1, 0x8]
cmp r0, 0
bne _0809C79E
bl sub_809C6EC
_0809C79E:
ldr r0, [r4]
ldrb r5, [r0, 0x18]
ldrb r7, [r0, 0x19]
cmp r6, 0x26
bls _0809C7AA
b _0809C8C8
_0809C7AA:
lsls r0, r6, 2
ldr r1, _0809C7B4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809C7B4: .4byte _0809C7B8
.align 2, 0
_0809C7B8:
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C868
.4byte _0809C854
.4byte _0809C868
.4byte _0809C868
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C8C8
.4byte _0809C86E
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809C8C4
_0809C854:
mov r0, r8
bl sub_8002658
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
bne _0809C864
b _0809CA10
_0809C864:
movs r4, 0x1
b _0809C988
_0809C868:
movs r4, 0x1
movs r5, 0
b _0809C988
_0809C86E:
mov r0, r8
subs r0, 0xA4
lsls r0, 16
asrs r0, 16
cmp r0, 0xD
bls _0809C87C
b _0809CA10
_0809C87C:
lsls r0, 2
ldr r1, _0809C888
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809C888: .4byte _0809C88C
.align 2, 0
_0809C88C:
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809CA10
.4byte _0809CA10
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809CA10
.4byte _0809CA10
.4byte _0809CA10
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809C8C4
.4byte _0809C8C4
_0809C8C4:
movs r4, 0
b _0809C988
_0809C8C8:
adds r0, r6, 0
subs r0, 0xC
lsls r0, 16
asrs r0, 16
cmp r0, 0x16
bhi _0809C968
lsls r0, 2
ldr r1, _0809C8E0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809C8E0: .4byte _0809C8E4
.align 2, 0
_0809C8E4:
.4byte _0809C968
.4byte _0809C940
.4byte _0809C968
.4byte _0809C968
.4byte _0809C968
.4byte _0809C968
.4byte _0809C944
.4byte _0809C944
.4byte _0809C948
.4byte _0809C948
.4byte _0809C94C
.4byte _0809C968
.4byte _0809C950
.4byte _0809C950
.4byte _0809C954
.4byte _0809C954
.4byte _0809C958
.4byte _0809C958
.4byte _0809C95C
.4byte _0809C95C
.4byte _0809C960
.4byte _0809C960
.4byte _0809C964
_0809C940:
movs r1, 0
b _0809C974
_0809C944:
movs r1, 0x7
b _0809C974
_0809C948:
movs r1, 0x9
b _0809C974
_0809C94C:
movs r1, 0xA
b _0809C974
_0809C950:
movs r1, 0xB
b _0809C974
_0809C954:
movs r1, 0xD
b _0809C974
_0809C958:
movs r1, 0xF
b _0809C974
_0809C95C:
movs r1, 0x11
b _0809C974
_0809C960:
movs r1, 0x13
b _0809C974
_0809C964:
movs r1, 0x20
b _0809C974
_0809C968:
movs r0, 0
movs r1, 0x13
bl sub_8001658
lsls r0, 16
asrs r1, r0, 16
_0809C974:
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _0809CA10
adds r0, r1, 0
bl sub_80A2740
lsls r0, 24
lsrs r7, r0, 24
movs r4, 0x2
_0809C988:
ldr r0, _0809C99C
ldr r2, [r0]
ldr r1, [r2, 0x10]
adds r3, r0, 0
cmp r1, r4
beq _0809C9A0
movs r0, 0x2
str r0, [r2]
b _0809C9DE
.align 2, 0
_0809C99C: .4byte gUnknown_3001B68
_0809C9A0:
cmp r4, 0x1
bne _0809C9CC
ldrb r0, [r2, 0x18]
cmp r5, r0
bne _0809C9B2
movs r1, 0x14
ldrsh r0, [r2, r1]
cmp r0, r8
beq _0809C9BC
_0809C9B2:
strb r4, [r2, 0xC]
ldr r0, [r3]
adds r0, 0x20
strb r4, [r0]
b _0809C9E8
_0809C9BC:
cmp r5, 0
bne _0809C9E8
movs r1, 0x16
ldrsh r0, [r2, r1]
cmp r0, r6
beq _0809C9E8
strb r4, [r2, 0xC]
b _0809C9E8
_0809C9CC:
cmp r4, 0x2
bne _0809C9E8
ldrb r0, [r2, 0x19]
cmp r7, r0
bne _0809C9DE
movs r1, 0x16
ldrsh r0, [r2, r1]
cmp r0, r6
beq _0809C9E8
_0809C9DE:
movs r1, 0x1
strb r1, [r2, 0xC]
ldr r0, [r3]
adds r0, 0x20
strb r1, [r0]
_0809C9E8:
ldr r1, [r3]
ldrb r0, [r1, 0xC]
cmp r0, 0
beq _0809CA10
str r4, [r1, 0x10]
movs r2, 0
mov r0, r8
strh r0, [r1, 0x14]
strh r6, [r1, 0x16]
strb r5, [r1, 0x18]
ldr r0, [r3]
strb r7, [r0, 0x19]
ldr r1, [r3]
ldrh r0, [r1, 0x8]
cmp r0, 0x4
beq _0809CA10
strb r2, [r1, 0xC]
ldr r0, [r3]
adds r0, 0x20
strb r2, [r0]
_0809CA10:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_809C770
thumb_func_start nullsub_105
nullsub_105:
bx lr
thumb_func_end nullsub_105
thumb_func_start sub_809CA20
sub_809CA20:
push {lr}
ldr r1, _0809CA74
ldr r2, [r1]
ldr r0, [r2]
cmp r0, 0
beq _0809CA38
movs r0, 0
str r0, [r2]
movs r0, 0x1F
str r0, [r2, 0x4]
movs r0, 0x1
strb r0, [r2, 0xC]
_0809CA38:
ldr r1, [r1]
ldrb r0, [r1, 0xC]
cmp r0, 0
beq _0809CAE8
ldrh r0, [r1, 0x8]
strh r0, [r1, 0xA]
lsls r0, 16
lsrs r0, 16
cmp r0, 0x4
bne _0809CA5E
ldr r2, [r1, 0x10]
cmp r2, 0
bne _0809CA5E
movs r0, 0x2
strh r0, [r1, 0xA]
str r2, [r1, 0x1C]
adds r1, 0x20
movs r0, 0
strb r0, [r1]
_0809CA5E:
ldr r0, _0809CA74
ldr r0, [r0]
ldrh r0, [r0, 0xA]
cmp r0, 0x5
bhi _0809CADA
lsls r0, 2
ldr r1, _0809CA78
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809CA74: .4byte gUnknown_3001B68
_0809CA78: .4byte _0809CA7C
.align 2, 0
_0809CA7C:
.4byte _0809CAD2
.4byte _0809CAD2
.4byte _0809CABE
.4byte _0809CA94
.4byte _0809CAB0
.4byte _0809CAC8
_0809CA94:
bl nullsub_111
bl nullsub_113
bl nullsub_112
ldr r0, _0809CAAC
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0xD]
b _0809CADA
.align 2, 0
_0809CAAC: .4byte gUnknown_3001B68
_0809CAB0:
bl nullsub_114
bl nullsub_115
bl nullsub_116
b _0809CADA
_0809CABE:
bl nullsub_109
bl nullsub_110
b _0809CADA
_0809CAC8:
bl nullsub_107
bl nullsub_108
b _0809CADA
_0809CAD2:
bl nullsub_107
bl nullsub_108
_0809CADA:
ldr r0, _0809CAE4
ldr r1, [r0]
movs r0, 0
strb r0, [r1, 0xC]
b _0809CB1E
.align 2, 0
_0809CAE4: .4byte gUnknown_3001B68
_0809CAE8:
ldrh r0, [r1, 0xA]
cmp r0, 0x5
bhi _0809CB1E
lsls r0, 2
ldr r1, _0809CAF8
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809CAF8: .4byte _0809CAFC
.align 2, 0
_0809CAFC:
.4byte _0809CB1E
.4byte _0809CB1E
.4byte _0809CB1E
.4byte _0809CB14
.4byte _0809CB1A
.4byte _0809CB1E
_0809CB14:
bl nullsub_113
b _0809CB1E
_0809CB1A:
bl nullsub_116
_0809CB1E:
pop {r0}
bx r0
thumb_func_end sub_809CA20
thumb_func_start nullsub_106
nullsub_106:
bx lr
thumb_func_end nullsub_106
thumb_func_start nullsub_107
nullsub_107:
bx lr
thumb_func_end nullsub_107
thumb_func_start nullsub_108
nullsub_108:
bx lr
thumb_func_end nullsub_108
thumb_func_start nullsub_109
nullsub_109:
bx lr
thumb_func_end nullsub_109
thumb_func_start nullsub_110
nullsub_110:
bx lr
thumb_func_end nullsub_110
thumb_func_start nullsub_111
nullsub_111:
bx lr
thumb_func_end nullsub_111
thumb_func_start nullsub_112
nullsub_112:
bx lr
thumb_func_end nullsub_112
thumb_func_start nullsub_113
nullsub_113:
bx lr
thumb_func_end nullsub_113
thumb_func_start nullsub_114
nullsub_114:
bx lr
thumb_func_end nullsub_114
thumb_func_start nullsub_115
nullsub_115:
bx lr
thumb_func_end nullsub_115
thumb_func_start nullsub_116
nullsub_116:
bx lr
thumb_func_end nullsub_116
thumb_func_start sub_809CB50
sub_809CB50:
push {r4,lr}
ldr r4, _0809CB70
movs r0, 0xC
movs r1, 0x6
bl MemoryAlloc
str r0, [r4]
movs r1, 0x1
negs r1, r1
str r1, [r0, 0x4]
movs r1, 0
str r1, [r0, 0x8]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0809CB70: .4byte gUnknown_20399E0
thumb_func_end sub_809CB50
thumb_func_start sub_809CB74
sub_809CB74:
push {r4,lr}
ldr r4, _0809CB88
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0809CB88: .4byte gUnknown_20399E0
thumb_func_end sub_809CB74
thumb_func_start sub_809CB8C
sub_809CB8C:
push {lr}
movs r0, 0
movs r1, 0x3B
bl sub_80015C0
movs r0, 0
movs r1, 0x3D
bl sub_80015C0
pop {r0}
bx r0
thumb_func_end sub_809CB8C
thumb_func_start sub_809CBA4
sub_809CBA4:
push {lr}
lsls r0, 24
lsrs r0, 24
bl FindItemInInventory
cmp r0, 0
bge _0809CBB6
movs r0, 0
b _0809CBB8
_0809CBB6:
movs r0, 0x1
_0809CBB8:
pop {r1}
bx r1
thumb_func_end sub_809CBA4
thumb_func_start sub_809CBBC
sub_809CBBC:
push {r4-r7,lr}

View File

@ -1,7 +1,9 @@
#include "global.h"
#include "items.h"
#include "memory.h"
#include "game_options.h"
#include "ground_main.h"
#include "code_80A26CC.h"
struct unkStruct_3001B68
{
@ -13,8 +15,8 @@ struct unkStruct_3001B68
u8 unkD;
u8 unkE;
u32 unk10;
u16 unk14;
u16 unk16;
s16 unk14;
s16 unk16;
u8 unk18;
u8 unk19;
u32 unk1C;
@ -23,6 +25,17 @@ struct unkStruct_3001B68
extern struct unkStruct_3001B68 *gUnknown_3001B68;
struct unkStruct_20399E0
{
u32 unk0;
s32 unk4;
u32 unk8;
};
extern struct unkStruct_20399E0 *gUnknown_20399E0;
void sub_809C63C();
u8 sub_809C740(void);
void nullsub_107();
@ -36,6 +49,11 @@ void nullsub_114();
void nullsub_115();
void nullsub_116();
// Event_flag.h
u8 sub_8002658(s16);
s16 sub_8001658(u32, u32);
extern void sub_80015C0(u32, u32);
void sub_809C5C4(void)
{
gUnknown_3001B68 = MemoryAlloc(sizeof(struct unkStruct_3001B68), 6);
@ -150,3 +168,264 @@ void sub_809C760(void)
{
gUnknown_3001B68->unkE = 1;
}
void sub_809C770(s16 param_1, s16 param_2)
{
u8 uVar2;
u8 uVar3;
s32 iVar5;
u32 uVar6;
s32 param_1_s32;
s32 param_2_s32;
param_1_s32 = param_1;
param_2_s32 = param_2;
if (gUnknown_3001B68->unkE != 0) {
gUnknown_3001B68->unkE = 0;
return;
}
if (gUnknown_3001B68->unk8 == 0) {
sub_809C6EC();
}
uVar2 = gUnknown_3001B68->unk18;
uVar3 = gUnknown_3001B68->unk19;
switch(param_2_s32) {
case 9:
uVar2 = sub_8002658(param_1_s32);
if (uVar2 == 0) {
return;
}
uVar6 = 1;
break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 10:
case 0xb:
uVar6 = 1;
uVar2 = 0;
break;
case 0x23:
switch((s16)(param_1_s32)) {
case 0xA4:
case 0xA5:
case 0xA8:
case 0xA9:
case 0xAA:
case 0xAE:
case 0xAF:
case 0xB0:
case 0xB1:
uVar6 = 0;
break;
default:
return;
}
break;
case 0x24:
case 0x25:
case 0x26:
uVar6 = 0;
break;
default:
switch((s16)(param_2_s32 - 0xc)) {
case 1:
iVar5 = 0;
break;
case 6:
case 7:
iVar5 = 7;
break;
case 8:
case 9:
iVar5 = 9;
break;
case 10:
iVar5 = 10;
break;
case 0xc:
case 0xd:
iVar5 = 0xb;
break;
case 0xe:
case 0xf:
iVar5 = 0xd;
break;
case 0x10:
case 0x11:
iVar5 = 0xf;
break;
case 0x12:
case 0x13:
iVar5 = 0x11;
break;
case 0x14:
case 0x15:
iVar5 = 0x13;
break;
case 0x16:
iVar5 = 0x20;
break;
case 0:
default:
iVar5 = sub_8001658(0,0x13);
break;
}
if (iVar5 == -1) {
return;
}
uVar3 = sub_80A2740(iVar5);
uVar6 = 2;
break;
}
if (gUnknown_3001B68->unk10 != uVar6) {
gUnknown_3001B68->unk0 = 2;
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
else
{
if (uVar6 == 1) {
if ((uVar2 != gUnknown_3001B68->unk18) ||
(gUnknown_3001B68->unk14 != param_1_s32)) {
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
else {
if ((uVar2 == 0) && (gUnknown_3001B68->unk16 != param_2_s32)) {
gUnknown_3001B68->unkC = 1;
}
}
}
else if ((uVar6 == 2) &&
((uVar3 != gUnknown_3001B68->unk19 || (gUnknown_3001B68->unk16 != param_2_s32))))
{
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
}
if (gUnknown_3001B68->unkC != 0) {
gUnknown_3001B68->unk10 = uVar6;
gUnknown_3001B68->unk14 = param_1_s32;
gUnknown_3001B68->unk16 = param_2_s32;
gUnknown_3001B68->unk18 = uVar2;
gUnknown_3001B68->unk19 = uVar3;
if (gUnknown_3001B68->unk8 != 4) {
gUnknown_3001B68->unkC = 0;
gUnknown_3001B68->unk20 = 0;
}
}
}
void nullsub_105(void) {}
void sub_809CA20(void)
{
u16 *puVar1;
if (gUnknown_3001B68->unk0 != 0) {
gUnknown_3001B68->unk0 = 0;
gUnknown_3001B68->unk4 = 0x1f;
gUnknown_3001B68->unkC = 1;
}
if (gUnknown_3001B68->unkC != 0) {
puVar1 = &gUnknown_3001B68->unk8;
gUnknown_3001B68->unkA = *puVar1;
if ((*puVar1 == 4) && (gUnknown_3001B68->unk10 == 0)) {
gUnknown_3001B68->unkA = 2;
gUnknown_3001B68->unk1C = 0;
gUnknown_3001B68->unk20 = 0;
}
switch(gUnknown_3001B68->unkA) {
case 3:
nullsub_111();
nullsub_113();
nullsub_112();
gUnknown_3001B68->unkD = 1;
break;
case 4:
nullsub_114();
nullsub_115();
nullsub_116();
break;
case 2:
nullsub_109();
nullsub_110();
break;
case 5:
nullsub_107();
nullsub_108();
break;
case 0:
case 1:
nullsub_107();
nullsub_108();
break;
}
gUnknown_3001B68->unkC = 0;
}
else {
switch(gUnknown_3001B68->unkA) {
case 3:
nullsub_113();
break;
case 4:
nullsub_116();
case 0:
case 1:
case 2:
case 5:
break;
}
}
}
void nullsub_106(void) {}
void nullsub_107(void) {}
void nullsub_108(void) {}
void nullsub_109(void) {}
void nullsub_110(void) {}
void nullsub_111(void) {}
void nullsub_112(void) {}
void nullsub_113(void) {}
void nullsub_114(void) {}
void nullsub_115(void) {}
void nullsub_116(void) {}
void sub_809CB50(void)
{
gUnknown_20399E0 = MemoryAlloc(sizeof(struct unkStruct_20399E0), 6);
gUnknown_20399E0->unk4 = -1;
gUnknown_20399E0->unk8 = 0;
}
void sub_809CB74(void) {
MemoryFree(gUnknown_20399E0);
gUnknown_20399E0 = NULL;
}
void sub_809CB8C(void) {
sub_80015C0(0, 0x3B);
sub_80015C0(0, 0x3D);
}
bool8 sub_809CBA4(u8 param_1)
{
if(FindItemInInventory(param_1) >= 0)
return 1;
else
return 0;
}