summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_control_avatar.s4
-rw-r--r--asm/field_specials.s7
-rw-r--r--data/map_event_scripts.inc118
-rw-r--r--data/maps/CeladonCity_GameCorner/scripts.inc10
-rw-r--r--data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc6
-rw-r--r--data/maps/CeladonCity_Restaurant/scripts.inc4
-rw-r--r--data/specials.inc2
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/field_specials.h8
-rw-r--r--include/global.fieldmap.h4
-rw-r--r--src/itemfinder.c12
11 files changed, 132 insertions, 45 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index 35d96eaa4..c1825ba58 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -1180,14 +1180,14 @@ _0806D17A:
beq _0806D164
ldr r0, _0806D1D0 @ =gSpecialVar_Facing
strh r6, [r0]
- ldr r0, _0806D1D4 @ =gUnknown_81A6843
+ ldr r0, _0806D1D4 @ =EventScript_PickUpHiddenItem
b _0806D1E6
.align 2, 0
_0806D1C4: .4byte gSpecialVar_0x8005
_0806D1C8: .4byte gSpecialVar_0x8004
_0806D1CC: .4byte gSpecialVar_0x8006
_0806D1D0: .4byte gSpecialVar_Facing
-_0806D1D4: .4byte gUnknown_81A6843
+_0806D1D4: .4byte EventScript_PickUpHiddenItem
_0806D1D8:
cmp r2, 0xFF
beq _0806D1E0
diff --git a/asm/field_specials.s b/asm/field_specials.s
index eaac4a481..83608fccf 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -1566,8 +1566,9 @@ _080CB1D2:
bx r1
thumb_func_end sub_80CB198
- thumb_func_start sub_80CB1D8
-sub_80CB1D8: @ 80CB1D8
+ thumb_func_start Special_CheckAddCoins
+Special_CheckAddCoins: @ 80CB1D8
+@ addcoins but it's a dry run
push {lr}
ldr r0, _080CB1F0 @ =gSpecialVar_Result
ldrh r1, [r0]
@@ -1588,7 +1589,7 @@ _080CB1FC:
_080CB1FE:
pop {r1}
bx r1
- thumb_func_end sub_80CB1D8
+ thumb_func_end Special_CheckAddCoins
thumb_func_start sub_80CB204
sub_80CB204: @ 80CB204
diff --git a/data/map_event_scripts.inc b/data/map_event_scripts.inc
index cf0ce85fe..0695499a9 100644
--- a/data/map_event_scripts.inc
+++ b/data/map_event_scripts.inc
@@ -1576,27 +1576,23 @@ EventScript_1A661D:: @ 81A661D
waitmessage
applymovement VAR_LAST_TALKED, Movement_1A666C
waitmovement 0
- loadword 0, Text_1A5511
- callstd 4
+ msgbox Text_1A5511
return
EventScript_1A6636:: @ 81A6636
checkflag 2114
goto_if_eq EventScript_1A661D
- loadword 0, Text_1A552B
- callstd 4
+ msgbox Text_1A552B
setflag 2114
message Text_1BCCCA
waitmessage
applymovement VAR_LAST_TALKED, Movement_1A666C
waitmovement 0
- loadword 0, Text_1A5511
- callstd 4
+ msgbox Text_1A5511
return
EventScript_1A6663:: @ 81A6663
- loadword 0, Text_1A5511
- callstd 4
+ msgbox Text_1A5511
return
Movement_1A666C:: @ 81A666C
@@ -1681,8 +1677,7 @@ EventScript_1A6749:: @ 81A6749
message Text_1A51F6
waitfanfare
waitmessage
- loadword 0, gUnknown_81A5218
- callstd 4
+ msgbox gUnknown_81A5218
setvar VAR_RESULT, 1
return
@@ -1717,8 +1712,7 @@ EventScript_1A6795:: @ 81A6795
message Text_1A52F0
waitfanfare
waitmessage
- loadword 0, gUnknown_81A532F
- callstd 4
+ msgbox gUnknown_81A532F
setvar VAR_RESULT, 1
return
@@ -1755,8 +1749,7 @@ EventScript_1A67EE:: @ 81A67EE
call_if 1, EventScript_1A6827
waitfanfare
waitmessage
- loadword 0, gUnknown_81A5218
- callstd 4
+ msgbox gUnknown_81A5218
return
EventScript_1A6821:: @ 81A6821
@@ -1768,15 +1761,100 @@ EventScript_1A6827:: @ 81A6827
return
EventScript_1A682D:: @ 81A682D
- loadword 0, Text_1A51F6
- callstd 4
- loadword 0, gUnknown_81A5242
- callstd 4
+ msgbox Text_1A51F6
+ msgbox gUnknown_81A5242
setvar VAR_RESULT, 0
return
-gUnknown_81A6843:: @ 81A6843
- .incbin "baserom.gba", 0x1A6843, 0x112
+EventScript_PickUpHiddenItem:: @ 81A6843
+ lockall
+ textcolor 3
+ waitse
+ compare_var_to_value VAR_0x8005, 0
+ goto_if_eq EventScript_PickUpHiddenCoins
+ call EventScript_GiveItem
+ compare_var_to_value VAR_0x8007, 1
+ goto_if_eq EventScript_ItemInPocketMessage
+ compare_var_to_value VAR_0x8007, 0
+ goto_if_eq EventScript_BagIsFullMessage
+ end
+
+EventScript_GiveItem::
+ additem VAR_0x8005, VAR_0x8006
+ copyvar VAR_0x8007, VAR_RESULT
+ getitemname 1, VAR_0x8005
+ checkitemtype VAR_0x8005
+ call EventScript_1A66BC
+ return
+
+EventScript_ItemInPocketMessage::
+ compare_var_to_value VAR_0x8006, 1
+ call_if 1, EventScript_FoundSingleItemMessage
+ compare_var_to_value VAR_0x8006, 1
+ call_if 5, EventScript_FoundMultipleItemsMessage
+ waitfanfare
+ waitmessage
+ msgbox gUnknown_81A5218
+ special sub_80CA758
+ releaseall
+ end
+
+EventScript_FoundSingleItemMessage::
+ message Text_1A5231
+ return
+
+EventScript_FoundCoinsMessage::
+ getnumberstring 0, VAR_0x8006
+ message Text_1A525C
+ return
+
+EventScript_FoundMultipleItemsMessage::
+ getnumberstring 0, VAR_0x8006
+ message Text_1A52DD
+ return
+
+EventScript_BagIsFullMessage::
+ msgbox Text_1A5231
+ msgbox gUnknown_81A5242
+ setvar VAR_RESULT, 0
+ releaseall
+ end
+
+EventScript_PickUpHiddenCoins::
+ checkflag FLAG_GOT_COIN_CASE
+ goto_if 0, EventScript_HiddenCoinsButNoCoinCase
+ checkcoins VAR_RESULT
+ specialvar VAR_RESULT, Special_CheckAddCoins
+ compare_var_to_value VAR_RESULT, 0
+ goto_if_eq EventScript_HiddenCoinsButTheCoinCaseIsFull
+ givecoins VAR_0x8006
+ getstdstring 1, 0x17
+ call EventScript_1A6764
+ call EventScript_FoundCoinsMessage
+ waitfanfare
+ waitmessage
+ msgbox Text_1A526C
+ special sub_80CA758
+ releaseall
+ end
+
+EventScript_HiddenCoinsButTheCoinCaseIsFull::
+ getnumberstring 0, VAR_0x8006
+ getstdstring 1, 0x17
+ msgbox Text_1A525C
+ msgbox Text_1A5294
+ setvar VAR_RESULT, 0
+ releaseall
+ end
+
+EventScript_HiddenCoinsButNoCoinCase::
+ getnumberstring 0, VAR_0x8006
+ getstdstring 1, 0x17
+ msgbox Text_1A525C
+ msgbox Text_1A52B4
+ setvar VAR_RESULT, 0
+ releaseall
+ end
gUnknown_81A6955:: @ 81A6955
.incbin "baserom.gba", 0x1A6955, 0x173
diff --git a/data/maps/CeladonCity_GameCorner/scripts.inc b/data/maps/CeladonCity_GameCorner/scripts.inc
index dca647299..9115b2812 100644
--- a/data/maps/CeladonCity_GameCorner/scripts.inc
+++ b/data/maps/CeladonCity_GameCorner/scripts.inc
@@ -39,7 +39,7 @@ CeladonCity_GameCorner_EventScript_16C68D:: @ 816C68D
end
EventScript_16C6E6:: @ 816C6E6
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16C790
compare_var_to_value VAR_0x8009, 0
goto_if_eq EventScript_16C734
@@ -134,7 +134,7 @@ CeladonCity_GameCorner_EventScript_16C7E7:: @ 816C7E7
checkflag FLAG_0x26E
goto_if_eq EventScript_16C849
msgbox gUnknown_8196AF3
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16C839
checkcoins VAR_0x4001
compare_var_to_value VAR_0x4001, 9990
@@ -198,7 +198,7 @@ CeladonCity_GameCorner_EventScript_16C89E:: @ 816C89E
checkflag FLAG_0x26F
goto_if_eq EventScript_16C8F0
msgbox gUnknown_8196D2B
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16C839
checkcoins VAR_0x4001
compare_var_to_value VAR_0x4001, 9980
@@ -228,7 +228,7 @@ CeladonCity_GameCorner_EventScript_16C8FE:: @ 816C8FE
checkflag FLAG_0x270
goto_if_eq EventScript_16C950
msgbox gUnknown_8196DB7
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16C839
checkcoins VAR_0x4001
compare_var_to_value VAR_0x4001, 9980
@@ -263,7 +263,7 @@ EventScript_16C96A:: @ 816C96A
end
EventScript_16C96C:: @ 816C96C
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16CAA0
msgbox gUnknown_8196F46, MSGBOX_YESNO
compare_var_to_value VAR_RESULT, 0
diff --git a/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc b/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc
index 911847541..4a60c9814 100644
--- a/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc
+++ b/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc
@@ -12,7 +12,7 @@ CeladonCity_GameCorner_PrizeRoom_EventScript_16CB7F:: @ 816CB7F
CeladonCity_GameCorner_PrizeRoom_EventScript_16CB88:: @ 816CB88
lock
faceplayer
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16CD99
special sub_8110AB4
compare_var_to_value VAR_RESULT, 2
@@ -191,7 +191,7 @@ EventScript_16CE12:: @ 816CE12
CeladonCity_GameCorner_PrizeRoom_EventScript_16CE1D:: @ 816CE1D
lock
faceplayer
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16CD99
special sub_8110AB4
compare_var_to_value VAR_RESULT, 2
@@ -289,7 +289,7 @@ EventScript_16CF79:: @ 816CF79
CeladonCity_GameCorner_PrizeRoom_EventScript_16CF88:: @ 816CF88
lock
faceplayer
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if 0, EventScript_16CD99
special sub_8110AB4
compare_var_to_value VAR_RESULT, 2
diff --git a/data/maps/CeladonCity_Restaurant/scripts.inc b/data/maps/CeladonCity_Restaurant/scripts.inc
index e52d88636..379d07271 100644
--- a/data/maps/CeladonCity_Restaurant/scripts.inc
+++ b/data/maps/CeladonCity_Restaurant/scripts.inc
@@ -12,7 +12,7 @@ CeladonCity_Restaurant_EventScript_16D1F4:: @ 816D1F4
CeladonCity_Restaurant_EventScript_16D1FD:: @ 816D1FD
lock
faceplayer
- checkflag FLAG_0x243
+ checkflag FLAG_GOT_COIN_CASE
goto_if_eq EventScript_16D24B
msgbox gUnknown_81979C1
checkitemspace ITEM_COIN_CASE, 1
@@ -20,7 +20,7 @@ CeladonCity_Restaurant_EventScript_16D1FD:: @ 816D1FD
goto_if_eq EventScript_16D241
additem ITEM_COIN_CASE, 1
giveitemfanfaremsg gUnknown_8197A38, ITEM_COIN_CASE
- setflag FLAG_0x243
+ setflag FLAG_GOT_COIN_CASE
release
end
diff --git a/data/specials.inc b/data/specials.inc
index 5905d825f..13809e274 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -359,7 +359,7 @@ gSpecials:: @ 815FD60
def_special sub_80CADEC
def_special sub_805D1A8
def_special sub_80CB0A8
- def_special sub_80CB1D8
+ def_special Special_CheckAddCoins
def_special GetDaycarePokemonCount
def_special sub_80CB63C
def_special sub_80CBD80
diff --git a/include/constants/flags.h b/include/constants/flags.h
index de9a98b43..7f4655d4e 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -668,7 +668,7 @@
#define FLAG_0x240 0x240
#define FLAG_0x241 0x241
#define FLAG_0x242 0x242
-#define FLAG_0x243 0x243
+#define FLAG_GOT_COIN_CASE 0x243
#define FLAG_0x244 0x244
#define FLAG_0x245 0x245
#define FLAG_0x246 0x246
diff --git a/include/field_specials.h b/include/field_specials.h
index d5a3eead8..b48dd34a5 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -3,6 +3,14 @@
#include "global.h"
+enum HiddenItemAttr
+{
+ HIDDEN_ITEM_ID = 0,
+ HIDDEN_ITEM_FLAG,
+ HIDDEN_ITEM_QUANTITY,
+ HIDDEN_ITEM_UNDERFOOT
+};
+
u8 GetLeadMonIndex(void);
u8 CountDigits(u16 number);
void TV_PrintIntToStringVar(u8, int);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index f90c6fc66..bf142d265 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -122,9 +122,9 @@ struct CoordEvent
struct HiddenItemStruct
{
- u32 quantity:16;
+ u32 itemId:16;
u32 hiddenItemId:8; // flag offset to determine flag lookup
- u32 field_03_0:7;
+ u32 quantity:7;
u32 isUnderfoot:1;
};
diff --git a/src/itemfinder.c b/src/itemfinder.c
index 30fd81a8d..4e723ac03 100644
--- a/src/itemfinder.c
+++ b/src/itemfinder.c
@@ -207,11 +207,11 @@ static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskI
gTasks[taskId].tHiddenItemFound = FALSE;
for (i = 0; i < events->bgEventCount; i++)
{
- if (events->bgEvents[i].kind == 7 && !FlagGet(GetHiddenItemAttr(events->bgEvents[i].bgUnion.hiddenItem, 1)))
+ if (events->bgEvents[i].kind == 7 && !FlagGet(GetHiddenItemAttr(events->bgEvents[i].bgUnion.hiddenItem, HIDDEN_ITEM_FLAG)))
{
dx = events->bgEvents[i].x + 7 - x;
dy = events->bgEvents[i].y + 7 - y;
- if (GetHiddenItemAttr(events->bgEvents[i].bgUnion.hiddenItem, 3) == TRUE)
+ if (GetHiddenItemAttr(events->bgEvents[i].bgUnion.hiddenItem, HIDDEN_ITEM_UNDERFOOT) == TRUE)
{
if (dx == 0 && dy == 0)
{
@@ -242,8 +242,8 @@ static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskI
static void SetUnderfootHiddenItem(u8 taskId, struct HiddenItemStruct hiddenItem)
{
s16 *data = gTasks[taskId].data;
- gSpecialVar_0x8004 = GetHiddenItemAttr(hiddenItem, 1);
- gSpecialVar_0x8005 = GetHiddenItemAttr(hiddenItem, 0);
+ gSpecialVar_0x8004 = GetHiddenItemAttr(hiddenItem, HIDDEN_ITEM_FLAG);
+ gSpecialVar_0x8005 = GetHiddenItemAttr(hiddenItem, HIDDEN_ITEM_ID);
gSpecialVar_0x8006 = 1;
TV_PrintIntToStringVar(0, gSpecialVar_0x8005);
tHiddenItemFound = TRUE;
@@ -300,8 +300,8 @@ static bool8 HiddenItemAtPos(struct MapEvents * events, s16 x, s16 y)
&& y == bgEvents[i].y
)
{
- eventFlag = GetHiddenItemAttr(bgEvents[i].bgUnion.hiddenItem, 1);
- if (GetHiddenItemAttr(bgEvents[i].bgUnion.hiddenItem, 3) != TRUE && !FlagGet(eventFlag))
+ eventFlag = GetHiddenItemAttr(bgEvents[i].bgUnion.hiddenItem, HIDDEN_ITEM_FLAG);
+ if (GetHiddenItemAttr(bgEvents[i].bgUnion.hiddenItem, HIDDEN_ITEM_UNDERFOOT) != TRUE && !FlagGet(eventFlag))
return TRUE;
else
return FALSE;