Add funcs matched by @Kermalis

This commit is contained in:
Seth Barberee
2025-01-27 09:18:54 -08:00
parent 9d52f4e464
commit 246644cd65
5 changed files with 129 additions and 228 deletions

View File

@@ -444,221 +444,4 @@ _080018CE:
bx r1
thumb_func_end GetScriptVarArrayValue
thumb_func_start SetScriptVarValue
SetScriptVarValue:
push {r4,r5,lr}
sub sp, 0x8
adds r3, r0, 0
adds r4, r2, 0
lsls r1, 16
asrs r5, r1, 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
bhi _08001990
lsls r0, 2
ldr r1, _08001908
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08001908: .4byte _0800190C
.align 2, 0
_0800190C:
.4byte _0800192C
.4byte _08001958
.4byte _08001958
.4byte _0800195E
.4byte _0800195E
.4byte _08001964
.4byte _08001958
.4byte _08001968
_0800192C:
ldr r0, [sp]
movs r2, 0x6
ldrsh r1, [r0, r2]
movs r0, 0x80
lsls r0, 17
lsls r0, r1
lsrs r3, r0, 24
cmp r4, 0
beq _0800194A
ldr r2, [sp, 0x4]
ldrb r1, [r2]
adds r0, r3, 0
orrs r0, r1
strb r0, [r2]
b _08001990
_0800194A:
ldr r2, [sp, 0x4]
ldrb r1, [r2]
adds r0, r3, 0
orrs r0, r1
eors r0, r3
strb r0, [r2]
b _08001990
_08001958:
ldr r0, [sp, 0x4]
strb r4, [r0]
b _08001990
_0800195E:
ldr r0, [sp, 0x4]
strh r4, [r0]
b _08001990
_08001964:
ldr r0, [sp, 0x4]
b _0800198E
_08001968:
cmp r5, 0x22
beq _08001972
cmp r5, 0x23
beq _08001984
b _08001990
_08001972:
ldr r0, _08001980
ldr r0, [r0]
movs r1, 0x98
lsls r1, 2
adds r0, r1
b _0800198E
.align 2, 0
_08001980: .4byte gTeamInventoryRef
_08001984:
ldr r0, _08001998
ldr r0, [r0]
movs r2, 0x99
lsls r2, 2
adds r0, r2
_0800198E:
str r4, [r0]
_08001990:
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08001998: .4byte gTeamInventoryRef
thumb_func_end SetScriptVarValue
thumb_func_start SetScriptVarArrayValue
SetScriptVarArrayValue:
push {r4-r7,lr}
sub sp, 0x8
adds r4, r0, 0
adds r6, r3, 0
lsls r1, 16
asrs r7, r1, 16
lsls r2, 16
lsrs r5, r2, 16
mov r0, sp
adds r1, r4, 0
adds r2, r7, 0
bl GetScriptVarRef
ldr r0, [sp]
ldrh r0, [r0]
subs r0, 0x1
lsls r0, 16
asrs r0, 16
cmp r0, 0x7
bhi _08001A68
lsls r0, 2
ldr r1, _080019D0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080019D0: .4byte _080019D4
.align 2, 0
_080019D4:
.4byte _080019F4
.4byte _08001A2C
.4byte _08001A2C
.4byte _08001A34
.4byte _08001A34
.4byte _08001A3E
.4byte _08001A2C
.4byte _08001A44
_080019F4:
ldr r0, [sp]
ldrh r0, [r0, 0x6]
adds r0, r5, r0
lsls r0, 16
lsrs r2, r0, 19
ldr r1, [sp, 0x4]
adds r3, r1, r2
movs r1, 0xE0
lsls r1, 11
ands r1, r0
lsrs r1, 16
movs r0, 0x80
lsls r0, 17
lsls r0, r1
lsrs r2, r0, 24
cmp r6, 0
beq _08001A20
ldrb r1, [r3]
adds r0, r2, 0
orrs r0, r1
strb r0, [r3]
b _08001A68
_08001A20:
ldrb r1, [r3]
adds r0, r2, 0
orrs r0, r1
eors r0, r2
strb r0, [r3]
b _08001A68
_08001A2C:
ldr r0, [sp, 0x4]
adds r0, r5
strb r6, [r0]
b _08001A68
_08001A34:
ldr r1, [sp, 0x4]
lsls r0, r5, 1
adds r0, r1
strh r6, [r0]
b _08001A68
_08001A3E:
ldr r1, [sp, 0x4]
lsls r0, r5, 2
b _08001A64
_08001A44:
cmp r7, 0x22
beq _08001A4E
cmp r7, 0x23
beq _08001A5C
b _08001A68
_08001A4E:
ldr r0, _08001A58
ldr r0, [r0]
movs r1, 0x98
lsls r1, 2
b _08001A64
.align 2, 0
_08001A58: .4byte gTeamInventoryRef
_08001A5C:
ldr r0, _08001A70
ldr r0, [r0]
movs r1, 0x99
lsls r1, 2
_08001A64:
adds r0, r1
str r6, [r0]
_08001A68:
add sp, 0x8
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08001A70: .4byte gTeamInventoryRef
thumb_func_end SetScriptVarArrayValue
.align 2, 0 @ Don't pad with nop.

View File

