Merge branch 'romhack' into lighting
This commit is contained in:
commit
0b1c81af66
@ -1,2 +1,2 @@
|
||||
аабааааааабааааабааааабааааааабааааабаааввгвввввввгвввввгвввдежзийкдежзийкдежзий стуфхцч щъыьэюя ёђѓєѕії !"#$%& љњћќ§ўџ()*+,-. 0123456
|
||||
89:;<=>>
|
||||
а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
|
||||
333
3338393:3;3<3=3>3>3 3 3 3
|
||||
@ -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": [
|
||||
|
||||
]
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 931 B After Width: | Height: | Size: 8.7 KiB |
@ -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);
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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};
|
||||
|
||||
@ -5354,7 +5354,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[] = {
|
||||
|
||||
@ -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[] =
|
||||
|
||||
@ -1656,10 +1656,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)
|
||||
{
|
||||
@ -1667,17 +1669,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)
|
||||
{
|
||||
@ -1844,11 +1839,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
|
||||
@ -9821,10 +9817,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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user