sub_809CDC8

This commit is contained in:
DizzyEggg
2025-05-09 12:11:43 +02:00
parent 57f3422495
commit 26a01e9e3b
3 changed files with 252 additions and 449 deletions

View File

@@ -1,445 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_809CCDC
sub_809CCDC:
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
lsls r1, r6, 2
ldr r0, _0809CD20
adds r5, r1, r0
ldr r0, _0809CD24
ldr r1, [r0]
movs r0, 0x1
negs r0, r0
str r0, [r1, 0x4]
movs r0, 0
str r0, [r1, 0x8]
movs r0, 0x2
cmp r4, 0x63
bgt _0809CD04
movs r0, 0
cmp r4, 0x1
ble _0809CD04
movs r0, 0x1
_0809CD04:
ldr r1, _0809CD28
ldr r2, _0809CD2C
ldr r3, _0809CD30
lsls r0, 2
adds r0, r3
ldr r3, [r0]
adds r0, r5, 0
bl sub_809CBBC
lsls r0, 24
cmp r0, 0
bne _0809CD34
movs r0, 0x2
b _0809CD3E
.align 2, 0
_0809CD20: .4byte gUnknown_81163BC
_0809CD24: .4byte gUnknown_20399E0
_0809CD28: .4byte gUnknown_81163F0
_0809CD2C: .4byte gUnknown_811642C
_0809CD30: .4byte gUnknown_203B4A0
_0809CD34:
ldr r0, _0809CD44
ldr r0, [r0]
str r6, [r0, 0x4]
str r4, [r0, 0x8]
movs r0, 0x1
_0809CD3E:
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0809CD44: .4byte gUnknown_20399E0
thumb_func_end sub_809CCDC
thumb_func_start sub_809CD48
sub_809CD48:
push {lr}
bl IsTextboxOpen_809A750
lsls r0, 24
cmp r0, 0
bne _0809CD58
movs r0, 0x3
b _0809CD5A
_0809CD58:
movs r0, 0
_0809CD5A:
pop {r1}
bx r1
thumb_func_end sub_809CD48
thumb_func_start nullsub_117
nullsub_117:
bx lr
thumb_func_end nullsub_117
thumb_func_start nullsub_118
nullsub_118:
bx lr
thumb_func_end nullsub_118
thumb_func_start sub_809CD68
sub_809CD68:
movs r2, 0
str r2, [r0]
str r2, [r0, 0x4]
movs r1, 0x1
negs r1, r1
str r1, [r0, 0x10]
str r2, [r0, 0x14]
str r2, [r0, 0x8]
strb r2, [r0, 0x18]
bx lr
thumb_func_end sub_809CD68
thumb_func_start sub_809CD7C
sub_809CD7C:
movs r2, 0
str r2, [r0]
movs r1, 0x1
negs r1, r1
str r1, [r0, 0x10]
str r2, [r0, 0x14]
str r2, [r0, 0x8]
bx lr
thumb_func_end sub_809CD7C
thumb_func_start sub_809CD8C
sub_809CD8C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
cmp r4, 0x5
bne _0809CD9E
bl sub_809CD68
str r4, [r5]
b _0809CDB0
_0809CD9E:
ldr r0, [r5, 0x4]
cmp r0, r4
beq _0809CDB0
str r4, [r5, 0x4]
movs r0, 0x1
negs r0, r0
str r0, [r5, 0x10]
movs r0, 0
str r0, [r5, 0x14]
_0809CDB0:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_809CD8C
thumb_func_start sub_809CDB8
sub_809CDB8:
push {lr}
adds r1, r0, 0
ldr r0, [r1, 0x4]
cmp r0, 0
bne _0809CDC4
ldr r0, [r1]
_0809CDC4:
pop {r1}
bx r1
thumb_func_end sub_809CDB8
thumb_func_start sub_809CDC8
sub_809CDC8:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x8
adds r4, r0, 0
adds r6, r1, 0
adds r7, r2, 0
ldr r1, [sp, 0x24]
movs r0, 0x1
negs r0, r0
str r0, [r3]
ldr r0, [r4]
cmp r0, 0x1
beq _0809CDEA
cmp r0, 0x2
beq _0809CDFE
b _0809CE12
_0809CDEA:
movs r0, 0x80
lsls r0, 6
ands r1, r0
cmp r1, 0
beq _0809CE12
adds r0, r4, 0
bl sub_809CD68
movs r0, 0x2
b _0809CE10
_0809CDFE:
movs r0, 0x80
lsls r0, 6
ands r1, r0
cmp r1, 0
bne _0809CE12
adds r0, r4, 0
bl sub_809CD68
movs r0, 0x1
_0809CE10:
str r0, [r4]
_0809CE12:
ldr r0, [r4, 0x4]
mov r8, r0
cmp r0, 0
bne _0809CE1E
ldr r1, [r4]
mov r8, r1
_0809CE1E:
mov r0, r8
subs r0, 0x1
cmp r0, 0x6
bls _0809CE28
b _0809CFCC
_0809CE28:
lsls r0, 2
ldr r1, _0809CE34
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0809CE34: .4byte _0809CE38
.align 2, 0
_0809CE38:
.4byte _0809CE54
.4byte _0809CF74
.4byte _0809CFCC
.4byte _0809CFCC
.4byte _0809CECC
.4byte _0809CF5C
.4byte _0809CF5C
_0809CE54:
ldr r0, _0809CE70
ldrh r2, [r0]
ldrh r1, [r0, 0x2]
movs r0, 0xF0
ands r0, r2
cmp r0, 0
beq _0809CE74
movs r0, 0x2
ands r0, r2
cmp r0, 0
beq _0809CEA4
movs r0, 0
b _0809CEA8
.align 2, 0
_0809CE70: .4byte gRealInputs
_0809CE74:
movs r3, 0x2
adds r0, r1, 0
ands r0, r3
cmp r0, 0
beq _0809CE82
movs r0, 0x14
b _0809CEA8
_0809CE82:
ldr r0, [r4, 0x10]
cmp r0, 0x1
ble _0809CEA4
subs r0, 0x1
str r0, [r4, 0x10]
adds r0, r2, 0
ands r0, r3
cmp r0, 0
bne _0809CEAA
movs r0, 0x13
str r0, [r6]
movs r1, 0x1
negs r1, r1
adds r0, r1, 0
strb r0, [r7]
movs r0, 0x5
b _0809CFDA
_0809CEA4:
movs r0, 0x1
negs r0, r0
_0809CEA8:
str r0, [r4, 0x10]
_0809CEAA:
movs r0, 0x1
ands r1, r0
cmp r1, 0
beq _0809CEB6
movs r0, 0xA
b _0809CEC2
_0809CEB6:
ldr r0, [r4, 0x10]
cmp r0, 0
bne _0809CEC0
movs r0, 0x8
b _0809CEC2
_0809CEC0:
movs r0, 0x7
_0809CEC2:
str r0, [r6]
adds r0, r2, 0
bl sub_809CFE8
b _0809CF4E
_0809CECC:
mov r0, sp
bl sub_809B260
lsls r0, 24
cmp r0, 0
beq _0809CFCC
ldr r0, _0809CEEC
ldr r0, [r0]
ldrb r0, [r0, 0xC]
cmp r0, 0
bne _0809CEF0
movs r0, 0x4
bl sub_809C6CC
b _0809CEF6
.align 2, 0
_0809CEEC: .4byte gGameOptionsRef
_0809CEF0:
movs r0, 0x3
bl sub_809C6CC
_0809CEF6:
bl nullsub_104
adds r0, r4, 0
bl sub_809CD7C
movs r5, 0x1
str r5, [r4]
ldr r0, [sp]
cmp r0, 0x2
beq _0809CF1E
cmp r0, 0x2
bgt _0809CF14
cmp r0, 0x1
beq _0809CF2A
b _0809CF54
_0809CF14:
cmp r0, 0x3
beq _0809CF2A
cmp r0, 0x4
beq _0809CF3C
b _0809CF54
_0809CF1E:
movs r0, 0x4
str r0, [r4]
movs r0, 0x1E
bl sub_8098D80
b _0809CF46
_0809CF2A:
movs r0, 0x4
str r0, [r4]
str r5, [r6]
movs r1, 0x1
negs r1, r1
adds r0, r1, 0
strb r0, [r7]
movs r0, 0x4
b _0809CFDA
_0809CF3C:
str r0, [r4]
movs r0, 0x45
movs r1, 0
bl GroundMap_ExecuteEvent
_0809CF46:
str r5, [r6]
movs r1, 0x1
negs r1, r1
adds r0, r1, 0
_0809CF4E:
strb r0, [r7]
ldr r0, [r4]
b _0809CFDA
_0809CF54:
movs r0, 0x2
bl GroundScriptLockJumpZero
b _0809CFCC
_0809CF5C:
add r0, sp, 0x4
bl sub_809B260
lsls r0, 24
cmp r0, 0
beq _0809CFCC
adds r0, r4, 0
bl sub_809CD7C
movs r0, 0x1
str r0, [r4]
b _0809CFDA
_0809CF74:
ldr r0, [r4, 0x8]
cmp r0, 0
ble _0809CF86
subs r0, 0x1
str r0, [r4, 0x8]
movs r0, 0x9
str r0, [r6]
ldrb r0, [r4, 0xC]
b _0809CFD6
_0809CF86:
ldr r0, _0809CFA0
ldrh r1, [r0]
movs r0, 0x9
str r0, [r6]
movs r0, 0x40
ands r0, r1
lsls r0, 16
lsrs r2, r0, 16
cmp r2, 0
beq _0809CFA4
movs r0, 0x4
b _0809CFB6
.align 2, 0
_0809CFA0: .4byte gRealInputs
_0809CFA4:
movs r0, 0x80
ands r1, r0
cmp r1, 0
beq _0809CFB0
strb r2, [r7]
b _0809CFB8
_0809CFB0:
movs r1, 0x1
negs r1, r1
adds r0, r1, 0
_0809CFB6:
strb r0, [r7]
_0809CFB8:
ldrb r0, [r7]
strb r0, [r4, 0xC]
lsls r0, 24
movs r1, 0xFF
lsls r1, 24
cmp r0, r1
beq _0809CFD8
movs r0, 0x20
str r0, [r4, 0x8]
b _0809CFD8
_0809CFCC:
movs r0, 0
str r0, [r6]
movs r1, 0x1
negs r1, r1
adds r0, r1, 0
_0809CFD6:
strb r0, [r7]
_0809CFD8:
mov r0, r8
_0809CFDA:
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_809CDC8
.align 2,0

