decompile event_flag

This commit is contained in:
DizzyEggg
2025-02-14 21:24:51 +01:00
parent ce53ecf468
commit 176de96f3c
9 changed files with 177 additions and 500 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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)

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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) {