mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-16 21:50:21 -05:00
104 lines
2.7 KiB
C
104 lines
2.7 KiB
C
#include "debug.h"
|
|
#include "global.h"
|
|
#include "event_flag.h"
|
|
#include "ground_map_1.h"
|
|
#include "ground_script.h"
|
|
|
|
extern u8 gAnyScriptLocked;
|
|
extern u8 gScriptLocks[];
|
|
extern u8 gScriptLockConds[];
|
|
extern u8 gUnknown_8116848[];
|
|
|
|
bool8 GroundLivesNotifyAll(s16);
|
|
bool8 GroundObjectsNotifyAll(s16);
|
|
bool8 GroundEffectsNotifyAll(s16);
|
|
|
|
void GroundScript_Unlock(void)
|
|
{
|
|
s32 index;
|
|
bool8 cond;
|
|
|
|
if(gAnyScriptLocked == 0) return;
|
|
|
|
gAnyScriptLocked = 0;
|
|
index = 0;
|
|
for (index = 0; index <= 0x80; index++) {
|
|
if(gScriptLocks[index] != 0) {
|
|
Log(1, gUnknown_8116848, index);
|
|
cond = GroundMapNotifyAll(index);
|
|
cond |= GroundLivesNotifyAll(index);
|
|
cond |= GroundObjectsNotifyAll(index);
|
|
cond |= GroundEffectsNotifyAll(index);
|
|
|
|
if(gScriptLockConds[index] != 0) {
|
|
if (cond) {
|
|
GroundMapNotifyAll(index | 0x80);
|
|
GroundLivesNotifyAll(index | 0x80);
|
|
GroundObjectsNotifyAll(index | 0x80);
|
|
GroundEffectsNotifyAll(index | 0x80);
|
|
gScriptLocks[index] = gScriptLockConds[index] = 0;
|
|
}
|
|
} else {
|
|
gScriptLocks[index] = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const ScriptCommand *FindLabel(Action *action, s32 r1)
|
|
{
|
|
ScriptCommand script;
|
|
const ScriptCommand *scriptPtr2;
|
|
const ScriptCommand *scriptPtr;
|
|
|
|
scriptPtr2 = action->scriptData.script.ptr2;
|
|
scriptPtr = scriptPtr2 + 1;
|
|
|
|
while(1) {
|
|
script = *scriptPtr;
|
|
scriptPtr++;
|
|
|
|
if(script.op == 0xF4 && r1 == script.argShort) break;
|
|
|
|
// DS: Assert(script.op != 0, "script search label error %d", label)
|
|
// DS: Assert(script.op != 0xF6, "script search label error %d", label)
|
|
}
|
|
return scriptPtr;
|
|
}
|
|
|
|
const ScriptCommand *ResolveJump(Action *action, s32 r1)
|
|
{
|
|
ScriptCommand script;
|
|
const ScriptCommand *scriptPtr;
|
|
s32 temp;
|
|
|
|
scriptPtr = action->scriptData.script.ptr;
|
|
|
|
while(1) {
|
|
script = *scriptPtr;
|
|
|
|
if (script.op == 0xCC)
|
|
{
|
|
if(FlagJudge(r1, script.arg1, JUDGE_EQ))
|
|
return FindLabel(action, script.argShort);
|
|
}
|
|
else if (script.op == 0xCD)
|
|
{
|
|
if(FlagJudge(r1, script.arg1, script.argByte))
|
|
return FindLabel(action, script.argShort);
|
|
}
|
|
else if (script.op == 0xCE)
|
|
{
|
|
temp = GetScriptVarValue(action->scriptData.localVars.buf, (s16)script.arg1);
|
|
if(FlagJudge(r1, temp, script.argByte))
|
|
return FindLabel(action, script.argShort);
|
|
}
|
|
else
|
|
{
|
|
return scriptPtr;
|
|
}
|
|
scriptPtr++;
|
|
}
|
|
}
|
|
|