mirror of https://github.com/pret/pokeemerald.git
Created Add Ability to Swap Bikes Whenever (markdown)
parent
fc5913688e
commit
ed9c33cb00
|
@ -0,0 +1,93 @@
|
||||||
|
By devolov
|
||||||
|
**Goal:** Make it so the Mach and Acro bike can be swapped whenever.
|
||||||
|
|
||||||
|
![bike](https://github.com/pret/pokeemerald/assets/36523934/bf5e20bb-12d5-4395-a573-044428e38e4c)
|
||||||
|
|
||||||
|
|
||||||
|
```diff
|
||||||
|
------------------------------- src/item_menu.c -------------------------------
|
||||||
|
index c2518cc20..a5f534b9d 100755
|
||||||
|
@@ -97,8 +97,9 @@ enum {
|
||||||
|
ACTION_BY_AMOUNT,
|
||||||
|
ACTION_BY_NUMBER,
|
||||||
|
ACTION_REGISTER,
|
||||||
|
+ ACTION_SWAP,
|
||||||
|
ACTION_DUMMY,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
@@ -206,8 +207,9 @@ static void BagMenu_ItemPrintCallback(u8, u32, u8);
|
||||||
|
static void ItemMenu_UseOutOfBattle(u8);
|
||||||
|
static void ItemMenu_Toss(u8);
|
||||||
|
static void ItemMenu_Register(u8);
|
||||||
|
+static void ItemMenu_Swap(u8);
|
||||||
|
static void ItemMenu_Give(u8);
|
||||||
|
static void ItemMenu_Cancel(u8);
|
||||||
|
static void ItemMenu_UseInBattle(u8);
|
||||||
|
@@ -300,8 +302,9 @@ static const u8 sMenuText_ByAmount[] = _("Amount");
|
||||||
|
static const u8 sMenuText_ByNumber[] = _("Number");
|
||||||
|
static const u8 sText_NothingToSort[] = _("There's nothing to sort!");
|
||||||
|
static const u8 sMenuText_Tap[] = _("Tap");
|
||||||
|
static const u8 sMenuText_Hold[] = _("Hold");
|
||||||
|
+static const u8 sMenuText_Swap[] = _("SWAP");
|
||||||
|
static const u8 sText_RegisterHow[] = _("Register this\nitem by tapping or\nholding SELECT?");
|
||||||
|
static const struct MenuAction sItemMenuActions[] = {
|
||||||
|
[ACTION_USE] = {gMenuText_Use, ItemMenu_UseOutOfBattle},
|
||||||
|
[ACTION_TOSS] = {gMenuText_Toss, ItemMenu_Toss},
|
||||||
|
@@ -322,8 +325,9 @@ static const struct MenuAction sItemMenuActions[] = {
|
||||||
|
[ACTION_BY_NUMBER] = {sMenuText_ByNumber, ItemMenu_SortByID},
|
||||||
|
[ACTION_BY_AMOUNT] = {sMenuText_ByAmount, ItemMenu_SortByAmount},
|
||||||
|
[ACTION_REGISTER] = {sMenuText_Tap, ItemMenu_Register},
|
||||||
|
+ [ACTION_SWAP] = {sMenuText_Swap, ItemMenu_Swap},
|
||||||
|
[ACTION_DUMMY] = {gText_EmptyString2, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
// these are all 2D arrays with a width of 2 but are represented as 1D arrays
|
||||||
|
@@ -1722,8 +1726,9 @@ static void OpenContextMenu(u8 taskId)
|
||||||
|
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId || gSaveBlock1Ptr->registeredLongItem == gSpecialVar_ItemId)
|
||||||
|
gBagMenu->contextMenuItemsBuffer[1] = ACTION_DESELECT;
|
||||||
|
if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
|
||||||
|
{
|
||||||
|
+ gBagMenu->contextMenuItemsBuffer[2] = ACTION_SWAP;
|
||||||
|
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||||
|
gBagMenu->contextMenuItemsBuffer[0] = ACTION_WALK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
@@ -2045,8 +2050,35 @@ static void ItemMenu_Register(u8 taskId)
|
||||||
|
tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
|
||||||
|
ScheduleBgCopyTilemapToVram(0);
|
||||||
|
ItemMenu_Cancel(taskId);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void ItemMenu_Swap(u8 taskId)
|
||||||
|
+{
|
||||||
|
+ s16 *data = gTasks[taskId].data;
|
||||||
|
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
|
||||||
|
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
|
||||||
|
+ u8 itemListPos = GetItemListPosition(gBagPosition.pocket);
|
||||||
|
+
|
||||||
|
+ if (gSpecialVar_ItemId == ITEM_MACH_BIKE)
|
||||||
|
+ gBagPockets[gBagPosition.pocket].itemSlots[itemListPos].itemId = ITEM_ACRO_BIKE;
|
||||||
|
+ else if (gSpecialVar_ItemId == ITEM_ACRO_BIKE)
|
||||||
|
+ gBagPockets[gBagPosition.pocket].itemSlots[itemListPos].itemId = ITEM_MACH_BIKE;
|
||||||
|
+ SwapRegisteredBike();
|
||||||
|
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
|
||||||
|
+ SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE);
|
||||||
|
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||||
|
+ SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_MACH_BIKE);
|
||||||
|
+
|
||||||
|
+ BagDestroyPocketScrollArrowPair();
|
||||||
|
+ RemoveContextWindow();
|
||||||
|
+ DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
|
||||||
|
+ LoadBagItemListBuffers(gBagPosition.pocket);
|
||||||
|
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
|
||||||
|
+ ScheduleBgCopyTilemapToVram(0);
|
||||||
|
+ ItemMenu_Cancel(taskId);
|
||||||
|
+
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void Task_LoadRegisterOptions(u8 taskId)
|
||||||
|
{
|
||||||
|
s16 *data = gTasks[taskId].data;
|
||||||
|
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId){
|
||||||
|
```
|
Loading…
Reference in New Issue