mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-07 16:45:39 -05:00
More ground script work
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user