diff options
-rw-r--r-- | asm/field_control_avatar.s | 4 | ||||
-rw-r--r-- | asm/field_specials.s | 7 | ||||
-rw-r--r-- | data/map_event_scripts.inc | 118 | ||||
-rw-r--r-- | data/maps/CeladonCity_GameCorner/scripts.inc | 10 | ||||
-rw-r--r-- | data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc | 6 | ||||
-rw-r--r-- | data/maps/CeladonCity_Restaurant/scripts.inc | 4 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/constants/flags.h | 2 | ||||
-rw-r--r-- | include/field_specials.h | 8 | ||||
-rw-r--r-- | include/global.fieldmap.h | 4 | ||||
-rw-r--r-- | src/itemfinder.c | 12 |
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; |