From c1dd3fca2112438ccfd20541a55d1677c7a9bb9f Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 6 Jan 2021 18:00:14 -0700 Subject: [PATCH] add room service --- data/battle_scripts_1.s | 33 +++++++++++++++++++++++++++++++++ src/battle_util.c | 14 ++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 32ba6d1280..14751559e3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1842,6 +1842,39 @@ BattleScript_EffectMagnetRise: goto BattleScript_MoveEnd BattleScript_EffectTrickRoom: + attackcanceler + attackstring + ppreduce + setroom + attackanimation + waitanimation + printfromtable gRoomsStringIds + waitmessage 0x40 + savetarget + setbyte gBattlerTarget, 0 +RoomServiceLoop: + copybyte sBATTLER, gBattlerTarget + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ROOM_SERVICE, RoomServiceLoop_NextBattler + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, RoomServiceLoop_NextBattler + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange 0, RoomServiceLoop_NextBattler + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, RoomServiceLoop_NextBattler + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT, NULL + waitanimation + playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_NEGATIVE + +@ setgraphicalstatchangevalues +@ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +@ waitanimation + printstring STRINGID_USINGXTHEYOFZN + waitmessage 0x40 + removeitem BS_TARGET +RoomServiceLoop_NextBattler: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, RoomServiceLoop + restoretarget + goto BattleScript_MoveEnd + BattleScript_EffectWonderRoom: BattleScript_EffectMagicRoom: attackcanceler diff --git a/src/battle_util.c b/src/battle_util.c index bc5e6b9920..3c1a864d19 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5299,6 +5299,20 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) BattleScriptPushCursorAndCallback(BattleScript_AirBaloonMsgIn); RecordItemEffectBattle(battlerId, HOLD_EFFECT_AIR_BALLOON); break; + case HOLD_EFFECT_ROOM_SERVICE: + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gBattleMons[battlerId].statStages[STAT_SPEED] > MIN_STAT_STAGE) + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL); + + gEffectBattler = battlerId; + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + gBattleScripting.animArg1 = 0xE + STAT_SPEED; + gBattleScripting.animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; } if (effect)