@@ -17,7 +17,7 @@ const u8 *GetCurrentMissionText(s16 index);
bool8 IsMazeCompleted(s16 mazeIndex);
bool8 sub_8096F50(WonderMail *mail);
void sub_8097418(s16 index, bool32);
void sub_8097418(s32 index, bool32);
bool8 sub_8097504(s16 mazeIndex);
const u8 *sub_80975DC(s16);

View File

@@ -146,7 +146,7 @@ void GetScriptVarRef(struct ScriptVarPtr *out, u8 *localVarBuf, s32 varId);
s32 GetScriptVarValue(u8 *localVarBuf, s32 varId);
s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx);
void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val);
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx, s32 val);
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx, s32 val);
s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId);
void GetScriptVarScenario(s32 varId,u32 *outMain,u32 *outSub);
void ScenarioCalc(s16 varId, s32 main, s32 sub);

View File

@@ -1,8 +1,8 @@
#include "global.h"
#include "globaldata.h"
#include "dungeon.h"
#include "exclusive_pokemon.h"
#include "event_flag.h"
#include "exclusive_pokemon.h"
#include "code_80A26CC.h"
#include "code_80972F4.h"
@@ -85,21 +85,21 @@ bool32 sub_8097384(s16 param_1)
return val;
}
void sub_80973A8(s16 param_1,u32 param_2)
void sub_80973A8(s32 param_1,u32 param_2)
{
s32 sVar1;
s32 param_1_s32 = param_1;
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);
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,param_1_s32,0);
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,(u16)param_1_s32,0);
if (sVar1 != -1) {
SetScriptVarValue(NULL,DUNGEON_SELECT,sVar1);
}
}
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,param_1_s32,param_2_u32);
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,(u16)param_1_s32,param_2_u32);
}
}
@@ -120,12 +120,12 @@ bool32 RescueScenarioConquered(s16 param_1)
return val;
}
void sub_8097418(s16 index,bool32 param_2)
void sub_8097418(s32 index,bool32 param_2)
{
int index_s32 = index;
int index_s32 = (s16)index;
bool8 param_2_u8 = param_2;
if (index_s32 != 0xd) {
if ((param_2_u8) && (SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,index_s32,0), index_s32 < 0x1f)) {
if ((param_2_u8) && (SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,(u16)index_s32,0), index_s32 < 0x1f)) {
const MissionText *mt = &sStoryMissionText[index_s32];
if (mt->unk4 != 0xFF) {
sub_8097FA8(mt->unk4);
@@ -138,7 +138,7 @@ void sub_8097418(s16 index,bool32 param_2)
}
sub_8097FF8();
}
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_CONQUEST_LIST,index_s32,param_2_u8);
SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_CONQUEST_LIST,(u16)index_s32,param_2_u8);
}
}

View File

@@ -52,6 +52,124 @@ extern void sub_80973A8(u32, u32);
// code_80972F4.h (read comment)
extern bool8 RescueScenarioConquered(s16);
void SetScriptVarValue(u8 *localVarBuf, s32 varId_, s32 val)
{
s32 varID;
struct ScriptVarPtr sp;
varID = (s16)varId_;
GetScriptVarRef(&sp, localVarBuf, varID);
switch (sp.info->type) {
case 1: {
u8 bVar1 = 1 << sp.info->bitOffset;
if (val != 0)
*sp.ptr |= bVar1;
else
*sp.ptr = (bVar1 | *sp.ptr) ^ bVar1;
break;
}
case 2: {
*((s8 *)sp.ptr) = val;
break;
}
case 3: {
*((u8 *)sp.ptr) = val;
break;
}
case 7: {
*((bool8 *)sp.ptr) = val;
break;
}
case 4: {
*((s16 *)sp.ptr) = val;
break;
}
case 5: {
*((u16 *)sp.ptr) = val;
break;
}
case 6: {
*((s32 *)sp.ptr) = val;
break;
}
case 8: {
switch (varID) {
case 0x22: {
gTeamInventoryRef->teamMoney = val;
break;
}
case 0x23: {
gTeamInventoryRef->teamSavings = val;
break;
}
}
}
}
}
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId_, s32 idx_, s32 val)
{
s32 varID;
struct ScriptVarPtr sp;
s32 idx;
varID = (s16)varId_;
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 bVar1 = 1 << (flagNum % 8);
if (val != 0)
*a |= bVar1;
else
*a = (bVar1 | *a) ^ bVar1;
break;
}
case 2: {
((s8 *)sp.ptr)[idx] = val;
break;
}
case 3: {
((u8 *)sp.ptr)[idx] = val;
break;
}
case 7: {
((bool8 *)sp.ptr)[idx] = val;
break;
}
case 4: {
((s16 *)sp.ptr)[idx] = val;
break;
}
case 5: {
((u16 *)sp.ptr)[idx] = val;
break;
}
case 6: {
((s32 *)sp.ptr)[idx] = val;
break;
}
case 8: {
switch (varID) {
case 0x22: {
gTeamInventoryRef->teamMoney = val;
break;
}
case 0x23: {
gTeamInventoryRef->teamSavings = val;
break;
}
}
}
}
}
UNUSED u8 *GetScriptVarPointer(s16 varId)
{
struct ScriptVarPtr local_1c;