mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-27 19:24:58 -05:00
more work on ground_script
This commit is contained in:
@@ -1,147 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
|
||||
|
||||
thumb_func_start InitActionWithParams
|
||||
InitActionWithParams:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r7, r0, 0
|
||||
adds r6, r1, 0
|
||||
mov r8, r2
|
||||
adds r4, r3, 0
|
||||
ldr r5, [sp, 0x18]
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
lsls r5, 24
|
||||
asrs r5, 24
|
||||
bl InitAction
|
||||
str r6, [r7]
|
||||
mov r0, r8
|
||||
str r0, [r7, 0x4]
|
||||
strh r4, [r7, 0x10]
|
||||
strb r5, [r7, 0x12]
|
||||
ldrh r0, [r6]
|
||||
strh r0, [r7, 0x8]
|
||||
ldr r1, [r6, 0x4]
|
||||
cmp r1, 0
|
||||
beq _0809D63A
|
||||
mov r0, r8
|
||||
bl _call_via_r1
|
||||
strh r0, [r7, 0xA]
|
||||
b _0809D63C
|
||||
_0809D63A:
|
||||
strh r1, [r7, 0xA]
|
||||
_0809D63C:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end InitActionWithParams
|
||||
|
||||
thumb_func_start sub_809D648
|
||||
sub_809D648:
|
||||
push {lr}
|
||||
bl InitAction
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_809D648
|
||||
|
||||
thumb_func_start sub_809D654
|
||||
sub_809D654:
|
||||
movs r1, 0x26
|
||||
ldrsh r0, [r0, r1]
|
||||
bx lr
|
||||
thumb_func_end sub_809D654
|
||||
|
||||
thumb_func_start sub_809D65C
|
||||
sub_809D65C:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
movs r2, 0x26
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0
|
||||
bne _0809D66E
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _0809D672
|
||||
_0809D66E:
|
||||
movs r2, 0x24
|
||||
ldrsh r0, [r1, r2]
|
||||
_0809D672:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809D65C
|
||||
|
||||
thumb_func_start sub_809D678
|
||||
sub_809D678:
|
||||
movs r2, 0x26
|
||||
ldrsh r1, [r0, r2]
|
||||
negs r0, r1
|
||||
orrs r0, r1
|
||||
lsrs r0, 31
|
||||
bx lr
|
||||
thumb_func_end sub_809D678
|
||||
|
||||
thumb_func_start sub_809D684
|
||||
sub_809D684:
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
adds r3, r1, 0
|
||||
movs r1, 0x26
|
||||
ldrsh r0, [r2, r1]
|
||||
cmp r0, 0
|
||||
beq _0809D6A4
|
||||
ldr r0, [r2, 0x34]
|
||||
cmp r0, 0
|
||||
beq _0809D69C
|
||||
ldr r1, [r2, 0x38]
|
||||
b _0809D69E
|
||||
_0809D69C:
|
||||
ldr r1, [r2, 0x2C]
|
||||
_0809D69E:
|
||||
ldr r0, [r3]
|
||||
cmp r1, r0
|
||||
beq _0809D6CC
|
||||
_0809D6A4:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x86
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r0, 0
|
||||
beq _0809D6D0
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x94
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0809D6C0
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x98
|
||||
b _0809D6C4
|
||||
_0809D6C0:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x8C
|
||||
_0809D6C4:
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r3]
|
||||
cmp r1, r0
|
||||
bne _0809D6D0
|
||||
_0809D6CC:
|
||||
movs r0, 0x1
|
||||
b _0809D6D2
|
||||
_0809D6D0:
|
||||
movs r0, 0
|
||||
_0809D6D2:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809D684
|
||||
|
||||
.align 2,0
|
||||
@@ -104,12 +104,12 @@ typedef struct CallbackData
|
||||
typedef struct Action
|
||||
{
|
||||
// size: 0xE4
|
||||
/* 0x00 */ struct CallbackData *callbacks;
|
||||
/* 0x00 */ const struct CallbackData *callbacks;
|
||||
/* 0x04 */ void *parentObject; // struct GroundObject *
|
||||
/* 0x08 */ s16 unk8[2]; // id?
|
||||
/* 0x0C */ ScriptUnion1632 unkC;
|
||||
/* 0x10 */ u16 group;
|
||||
/* 0x12 */ u8 sector;
|
||||
/* 0x10 */ s16 group;
|
||||
/* 0x12 */ s8 sector;
|
||||
// padding
|
||||
/* 0x14 */ ScriptCommand *predefinedScripts[4];
|
||||
/* 0x24 */ ScriptData scriptData;
|
||||
|
||||
@@ -347,7 +347,6 @@ SECTIONS {
|
||||
src/code_809C5C4.o(.text);
|
||||
asm/code_809C5C4.o(.text);
|
||||
src/code_809D148.o(.text);
|
||||
asm/code_809D148.o(.text);
|
||||
src/ground_script.o(.text);
|
||||
asm/handleaction.o(.text);
|
||||
src/ground_script_1.o(.text);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "other_random.h"
|
||||
#include "memory.h"
|
||||
#include "ground_script.h"
|
||||
|
||||
struct unkStruct_809D158
|
||||
{
|
||||
@@ -415,71 +414,3 @@ void sub_809D508(void)
|
||||
MemoryFree(gUnknown_203B4B0);
|
||||
gUnknown_203B4B0 = NULL;
|
||||
}
|
||||
|
||||
// -1 didn't match
|
||||
void sub_809D520(void *a0)
|
||||
{
|
||||
u16 *ptr = a0;
|
||||
u16 v = 0xFFFF;
|
||||
*ptr = v;
|
||||
}
|
||||
|
||||
extern s32 sub_80A882C(s16);
|
||||
extern s32 sub_80AC240(s16);
|
||||
extern s32 sub_80AD158(s16);
|
||||
|
||||
s32 sub_809D52C(void *a0)
|
||||
{
|
||||
s16 *ptr = a0;
|
||||
|
||||
switch (ptr[0])
|
||||
{
|
||||
case 0: return 0;
|
||||
case 1: return sub_80A882C(ptr[1]);
|
||||
case 2: return sub_80AC240(ptr[1]);
|
||||
case 3: return sub_80AD158(ptr[1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void InitScriptData(ScriptData *a0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
a0->state = -1;
|
||||
a0->savedState = 0;
|
||||
a0->script.ptr2 = 0;
|
||||
a0->script.ptr = 0;
|
||||
a0->savedScript.ptr2 = 0;
|
||||
a0->savedScript.ptr = 0;
|
||||
a0->curScriptOp = 0;
|
||||
a0->curPtr = 0;
|
||||
a0->unk22 = -1;
|
||||
a0->unk24 = 0;
|
||||
a0->unk26 = 0xFF;
|
||||
a0->branchDiscriminant = 0;
|
||||
a0->unk2A = 0;
|
||||
a0->unk2C = 0;
|
||||
a0->unk30 = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
a0->unk50[i].raw = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void InitAction(Action *a0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
a0->callbacks = NULL;
|
||||
a0->parentObject = NULL;
|
||||
a0->group = -1;
|
||||
a0->sector = 0xFF;
|
||||
sub_809D520(&a0->unkC);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
a0->predefinedScripts[i] = NULL;
|
||||
}
|
||||
|
||||
InitScriptData(&a0->scriptData);
|
||||
InitScriptData(&a0->scriptData2);
|
||||
}
|
||||
|
||||
@@ -17,13 +17,151 @@ extern u8 gUnknown_811656C[];
|
||||
extern DebugLocation gUnknown_81165C8;
|
||||
|
||||
extern void sub_809D520(void *);
|
||||
extern void InitScriptData(void *);
|
||||
extern u8 sub_80AC378(void);
|
||||
extern u8 sub_80AD290(void);
|
||||
extern u8 sub_80A8B74(void);
|
||||
extern u8 sub_809A750(void);
|
||||
extern s32 sub_80A882C(s16);
|
||||
extern s32 sub_80AC240(s16);
|
||||
extern s32 sub_80AD158(s16);
|
||||
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
|
||||
|
||||
// -1 didn't match
|
||||
void sub_809D520(void *a0)
|
||||
{
|
||||
u16 *ptr = a0;
|
||||
u16 v = 0xFFFF;
|
||||
*ptr = v;
|
||||
}
|
||||
|
||||
s32 sub_809D52C(void *a0)
|
||||
{
|
||||
s16 *ptr = a0;
|
||||
|
||||
switch (ptr[0])
|
||||
{
|
||||
case 0: return 0;
|
||||
case 1: return sub_80A882C(ptr[1]);
|
||||
case 2: return sub_80AC240(ptr[1]);
|
||||
case 3: return sub_80AD158(ptr[1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void InitScriptData(ScriptData *a0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
a0->state = -1;
|
||||
a0->savedState = 0;
|
||||
a0->script.ptr2 = 0;
|
||||
a0->script.ptr = 0;
|
||||
a0->savedScript.ptr2 = 0;
|
||||
a0->savedScript.ptr = 0;
|
||||
a0->curScriptOp = 0;
|
||||
a0->curPtr = 0;
|
||||
a0->unk22 = -1;
|
||||
a0->unk24 = 0;
|
||||
a0->unk26 = 0xFF;
|
||||
a0->branchDiscriminant = 0;
|
||||
a0->unk2A = 0;
|
||||
a0->unk2C = 0;
|
||||
a0->unk30 = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
a0->unk50[i].raw = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void InitAction(Action *a0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
a0->callbacks = NULL;
|
||||
a0->parentObject = NULL;
|
||||
a0->group = -1;
|
||||
a0->sector = 0xFF;
|
||||
sub_809D520(&a0->unkC);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
a0->predefinedScripts[i] = NULL;
|
||||
}
|
||||
|
||||
InitScriptData(&a0->scriptData);
|
||||
InitScriptData(&a0->scriptData2);
|
||||
}
|
||||
|
||||
void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s16 group, s8 sector)
|
||||
{
|
||||
s32 group_s32;
|
||||
s32 sector_s32;
|
||||
|
||||
group_s32 = group;
|
||||
sector_s32 = sector;
|
||||
|
||||
InitAction(action);
|
||||
|
||||
action->callbacks = callbacks;
|
||||
action->parentObject = parent;
|
||||
action->group = group_s32;
|
||||
action->sector = sector_s32;
|
||||
action->unk8[0] = callbacks->maybeId;
|
||||
|
||||
if(callbacks->func04)
|
||||
action->unk8[1] = callbacks->func04(parent);
|
||||
else
|
||||
action->unk8[1] = 0;
|
||||
}
|
||||
|
||||
void sub_809D648(Action *action)
|
||||
{
|
||||
InitAction(action);
|
||||
}
|
||||
|
||||
UNUSED s16 sub_809D654(Action *action)
|
||||
{
|
||||
return action->scriptData.savedState;
|
||||
}
|
||||
|
||||
UNUSED s16 sub_809D65C(Action *action)
|
||||
{
|
||||
if(action->scriptData.savedState != 0)
|
||||
return action->scriptData.state;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool8 sub_809D678(Action *action)
|
||||
{
|
||||
return action->scriptData.savedState == 0 ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_809D684(Action *action, ScriptCommand **scriptPtr)
|
||||
{
|
||||
if(action->scriptData.savedState != 0)
|
||||
{
|
||||
if(action->scriptData.savedScript.ptr != 0)
|
||||
{
|
||||
if(action->scriptData.savedScript.ptr2 == *scriptPtr) return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(action->scriptData.script.ptr2 == *scriptPtr) return 1;
|
||||
}
|
||||
}
|
||||
if(action->scriptData2.savedState != 0)
|
||||
{
|
||||
if(action->scriptData2.savedScript.ptr != 0)
|
||||
{
|
||||
if(action->scriptData2.savedScript.ptr2 == *scriptPtr) return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(action->scriptData2.script.ptr2 == *scriptPtr) return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetPredefinedScript(Action *param_1, s16 index, ScriptCommand *param_3)
|
||||
{
|
||||
param_1->predefinedScripts[index] = param_3;
|
||||
|
||||
Reference in New Issue
Block a user