mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
more ground script work
This commit is contained in:
parent
4b1e714c2e
commit
3438e615f3
|
|
@ -5,23 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80A1440
|
||||
sub_80A1440:
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
adds r3, r2, 0
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
movs r0, 0
|
||||
adds r1, r4, 0
|
||||
adds r2, r5, 0
|
||||
bl sub_80A14E8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A1440
|
||||
|
||||
thumb_func_start GroundScript_ExecuteTrigger
|
||||
GroundScript_ExecuteTrigger:
|
||||
push {r4,r5,lr}
|
||||
|
|
@ -1875,118 +1858,4 @@ _080A2424: .4byte gUnknown_8116848
|
|||
_080A2428: .4byte gUnknown_2039AC0
|
||||
thumb_func_end GroundScript_Unlock
|
||||
|
||||
thumb_func_start sub_80A242C
|
||||
sub_80A242C:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x10
|
||||
adds r4, r1, 0
|
||||
ldr r0, [r0, 0x2C]
|
||||
adds r2, r0, 0
|
||||
adds r2, 0x10
|
||||
mov r3, sp
|
||||
_080A243A:
|
||||
mov r1, sp
|
||||
adds r0, r2, 0
|
||||
ldm r0!, {r5-r7}
|
||||
stm r1!, {r5-r7}
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
adds r2, 0x10
|
||||
ldrb r0, [r3]
|
||||
cmp r0, 0xF4
|
||||
bne _080A243A
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r3, r1]
|
||||
cmp r4, r0
|
||||
bne _080A243A
|
||||
adds r0, r2, 0
|
||||
add sp, 0x10
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A242C
|
||||
|
||||
thumb_func_start sub_80A2460
|
||||
sub_80A2460:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x10
|
||||
adds r5, r0, 0
|
||||
mov r8, r1
|
||||
ldr r6, [r5, 0x28]
|
||||
mov r4, sp
|
||||
_080A2470:
|
||||
mov r0, sp
|
||||
adds r1, r6, 0
|
||||
ldm r1!, {r2,r3,r7}
|
||||
stm r0!, {r2,r3,r7}
|
||||
ldr r1, [r1]
|
||||
str r1, [r0]
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0xCC
|
||||
bne _080A249E
|
||||
ldr r1, [sp, 0x4]
|
||||
mov r0, r8
|
||||
movs r2, 0x2
|
||||
bl FlagJudge
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A24F0
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r4, r0]
|
||||
adds r0, r5, 0
|
||||
bl sub_80A242C
|
||||
b _080A24F4
|
||||
_080A249E:
|
||||
cmp r0, 0xCD
|
||||
bne _080A24BE
|
||||
ldr r1, [sp, 0x4]
|
||||
ldrb r2, [r4, 0x1]
|
||||
mov r0, r8
|
||||
bl FlagJudge
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A24F0
|
||||
movs r2, 0x2
|
||||
ldrsh r1, [r4, r2]
|
||||
adds r0, r5, 0
|
||||
bl sub_80A242C
|
||||
b _080A24F4
|
||||
_080A24BE:
|
||||
cmp r0, 0xCE
|
||||
bne _080A24EC
|
||||
ldr r1, [sp, 0x4]
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x74
|
||||
bl sub_8001658
|
||||
adds r1, r0, 0
|
||||
ldrb r2, [r4, 0x1]
|
||||
mov r0, r8
|
||||
bl FlagJudge
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080A24F0
|
||||
movs r3, 0x2
|
||||
ldrsh r1, [r4, r3]
|
||||
adds r0, r5, 0
|
||||
bl sub_80A242C
|
||||
b _080A24F4
|
||||
_080A24EC:
|
||||
adds r0, r6, 0
|
||||
b _080A24F4
|
||||
_080A24F0:
|
||||
adds r6, 0x10
|
||||
b _080A2470
|
||||
_080A24F4:
|
||||
add sp, 0x10
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80A2460
|
||||
|
||||
.align 2,0
|
||||
|
|
|
|||
|
|
@ -139,5 +139,7 @@ extern FunctionScript gFunctionScriptTable[];
|
|||
#include "debug.h"
|
||||
|
||||
bool8 GroundScript_ExecutePP(Action *, s32 *, ScriptInfoSmall *, const DebugLocation *unused);
|
||||
ScriptCommand *sub_80A242C(Action *action, s32 r1);
|
||||
ScriptCommand *sub_80A2460(Action *action, s32 r1);
|
||||
|
||||
#endif // GUARD_GROUND_SCRIPT_H
|
||||
|
|
|
|||
|
|
@ -352,6 +352,7 @@ SECTIONS {
|
|||
asm/handleaction.o(.text);
|
||||
src/ground_script_1.o(.text);
|
||||
asm/ground_script.o(.text);
|
||||
src/ground_script_2.o(.text);
|
||||
src/code_80A26CC.o(.text);
|
||||
asm/code_80A26CC_1.o(.text);
|
||||
src/ground_map.o(.text);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ extern u8 sub_80AC378(void);
|
|||
extern u8 sub_80AD290(void);
|
||||
extern u8 sub_80A8B74(void);
|
||||
extern u8 sub_809A750(void);
|
||||
extern ScriptCommand *sub_80A2460(Action *param_1, u32);
|
||||
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
|
||||
|
||||
void SetPredefinedScript(Action *param_1, s16 index, ScriptCommand *param_3)
|
||||
|
|
|
|||
|
|
@ -160,8 +160,6 @@ u8 sub_809D8EC(Action*, s16);
|
|||
bool8 sub_809D940(void);
|
||||
void sub_809D9B8(s16);
|
||||
bool8 sub_809DA08(Action*, s16, u8);
|
||||
ScriptCommand *sub_80A242C(Action*, s32);
|
||||
ScriptCommand *sub_80A2460(Action*, s32);
|
||||
s16 sub_80A4D7C(s32);
|
||||
s16 sub_80A7AE8(s16);
|
||||
void sub_80A87AC(s32, s32);
|
||||
|
|
@ -1872,3 +1870,10 @@ s32 ExecuteScriptCommand(Action *action) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_80A14E8(u32, u8, u32, u32);
|
||||
|
||||
UNUSED u32 sub_80A1440(u32 r0, u32 r1, u32 r2)
|
||||
{
|
||||
return sub_80A14E8(0, r0, r1, r2);
|
||||
}
|
||||
|
|
|
|||
116
src/ground_script_2.c
Normal file
116
src/ground_script_2.c
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
#include "debug.h"
|
||||
#include "global.h"
|
||||
#include "ground_map_1.h"
|
||||
#include "ground_script.h"
|
||||
|
||||
s32 sub_8001658(ScriptUnion832*, s32);
|
||||
u8 FlagJudge(s32 r0, s32 r1, u32 operation);
|
||||
|
||||
extern u8 gUnknown_2039A36;
|
||||
extern u8 gUnknown_2039A38[];
|
||||
extern u32 gUnknown_2039B48[];
|
||||
extern u8 gUnknown_2039AC0[];
|
||||
extern u8 gUnknown_8116848[];
|
||||
|
||||
s32 sub_80A8B1C(s16);
|
||||
s32 sub_80AC320(s16);
|
||||
s32 sub_80AD238(s16);
|
||||
|
||||
// TODO: this is still WIP
|
||||
|
||||
// void GroundScript_Unlock(void)
|
||||
// {
|
||||
// s32 index;
|
||||
// u8 temp;
|
||||
// s16 temp_s16;
|
||||
//
|
||||
// if(gUnknown_2039A36 != 0)
|
||||
// {
|
||||
// gUnknown_2039A36 = 0;
|
||||
// for(index = 0; index < 0x81; index++)
|
||||
// {
|
||||
// if(gUnknown_2039A38[index] != 0)
|
||||
// {
|
||||
// Log(1, gUnknown_8116848, index);
|
||||
// temp = sub_80A4D2C(index);
|
||||
// temp |= sub_80A8B1C(index);
|
||||
// temp |= sub_80AC320(index);
|
||||
// temp |= sub_80AD238(index);
|
||||
//
|
||||
// if(gUnknown_2039AC0[index] != 0)
|
||||
// {
|
||||
// if (temp != 0)
|
||||
// {
|
||||
// temp_s16 = index;
|
||||
// temp_s16 |= 0x80;
|
||||
// sub_80A4D2C(temp_s16);
|
||||
// sub_80A8B1C(temp_s16);
|
||||
// sub_80AC320(temp_s16);
|
||||
// sub_80AD238(temp_s16);
|
||||
// gUnknown_2039AC0[index] = 0;
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// gUnknown_2039A38[index] = 0;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
ScriptCommand *sub_80A242C(Action *action, s32 r1)
|
||||
{
|
||||
ScriptCommand script;
|
||||
ScriptCommand *scriptPtr2;
|
||||
ScriptCommand *scriptPtr;
|
||||
|
||||
scriptPtr2 = action->scriptData.script.ptr2;
|
||||
scriptPtr = scriptPtr2 + 1;
|
||||
|
||||
while(1) {
|
||||
script = *scriptPtr;
|
||||
scriptPtr++;
|
||||
|
||||
if(script.op == 0xF4)
|
||||
{
|
||||
if(r1 == script.argShort)
|
||||
return scriptPtr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ScriptCommand *sub_80A2460(Action *action, s32 r1)
|
||||
{
|
||||
ScriptCommand script;
|
||||
ScriptCommand *scriptPtr;
|
||||
s32 temp;
|
||||
|
||||
scriptPtr = action->scriptData.script.ptr;
|
||||
|
||||
while(1) {
|
||||
script = *scriptPtr;
|
||||
|
||||
if (script.op == 0xCC)
|
||||
{
|
||||
if(FlagJudge(r1, script.arg1, 0x2))
|
||||
return sub_80A242C(action, script.argShort);
|
||||
}
|
||||
else if (script.op == 0xCD)
|
||||
{
|
||||
if(FlagJudge(r1, script.arg1, script.argByte))
|
||||
return sub_80A242C(action, script.argShort);
|
||||
}
|
||||
else if (script.op == 0xCE)
|
||||
{
|
||||
temp = sub_8001658(action->scriptData.unk50, (s16)script.arg1);
|
||||
if(FlagJudge(r1, temp, script.argByte))
|
||||
return sub_80A242C(action, script.argShort);
|
||||
}
|
||||
else
|
||||
{
|
||||
return scriptPtr;
|
||||
}
|
||||
scriptPtr++;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user