mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
Decomped LoadScriptVariableValueAtIndex
This commit is contained in:
parent
9397be8440
commit
4f645e6b6e
|
|
@ -5,13 +5,9 @@
|
|||
.public Debug_Print
|
||||
.public Debug_Print0
|
||||
.public GetGameMode
|
||||
.public GetLanguageType
|
||||
.public GetMoneyCarried
|
||||
.public GetMoneyStored
|
||||
.public GetNotifyNote
|
||||
.public GetPartyMembers
|
||||
.public LoadScriptVariableRaw
|
||||
.public LoadScriptVariableValue
|
||||
.public LoadScriptVariableValueAtIndex
|
||||
.public MemcpySimple
|
||||
.public RandInt
|
||||
.public SCRIPT_VARS_VALUES
|
||||
|
|
@ -1,143 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0204B678.inc"
|
||||
.include "main_0204B820.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start LoadScriptVariableValueAtIndex
|
||||
LoadScriptVariableValueAtIndex: ; 0x0204B678
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
sub sp, sp, #8
|
||||
mov r3, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
add r0, sp, #0
|
||||
mov r1, r3
|
||||
mov r2, r5
|
||||
bl LoadScriptVariableRaw
|
||||
ldr r1, [sp]
|
||||
ldrsh r0, [r1]
|
||||
cmp r0, #9
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0204B814
|
||||
_0204B6B0: ; jump table
|
||||
b _0204B814 ; case 0
|
||||
b _0204B6D8 ; case 1
|
||||
b _0204B70C ; case 2
|
||||
b _0204B70C ; case 3
|
||||
b _0204B718 ; case 4
|
||||
b _0204B724 ; case 5
|
||||
b _0204B734 ; case 6
|
||||
b _0204B744 ; case 7
|
||||
b _0204B744 ; case 8
|
||||
b _0204B750 ; case 9
|
||||
_0204B6D8:
|
||||
ldrsh r1, [r1, #6]
|
||||
ldr r2, [sp, #4]
|
||||
mov r0, #1
|
||||
add r1, r4, r1
|
||||
mov r1, r1, lsl #0x10
|
||||
mov r3, r1, lsr #0x10
|
||||
and r1, r3, #7
|
||||
mov r1, r0, lsl r1
|
||||
ldrb r2, [r2, r3, lsr #3]
|
||||
and r1, r1, #0xff
|
||||
tst r2, r1
|
||||
moveq r0, #0
|
||||
b _0204B818
|
||||
_0204B70C:
|
||||
ldr r0, [sp, #4]
|
||||
ldrb r0, [r0, r4]
|
||||
b _0204B818
|
||||
_0204B718:
|
||||
ldr r0, [sp, #4]
|
||||
ldrsb r0, [r0, r4]
|
||||
b _0204B818
|
||||
_0204B724:
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r4, lsl #1
|
||||
ldrh r0, [r1, r0]
|
||||
b _0204B818
|
||||
_0204B734:
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r4, lsl #1
|
||||
ldrsh r0, [r1, r0]
|
||||
b _0204B818
|
||||
_0204B744:
|
||||
ldr r0, [sp, #4]
|
||||
ldr r0, [r0, r4, lsl #2]
|
||||
b _0204B818
|
||||
_0204B750:
|
||||
cmp r5, #0x48
|
||||
bgt _0204B78C
|
||||
bge _0204B7D4
|
||||
cmp r5, #0x3d
|
||||
bgt _0204B780
|
||||
subs r0, r5, #0x3a
|
||||
addpl pc, pc, r0, lsl #2
|
||||
b _0204B814
|
||||
_0204B770: ; jump table
|
||||
b _0204B7A8 ; case 0
|
||||
b _0204B7B0 ; case 1
|
||||
b _0204B7BC ; case 2
|
||||
b _0204B7C4 ; case 3
|
||||
_0204B780:
|
||||
cmp r5, #0x47
|
||||
beq _0204B7CC
|
||||
b _0204B814
|
||||
_0204B78C:
|
||||
cmp r5, #0x49
|
||||
bgt _0204B79C
|
||||
beq _0204B7DC
|
||||
b _0204B814
|
||||
_0204B79C:
|
||||
cmp r5, #0x70
|
||||
beq _0204B80C
|
||||
b _0204B814
|
||||
_0204B7A8:
|
||||
mov r0, #1
|
||||
b _0204B818
|
||||
_0204B7B0:
|
||||
mov r0, #0
|
||||
bl GetPartyMembers
|
||||
b _0204B818
|
||||
_0204B7BC:
|
||||
bl GetMoneyCarried
|
||||
b _0204B818
|
||||
_0204B7C4:
|
||||
bl GetMoneyStored
|
||||
b _0204B818
|
||||
_0204B7CC:
|
||||
bl GetLanguageType
|
||||
b _0204B818
|
||||
_0204B7D4:
|
||||
bl GetGameMode
|
||||
b _0204B818
|
||||
_0204B7DC:
|
||||
bl GetGameMode
|
||||
cmp r0, #1
|
||||
beq _0204B7F4
|
||||
cmp r0, #3
|
||||
beq _0204B7FC
|
||||
b _0204B804
|
||||
_0204B7F4:
|
||||
bl sub_0204C918
|
||||
b _0204B818
|
||||
_0204B7FC:
|
||||
bl GetSpecialEpisodeType
|
||||
b _0204B818
|
||||
_0204B804:
|
||||
mvn r0, #0
|
||||
b _0204B818
|
||||
_0204B80C:
|
||||
bl GetNotifyNote
|
||||
b _0204B818
|
||||
_0204B814:
|
||||
mov r0, #0
|
||||
_0204B818:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end LoadScriptVariableValueAtIndex
|
||||
|
||||
arm_func_start SaveScriptVariableValue
|
||||
SaveScriptVariableValue: ; 0x0204B820
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
|
|
@ -3429,4 +3429,16 @@ enum special_episode_type {
|
|||
NUM_SPECIAL_EPISODES = 5
|
||||
};
|
||||
|
||||
enum game_mode
|
||||
{
|
||||
GAME_MODE_MENU = 0, // top menu
|
||||
GAME_MODE_1 = 1, // also related to special episodes? But 3 is the main one
|
||||
GAME_MODE_NORMAL = 2, // normal play, including both overworld/dungeons
|
||||
GAME_MODE_SPECIAL_EPISODE = 3, // during special episodes
|
||||
// Pelipper Island (and likely also in the dungeon while rescuing, need to confirm)
|
||||
GAME_MODE_RESCUE = 4,
|
||||
GAME_MODE_5 = 5,
|
||||
// Possibly more?
|
||||
};
|
||||
|
||||
#endif //PMDSKY_ENUMS_H
|
||||
|
|
|
|||
|
|
@ -3,18 +3,6 @@
|
|||
|
||||
#include "util.h"
|
||||
|
||||
enum game_mode
|
||||
{
|
||||
GAME_MODE_MENU = 0, // top menu
|
||||
GAME_MODE_1 = 1, // also related to special episodes? But 3 is the main one
|
||||
GAME_MODE_NORMAL = 2, // normal play, including both overworld/dungeons
|
||||
GAME_MODE_SPECIAL_EPISODE = 3, // during special episodes
|
||||
// Pelipper Island (and likely also in the dungeon while rescuing, need to confirm)
|
||||
GAME_MODE_RESCUE = 4,
|
||||
GAME_MODE_5 = 5,
|
||||
// Possibly more?
|
||||
};
|
||||
|
||||
bool8 IsGameModeRescue();
|
||||
|
||||
#endif //PMDSKY_MAIN_0204AFF8_H
|
||||
|
|
|
|||
|
|
@ -36,5 +36,6 @@ void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
|
|||
const enum script_var_id sv_id);
|
||||
|
||||
s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_id sv_id);
|
||||
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, int idx);
|
||||
|
||||
#endif //PMDSKY_SCRIPTING_H
|
||||
|
|
|
|||
2
main.lsf
2
main.lsf
|
|
@ -81,7 +81,7 @@ Static main
|
|||
Object src/main_0204AFF8.o
|
||||
Object asm/main_0204B018.o
|
||||
Object src/scripting.o
|
||||
Object asm/main_0204B678.o
|
||||
Object asm/main_0204B820.o
|
||||
Object src/main_0204C938.o
|
||||
Object asm/main_0204C94C.o
|
||||
Object src/dungeon_recruitment_3.o
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "main_0204AFF8.h"
|
||||
#include "enums.h"
|
||||
|
||||
extern enum game_mode GAME_MODE;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ extern s32 GetPartyMembers(s32 param1);
|
|||
extern s32 GetMoneyCarried();
|
||||
extern s32 GetMoneyStored();
|
||||
extern s32 GetLanguageType();
|
||||
extern s32 GetGameMode();
|
||||
extern enum game_mode GetGameMode();
|
||||
extern s32 sub_0204C918();
|
||||
extern s32 GetSpecialEpisodeType();
|
||||
extern s32 GetNotifyNote();
|
||||
|
|
@ -77,9 +77,9 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
|
|||
return GetGameMode();
|
||||
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
|
||||
switch(GetGameMode()) {
|
||||
case EPISODE_IGGLYBUFF_THE_PRODIGY:
|
||||
case GAME_MODE_1:
|
||||
return sub_0204C918();
|
||||
case EPISODE_HERE_COMES_TEAM_CHARM:
|
||||
case GAME_MODE_SPECIAL_EPISODE:
|
||||
return GetSpecialEpisodeType();
|
||||
default:
|
||||
return -1;
|
||||
|
|
@ -91,3 +91,59 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, int idx)
|
||||
{
|
||||
struct script_var_raw result;
|
||||
LoadScriptVariableRaw(&result, sv_local, id);
|
||||
|
||||
switch ((s16)result.def->type) {
|
||||
case VARTYPE_NONE:
|
||||
break;
|
||||
case VARTYPE_BIT: {
|
||||
u16 offset = idx + result.def->bitshift;
|
||||
u8 val = ((u8*)result.value)[offset / 8];
|
||||
u8 bit = (1 << (offset & (8 - 1)));
|
||||
return (val & bit) != 0;
|
||||
}
|
||||
case VARTYPE_STRING:
|
||||
case VARTYPE_UINT8:
|
||||
return ((u8*)result.value)[idx];
|
||||
case VARTYPE_INT8:
|
||||
return ((s8*)result.value)[idx];
|
||||
case VARTYPE_UINT16:
|
||||
return ((u16*)result.value)[idx];
|
||||
case VARTYPE_INT16:
|
||||
return ((s16*)result.value)[idx];
|
||||
case VARTYPE_UINT32:
|
||||
case VARTYPE_INT32:
|
||||
return ((u32*)result.value)[idx];
|
||||
case VARTYPE_SPECIAL:
|
||||
switch (id) {
|
||||
case VAR_FRIEND_SUM:
|
||||
return 1;
|
||||
case VAR_UNIT_SUM:
|
||||
return GetPartyMembers(0);
|
||||
case VAR_CARRY_GOLD:
|
||||
return GetMoneyCarried();
|
||||
case VAR_BANK_GOLD:
|
||||
return GetMoneyStored();
|
||||
case VAR_LANGUAGE_TYPE:
|
||||
return GetLanguageType();
|
||||
case VAR_GAME_MODE:
|
||||
return GetGameMode();
|
||||
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
|
||||
switch (GetGameMode()) {
|
||||
case GAME_MODE_1:
|
||||
return sub_0204C918();
|
||||
case GAME_MODE_SPECIAL_EPISODE:
|
||||
return GetSpecialEpisodeType();
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
case VAR_NOTE_MODIFY_FLAG:
|
||||
return GetNotifyNote();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user