mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-23 10:07:32 -05:00
Merge pull request #199 from slaw-22/SaveScriptVariableValueAtIndex
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
Decomp SaveScriptVariableValueAtIndex
This commit is contained in:
commit
8b5b6f84c8
|
|
@ -1,5 +1,4 @@
|
|||
#pragma once
|
||||
.public AddMoneyCarried
|
||||
.public DEBUG_SPECIAL_EPISODE_NUMBER
|
||||
.public Debug_FatalError
|
||||
.public Debug_Print
|
||||
|
|
@ -12,10 +11,8 @@
|
|||
.public RandInt
|
||||
.public SCRIPT_VARS_VALUES
|
||||
.public SaveScriptVariableValue
|
||||
.public SaveScriptVariableValueAtIndex
|
||||
.public ScenarioFlagBackup
|
||||
.public SetMoneyCarried
|
||||
.public SetMoneyStored
|
||||
.public SetNotifyNote
|
||||
.public ZinitScriptVariable
|
||||
.public _0209CEAC
|
||||
.public _0209CF28
|
||||
|
|
@ -1,120 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0204B988.inc"
|
||||
.include "main_0204BB00.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start SaveScriptVariableValueAtIndex
|
||||
SaveScriptVariableValueAtIndex: ; 0x0204B988
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #8
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
mov r5, r2
|
||||
mov r1, r4
|
||||
add r0, sp, #0
|
||||
mov r2, r6
|
||||
mov r4, r3
|
||||
bl LoadScriptVariableRaw
|
||||
ldr r1, [sp]
|
||||
ldrsh r0, [r1]
|
||||
cmp r0, #9
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0204BAF8
|
||||
_0204B9C4: ; jump table
|
||||
b _0204BAF8 ; case 0
|
||||
b _0204B9EC ; case 1
|
||||
b _0204BA30 ; case 2
|
||||
b _0204BA30 ; case 3
|
||||
b _0204BA3C ; case 4
|
||||
b _0204BA48 ; case 5
|
||||
b _0204BA58 ; case 6
|
||||
b _0204BA68 ; case 7
|
||||
b _0204BA68 ; case 8
|
||||
b _0204BA74 ; case 9
|
||||
_0204B9EC:
|
||||
ldrsh r0, [r1, #6]
|
||||
mov r1, #1
|
||||
ldr r2, [sp, #4]
|
||||
add r0, r5, r0
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r3, r0, lsr #0x10
|
||||
and r0, r3, #7
|
||||
mov r0, r1, lsl r0
|
||||
and r1, r0, #0xff
|
||||
ldrb r0, [r2, r3, lsr #3]
|
||||
cmp r4, #0
|
||||
orrne r0, r0, r1
|
||||
strneb r0, [r2, r3, lsr #3]
|
||||
orreq r0, r0, r1
|
||||
eoreq r0, r1, r0
|
||||
streqb r0, [r2, r3, lsr #3]
|
||||
b _0204BAF8
|
||||
_0204BA30:
|
||||
ldr r0, [sp, #4]
|
||||
strb r4, [r0, r5]
|
||||
b _0204BAF8
|
||||
_0204BA3C:
|
||||
ldr r0, [sp, #4]
|
||||
strb r4, [r0, r5]
|
||||
b _0204BAF8
|
||||
_0204BA48:
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r5, lsl #1
|
||||
strh r4, [r1, r0]
|
||||
b _0204BAF8
|
||||
_0204BA58:
|
||||
ldr r1, [sp, #4]
|
||||
mov r0, r5, lsl #1
|
||||
strh r4, [r1, r0]
|
||||
b _0204BAF8
|
||||
_0204BA68:
|
||||
ldr r0, [sp, #4]
|
||||
str r4, [r0, r5, lsl #2]
|
||||
b _0204BAF8
|
||||
_0204BA74:
|
||||
cmp r6, #0x49
|
||||
bgt _0204BAA0
|
||||
bge _0204BACC
|
||||
cmp r6, #0x3d
|
||||
bgt _0204BAF8
|
||||
cmp r6, #0x3c
|
||||
blt _0204BAF8
|
||||
beq _0204BAAC
|
||||
cmp r6, #0x3d
|
||||
beq _0204BAC0
|
||||
b _0204BAF8
|
||||
_0204BAA0:
|
||||
cmp r6, #0x70
|
||||
beq _0204BAE4
|
||||
b _0204BAF8
|
||||
_0204BAAC:
|
||||
mov r0, r4
|
||||
bl SetMoneyCarried
|
||||
mov r0, #0
|
||||
bl AddMoneyCarried
|
||||
b _0204BAF8
|
||||
_0204BAC0:
|
||||
mov r0, r4
|
||||
bl SetMoneyStored
|
||||
b _0204BAF8
|
||||
_0204BACC:
|
||||
bl GetGameMode
|
||||
cmp r0, #1
|
||||
bne _0204BAF8
|
||||
mov r0, r4
|
||||
bl sub_0204C928
|
||||
b _0204BAF8
|
||||
_0204BAE4:
|
||||
cmp r4, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bl SetNotifyNote
|
||||
_0204BAF8:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end SaveScriptVariableValueAtIndex
|
||||
|
||||
arm_func_start LoadScriptVariableValueSum
|
||||
LoadScriptVariableValueSum: ; 0x0204BB00
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
|
|
@ -38,5 +38,6 @@ void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
|
|||
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);
|
||||
void SaveScriptVariableValue(union script_var_value sv_locals[], const enum script_var_id script_var_id, u32 new_val);
|
||||
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, int idx, s32 new_val);
|
||||
|
||||
#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_0204B988.o
|
||||
Object asm/main_0204BB00.o
|
||||
Object src/main_0204C938.o
|
||||
Object asm/main_0204C94C.o
|
||||
Object src/dungeon_recruitment_3.o
|
||||
|
|
|
|||
|
|
@ -223,3 +223,67 @@ void SaveScriptVariableValue(union script_var_value sv_locals[], const enum scri
|
|||
|
||||
return;
|
||||
}
|
||||
|
||||
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, int idx, s32 new_val)
|
||||
{
|
||||
struct script_var_raw script_var_raw;
|
||||
LoadScriptVariableRaw(&script_var_raw, sv_locals, script_var_id);
|
||||
|
||||
switch ((s16)script_var_raw.def->type) {
|
||||
case VARTYPE_BIT:
|
||||
// For VARTYPE_BIT, idx specifies a number of bits
|
||||
u16 offset = idx + script_var_raw.def->bitshift;
|
||||
u8 *val = &((u8*)script_var_raw.value)[offset / 8];
|
||||
u8 bitmask = (1 << (offset & (8 - 1)));
|
||||
if (new_val != FALSE) {
|
||||
// new value is true, so we set the bits specified in the bitmask
|
||||
*val = *val | bitmask;
|
||||
return;
|
||||
}
|
||||
// new value is false, so we unset the bits specified in bitmask
|
||||
*val = bitmask ^ (*val | bitmask);
|
||||
return;
|
||||
case VARTYPE_STRING:
|
||||
case VARTYPE_UINT8:
|
||||
((u8*)script_var_raw.value)[idx] = new_val;
|
||||
return;
|
||||
case VARTYPE_INT8:
|
||||
((s8*)script_var_raw.value)[idx] = new_val;
|
||||
return;
|
||||
case VARTYPE_UINT16:
|
||||
((u16*)script_var_raw.value)[idx] = (u16)new_val;
|
||||
return;
|
||||
case VARTYPE_INT16:
|
||||
((s16*)script_var_raw.value)[idx] = (s16)new_val;
|
||||
return;
|
||||
case VARTYPE_UINT32:
|
||||
case VARTYPE_INT32:
|
||||
((s32*)script_var_raw.value)[idx] = (s32)new_val;
|
||||
return;
|
||||
case VARTYPE_SPECIAL:
|
||||
switch (script_var_id) {
|
||||
case VAR_CARRY_GOLD:
|
||||
SetMoneyCarried(new_val);
|
||||
AddMoneyCarried(0);
|
||||
return;
|
||||
case VAR_BANK_GOLD:
|
||||
SetMoneyStored(new_val);
|
||||
return;
|
||||
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
|
||||
if (GetGameMode() == GAME_MODE_1) {
|
||||
sub_0204C928(new_val);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
case VAR_NOTE_MODIFY_FLAG:
|
||||
SetNotifyNote((u8)(new_val != FALSE));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user