View File

@@ -337,7 +337,6 @@ SECTIONS {
asm/code_8099360.o(.text);
src/code_809A560.o(.text);
src/code_809C5C4.o(.text);
asm/code_809C5C4.o(.text);
src/code_809D148.o(.text);
src/ground_script.o(.text);
src/code_80A26CC.o(.text);

View File

@@ -8,6 +8,7 @@
#include "code_800D090.h"
#include "code_80118A4.h"
#include "string_format.h"
#include "input.h"
struct unkStruct_3001B68
{
@@ -439,6 +440,11 @@ bool8 HasItemInInventory(u8 item)
extern bool8 ScriptPrintText(s32 a0, s32 a1_, const char *text);
extern bool8 sub_809124C(u8 id, u8 param_3);
extern u8 IsTextboxOpen_809A750(void);
extern u8 sub_809CFE8(u32);
extern bool8 sub_809B260(s32 *a0);
extern void GroundMap_ExecuteEvent(s32, s32);
extern void GroundScriptLockJumpZero(s32 index);
extern const u8 gUnknown_81163E4[];
@@ -448,7 +454,7 @@ struct ItemWithQuantity
s16 quantity;
};
bool8 sub_809CBBC(const struct ItemWithQuantity *itemToAdd, u8 *maxMoneyStr, u8 *noItemSpaceStr, u8 *itemGivenStr)
static bool8 sub_809CBBC(const struct ItemWithQuantity *itemToAdd, const u8 *maxMoneyStr, const u8 *noItemSpaceStr, const u8 *itemGivenStr)
{
char buffer[80];
@@ -493,9 +499,9 @@ bool8 sub_809CBBC(const struct ItemWithQuantity *itemToAdd, u8 *maxMoneyStr, u8
extern const struct ItemWithQuantity gUnknown_81163BC[];
s32 sub_809CC90(s32 r0)
s32 sub_809CC90(s32 tableId)
{
const struct ItemWithQuantity *item = &gUnknown_81163BC[r0];
const struct ItemWithQuantity *item = &gUnknown_81163BC[tableId];
if (item->id == ITEM_POKE) {
if (gTeamInventoryRef->teamMoney + item->quantity > MAX_TEAM_MONEY)
return 2;
@@ -506,3 +512,246 @@ s32 sub_809CC90(s32 r0)
}
return 1;
}
extern const u8 gUnknown_81163F0[];
extern const u8 gUnknown_811642C[];
s32 sub_809CCDC(u32 tableId, s32 a1)
{
s32 strId;
const struct ItemWithQuantity *item = &gUnknown_81163BC[tableId];
gUnknown_20399E0->unk4 = -1;
gUnknown_20399E0->unk8 = 0;
if (a1 > 99) {
strId = 2;
}
else if (a1 > 1) {
strId = 1;
}
else {
strId = 0;
}
if (sub_809CBBC(item, gUnknown_81163F0, gUnknown_811642C, gUnknown_203B4A0[strId])) {
gUnknown_20399E0->unk4 = tableId;
gUnknown_20399E0->unk8 = a1;
return 1;
}
else {
return 2;
}
}
s32 sub_809CD48(void)
{
if (IsTextboxOpen_809A750()) {
return 0;
}
return 3;
}
void nullsub_117(void) {}
void nullsub_118(void) {}
// TODO: merge this struct with other ground-related structs (if possible, otherwise just give a fitting name)
struct Tempsub_809CD68Struct
{
s32 unk0;
s32 unk4;
s32 unk8;
u8 unkC;
s32 unk10;
s32 unk14;
u8 unk18;
};
void sub_809CD68(struct Tempsub_809CD68Struct *dst)
{
dst->unk0 = 0;
dst->unk4 = 0;
dst->unk10 = -1;
dst->unk14 = 0;
dst->unk8 = 0;
dst->unk18 = 0;
}
void sub_809CD7C(struct Tempsub_809CD68Struct *dst)
{
dst->unk0 = 0;
dst->unk10 = -1;
dst->unk14 = 0;
dst->unk8 = 0;
}
void sub_809CD8C(struct Tempsub_809CD68Struct *dst, s32 a1)
{
if (a1 == 5) {
sub_809CD68(dst);
dst->unk0 = a1;
}
else if (dst->unk4 != a1) {
dst->unk4 = a1;
dst->unk10 = -1;
dst->unk14 = 0;
}
}
s32 sub_809CDB8(struct Tempsub_809CD68Struct *dst)
{
s32 ret = dst->unk4;
if (ret == 0) {
ret = dst->unk0;
}
return ret;
}
u32 sub_809CDC8(struct Tempsub_809CD68Struct *strPtr, u32 *r6, s8 *r7, s32 *param_4, u32 param_5, u32 param_6)
{
u32 sp_4;
s32 sp;
s32 r8;
param_4[0] = -1;
switch (strPtr->unk0) {
case 1:
if (param_6 & 0x2000) {
sub_809CD68(strPtr);
strPtr->unk0 = 2;
}
break;
case 2:
if (!(param_6 & 0x2000)) {
sub_809CD68(strPtr);
strPtr->unk0 = 1;
}
break;
}
r8 = strPtr->unk4;
if (r8 == 0)
r8 = strPtr->unk0;
switch (r8) {
case 1:
{
u16 held = gRealInputs.held;
u16 pressed = gRealInputs.pressed;
if (held & DPAD_ANY) {
if (held & B_BUTTON) {
strPtr->unk10 = 0;
}
else {
strPtr->unk10 = -1;
}
}
else if (pressed & B_BUTTON) {
strPtr->unk10 = 0x14;
}
else if (strPtr->unk10 > 1) {
strPtr->unk10--;
if (!(held & B_BUTTON)) {
*r6 = 0x13;
*r7 = -1;
return 5;
}
}
else {
strPtr->unk10 = -1;
}
if (pressed & A_BUTTON) {
*r6 = 10;
}
else if (strPtr->unk10 == 0) {
*r6 = 8;
}
else {
*r6 = 7;
}
*r7 = sub_809CFE8(held);
return strPtr->unk0;
}
case 5:
if (sub_809B260(&sp)) {
if (gGameOptionsRef->unkC == 0)
sub_809C6CC(4);
else
sub_809C6CC(3);
nullsub_104();
sub_809CD7C(strPtr);
strPtr->unk0 = 1;
switch (sp) {
case 3:
strPtr->unk0 = 4;
*r6 = 1;
*r7 = -1;
return 4;
case 2:
strPtr->unk0 = 4;
sub_8098D80(0x1E);
*r6 = 1;
*r7 = -1;
return strPtr->unk0;
case 1:
strPtr->unk0 = 4;
*r6 = 1;
*r7 = -1;
return 4;
case 4:
strPtr->unk0 = 4;
GroundMap_ExecuteEvent(0x45, 0);
*r6 = 1;
*r7 = -1;
return strPtr->unk0;
}
GroundScriptLockJumpZero(2);
}
break;
case 6:
case 7:
if (sub_809B260(&sp_4)) {
sub_809CD7C(strPtr);
strPtr->unk0 = 1;
return strPtr->unk0;
}
break;
case 2:
{
if (strPtr->unk8 >= 1) {
strPtr->unk8--;
*r6 = 9;
*r7 = strPtr->unkC;
}
else {
s32 v;
u16 held = gRealInputs.held;
*r6 = 9;
if (held & 0x40) {
*r7 = 4;
}
else if (held & 0x80) {
*r7 = 0;
}
else {
*r7 = -1;
}
// TODO: Fix me, this should be a simple -1 comparision, but agbcc doesn't want to cooperate...
v = strPtr->unkC = *r7;
if ((v << 0x18) != (0xFF) << 0x18) {
strPtr->unk8 = 0x20;
}
}
}
return r8;
}
*r6 = 0;
*r7 = -1;
return r8;
}