More ground script work

This commit is contained in:
Seth Barberee
2023-08-05 12:43:46 -07:00
parent 0fc0e6279f
commit ef9adf4db0
6 changed files with 162 additions and 223 deletions

View File

@@ -641,40 +641,4 @@ _0809D6D2:
bx r1
thumb_func_end sub_809D684
thumb_func_start sub_809D6D8
sub_809D6D8:
lsls r1, 16
asrs r1, 14
adds r0, 0x14
adds r0, r1
str r2, [r0]
bx lr
thumb_func_end sub_809D6D8
thumb_func_start sub_809D6E4
sub_809D6E4:
push {r4,lr}
lsls r2, 16
asrs r2, 16
lsls r4, r2, 2
adds r3, r0, 0
adds r3, 0x14
adds r3, r4
ldr r3, [r3]
str r3, [r1]
strh r2, [r1, 0x4]
ldrh r2, [r0, 0x10]
strh r2, [r1, 0x6]
ldrb r0, [r0, 0x12]
strb r0, [r1, 0x8]
adds r0, r3, 0
cmp r0, 0
beq _0809D708
movs r0, 0x1
_0809D708:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_809D6E4
.align 2,0

View File

@@ -8642,76 +8642,4 @@ _080A24F4:
bx r1
thumb_func_end sub_80A2460
thumb_func_start sub_80A2500
sub_80A2500:
push {r4,lr}
adds r4, r0, 0
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0x1
bne _080A2524
lsls r4, 16
asrs r4, 16
movs r2, 0x2
ldrsh r0, [r1, r2]
bl sub_80A8BBC
adds r1, r0, 0
lsls r1, 16
asrs r1, 16
adds r0, r4, 0
bl sub_809AB4C
_080A2524:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80A2500
thumb_func_start sub_80A252C
sub_80A252C:
push {r4,lr}
adds r4, r0, 0
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0x1
bne _080A2550
lsls r4, 16
asrs r4, 16
movs r2, 0x2
ldrsh r0, [r1, r2]
bl sub_80A8BBC
adds r1, r0, 0
lsls r1, 16
asrs r1, 16
adds r0, r4, 0
bl sub_809ABB4
_080A2550:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80A252C
thumb_func_start sub_80A2558
sub_80A2558:
push {r4,lr}
adds r4, r0, 0
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0x1
bne _080A257C
lsls r4, 16
asrs r4, 16
movs r2, 0x2
ldrsh r0, [r1, r2]
bl sub_80A8BBC
adds r1, r0, 0
lsls r1, 16
asrs r1, 16
adds r0, r4, 0
bl sub_809AC18
_080A257C:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80A2558
.align 2,0
.align 2,0

View File

