Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#pragma once
.public AddMoneyCarried
.public DEBUG_SPECIAL_EPISODE_NUMBER
.public Debug_FatalError
.public Debug_Print
Expand All @@ -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
Expand Down
114 changes: 1 addition & 113 deletions asm/main_0204B988.s → asm/main_0204BB00.s
Original file line number Diff line number Diff line change
@@ -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}
Expand Down
1 change: 1 addition & 0 deletions include/scripting.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 1 addition & 1 deletion main.lsf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
64 changes: 64 additions & 0 deletions src/scripting.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}