summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_4.s4
-rw-r--r--asm/money.s93
-rw-r--r--asm/rom4.s2
-rw-r--r--asm/rom_818E9AC.s16
-rw-r--r--asm/scrcmd.s24
-rw-r--r--asm/shop.s8
-rw-r--r--asm/trainer_card.s2
-rw-r--r--data/event_script_command_function_table.inc4
-rw-r--r--include/money.h4
-rw-r--r--ld_script.txt1
-rw-r--r--src/money.c55
11 files changed, 91 insertions, 122 deletions
diff --git a/asm/battle_4.s b/asm/battle_4.s
index 7abbe47e0..609a74566 100644
--- a/asm/battle_4.s
+++ b/asm/battle_4.s
@@ -15535,7 +15535,7 @@ _0804E6FC:
lsls r1, 3
adds r0, r1
adds r1, r4, 0
- bl add_money
+ bl AddMoney
ldr r1, =gBattleTextBuff1
movs r0, 0xFD
strb r0, [r1]
@@ -20931,7 +20931,7 @@ atk91_givepaydaymoney: @ 80515C8
lsls r1, 3
adds r0, r1
adds r1, r4, 0
- bl add_money
+ bl AddMoney
ldr r1, =gBattleTextBuff1
movs r0, 0xFD
strb r0, [r1]
diff --git a/asm/money.s b/asm/money.s
index 5ca263583..2dcc06fd7 100644
--- a/asm/money.s
+++ b/asm/money.s
@@ -5,100 +5,9 @@
.text
- thumb_func_start DecryptMoney
-@ int DecryptMoney(u32 *moneyPointer)
-DecryptMoney: @ 80E5114
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- adds r1, 0xAC
- ldr r0, [r0]
- ldr r1, [r1]
- eors r0, r1
- bx lr
- .pool
- thumb_func_end DecryptMoney
- thumb_func_start SetMoney
-@ void SetMoney(u32 *moneyPointer, u32 moneyAmount)
-SetMoney: @ 80E5128
- ldr r2, =gSaveBlock2Ptr
- ldr r2, [r2]
- adds r2, 0xAC
- ldr r2, [r2]
- eors r2, r1
- str r2, [r0]
- bx lr
- .pool
- thumb_func_end SetMoney
- thumb_func_start IsEnoughMoney
-@ bool8 IsEnoughMoney(u32 *moneyPointer, u32 price)
-IsEnoughMoney: @ 80E513C
- push {r4,lr}
- adds r4, r1, 0
- bl DecryptMoney
- cmp r0, r4
- bcs _080E514C
- movs r0, 0
- b _080E514E
-_080E514C:
- movs r0, 0x1
-_080E514E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsEnoughMoney
- thumb_func_start add_money
-@ void add_money(int *money_ptr, int amount)
-add_money: @ 80E5154
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- bl DecryptMoney
- adds r5, r0, 0
- adds r0, r5, r4
- ldr r5, =0x000f423f
- adds r4, r5, 0
- cmp r0, r5
- bhi _080E5178
- adds r5, r0, 0
- adds r0, r6, 0
- bl DecryptMoney
- cmp r5, r0
- bcs _080E5178
- adds r5, r4, 0
-_080E5178:
- adds r0, r6, 0
- adds r1, r5, 0
- bl SetMoney
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end add_money
-
- thumb_func_start subtract_money
-@ void subtract_money(int *money_ptr, int amount)
-subtract_money: @ 80E518C
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl DecryptMoney
- adds r1, r0, 0
- cmp r1, r4
- bcs _080E51A0
- movs r1, 0
- b _080E51A2
-_080E51A0:
- subs r1, r4
-_080E51A2:
- adds r0, r5, 0
- bl SetMoney
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end subtract_money
thumb_func_start sub_80E51B0
sub_80E51B0: @ 80E51B0
@@ -128,7 +37,7 @@ sub_80E51D4: @ 80E51D4
adds r0, r1
ldr r1, =gSpecialVar_0x8005
ldrh r1, [r1]
- bl subtract_money
+ bl SubtractMoney
pop {r0}
bx r0
.pool
diff --git a/asm/rom4.s b/asm/rom4.s
index 0accffe2f..ab98f4b2d 100644
--- a/asm/rom4.s
+++ b/asm/rom4.s
@@ -16,7 +16,7 @@ sub_8084620: @ 8084620
lsls r0, 3
adds r4, r0
adds r0, r4, 0
- bl DecryptMoney
+ bl GetMoney
adds r1, r0, 0
lsrs r1, 1
adds r0, r4, 0
diff --git a/asm/rom_818E9AC.s b/asm/rom_818E9AC.s
index 7be125de3..a8202abaa 100644
--- a/asm/rom_818E9AC.s
+++ b/asm/rom_818E9AC.s
@@ -58826,7 +58826,7 @@ _081AD634:
ldrsh r0, [r4, r1]
cmp r0, 0x1
bne _081AD64C
- bl bag_menu_add_money_window
+ bl bag_menu_AddMoney_window
adds r0, r5, 0
bl sub_81AD680
b _081AD66A
@@ -58958,7 +58958,7 @@ sub_81AD730: @ 81AD730
adds r0, r5, 0
movs r1, 0x1
bl sub_81ABCC0
- bl bag_menu_add_money_window
+ bl bag_menu_AddMoney_window
subs r6, 0x8
adds r4, r6
ldr r0, =sub_81AD794
@@ -59144,7 +59144,7 @@ sub_81AD8C8: @ 81AD8C8
ldrsh r1, [r3, r2]
muls r1, r0
adds r0, r4, 0
- bl add_money
+ bl AddMoney
mov r3, r10
ldrb r0, [r3]
mov r1, r9
@@ -59177,7 +59177,7 @@ sub_81AD8C8: @ 81AD8C8
movs r3, 0x92
lsls r3, 3
adds r0, r3
- bl DecryptMoney
+ bl GetMoney
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0
@@ -60220,8 +60220,8 @@ bag_menu_yes_no: @ 81AE238
.pool
thumb_func_end bag_menu_yes_no
- thumb_func_start bag_menu_add_money_window
-bag_menu_add_money_window: @ 81AE268
+ thumb_func_start bag_menu_AddMoney_window
+bag_menu_AddMoney_window: @ 81AE268
push {r4,lr}
movs r0, 0x9
bl bag_menu_add_window
@@ -60233,7 +60233,7 @@ bag_menu_add_money_window: @ 81AE268
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
adds r3, r0, 0
adds r0, r4, 0
movs r1, 0x1
@@ -60246,7 +60246,7 @@ bag_menu_add_money_window: @ 81AE268
pop {r0}
bx r0
.pool
- thumb_func_end bag_menu_add_money_window
+ thumb_func_end bag_menu_AddMoney_window
thumb_func_start bag_menu_remove_money_window
bag_menu_remove_money_window: @ 81AE2A4
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index a50a6bff6..26c6f6824 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -4356,9 +4356,9 @@ _0809B44A:
.pool
thumb_func_end sub_809B3DC
- thumb_func_start s90_add_money
-@ int s90_add_money(script_env *env)
-s90_add_money: @ 809B458
+ thumb_func_start s90_AddMoney
+@ int s90_AddMoney(script_env *env)
+s90_AddMoney: @ 809B458
push {r4,lr}
adds r4, r0, 0
bl script_read_word
@@ -4375,18 +4375,18 @@ s90_add_money: @ 809B458
lsls r1, 3
adds r0, r1
adds r1, r2, 0
- bl add_money
+ bl AddMoney
_0809B47E:
movs r0, 0
pop {r4}
pop {r1}
bx r1
.pool
- thumb_func_end s90_add_money
+ thumb_func_end s90_AddMoney
- thumb_func_start s91_subtract_money
-@ int s91_subtract_money(script_env *env)
-s91_subtract_money: @ 809B48C
+ thumb_func_start s91_SubtractMoney
+@ int s91_SubtractMoney(script_env *env)
+s91_SubtractMoney: @ 809B48C
push {r4,lr}
adds r4, r0, 0
bl script_read_word
@@ -4403,14 +4403,14 @@ s91_subtract_money: @ 809B48C
lsls r1, 3
adds r0, r1
adds r1, r2, 0
- bl subtract_money
+ bl SubtractMoney
_0809B4B2:
movs r0, 0
pop {r4}
pop {r1}
bx r1
.pool
- thumb_func_end s91_subtract_money
+ thumb_func_end s91_SubtractMoney
thumb_func_start s92_check_money
@ int s92_check_money(script_env *env)
@@ -4465,7 +4465,7 @@ s93_display_money: @ 809B500
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
adds r1, r5, 0
adds r2, r4, 0
bl sub_80E52EC
@@ -4504,7 +4504,7 @@ s95_update_money: @ 809B548
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
bl sub_80E52D4
_0809B56E:
movs r0, 0
diff --git a/asm/shop.s b/asm/shop.s
index 9f052463f..a7ec60c54 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -1254,7 +1254,7 @@ BuyMenuDrawGraphics: @ 80E0524
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
adds r3, r0, 0
movs r0, 0
movs r1, 0x1
@@ -2198,7 +2198,7 @@ Task_BuyHowManyDialogueInit: @ 80E0CA4
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
ldr r1, =gUnknown_02039F70
ldr r4, [r1]
movs r2, 0x80
@@ -2465,12 +2465,12 @@ BuyMenuSubtractMoney: @ 80E0F88
lsls r2, 6
adds r1, r2
ldr r1, [r1]
- bl subtract_money
+ bl SubtractMoney
movs r0, 0x5F
bl PlaySE
ldr r0, [r5]
adds r0, r4
- bl DecryptMoney
+ bl GetMoney
adds r1, r0, 0
movs r0, 0
movs r2, 0
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 250b8920c..202c4f75e 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -998,7 +998,7 @@ _080C2F14:
movs r1, 0x92
lsls r1, 3
adds r0, r1
- bl DecryptMoney
+ bl GetMoney
str r0, [r5, 0x24]
movs r2, 0
adds r7, r5, 0
diff --git a/data/event_script_command_function_table.inc b/data/event_script_command_function_table.inc
index b34f8f666..835e58f05 100644
--- a/data/event_script_command_function_table.inc
+++ b/data/event_script_command_function_table.inc
@@ -144,8 +144,8 @@ gEventScriptCommandFunctionTable:: @ 81DB67C
.4byte sub_809B7A4
.4byte sub_809B7B4
.4byte s8F_get_random_val
- .4byte s90_add_money
- .4byte s91_subtract_money
+ .4byte s90_AddMoney
+ .4byte s91_SubtractMoney
.4byte s92_check_money
.4byte s93_display_money
.4byte s94_hide_money
diff --git a/include/money.h b/include/money.h
index ccb840a7f..316dbd697 100644
--- a/include/money.h
+++ b/include/money.h
@@ -1,6 +1,10 @@
#ifndef GUARD_MONEY_H
#define GUARD_MONEY_H
+u32 GetMoney(u32* moneyPtr);
void SetMoney(u32* moneyPtr, u32 newValue);
+bool8 IsEnoughMoney(u32* moneyPtr, u32 cost);
+void AddMoney(u32* moneyPtr, u32 toAdd);
+void SubtractMoney(u32* moneyPtr, u32 toSub);
#endif // GUARD_MONEY_H
diff --git a/ld_script.txt b/ld_script.txt
index f6d54cbcc..b898ae8a8 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -138,6 +138,7 @@ SECTIONS {
asm/berry.o(.text);
asm/script_menu.o(.text);
asm/naming_screen.o(.text);
+ src/money.o(.text);
asm/money.o(.text);
asm/contest_effect.o(.text);
asm/record_mixing.o(.text);
diff --git a/src/money.c b/src/money.c
new file mode 100644
index 000000000..be64d9633
--- /dev/null
+++ b/src/money.c
@@ -0,0 +1,55 @@
+#include "global.h"
+#include "money.h"
+
+#define MAX_MONEY 999999
+
+u32 GetMoney(u32* moneyPtr)
+{
+ return *moneyPtr ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void SetMoney(u32* moneyPtr, u32 newValue)
+{
+ *moneyPtr = gSaveBlock2Ptr->encryptionKey ^ newValue;
+}
+
+bool8 IsEnoughMoney(u32* moneyPtr, u32 cost)
+{
+ if (GetMoney(moneyPtr) >= cost)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void AddMoney(u32* moneyPtr, u32 toAdd)
+{
+ u32 toSet = GetMoney(moneyPtr);
+
+ // can't have more money than MAX
+ if (toSet + toAdd > MAX_MONEY)
+ {
+ toSet = MAX_MONEY;
+ }
+ else
+ {
+ toSet += toAdd;
+ // check overflow, can't have less money after you receive more
+ if (toSet < GetMoney(moneyPtr))
+ toSet = MAX_MONEY;
+ }
+
+ SetMoney(moneyPtr, toSet);
+}
+
+void SubtractMoney(u32* moneyPtr, u32 toSub)
+{
+ u32 toSet = GetMoney(moneyPtr);
+
+ // can't subtract more than you already have
+ if (toSet < toSub)
+ toSet = 0;
+ else
+ toSet -= toSub;
+
+ SetMoney(moneyPtr, toSet);
+}