-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Custom Battle Mugshots
This feature lets us use any trainer for the elite four mugshot battle intro:
- Open include/battle_transition.h
- Add
#include "constants/battle_transition.h"
to the top - remove the following:
enum // TRANSITION_MUGSHOT
{
MUGSHOT_SIDNEY,
MUGSHOT_PHOEBE,
MUGSHOT_GLACIA,
MUGSHOT_DRAKE,
MUGSHOT_CHAMPION,
MUGSHOTS_COUNT
};
- create a new file,
include/constants/battle_transition.h
#ifndef GUARD_CONSTANTS_BATTLE_TRANSITION_H
#define GUARD_CONSTANTS_BATTLE_TRANSITION_H
#define MUGSHOT_SIDNEY 0
#define MUGSHOT_PHOEBE 1
#define MUGSHOT_GLACIA 2
#define MUGSHOT_DRAKE 3
#define MUGSHOT_CHAMPION 4
#define MUGSHOTS_COUNT 5
#endif //GUARD_CONSTANTS_BATTLE_TRANSITION_H
- Open data/event_scripts.s
- Add
#include "constants/battle_transition.h"
somewhere at the top
Now you can use MUGSHOT_##
in scripts. This will be relevant later.
- Let's define a new mugshot for our trainer. I will use May as an example.
- Inside the new
constants/battle_transition.h
, define a new ID (and increaseMUGSHOT_COUNT
)
#define MUGSHOT_MAY 5
#define MUGSHOT_COUNT 6
At the bottom of include/battle_transition.h
, replace B_TRANSITION_COUNT
with:
B_TRANSITION_MUGSHOT
B_TRANSITION_COUNT
Now we just need a way to load the appropriate mugshot for this transition type. We'll use a variable that we can set before battles.
Inside include/constants/vars.h
, replace an unused variable or add your own: VAR_MUGSHOT_ID
- Open include/data.h
- Add the following to
struct Trainer
:
u8 transition:7;
u8 hasCustomTransition:1;
- Open src/battle_setup.c. Find the function
GetTrainerBattleTransition
- Add the following code:
if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return B_TRANSITION_CHAMPION;
+ if (gTrainers[gTrainerBattleOpponent_A].hasCustomTransition)
+ return gTrainers[gTrainerBattleOpponent_A].transition;
+
if (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR)
{
- In src/data.c, we need to add
#include "battle_transition.h"
to the top as well.
- Open src/battle_transition.c
- Add
#include "event_data.h"
to the top. - Add
static void Task_Mugshot(u8 taskId);
in the function declarations. For example, abovestatic void Task_Sidney(u8 taskId);
- Add the new transition to
sTasks_Main
by adding[B_TRANSITION_MUGSHOT] = Task_Mugshot,
to the array. - Add our new function:
// Sprite data for trainer sprites in mugshots
#define sState data[0]
#define sSlideSpeed data[1]
#define sSlideAccel data[2]
#define sDone data[6]
#define sSlideDir data[7]
+static void Task_Mugshot(u8 taskId)
+{
+ gTasks[taskId].tMugshotId = VarGet(VAR_MUGSHOT_ID);
+ DoMugshotTransition(taskId);
+}
+
static void Task_Sidney(u8 taskId)
{
gTasks[taskId].tMugshotId = MUGSHOT_SIDNEY;
DoMugshotTransition(taskId);
}
For each mugshot we've added, we need to add an element to the following:
sMugshotsTrainerPicIDsTable
-
sMugshotsOpponentRotationScales
: ({0x200, 0x200} should be fine, but dealer's choice) -
sMugshotsOpponentCoords
: ({0, 0} should be fine, but again its case-dependent) sOpponentMugshotsPals
For example:
static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] =
static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] =
{
+ [MUGSHOT_MAY] = TRAINER_PIC_MAY,
[MUGSHOT_SIDNEY] = TRAINER_PIC_ELITE_FOUR_SIDNEY,
[MUGSHOT_PHOEBE] = TRAINER_PIC_ELITE_FOUR_PHOEBE,
[MUGSHOT_GLACIA] = TRAINER_PIC_ELITE_FOUR_GLACIA,
[MUGSHOT_DRAKE] = TRAINER_PIC_ELITE_FOUR_DRAKE,
[MUGSHOT_CHAMPION] = TRAINER_PIC_CHAMPION_WALLACE,
};
static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] =
{
+ [MUGSHOT_MAY] = {0x200, 0x200},
[MUGSHOT_SIDNEY] = {0x200, 0x200},
[MUGSHOT_PHOEBE] = {0x200, 0x200},
[MUGSHOT_GLACIA] = {0x1B0, 0x1B0},
[MUGSHOT_DRAKE] = {0x1A0, 0x1A0},
[MUGSHOT_CHAMPION] = {0x188, 0x188},
};
static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] =
{
+ [MUGSHOT_MAY] = {0, 0},
[MUGSHOT_SIDNEY] = {0, 0},
[MUGSHOT_PHOEBE] = {0, 0},
[MUGSHOT_GLACIA] = {-4, 4},
[MUGSHOT_DRAKE] = {0, 5},
[MUGSHOT_CHAMPION] = {-8, 7},
};
static const u16 *const sOpponentMugshotsPals[MUGSHOTS_COUNT] =
{
+ [MUGSHOT_MAY] = sMugshotPal_Glacia,
[MUGSHOT_SIDNEY] = sMugshotPal_Sidney,
[MUGSHOT_PHOEBE] = sMugshotPal_Phoebe,
[MUGSHOT_GLACIA] = sMugshotPal_Glacia,
[MUGSHOT_DRAKE] = sMugshotPal_Drake,
[MUGSHOT_CHAMPION] = sMugshotPal_Champion
};
In sOpponentMugshotsPals
, we reuse Glacia's pink background palette, but you can change this as you see fit or create your own custom palette.
- Open src/data/trainers.h
- Add the following to any trainer you want to give a mugshot
.hasCustomTransition = TRUE,
.transition = B_TRANSITION_MUGSHOT,
We must define VAR_MUGSHOT_ID
before our trainerbattle, and it should work!
For example:
EventScript_BattleMay::
lockall
faceplayer
msgbox sText_SomeIntro, MSGBOX_DEFAULT
setvar VAR_MUGSHOT_ID, MUGSHOT_MAY
trainerbattle_no_intro TRAINER_MAY_ROUTE_103_TORCHIC, sText_MayLose