Add new sell value of 1/4 of an item's price, with config (#3315)

Co-authored-by: Eduardo Quezada D'Ottone <eduardo602002@gmail.com>
This commit is contained in:
kittenchilly 2023-10-05 07:14:42 -05:00 committed by GitHub
parent 7ebaddc290
commit ab8bc6e493
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 10 deletions

View file

@ -13,6 +13,7 @@
#define I_GEM_BOOST_POWER GEN_LATEST // In Gen5+, the Gem boost power was reduced from 50% to 30%. #define I_GEM_BOOST_POWER GEN_LATEST // In Gen5+, the Gem boost power was reduced from 50% to 30%.
#define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA. #define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA.
#define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, all regular type boosting held items had their power increased from 10% to 20%. eg. Charcoal #define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, all regular type boosting held items had their power increased from 10% to 20%. eg. Charcoal
#define I_SELL_VALUE_FRACTION GEN_LATEST // In Gen9+, items sell for 1/4 of their value instead of 1/2.
// TM config // TM config
#define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. #define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1.

View file

@ -9,17 +9,17 @@ typedef void (*ItemUseFunc)(u8);
struct Item struct Item
{ {
u32 price;
u16 secondaryId;
ItemUseFunc fieldUseFunc;
const u8 *description;
u8 name[ITEM_NAME_LENGTH]; u8 name[ITEM_NAME_LENGTH];
u16 price;
u8 holdEffect; u8 holdEffect;
u8 holdEffectParam; u8 holdEffectParam;
const u8 *description;
u8 importance; u8 importance;
u8 pocket; u8 pocket;
u8 type; u8 type;
ItemUseFunc fieldUseFunc;
u8 battleUsage; u8 battleUsage;
u16 secondaryId;
u8 flingPower; u8 flingPower;
}; };

View file

@ -2098,11 +2098,17 @@ static void Task_ItemContext_Sell(u8 taskId)
} }
} }
#if I_SELL_VALUE_FRACTION >= GEN_9
#define ITEM_SELL_FACTOR 4
#else
#define ITEM_SELL_FACTOR 2
#endif
static void DisplaySellItemPriceAndConfirm(u8 taskId) static void DisplaySellItemPriceAndConfirm(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1); StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems);
} }
@ -2127,7 +2133,7 @@ static void InitSellHowManyInput(u8 taskId)
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE); u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE);
PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount);
DisplayCurrentMoneyWindow(); DisplayCurrentMoneyWindow();
gTasks[taskId].func = Task_ChooseHowManyToSell; gTasks[taskId].func = Task_ChooseHowManyToSell;
} }
@ -2138,7 +2144,7 @@ static void Task_ChooseHowManyToSell(u8 taskId)
if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{ {
PrintItemSoldAmount(gBagMenu->windowIds[ITEMWIN_QUANTITY_WIDE], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); PrintItemSoldAmount(gBagMenu->windowIds[ITEMWIN_QUANTITY_WIDE], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount);
} }
else if (JOY_NEW(A_BUTTON)) else if (JOY_NEW(A_BUTTON))
{ {
@ -2162,7 +2168,7 @@ static void ConfirmSell(u8 taskId)
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar2); CopyItemName(gSpecialVar_ItemId, gStringVar2);
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem);
} }
@ -2175,7 +2181,7 @@ static void SellItem(u8 taskId)
PlaySE(SE_SHOP); PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, tItemCount); RemoveBagItem(gSpecialVar_ItemId, tItemCount);
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount);
DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
UpdatePocketItemList(gBagPosition.pocket); UpdatePocketItemList(gBagPosition.pocket);
UpdatePocketListPosition(gBagPosition.pocket); UpdatePocketListPosition(gBagPosition.pocket);