From c2156b96b32de613ca9371f78f047ec00c5185f5 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Mon, 18 Jul 2022 00:43:39 -0400 Subject: [PATCH 1/7] Fixed old Dusclops OW sprite. --- src/data/object_events/object_event_pic_tables.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/object_events/object_event_pic_tables.h b/src/data/object_events/object_event_pic_tables.h index f9b26b1661..975694de11 100755 --- a/src/data/object_events/object_event_pic_tables.h +++ b/src/data/object_events/object_event_pic_tables.h @@ -5352,7 +5352,7 @@ static const struct SpriteFrameImage sPicTable_DusclopsOld[] = { overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 5), overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 6), overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 7), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 8), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 8), }; static const struct SpriteFrameImage sPicTable_AzurillOld[] = { From 3cae0192535145ddd13f97ddc9e8a80c1e98f8bd Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Wed, 27 Jul 2022 23:25:06 -0400 Subject: [PATCH 2/7] Fixed graphical glitch on Route 120 bridge introduced in 418cab092c. --- src/data/object_events/object_event_graphics_info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index 789fc7e178..323b12820c 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -213,7 +213,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {TAG_N const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_PikachuOld, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_AzumarillOld, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_WingullOld, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_KecleonOld, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_AzurillOld, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Mom, gDummySpriteAffineAnimTable}; From 1991f6595459bba1c0753290835521b35c2bfcc1 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 14 Aug 2022 15:16:26 -0400 Subject: [PATCH 3/7] Fixed Magnemite & Magneton OW sprite colors. --- .../object_events/pics/pokemon/magnemite.png | Bin 540 -> 6797 bytes .../object_events/pics/pokemon/magneton.png | Bin 931 -> 8871 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/object_events/pics/pokemon/magnemite.png b/graphics/object_events/pics/pokemon/magnemite.png index 8d18a7e34faeb99150d4355b1bab6857196ef531..b35e1fef566e062501e71653c25047ba60fd958b 100644 GIT binary patch literal 6797 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 delta 474 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 delta 868 zcmV-q1DpJ(MWY9hBVzyubV*G`2jvJK1PT|-V(AC~000+sMObuGZ)S9NVRB^vM@&Re zPDdbiWpW@hE;Mn4q~QPn00?w&PDe*fL^A*Y002sWDIWj;00d`2O+f$vv5yP1%{udMUBdMVEr9FK&;$Br1eTT8Q-od59jHuy%8di&q;6kt2wvvny$L zY#P&&OAlFr;6vl@UrD1eW6$e({U!JX$}UHRXE}fUHPha8O^C%L^jlhMjeDc=8Rc9eRy zB`Lm9BY#xNvLM_)l%1Qawa#x@bb)CThWj;y;j3QY*a$=l3d}ocO3SyCLaCAkcq%^h zd;U~n=L_GMhWo21d~x$qn^PxnY)ft@S%JeD2Xtl`bXM3v$Pzcuj=wPF<67?LEAHqg z!yVzN6F5%VF5)XO($zStySC(Ap#PHjIGT#c&vj43i~fn>jsPlM0j#tPBqCnpzr~Q}0vn173lDQp Date: Sat, 6 Aug 2022 02:25:28 -0400 Subject: [PATCH 4/7] Added battle slide-in animation for Pokemon follower. --- include/battle_main.h | 1 + include/pokeball.h | 1 + src/battle_controller_player.c | 35 +++++++++++++++++----- src/battle_main.c | 23 ++++++++++++++ src/data/trainer_graphics/back_pic_anims.h | 28 +++++++++++++++++ src/pokeball.c | 11 +++++++ 6 files changed, 91 insertions(+), 8 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index 449131e534..2a6e4bf3d7 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -61,6 +61,7 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite); void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d); void EndBounceEffect(u8 battlerId, bool8 b); void SpriteCB_PlayerMonFromBall(struct Sprite *sprite); +void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite); void SpriteCB_TrainerThrowObject(struct Sprite *sprite); void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); diff --git a/include/pokeball.h b/include/pokeball.h index 1149791b86..3dbd80527f 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -32,6 +32,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_PLAYER_SENDOUT 0xFF #define POKEBALL_OPPONENT_SENDOUT 0xFE +#define POKEBALL_PLAYER_SLIDEIN 0xFD u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 954192f0ab..c0e2ff7265 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -10,6 +10,7 @@ #include "battle_tv.h" #include "bg.h" #include "data.h" +#include "event_object_movement.h" #include "item.h" #include "item_menu.h" #include "link.h" @@ -114,7 +115,7 @@ static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); static u32 CopyPlayerMonData(u8, u8 *); static void SetPlayerMonData(u8); -static void StartSendOutAnim(u8, bool8); +static void StartSendOutAnim(u8, bool8, bool8); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); static void Task_StartSendOutAnim(u8); @@ -2189,11 +2190,29 @@ static void PlayerHandleSwitchInAnim(void) BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + #ifdef BATTLE_ENGINE + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2], FALSE); + #else + StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2], FALSE); + #endif gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; } -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) +// In normal singles, if follower pokemon is out, have it slide in instead of being thrown +static bool8 ShouldDoSlideInAnim(void) { + struct ObjectEvent *followerObj = GetFollowerObject(); + if (!followerObj || followerObj->invisible) + return FALSE; + if (gBattleTypeFlags & ( + BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_FIRST_BATTLE | + BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TWO_OPPONENTS | + BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL) + ) + return FALSE; + return TRUE; +} + +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit, bool8 doSlideIn) { u16 species; @@ -2221,7 +2240,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, doSlideIn ? POKEBALL_PLAYER_SLIDEIN : POKEBALL_PLAYER_SENDOUT); } static void PlayerHandleReturnMonToBall(void) @@ -2957,7 +2976,7 @@ static void PlayerHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].sBattlerId = gActiveBattler; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], ShouldDoSlideInAnim() ? 2 : 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); @@ -3004,16 +3023,16 @@ static void Task_StartSendOutAnim(u8 taskId) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); } else { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); gActiveBattler ^= BIT_FLANK; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); gActiveBattler ^= BIT_FLANK; } gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; diff --git a/src/battle_main.c b/src/battle_main.c index f61d5eaae0..6251fa3e81 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2978,6 +2978,29 @@ void SpriteCB_PlayerMonFromBall(struct Sprite *sprite) BattleAnimateBackSprite(sprite, sprite->sSpeciesId); } +void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite) { + if (sprite->data[3] == 0) { + PlaySE(SE_BALL_TRAY_ENTER); + sprite->data[3]++; + } else if (sprite->data[3] == 1) { + if (sprite->animEnded) + return; + sprite->data[4] = sprite->x; + sprite->x = -33; + sprite->invisible = FALSE; + sprite->data[3]++; + } else if (sprite->data[3] < 27) { + sprite->x += 4; + sprite->data[3]++; + } else { + sprite->data[3] = 0; + sprite->x = sprite->data[4]; + sprite->data[4] = 0; + sprite->callback = SpriteCB_PlayerMonFromBall; + PlayCry_ByMode(sprite->sSpeciesId, -25, CRY_MODE_NORMAL); + } +} + static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite) { AnimSetCenterToCornerVecX(sprite); diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index ed12e0cb41..fa55ed7197 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -18,6 +18,16 @@ static const union AnimCmd sAnimCmd_May_Steven_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnimCmd_Point_HGSS[] = +{ + ANIMCMD_FRAME(3, 9), + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(2, 24), + ANIMCMD_FRAME(2, 24), + ANIMCMD_FRAME(3, 50), + ANIMCMD_END, +}; + static const union AnimCmd sAnimCmd_Wally_1[] = { ANIMCMD_FRAME(0, 24), @@ -48,6 +58,16 @@ static const union AnimCmd sAnimCmd_Leaf_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnimCmd_Point_HGSS_Red_Leaf[] = +{ + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(1, 9), + ANIMCMD_FRAME(3, 24), + ANIMCMD_FRAME(3, 24), + ANIMCMD_FRAME(0, 50), + ANIMCMD_END, +}; + static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] = { ANIMCMD_FRAME(0, 24), @@ -72,48 +92,56 @@ static const union AnimCmd *const sBackAnims_Brendan[] = { sAnim_GeneralFrame3, sAnimCmd_Brendan_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_May[] = { sAnim_GeneralFrame3, sAnimCmd_May_Steven_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Red[] = { sAnim_GeneralFrame0, sAnimCmd_Red_1, + sAnimCmd_Point_HGSS_Red_Leaf, }; static const union AnimCmd *const sBackAnims_Leaf[] = { sAnim_GeneralFrame0, sAnimCmd_Leaf_1, + sAnimCmd_Point_HGSS_Red_Leaf, }; static const union AnimCmd *const sBackAnims_RubySapphireBrendan[] = { sAnim_GeneralFrame3, sAnimCmd_RubySapphireBrendan_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_RubySapphireMay[] = { sAnim_GeneralFrame3, sAnimCmd_RubySapphireMay_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Wally[] = { sAnim_GeneralFrame3, sAnimCmd_Wally_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Steven[] = { sAnim_GeneralFrame3, sAnimCmd_May_Steven_1, + sAnimCmd_Point_HGSS, }; const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = diff --git a/src/pokeball.c b/src/pokeball.c index f203633a58..82ae0ee72b 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -380,6 +380,11 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) switch (throwCaseId) { + case POKEBALL_PLAYER_SLIDEIN: // don't actually send out, trigger the slide-in animation + gBattlerTarget = battlerId; + gSprites[ballSpriteId].callback = HandleBallAnimEnd; + gSprites[ballSpriteId].invisible = TRUE; + break; case POKEBALL_PLAYER_SENDOUT: gBattlerTarget = battlerId; gSprites[ballSpriteId].x = 24; @@ -845,6 +850,12 @@ static void HandleBallAnimEnd(struct Sprite *sprite) bool8 affineAnimEnded = FALSE; u8 battlerId = sprite->sBattler; + if (sprite->data[7] == POKEBALL_PLAYER_SLIDEIN) { + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonSlideIn; + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; + } + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; if (sprite->animEnded) sprite->invisible = TRUE; From 37ca4a6cebbc08a2d3202a70e98872609b0fc3c8 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sat, 6 Aug 2022 20:44:15 -0400 Subject: [PATCH 5/7] Made talking to defeated trainers follower-safe. --- data/scripts/trainer_battle.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc index bbbcaf3ba3..66d4d6d5c0 100644 --- a/data/scripts/trainer_battle.inc +++ b/data/scripts/trainer_battle.inc @@ -10,6 +10,7 @@ EventScript_TrainerApproach:: EventScript_TryDoNormalTrainerBattle:: lock faceplayer + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 specialvar VAR_RESULT, GetTrainerFlag @@ -44,6 +45,7 @@ EventScript_NoDoubleTrainerBattle:: gotopostbattlescript EventScript_DoNoIntroTrainerBattle:: + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 special PlayTrainerEncounterMusic @@ -93,6 +95,7 @@ EventScript_NotEnoughMonsForDoubleRematchBattle:: end EventScript_RevealTrainer:: + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 return From 16babe87fc7fb102cc7fc9ff76b34b18b5338202 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 14 Aug 2022 14:36:49 -0400 Subject: [PATCH 6/7] Follower pokemon now disappears when teleporting. Fixed GF's incorrect GFX id on Route 123. --- data/maps/Route123/map.json | 2 +- include/party_menu.h | 1 + src/fldeff_teleport.c | 2 +- src/party_menu.c | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/data/maps/Route123/map.json b/data/maps/Route123/map.json index 695b50acd4..dd9a65201f 100644 --- a/data/maps/Route123/map.json +++ b/data/maps/Route123/map.json @@ -559,7 +559,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_YOUNGSTER", + "graphics_id": "OBJ_EVENT_GFX_BUG_CATCHER", "x": 14, "y": 12, "elevation": 3, diff --git a/include/party_menu.h b/include/party_menu.h index 7f51d08c9f..8542b9ea43 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -44,6 +44,7 @@ u8 GetAilmentFromStatus(u32 status); u8 GetMonAilment(struct Pokemon *mon); void DisplayPartyMenuStdMessage(u32 stringId); bool8 FieldCallback_PrepareFadeInFromMenu(void); +bool8 FieldCallback_PrepareFadeInForTeleport(void); void CB2_ReturnToPartyMenuFromFlyMap(void); void LoadHeldItemIcons(void); void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 3f087e5dab..c17dc9360b 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -14,7 +14,7 @@ bool8 SetUpFieldMove_Teleport(void) { if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) { - gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gFieldCallback2 = FieldCallback_PrepareFadeInForTeleport; gPostMenuFieldCallback = FieldCallback_Teleport; return TRUE; } diff --git a/src/party_menu.c b/src/party_menu.c index 016c359cb9..357dce33d0 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -14,6 +14,7 @@ #include "decompress.h" #include "easy_chat.h" #include "event_data.h" +#include "event_object_movement.h" #include "evolution_scene.h" #include "field_control_avatar.h" #include "field_effect.h" @@ -3742,6 +3743,11 @@ bool8 FieldCallback_PrepareFadeInFromMenu(void) return TRUE; } +bool8 FieldCallback_PrepareFadeInForTeleport(void) { // same as above, but removes follower pokemon + RemoveFollowingPokemon(); + return FieldCallback_PrepareFadeInFromMenu(); +} + static void Task_FieldMoveWaitForFade(u8 taskId) { if (IsWeatherNotFadingIn() == TRUE) From d846b9c7819caaf1ca1865171870773dbd052f85 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 14 Aug 2022 14:48:16 -0400 Subject: [PATCH 7/7] Added dynamic palette support for virtual objects. Added flag to hide follower on certain maps. --- .../map.bin | 4 ++-- .../map.json | 14 ++++++++++---- .../scripts.inc | 1 + data/maps/FortreeCity_Gym/scripts.inc | 1 + data/maps/MossdeepCity_Gym/scripts.inc | 5 +++++ include/constants/flags.h | 2 +- src/event_object_movement.c | 18 ++++++++---------- 7 files changed, 28 insertions(+), 17 deletions(-) diff --git a/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin b/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin index ffb450f3c3..e0f2dc82f0 100644 --- a/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin +++ b/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin @@ -1,2 +1,2 @@ -ÐÐÑÐÐÐÐÐÐÐÑÐÐÐÐÐÑÐÐÐÐÐÑÐÐÐÐÐÐÐÑÐÐÐÐÐÑÐÐÐÒÒÓÒÒÒÒÒÒÒÓÒÒÒÒÒÓÒÒÒÔÕÖרÙÚÔÕÖרÙÚÔÕÖ×ØÙ  áâãäåæç      éêëìíîï      ñòóôõö÷ !"#$%&      ùúûüýþÿ()*+,-.      0123456        -   89:;<=>>    \ No newline at end of file +Ð2Ð2ÑÐ2Ð2Ð2Ð2Ð2Ð2Ð2ÑÐ2Ð2Ð2Ð2Ð2ÑÐ2Ð2Ð2ÐRÐRÑÐRÐRÐRÐRÐRÐRÐRÑÐRÐRÐRÐRÐRÑÐRÐRÐRÒ2Ò2ÓÒ2Ò2Ò2Ò2Ò2Ò2Ò2ÓÒ2Ò2Ò2Ò2Ò2ÓÒ2Ò2Ò2ÔÕÖרÙÚÔÕÖרÙÚÔÕÖ×ØÙ 3 3á2â2ã2ä2å2æ2ç23333333 3 3 3 3 3 3é2êëìíBîBïBCCC3 3 3 3 3 3 3ñ2òBóBôBõBöB÷B C!C"C#C$C%C&3 3 3 3 3 3 3ù2úûüýBþBÿB(C)C*C+,-.3 3 3 3 3 3 3333301233435363 3 3 3 3 3 3 3 +3 3 3 3338393:3;3<3=3>3>3 3 3 3 \ No newline at end of file diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/map.json b/data/maps/BattleFrontier_BattleDomeBattleRoom/map.json index c2b427cbe3..f4c52ce05f 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/map.json +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/map.json @@ -12,7 +12,7 @@ "allow_running": false, "show_map_name": false, "battle_scene": "MAP_BATTLE_SCENE_NORMAL", - "connections": null, + "connections": 0, "object_events": [ { "graphics_id": "OBJ_EVENT_GFX_REPORTER_M", @@ -210,7 +210,13 @@ "flag": "0" } ], - "warp_events": [], - "coord_events": [], - "bg_events": [] + "warp_events": [ + + ], + "coord_events": [ + + ], + "bg_events": [ + + ] } diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index def903b1df..31314b5982 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc @@ -17,6 +17,7 @@ BattleFrontier_BattleDomeBattleRoom_MapScripts:: .byte 0 BattleFrontier_BattleDomeBattleRoom_OnTransition: + setflag FLAG_TEMP_HIDE_FOLLOWER dome_setopponentgfx frontier_get FRONTIER_DATA_BATTLE_NUM copyvar VAR_TEMP_F, VAR_RESULT diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index 1c729bc44e..d52102ebf5 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -5,6 +5,7 @@ FortreeCity_Gym_MapScripts:: FortreeCity_Gym_OnTransition: special RotatingGate_InitPuzzle + setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower bc of rotating gates end FortreeCity_Gym_OnWarp: diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index b47011d680..3b56513df2 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -1,9 +1,14 @@ MossdeepCity_Gym_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MossdeepCity_Gym_OnTransition map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad .byte 0 @ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below +MossdeepCity_Gym_OnTransition: + setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower since it can collide with moving statues + end + @ All the below checks are leftover from RS. FLAG_MOSSDEEP_GYM_SWITCH_X is never set MossdeepCity_Gym_OnLoad: goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_SetSwitch1Metatiles diff --git a/include/constants/flags.h b/include/constants/flags.h index 5a2a12bbe3..708f4e8935 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -21,7 +21,7 @@ #define FLAG_TEMP_B (TEMP_FLAGS_START + 0xB) // Unused Flag #define FLAG_TEMP_C (TEMP_FLAGS_START + 0xC) // Unused Flag #define FLAG_TEMP_D (TEMP_FLAGS_START + 0xD) // Unused Flag -#define FLAG_TEMP_E (TEMP_FLAGS_START + 0xE) // Unused Flag +#define FLAG_TEMP_HIDE_FOLLOWER (TEMP_FLAGS_START + 0xE) // When set, follower pokemon won't be spawned #define FLAG_TEMP_F (TEMP_FLAGS_START + 0xF) // Unused Flag #define FLAG_TEMP_10 (TEMP_FLAGS_START + 0x10) // Unused Flag #define FLAG_TEMP_11 (TEMP_FLAGS_START + 0x11) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 6844afb380..7071e1baa5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1650,10 +1650,12 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables); - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; x += MAP_OFFSET; y += MAP_OFFSET; SetSpritePosToOffsetMapCoords(&x, &y, 8, 16); + if (spriteTemplate.paletteTag != TAG_NONE) + LoadObjectEventPalette(spriteTemplate.paletteTag); + spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); if (spriteId != MAX_SPRITES) { @@ -1661,17 +1663,10 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); sprite->y += sprite->centerToCornerVecY; - sprite->oam.paletteNum = graphicsInfo->paletteSlot; - if (sprite->oam.paletteNum >= 16) - sprite->oam.paletteNum -= 16; sprite->coordOffsetEnabled = TRUE; sprite->sVirtualObjId = virtualObjId; sprite->sVirtualObjElev = elevation; - if (graphicsInfo->paletteSlot == 10) - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - else if (graphicsInfo->paletteSlot >= 16) - _PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0); if (subspriteTables != NULL) { @@ -1835,11 +1830,12 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any bool8 shiny; u8 form; // Avoid spawning large (64x64) follower pokemon inside buildings - if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64)) { + if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { if (objEvent == NULL) { // Spawn follower struct ObjectEventTemplate template = { .localId = OBJ_EVENT_ID_FOLLOWER, .graphicsId = OBJ_EVENT_GFX_OW_MON, + .flagId = 0, .x = gSaveBlock1Ptr->pos.x, .y = gSaveBlock1Ptr->pos.y, // If player active, copy player elevation @@ -9678,10 +9674,12 @@ void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId) struct Sprite *sprite = &gSprites[spriteId]; const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); u16 tileNum = sprite->oam.tileNum; + u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); + if (i != 0xFF) + UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite); sprite->oam = *graphicsInfo->oam; sprite->oam.tileNum = tileNum; - sprite->oam.paletteNum = graphicsInfo->paletteSlot; sprite->images = graphicsInfo->images; if (graphicsInfo->subspriteTables == NULL)