mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-08 00:55:53 -05:00
decompile event_flag
This commit is contained in:
447
asm/event_flag.s
447
asm/event_flag.s
@@ -1,447 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start ResetScriptVarArray
|
||||
ResetScriptVarArray:
|
||||
push {r4-r7,lr}
|
||||
adds r7, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r6, r1, 16
|
||||
ldr r0, _08001584
|
||||
cmp r6, r0
|
||||
bgt _0800158C
|
||||
lsls r1, r6, 4
|
||||
ldr r0, _08001588
|
||||
b _08001590
|
||||
.align 2, 0
|
||||
_08001584: .4byte 0x000003ff
|
||||
_08001588: .4byte gScriptVarInfo
|
||||
_0800158C:
|
||||
lsls r1, r6, 4
|
||||
ldr r0, _08001598
|
||||
_08001590:
|
||||
adds r5, r1, r0
|
||||
movs r4, 0
|
||||
b _080015B0
|
||||
.align 2, 0
|
||||
_08001598: .4byte 0x080b2d30
|
||||
_0800159C:
|
||||
movs r0, 0xA
|
||||
ldrsh r3, [r5, r0]
|
||||
adds r0, r7, 0
|
||||
adds r1, r6, 0
|
||||
adds r2, r4, 0
|
||||
bl SetScriptVarArrayValue
|
||||
adds r0, r4, 0x1
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
_080015B0:
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r4, r0
|
||||
blt _0800159C
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end ResetScriptVarArray
|
||||
|
||||
thumb_func_start ClearScriptVarArray
|
||||
ClearScriptVarArray:
|
||||
push {r4-r7,lr}
|
||||
adds r7, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r6, r1, 16
|
||||
ldr r0, _080015D4
|
||||
cmp r6, r0
|
||||
bgt _080015DC
|
||||
lsls r1, r6, 4
|
||||
ldr r0, _080015D8
|
||||
b _080015E0
|
||||
.align 2, 0
|
||||
_080015D4: .4byte 0x000003ff
|
||||
_080015D8: .4byte gScriptVarInfo
|
||||
_080015DC:
|
||||
lsls r1, r6, 4
|
||||
ldr r0, _080015E8
|
||||
_080015E0:
|
||||
adds r5, r1, r0
|
||||
movs r4, 0
|
||||
b _080015FE
|
||||
.align 2, 0
|
||||
_080015E8: .4byte 0x080b2d30
|
||||
_080015EC:
|
||||
adds r0, r7, 0
|
||||
adds r1, r6, 0
|
||||
adds r2, r4, 0
|
||||
movs r3, 0
|
||||
bl SetScriptVarArrayValue
|
||||
adds r0, r4, 0x1
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
_080015FE:
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r4, r0
|
||||
blt _080015EC
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end ClearScriptVarArray
|
||||
|
||||
thumb_func_start GetScriptVarRef
|
||||
GetScriptVarRef:
|
||||
push {r4,lr}
|
||||
adds r3, r0, 0
|
||||
adds r4, r1, 0
|
||||
lsls r2, 16
|
||||
asrs r1, r2, 16
|
||||
ldr r0, _08001630
|
||||
cmp r1, r0
|
||||
bgt _0800163C
|
||||
lsls r1, 4
|
||||
ldr r0, _08001634
|
||||
adds r1, r0
|
||||
str r1, [r3]
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r1, r2]
|
||||
ldr r1, _08001638
|
||||
adds r0, r1
|
||||
b _0800164C
|
||||
.align 2, 0
|
||||
_08001630: .4byte 0x000003ff
|
||||
_08001634: .4byte gScriptVarInfo
|
||||
_08001638: .4byte gScriptVarBuffer
|
||||
_0800163C:
|
||||
lsls r1, 4
|
||||
ldr r0, _08001654
|
||||
adds r1, r0
|
||||
str r1, [r3]
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r1, r2]
|
||||
lsls r0, 2
|
||||
adds r0, r4, r0
|
||||
_0800164C:
|
||||
str r0, [r3, 0x4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08001654: .4byte 0x080b2d30
|
||||
thumb_func_end GetScriptVarRef
|
||||
|
||||
thumb_func_start GetScriptVarValue
|
||||
GetScriptVarValue:
|
||||
push {r4,lr}
|
||||
sub sp, 0x8
|
||||
adds r2, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r4, r1, 16
|
||||
mov r0, sp
|
||||
adds r1, r2, 0
|
||||
adds r2, r4, 0
|
||||
bl GetScriptVarRef
|
||||
ldr r0, [sp]
|
||||
ldrh r0, [r0]
|
||||
subs r0, 0x1
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7
|
||||
bls _0800167C
|
||||
b _08001778
|
||||
_0800167C:
|
||||
lsls r0, 2
|
||||
ldr r1, _08001688
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08001688: .4byte _0800168C
|
||||
.align 2, 0
|
||||
_0800168C:
|
||||
.4byte _080016AC
|
||||
.4byte _080016C2
|
||||
.4byte _080016C8
|
||||
.4byte _080016D2
|
||||
.4byte _080016D8
|
||||
.4byte _080016E0
|
||||
.4byte _080016C2
|
||||
.4byte _080016E6
|
||||
_080016AC:
|
||||
ldr r0, [sp]
|
||||
movs r1, 0x6
|
||||
ldrsh r0, [r0, r1]
|
||||
movs r1, 0x80
|
||||
lsls r1, 17
|
||||
lsls r1, r0
|
||||
lsrs r1, 24
|
||||
ldr r0, [sp, 0x4]
|
||||
ldrb r0, [r0]
|
||||
ands r1, r0
|
||||
b _0800173E
|
||||
_080016C2:
|
||||
ldr r0, [sp, 0x4]
|
||||
ldrb r0, [r0]
|
||||
b _0800177A
|
||||
_080016C8:
|
||||
ldr r0, [sp, 0x4]
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
b _0800177A
|
||||
_080016D2:
|
||||
ldr r0, [sp, 0x4]
|
||||
ldrh r0, [r0]
|
||||
b _0800177A
|
||||
_080016D8:
|
||||
ldr r0, [sp, 0x4]
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
b _0800177A
|
||||
_080016E0:
|
||||
ldr r0, [sp, 0x4]
|
||||
ldr r0, [r0]
|
||||
b _0800177A
|
||||
_080016E6:
|
||||
adds r0, r4, 0
|
||||
subs r0, 0x17
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0xC
|
||||
bhi _08001778
|
||||
lsls r0, 2
|
||||
ldr r1, _080016FC
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_080016FC: .4byte _08001700
|
||||
.align 2, 0
|
||||
_08001700:
|
||||
.4byte _08001734
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001778
|
||||
.4byte _08001746
|
||||
.4byte _0800174C
|
||||
.4byte _08001754
|
||||
.4byte _08001764
|
||||
_08001734:
|
||||
bl GetScriptMode
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
_0800173E:
|
||||
negs r0, r1
|
||||
orrs r0, r1
|
||||
lsrs r0, 31
|
||||
b _0800177A
|
||||
_08001746:
|
||||
bl GetFriendSum_808D480
|
||||
b _0800177A
|
||||
_0800174C:
|
||||
movs r0, 0
|
||||
bl GetUnitSum_808D544
|
||||
b _0800177A
|
||||
_08001754:
|
||||
ldr r0, _08001760
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x98
|
||||
lsls r1, 2
|
||||
b _0800176C
|
||||
.align 2, 0
|
||||
_08001760: .4byte gTeamInventoryRef
|
||||
_08001764:
|
||||
ldr r0, _08001774
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x99
|
||||
lsls r1, 2
|
||||
_0800176C:
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
b _0800177A
|
||||
.align 2, 0
|
||||
_08001774: .4byte gTeamInventoryRef
|
||||
_08001778:
|
||||
movs r0, 0
|
||||
_0800177A:
|
||||
add sp, 0x8
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetScriptVarValue
|
||||
|
||||
@ https://decomp.me/scratch/5F0gW [100% - DizzyEggg]
|
||||
thumb_func_start GetScriptVarArrayValue
|
||||
GetScriptVarArrayValue:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x8
|
||||
adds r3, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r5, r1, 16
|
||||
lsls r2, 16
|
||||
lsrs r4, r2, 16
|
||||
mov r0, sp
|
||||
adds r1, r3, 0
|
||||
adds r2, r5, 0
|
||||
bl GetScriptVarRef
|
||||
ldr r0, [sp]
|
||||
ldrh r0, [r0]
|
||||
subs r0, 0x1
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7
|
||||
bls _080017AC
|
||||
b _080018CC
|
||||
_080017AC:
|
||||
lsls r0, 2
|
||||
ldr r1, _080017B8
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_080017B8: .4byte _080017BC
|
||||
.align 2, 0
|
||||
_080017BC:
|
||||
.4byte _080017DC
|
||||
.4byte _08001800
|
||||
.4byte _08001808
|
||||
.4byte _08001814
|
||||
.4byte _0800181E
|
||||
.4byte _0800182A
|
||||
.4byte _08001800
|
||||
.4byte _08001834
|
||||
_080017DC:
|
||||
ldr r0, [sp]
|
||||
ldrh r1, [r0, 0x6]
|
||||
adds r1, r4, r1
|
||||
lsls r1, 16
|
||||
lsrs r0, r1, 19
|
||||
ldr r2, [sp, 0x4]
|
||||
adds r2, r0
|
||||
movs r0, 0xE0
|
||||
lsls r0, 11
|
||||
ands r0, r1
|
||||
lsrs r0, 16
|
||||
movs r1, 0x80
|
||||
lsls r1, 17
|
||||
lsls r1, r0
|
||||
lsrs r1, 24
|
||||
ldrb r0, [r2]
|
||||
ands r1, r0
|
||||
b _0800188E
|
||||
_08001800:
|
||||
ldr r0, [sp, 0x4]
|
||||
adds r0, r4
|
||||
ldrb r0, [r0]
|
||||
b _080018CE
|
||||
_08001808:
|
||||
ldr r0, [sp, 0x4]
|
||||
adds r0, r4
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
b _080018CE
|
||||
_08001814:
|
||||
ldr r0, [sp, 0x4]
|
||||
lsls r1, r4, 1
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
b _080018CE
|
||||
_0800181E:
|
||||
ldr r0, [sp, 0x4]
|
||||
lsls r1, r4, 1
|
||||
adds r1, r0
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
b _080018CE
|
||||
_0800182A:
|
||||
ldr r0, [sp, 0x4]
|
||||
lsls r1, r4, 2
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
b _080018CE
|
||||
_08001834:
|
||||
adds r0, r5, 0
|
||||
subs r0, 0x17
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0xC
|
||||
bhi _080018CC
|
||||
lsls r0, 2
|
||||
ldr r1, _0800184C
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0800184C: .4byte _08001850
|
||||
.align 2, 0
|
||||
_08001850:
|
||||
.4byte _08001884
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _080018CC
|
||||
.4byte _08001896
|
||||
.4byte _0800189C
|
||||
.4byte _080018A4
|
||||
.4byte _080018B8
|
||||
_08001884:
|
||||
bl GetScriptMode
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
_0800188E:
|
||||
negs r0, r1
|
||||
orrs r0, r1
|
||||
lsrs r0, 31
|
||||
b _080018CE
|
||||
_08001896:
|
||||
bl GetFriendSum_808D480
|
||||
b _080018CE
|
||||
_0800189C:
|
||||
movs r0, 0
|
||||
bl GetUnitSum_808D544
|
||||
b _080018CE
|
||||
_080018A4:
|
||||
ldr r0, _080018B4
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x98
|
||||
lsls r1, 2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
b _080018CE
|
||||
.align 2, 0
|
||||
_080018B4: .4byte gTeamInventoryRef
|
||||
_080018B8:
|
||||
ldr r0, _080018C8
|
||||
ldr r0, [r0]
|
||||
movs r2, 0x99
|
||||
lsls r2, 2
|
||||
adds r0, r2
|
||||
ldr r0, [r0]
|
||||
b _080018CE
|
||||
.align 2, 0
|
||||
_080018C8: .4byte gTeamInventoryRef
|
||||
_080018CC:
|
||||
movs r0, 0
|
||||
_080018CE:
|
||||
add sp, 0x8
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetScriptVarArrayValue
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
@@ -20,9 +20,7 @@ bool8 sub_8096F50(WonderMail *mail);
|
||||
void sub_8097418(s32 index, bool32);
|
||||
bool8 sub_8097504(s16 mazeIndex);
|
||||
const u8 *sub_80975DC(s16);
|
||||
|
||||
// These two are definitely bool8 but can't get them to match with it yet
|
||||
//bool8 sub_8097384(s16);
|
||||
//bool8 RescueScenarioConquered(s16);
|
||||
bool8 sub_8097384(s32 param_1);
|
||||
bool8 RescueScenarioConquered(s32 param_1);
|
||||
|
||||
#endif // GUARD_CODE_80972F4_H
|
||||
|
||||
@@ -144,7 +144,7 @@ void ResetScriptVarArray(u8 *localVarBuf, s16 varId);
|
||||
void ClearScriptVarArray(u8 *localVarBuf, s16 varId);
|
||||
void GetScriptVarRef(struct ScriptVarPtr *out, u8 *localVarBuf, s32 varId);
|
||||
s32 GetScriptVarValue(u8 *localVarBuf, s32 varId);
|
||||
s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx);
|
||||
s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx);
|
||||
void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val);
|
||||
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx, s32 val);
|
||||
s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId);
|
||||
|
||||
@@ -52,7 +52,6 @@ SECTIONS {
|
||||
src/code_2.o(.text);
|
||||
asm/code_2.o(.text);
|
||||
src/code.o(.text);
|
||||
asm/event_flag.o(.text);
|
||||
src/event_flag.o(.text);
|
||||
asm/code_8002774.o(.text);
|
||||
src/code_8002774.o(.text);
|
||||
|
||||
@@ -29,12 +29,12 @@ s32 sub_8097318(s16 param_1)
|
||||
s32 param_1_s32;
|
||||
|
||||
param_1_s32 = param_1;
|
||||
|
||||
|
||||
if (param_1_s32 == 0xd) {
|
||||
iVar1 = 0;
|
||||
}
|
||||
else {
|
||||
iVar1 = GetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,param_1_s32);
|
||||
iVar1 = GetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST, (u16) param_1_s32);
|
||||
if (iVar1 != 0) {
|
||||
iVar1 = 1;
|
||||
}
|
||||
@@ -53,7 +53,7 @@ void sub_809733C(s16 param_1,u32 param_2)
|
||||
|
||||
if (uVar2 != 0xd) {
|
||||
uVar2_u16 = uVar2;
|
||||
if (GetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,uVar2_u16) == 0) {
|
||||
if (GetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST, (u16) uVar2_u16) == 0) {
|
||||
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,uVar2_u16,param_2_u8);
|
||||
if (param_2_u8) {
|
||||
switch(uVar2)
|
||||
@@ -69,20 +69,16 @@ void sub_809733C(s16 param_1,u32 param_2)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_8097384(s16 param_1)
|
||||
bool8 sub_8097384(s32 param_1)
|
||||
{
|
||||
bool32 val;
|
||||
s32 param1 = (s16) param_1;
|
||||
|
||||
if (param_1 == 13)
|
||||
val = FALSE;
|
||||
else {
|
||||
// May not need the & 0xFFFF if the 3rd param is s16
|
||||
val = GetScriptVarArrayValue(NULL, RESCUE_SCENARIO_JOB_LIST, param_1 & 0xFFFF);
|
||||
if (val != 0)
|
||||
val = TRUE;
|
||||
if (param1 == 13) {
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
return (GetScriptVarArrayValue(NULL, RESCUE_SCENARIO_JOB_LIST, (u16) param1) != FALSE);
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void sub_80973A8(s32 param_1,u32 param_2)
|
||||
@@ -90,7 +86,7 @@ void sub_80973A8(s32 param_1,u32 param_2)
|
||||
s32 sVar1;
|
||||
s32 param_1_s32 = (s16)param_1;
|
||||
u8 param_2_u32 = param_2;
|
||||
|
||||
|
||||
if (param_1_s32 != 0xd) {
|
||||
if (param_2_u32 != 0) {
|
||||
sVar1 = sub_80A26B8(param_1);
|
||||
@@ -103,21 +99,16 @@ void sub_80973A8(s32 param_1,u32 param_2)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 RescueScenarioConquered(s16 param_1)
|
||||
bool8 RescueScenarioConquered(s32 param_1)
|
||||
{
|
||||
bool32 val;
|
||||
s32 param1 = (s16) param_1;
|
||||
|
||||
if (param_1 == 13)
|
||||
val = FALSE;
|
||||
else {
|
||||
// May not need the & 0xFFFF if the 3rd param is s16
|
||||
// But it doesn't work
|
||||
val = GetScriptVarArrayValue(NULL, RESCUE_SCENARIO_CONQUEST_LIST, param_1 & 0xFFFF);
|
||||
if (val != 0)
|
||||
val = TRUE;
|
||||
if (param1 == 13) {
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
return (GetScriptVarArrayValue(NULL, RESCUE_SCENARIO_CONQUEST_LIST, (u16) param1) != FALSE);
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void sub_8097418(s32 index,bool32 param_2)
|
||||
|
||||
@@ -59,7 +59,7 @@ bool8 sub_8097504(s16 mazeIndex)
|
||||
|
||||
bool8 IsMazeCompleted(s16 mazeIndex)
|
||||
{
|
||||
return (GetScriptVarArrayValue(NULL, TRAINING_CONQUEST_LIST, mazeIndex) != 0);
|
||||
return (GetScriptVarArrayValue(NULL, TRAINING_CONQUEST_LIST, (u16) mazeIndex) != 0);
|
||||
}
|
||||
|
||||
void sub_80975A8(s16 param_1,u8 param_2)
|
||||
|
||||
@@ -10,10 +10,6 @@ extern const s16 gUnknown_8116F24[];
|
||||
extern const s16 gUnknown_8116F9A[];
|
||||
extern const u8 *gUnknown_8117000[];
|
||||
|
||||
// code_80972F4.h (read comment)
|
||||
extern bool8 sub_8097384(s16);
|
||||
extern bool8 RescueScenarioConquered(s16);
|
||||
|
||||
// code_8098BDC.s
|
||||
extern void sub_809AB4C(s32, s32);
|
||||
extern void sub_809ABB4(s32, s32);
|
||||
@@ -217,7 +213,7 @@ s16 sub_80A2750(s16 r0)
|
||||
return 1;
|
||||
if (sub_80023E4(5))
|
||||
return 1;
|
||||
if (!RescueScenarioConquered(temp->unkE))
|
||||
if (!RescueScenarioConquered((s16) temp->unkE))
|
||||
return 1;
|
||||
if (!sub_80023E4(1))
|
||||
return 1;
|
||||
@@ -243,7 +239,7 @@ bool8 sub_80A27CC(s16 r0)
|
||||
return TRUE;
|
||||
if (!sub_80023E4(1))
|
||||
return FALSE;
|
||||
if (!RescueScenarioConquered(temp))
|
||||
if (!RescueScenarioConquered((s16) temp))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -262,9 +258,9 @@ bool8 sub_80A2824(u8 index)
|
||||
|
||||
if (temp->unk11 != 0) {
|
||||
if (temp->dungeonIndex == index) {
|
||||
if (sub_8097384(i))
|
||||
if (sub_8097384((s16) i))
|
||||
return TRUE;
|
||||
if (RescueScenarioConquered(i))
|
||||
if (RescueScenarioConquered((s16) i))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -276,7 +272,7 @@ bool8 sub_80A2824(u8 index)
|
||||
|
||||
if (temp->unk11 != 0)
|
||||
if (temp->dungeonIndex == index)
|
||||
if (sub_8097384(i))
|
||||
if (sub_8097384((s16) i))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -310,9 +306,9 @@ bool8 sub_80A28F0(u8 index)
|
||||
|
||||
if (temp->unk11 != 0) {
|
||||
if (temp->dungeonIndex == index) {
|
||||
if (sub_8097384(counter))
|
||||
if (sub_8097384((s16) counter))
|
||||
return TRUE;
|
||||
if (RescueScenarioConquered(counter))
|
||||
if (RescueScenarioConquered((s16) counter))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -342,7 +338,7 @@ UNUSED static s32 sub_80A293C(u8 *param_1)
|
||||
|
||||
for (index = 0; index < 46; index++) {
|
||||
iVar3 = sub_80A2620(index);
|
||||
if (iVar3->unk11 != 0 && sub_8097384(index))
|
||||
if (iVar3->unk11 != 0 && sub_8097384((s16) index))
|
||||
local_68[iVar3->dungeonIndex] = 1;
|
||||
}
|
||||
|
||||
@@ -387,7 +383,7 @@ s32 sub_80A29B0(u8 *param_1)
|
||||
for (index = 0; index < 46; index++) {
|
||||
iVar3 = sub_80A2620(index);
|
||||
|
||||
if (iVar3->unk11 != 0 && RescueScenarioConquered(index))
|
||||
if (iVar3->unk11 != 0 && RescueScenarioConquered((s16) index))
|
||||
local_68[iVar3->dungeonIndex] = 1;
|
||||
}
|
||||
}
|
||||
@@ -429,7 +425,7 @@ UNUSED static s32 sub_80A2A5C(u8 *param_1)
|
||||
for (index = 0; index < 46; index++) {
|
||||
iVar3 = sub_80A2620(index);
|
||||
|
||||
if (iVar3->unk11 != 0 && (sub_8097384(index) || RescueScenarioConquered(index)))
|
||||
if (iVar3->unk11 != 0 && (sub_8097384((s16) index) || RescueScenarioConquered((s16) index)))
|
||||
local_58[iVar3->dungeonIndex] = 1;
|
||||
}
|
||||
}
|
||||
@@ -437,7 +433,7 @@ UNUSED static s32 sub_80A2A5C(u8 *param_1)
|
||||
for (index = 0; index < 46; index++) {
|
||||
iVar3 = sub_80A2620(index);
|
||||
|
||||
if (iVar3->unk11 != 0 && sub_8097384(index))
|
||||
if (iVar3->unk11 != 0 && sub_8097384((s16) index))
|
||||
local_58[iVar3->dungeonIndex] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
146
src/event_flag.c
146
src/event_flag.c
@@ -43,14 +43,154 @@ extern u8 gUnknown_80B735C[];
|
||||
extern u8 gUnknown_80B7378[];
|
||||
extern u8 gUnknown_80B7388[];
|
||||
|
||||
extern bool8 GetScriptMode(void);
|
||||
extern bool8 HasCompletedAllMazes(void);
|
||||
extern u8 sub_8002658(s16);
|
||||
extern void sub_809733C(u32, u32);
|
||||
extern void sub_80973A8(u32, u32);
|
||||
|
||||
// A fakematch? Debugging leftover? A bug? No clue.
|
||||
#define GET_PTR_x400VAR(varId)(((void*) (&gScriptVarInfo[varId - 0x466])) - 4)
|
||||
|
||||
// code_80972F4.h (read comment)
|
||||
extern bool8 RescueScenarioConquered(s16);
|
||||
void ResetScriptVarArray(u8 *localVarBuf, s16 varId_)
|
||||
{
|
||||
struct ScriptVarInfo *infoPtr;
|
||||
u16 i;
|
||||
s32 varId = varId_;
|
||||
|
||||
if (varId < 0x400) {
|
||||
infoPtr = &(gScriptVarInfo)[varId];
|
||||
}
|
||||
else {
|
||||
infoPtr = GET_PTR_x400VAR(varId);
|
||||
}
|
||||
|
||||
for (i = 0; i < infoPtr->arrayLen; i++) {
|
||||
SetScriptVarArrayValue(localVarBuf,varId,i,infoPtr->defaultValue);
|
||||
}
|
||||
}
|
||||
|
||||
void ClearScriptVarArray(u8 *localVarBuf, s16 varId_)
|
||||
{
|
||||
struct ScriptVarInfo *infoPtr;
|
||||
u16 i;
|
||||
s32 varId = varId_;
|
||||
|
||||
if (varId < 0x400) {
|
||||
infoPtr = &(gScriptVarInfo)[varId];
|
||||
}
|
||||
else {
|
||||
infoPtr = GET_PTR_x400VAR(varId);
|
||||
}
|
||||
|
||||
for (i = 0; i < infoPtr->arrayLen; i++) {
|
||||
SetScriptVarArrayValue(localVarBuf,varId,i,0);
|
||||
}
|
||||
}
|
||||
|
||||
void GetScriptVarRef(struct ScriptVarPtr *out, u8 *localVarBuf, s32 varId_)
|
||||
{
|
||||
struct ScriptVarInfo *infoPtr;
|
||||
s32 varId = (s16) varId_;
|
||||
|
||||
if (varId < 0x400) {
|
||||
infoPtr = &gScriptVarInfo[varId];
|
||||
out->info = infoPtr;
|
||||
out->ptr = &gScriptVarBuffer[infoPtr->bufOffset];
|
||||
}
|
||||
else {
|
||||
infoPtr = GET_PTR_x400VAR(varId);
|
||||
out->info = infoPtr;
|
||||
out->ptr = &localVarBuf[infoPtr->bufOffset * 4];
|
||||
}
|
||||
}
|
||||
|
||||
s32 GetScriptVarValue(u8 *localVarBuf, s32 varId_)
|
||||
{
|
||||
struct ScriptVarPtr sp;
|
||||
s32 varId = (s16) varId_;
|
||||
|
||||
GetScriptVarRef(&sp, localVarBuf, varId);
|
||||
|
||||
switch (sp.info->type) {
|
||||
case 1: {
|
||||
s32 bitOffset = sp.info->bitOffset;
|
||||
u8 a = 1 << bitOffset;
|
||||
return (*sp.ptr & a) != FALSE; // Read bit-packed bool flag
|
||||
}
|
||||
case 2:
|
||||
case 7:
|
||||
return *((u8 *)sp.ptr);
|
||||
case 3:
|
||||
return *((s8 *)sp.ptr);
|
||||
case 4:
|
||||
return *((u16 *)sp.ptr);
|
||||
case 5:
|
||||
return *((s16 *)sp.ptr);
|
||||
case 6:
|
||||
return *((u32 *)sp.ptr);
|
||||
case 8:
|
||||
switch ((s16)varId) {
|
||||
case 23:
|
||||
return GetScriptMode() != FALSE;
|
||||
case 32:
|
||||
return GetFriendSum_808D480();
|
||||
case 33:
|
||||
return GetUnitSum_808D544(0);
|
||||
case 34:
|
||||
return gTeamInventoryRef->teamMoney;
|
||||
case 35:
|
||||
return gTeamInventoryRef->teamSavings;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId_, s32 idx_)
|
||||
{
|
||||
struct ScriptVarPtr sp;
|
||||
s32 varId = (s16) varId_;
|
||||
s32 idx = (u16) (idx_);
|
||||
|
||||
GetScriptVarRef(&sp, localVarBuf, varId);
|
||||
|
||||
switch (sp.info->type) {
|
||||
case 1: {
|
||||
s32 bitOffset = (u16) sp.info->bitOffset;
|
||||
u16 flagNum = idx + bitOffset;
|
||||
u8 *a = &sp.ptr[flagNum / 8];
|
||||
u8 b = 1 << (flagNum % 8);
|
||||
return (*a & b) != FALSE; // Read bit-packed bool flag
|
||||
}
|
||||
case 2:
|
||||
case 7:
|
||||
return ((u8 *)sp.ptr)[idx];
|
||||
case 3:
|
||||
return ((s8 *)sp.ptr)[idx];
|
||||
case 4:
|
||||
return ((u16 *)sp.ptr)[idx];
|
||||
case 5:
|
||||
return ((s16 *)sp.ptr)[idx];
|
||||
case 6:
|
||||
return ((u32 *)sp.ptr)[idx];
|
||||
case 8:
|
||||
switch ((s16)varId) {
|
||||
case 23:
|
||||
return GetScriptMode() != FALSE;
|
||||
case 32:
|
||||
return GetFriendSum_808D480();
|
||||
case 33:
|
||||
return GetUnitSum_808D544(0);
|
||||
case 34:
|
||||
return gTeamInventoryRef->teamMoney;
|
||||
case 35:
|
||||
return gTeamInventoryRef->teamSavings;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void SetScriptVarValue(u8 *localVarBuf, s32 varId_, s32 val)
|
||||
{
|
||||
@@ -199,7 +339,7 @@ s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId)
|
||||
GetScriptVarRef(&local_1c, 0, varId_s32);
|
||||
for(counter = 0; counter < local_1c.info->arrayLen; counter++)
|
||||
{
|
||||
total += GetScriptVarArrayValue(localVarBuf, varId_s32, counter);
|
||||
total += GetScriptVarArrayValue(localVarBuf, varId_s32, (u16) counter);
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ s32 ExecuteScriptCommand(Action *action) {
|
||||
case 0x1f: {
|
||||
s32 a = (s16)GetScriptVarValue(NULL, DUNGEON_ENTER);
|
||||
const DungeonInfo *ret1 = GetDungeonInfo_80A2608(a);
|
||||
s32 thing = GetScriptVarArrayValue(NULL, DUNGEON_ENTER_LIST, a) == 0 ? ret1->unk6 : ret1->unk8;
|
||||
s32 thing = GetScriptVarArrayValue(NULL, DUNGEON_ENTER_LIST, (u16) a) == 0 ? ret1->unk6 : ret1->unk8;
|
||||
// fakematch: this is almost certainly a range check of the form 0x37 <= a && a < 0x48
|
||||
// but that loses the s32 -> u16 cast. Inlines, macros, or other schenanigans are likely involved
|
||||
if (!((u16)(a - 0x37) < 0x11) && (s16)sub_80A2750(a) == 1) {
|
||||
|
||||
Reference in New Issue
Block a user