@@ -18,7 +18,7 @@ struct GroundScript_ExecutePP_1_sub
/* 0xE */ u8 unkE;
/* 0xF */ u8 fillF;
/* 0x10 */ u32 unk10;
/* 0x14 */ u32 unk14;
/* 0x14 */ u8 *unk14;
/* 0x18 */ u8 fill18[0x22 - 0x18];
/* 0x22 */ u16 unk22;
/* 0x24 */ u16 unk24;
@@ -32,6 +32,7 @@ struct GroundScript_ExecutePP_1_sub2
Callback callbacks[10]; // IDK the size..
};
// size: 0x110
struct GroundScript_ExecutePP_1
{
struct GroundScript_ExecutePP_1_sub2 *unk0;
@@ -40,7 +41,7 @@ struct GroundScript_ExecutePP_1
u32 unkC;
u16 unk10;
u8 unk12;
u8 fill18[0x24 - 0x13];
u8 *unk14[4];
struct GroundScript_ExecutePP_1_sub unk24;
struct GroundScript_ExecutePP_1_sub unk84;
u16 unkE4;

View File

@@ -15,6 +15,36 @@ extern const u8 *gUnknown_8117000[];
extern void sub_809AC18(s32, s32);
extern void sub_809ABB4(s32, s32);
extern void sub_809AB4C(s32, s32);
s16 sub_80A8BBC(s16);
void sub_80A2500(s32 param_1, s16 *param_2)
{
s16 temp;
if (*param_2 == 1) {
temp = param_1;
sub_809AB4C(temp, sub_80A8BBC(param_2[1]));
}
}
void sub_80A252C(s32 param_1, s16 *param_2)
{
s16 temp;
if (*param_2 == 1) {
temp = param_1;
sub_809ABB4(temp, sub_80A8BBC(param_2[1]));
}
}
void sub_80A2558(s32 param_1, s16 *param_2)
{
s16 temp;
if (*param_2 == 1) {
temp = param_1;
sub_809AC18(temp, sub_80A8BBC(param_2[1]));
}
}
void sub_80A2584(s16 r0, s16 r1)
{
@@ -32,29 +62,29 @@ void sub_80A2598(s16 r0, s16 r1)
u32 sub_80A25AC(u16 param_1)
{
if (sub_8098F88() != 0) {
return param_1;
}
else
{
if (param_1 == 0x32) {
return 0x32;
}
else if (!sub_80023E4(0xc)) {
return 999;
}
else if (sub_80023E4(0xd)) {
return 0x13;
}
else if (param_1 != 1) {
if (sub_8098F88() != 0) {
return param_1;
}
else
{
sub_8001658(0,0x28);
return 1;
if (param_1 == 0x32) {
return 0x32;
}
else if (!sub_80023E4(0xc)) {
return 999;
}
else if (sub_80023E4(0xd)) {
return 0x13;
}
else if (param_1 != 1) {
return param_1;
}
else
{
sub_8001658(0,0x28);
return 1;
}
}
}
}
struct unkStruct_80A2608 *sub_80A2608(s16 index)
@@ -98,19 +128,19 @@ s32 sub_80A2668(u32 r0)
u32 sub_80A2688(u8 r0)
{
u32 uVar1;
uVar1 = r0 - 0x4B;
u32 uVar1;
// u8 cast is needed for only this compare
if ((u8)uVar1 < 0x17)
return uVar1;
else if(r0 == 0x2F)
return 0x17;
else if (r0 == 0x30)
return 0x18;
else
return -1;
uVar1 = r0 - 0x4B;
// u8 cast is needed for only this compare
if ((u8)uVar1 < 0x17)
return uVar1;
else if(r0 == 0x2F)
return 0x17;
else if (r0 == 0x30)
return 0x18;
else
return -1;
}
s16 sub_80A26B8(s16 r0)

View File

@@ -19,7 +19,7 @@ extern void sub_80A5EBC(void);
extern void sub_80A2D00(void *);
extern void sub_80015C0(u32, u32);
extern void sub_80A5EDC(u32);
extern void sub_809D754(void *, struct DebugLocation *);
extern void sub_809D754(struct GroundScript_ExecutePP_1 *, struct DebugLocation *);
extern void sub_80A2D68(void *);
extern void nullsub_121(void);
extern void sub_80A2D88(void *);

View File

@@ -16,13 +16,11 @@ extern u8 gUnknown_811656C[];
extern struct DebugLocation gUnknown_81165C8;
extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *);
extern void sub_809D520(void *);
extern void sub_809D568(void *);
extern u8 sub_80AC378(void);
extern u8 sub_80AD290(void);
extern u8 sub_80A8B74(void);
extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32 index);
extern u8 sub_809A750(void);
extern u8 *sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32);
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
@@ -36,6 +34,23 @@ struct FunctionScript
extern struct FunctionScript gFunctionScriptTable[];
void sub_809D6D8(struct GroundScript_ExecutePP_1 *param_1, s16 index, u8 *param_3)
{
param_1->unk14[index] = param_3;
}
bool8 sub_809D6E4(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 _index)
{
u8 *scriptPtr;
s32 index = _index;
scriptPtr = param_1->unk14[index];
script->scriptPointer = scriptPtr;
script->scriptType = index;
script->unk6 = param_1->unk10;
script->unk8 = param_1->unk12;
return scriptPtr != NULL;
}
void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 index)
{
@@ -54,109 +69,110 @@ void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_E
bool8 sub_809D754(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused)
{
sub_809D568(&param_1->unk24);
sub_809D568(&param_1->unk84);
return TRUE;
sub_809D568(&param_1->unk24);
sub_809D568(&param_1->unk84);
return TRUE;
}
bool8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused)
{
sub_809D568(&param_1->unk24);
sub_809D568(&param_1->unk84);
param_1->unk24.unk2 = 4;
return TRUE;
sub_809D568(&param_1->unk24);
sub_809D568(&param_1->unk84);
param_1->unk24.unk2 = 4;
return TRUE;
}
bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused)
{
if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) {
return FALSE;
}
switch(param_3->scriptType) {
case 2:
case 3:
if (param_1->unk24.scriptType == 1) {
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) {
return FALSE;
}
switch(param_3->scriptType) {
case 2:
case 3:
if (param_1->unk24.scriptType == 1) {
param_1->unk84 = param_1->unk24;
break;
}
if (param_1->unk24.scriptType == 5) {
sub_809D568(&param_1->unk84);
}
break;
}
if (param_1->unk24.scriptType == 5) {
case 5:
if (param_1->unk24.scriptType != 2) {
// "execute script type error B"
FatalError(&gUnknown_8116538, gUnknown_8116544);
}
if (param_1->unk84.scriptType != -1) {
// "execute script type error C"
FatalError(&gUnknown_8116560, gUnknown_811656C);
}
param_1->unk84 = param_1->unk24;
break;
case 0:
if (param_1->unk24.scriptType != 1) goto _0809D84A;
param_1->unk84 = param_1->unk24;
break;
case 1:
_0809D84A:
sub_809D568(&param_1->unk84);
}
break;
case 5:
if (param_1->unk24.scriptType != 2) {
// "execute script type error B"
FatalError(&gUnknown_8116538, gUnknown_8116544);
}
if (param_1->unk84.scriptType != -1) {
// "execute script type error C"
FatalError(&gUnknown_8116560, gUnknown_811656C);
}
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
break;
case 0:
if (param_1->unk24.scriptType != 1) goto _0809D84A;
memcpy(&param_1->unk84, &param_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
break;
case 1:
_0809D84A:
sub_809D568(&param_1->unk84);
break;
default:
// "execute script type error %d"
FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType);
}
sub_809D568(&param_1->unk24);
if (param_2 != NULL) {
param_1->unkC = param_2[0];
}
else {
sub_809D520(&param_1->unkC);
}
param_1->unk24.scriptType = param_3->scriptType;
param_1->unk24.unk2 = 3;
param_1->unk24.unkC = param_3->unk6;
param_1->unk24.unkE = param_3->unk8;
param_1->unk24.scriptPointer1 = param_3->scriptPointer;
param_1->unk24.scriptPointer2 = param_3->scriptPointer;
param_1->unk24.unk10 = 0;
param_1->unk24.unk14 = 0;
break;
default:
// "execute script type error %d"
FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType);
}
sub_809D568(&param_1->unk24);
if (param_2 != NULL) {
param_1->unkC = param_2[0];
}
else {
sub_809D520(&param_1->unkC);
}
param_1->unk24.scriptType = param_3->scriptType;
param_1->unk24.unk2 = 3;
param_1->unk24.unkC = param_3->unk6;
param_1->unk24.unkE = param_3->unk8;
param_1->unk24.scriptPointer1 = param_3->scriptPointer;
param_1->unk24.scriptPointer2 = param_3->scriptPointer;
param_1->unk24.unk10 = 0;
param_1->unk24.unk14 = NULL;
if (param_1->unk0->callbacks[5] != 0) {
param_1->unk0->callbacks[5](param_1->unk4, &param_1->unk24.unk26);
}
return TRUE;
if (param_1->unk0->callbacks[5] != 0) {
param_1->unk0->callbacks[5](param_1->unk4, &param_1->unk24.unk26);
}
return TRUE;
}
bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 index, struct DebugLocation *debug)
{
struct GroundScript_ExecutePP_3 auStack28;
sub_809D6E4(param_1,&auStack28,index);
return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug);
struct GroundScript_ExecutePP_3 auStack28;
sub_809D6E4(param_1,&auStack28,index);
return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug);
}
u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2)
{
s32 param_2_s32;
s32 param_2_s32;
param_2_s32 = param_2;
if ((param_2 == 0) && (sub_809A750() == 0)) {
param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0);
return 0;
}
else {
param_1->unk24.unk22 = param_2_s32;
param_1->unk24.unk2 = 2;
gUnknown_2039A36 = 1;
return 1;
}
param_2_s32 = param_2;
if ((param_2 == 0) && (sub_809A750() == 0)) {
param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0);
return 0;
}
else {
param_1->unk24.unk22 = param_2_s32;
param_1->unk24.unk2 = 2;
gUnknown_2039A36 = 1;
return 1;
}
}
u8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0)
bool8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0)
{
// NOTE: Will always return TRUE
return sub_809D770(r0, &gUnknown_81165C8);
}