diff --git a/asm/code_809D148.s b/asm/code_809D148.s index b334680db..0d44ee538 100644 --- a/asm/code_809D148.s +++ b/asm/code_809D148.s @@ -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 diff --git a/asm/ground_script.s b/asm/ground_script.s index 62a505d94..c43e41ce7 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -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 diff --git a/include/ground_script.h b/include/ground_script.h index a2fa16dae..5c0308e2b 100644 --- a/include/ground_script.h +++ b/include/ground_script.h @@ -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; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index 592fca149..7a1ce0c40 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -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) diff --git a/src/ground_map.c b/src/ground_map.c index ff5926406..ba64b249a 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -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 *); diff --git a/src/ground_script.c b/src/ground_script.c index ec94a290d..6f845c8f6 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -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(¶m_1->unk24); - sub_809D568(¶m_1->unk84); - return TRUE; + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_1->unk84); + return TRUE; } bool8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused) { - sub_809D568(¶m_1->unk24); - sub_809D568(¶m_1->unk84); - param_1->unk24.unk2 = 4; - return TRUE; + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_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(¶m_1->unk84, ¶m_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(¶m_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(¶m_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(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); - break; - case 0: - if (param_1->unk24.scriptType != 1) goto _0809D84A; - memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); - break; - case 1: -_0809D84A: - sub_809D568(¶m_1->unk84); - break; - default: - // "execute script type error %d" - FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType); - } - sub_809D568(¶m_1->unk24); - if (param_2 != NULL) { - param_1->unkC = param_2[0]; - } - else { - sub_809D520(¶m_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(¶m_1->unk24); + if (param_2 != NULL) { + param_1->unkC = param_2[0]; + } + else { + sub_809D520(¶m_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, ¶m_1->unk24.unk26); - } - return TRUE; + if (param_1->unk0->callbacks[5] != 0) { + param_1->unk0->callbacks[5](param_1->unk4, ¶m_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); }