-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Amulet Coin Effects If Anyone In Party is Holding It
voloved edited this page Mar 5, 2023
·
2 revisions
by devolov
Goal: Have the effect of the Amulet coin work if anyone in the party is holding it, not just Pokemon that partook in the battle.
------------------------------ src/battle_main.c ------------------------------
index 01e390f43..c666ea504 100644
@@ -122,8 +122,9 @@ static void HandleEndTurn_RanFromBattle(void);
static void HandleEndTurn_MonFled(void);
static void HandleEndTurn_FinishBattle(void);
static void SpriteCB_UnusedBattleInit(struct Sprite *sprite);
static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite);
+static bool8 partyMonHoldDoublePrizeEffect(void);
EWRAM_DATA u16 gBattle_BG0_X = 0;
EWRAM_DATA u16 gBattle_BG0_Y = 0;
EWRAM_DATA u16 gBattle_BG1_X = 0;
@@ -3289,9 +3290,12 @@ static void BattleStartClearSetData(void)
gBattleStruct->safariPkblThrowCounter = 0;
*(&gBattleStruct->safariCatchFactor) = gSpeciesInfo[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
gBattleStruct->safariEscapeFactor = 3;
gBattleStruct->wildVictorySong = 0;
- gBattleStruct->moneyMultiplier = 1;
+ if (partyMonHoldDoublePrizeEffect())
+ gBattleStruct->moneyMultiplier = 2;
+ else
+ gBattleStruct->moneyMultiplier = 1;
for (i = 0; i < 8; i++)
{
*((u8 *)gBattleStruct->lastTakenMove + i) = MOVE_NONE;
@@ -5478,4 +5482,15 @@ void RunBattleScriptCommands(void)
if (gBattleControllerExecFlags == 0)
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
+static bool8 partyMonHoldDoublePrizeEffect(void){
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++){
+ u8 item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (ItemId_GetHoldEffect(item) == HOLD_EFFECT_DOUBLE_PRIZE){
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
------------------------------ src/battle_util.c ------------------------------
index 7e4c2bc0f..466b7d911 100644
@@ -3288,12 +3288,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
case ITEMEFFECT_ON_SWITCH_IN:
switch (battlerHoldEffect)
{
- case HOLD_EFFECT_DOUBLE_PRIZE:
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
- gBattleStruct->moneyMultiplier = 2;
- break;
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)