1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
Credit to Buffel Saft for posting this in the Simple Modifications Pokecommunity Thread.
This tutorial will implement different trainer classes sending out their Pokemon in different Poke Balls, just like in Gen 7.
First, this will require a new struct to be made in [include/battle_main.h](../blob/master/include/battle_main.h):
```c
struct TrainerBall
{
u8 classId;
u8 Ball; // make this a u16 if needed
};
```
Now that we have the struct, we need to pair all the trainer classes to a Poke Ball type. Add this table to [src/battle_main.c](../blob/master/src/battle_main.c):
```c
const struct TrainerBall gTrainerBallTable[] = {
{TRAINER_CLASS_TEAM_AQUA, ITEM_NET_BALL},
{TRAINER_CLASS_AQUA_ADMIN, ITEM_NET_BALL},
{TRAINER_CLASS_AQUA_LEADER, ITEM_MASTER_BALL},
{TRAINER_CLASS_AROMA_LADY, ITEM_FRIEND_BALL},
{TRAINER_CLASS_RUIN_MANIAC, ITEM_DUSK_BALL},
{TRAINER_CLASS_INTERVIEWER, ITEM_REPEAT_BALL},
{TRAINER_CLASS_TUBER_F, ITEM_DIVE_BALL},
{TRAINER_CLASS_TUBER_M, ITEM_DIVE_BALL},
{TRAINER_CLASS_SIS_AND_BRO, ITEM_POKE_BALL},
{TRAINER_CLASS_COOLTRAINER, ITEM_ULTRA_BALL},
{TRAINER_CLASS_HEX_MANIAC, ITEM_DUSK_BALL},
{TRAINER_CLASS_LADY, ITEM_LUXURY_BALL},
{TRAINER_CLASS_BEAUTY, ITEM_LOVE_BALL},
{TRAINER_CLASS_RICH_BOY, ITEM_LUXURY_BALL},
{TRAINER_CLASS_POKEMANIAC, ITEM_MOON_BALL},
{TRAINER_CLASS_SWIMMER_M, ITEM_DIVE_BALL},
{TRAINER_CLASS_BLACK_BELT, ITEM_HEAVY_BALL},
{TRAINER_CLASS_GUITARIST, ITEM_FAST_BALL},
{TRAINER_CLASS_KINDLER, ITEM_POKE_BALL},
{TRAINER_CLASS_CAMPER, ITEM_NEST_BALL},
{TRAINER_CLASS_OLD_COUPLE, ITEM_POKE_BALL},
{TRAINER_CLASS_BUG_MANIAC, ITEM_NET_BALL},
{TRAINER_CLASS_PSYCHIC, ITEM_DREAM_BALL},
{TRAINER_CLASS_GENTLEMAN, ITEM_LUXURY_BALL},
{TRAINER_CLASS_ELITE_FOUR, ITEM_ULTRA_BALL},
{TRAINER_CLASS_LEADER, ITEM_ULTRA_BALL},
{TRAINER_CLASS_SCHOOL_KID, ITEM_POKE_BALL},
{TRAINER_CLASS_SR_AND_JR, ITEM_POKE_BALL},
{TRAINER_CLASS_POKEFAN, ITEM_POKE_BALL},
{TRAINER_CLASS_EXPERT, ITEM_ULTRA_BALL},
{TRAINER_CLASS_YOUNGSTER, ITEM_POKE_BALL},
{TRAINER_CLASS_CHAMPION, ITEM_CHERISH_BALL},
{TRAINER_CLASS_FISHERMAN, ITEM_LURE_BALL},
{TRAINER_CLASS_TRIATHLETE, ITEM_FAST_BALL},
{TRAINER_CLASS_DRAGON_TAMER, ITEM_ULTRA_BALL},
{TRAINER_CLASS_BIRD_KEEPER, ITEM_QUICK_BALL},
{TRAINER_CLASS_NINJA_BOY, ITEM_QUICK_BALL},
{TRAINER_CLASS_BATTLE_GIRL, ITEM_HEAVY_BALL},
{TRAINER_CLASS_PARASOL_LADY, ITEM_POKE_BALL},
{TRAINER_CLASS_SWIMMER_F, ITEM_DIVE_BALL},
{TRAINER_CLASS_PICNICKER, ITEM_FRIEND_BALL},
{TRAINER_CLASS_TWINS, ITEM_POKE_BALL},
{TRAINER_CLASS_SAILOR, ITEM_DIVE_BALL},
{TRAINER_CLASS_COLLECTOR, ITEM_REPEAT_BALL},
{TRAINER_CLASS_PKMN_TRAINER_3, ITEM_PREMIER_BALL},
{TRAINER_CLASS_PKMN_BREEDER, ITEM_TIMER_BALL},
{TRAINER_CLASS_PKMN_RANGER, ITEM_SAFARI_BALL},
{TRAINER_CLASS_TEAM_MAGMA, ITEM_NEST_BALL},
{TRAINER_CLASS_MAGMA_ADMIN, ITEM_NEST_BALL},
{TRAINER_CLASS_MAGMA_LEADER, ITEM_MASTER_BALL},
{TRAINER_CLASS_LASS, ITEM_POKE_BALL},
{TRAINER_CLASS_BUG_CATCHER, ITEM_NET_BALL},
{TRAINER_CLASS_HIKER, ITEM_HEAVY_BALL},
{TRAINER_CLASS_YOUNG_COUPLE, ITEM_LOVE_BALL},
{TRAINER_CLASS_WINSTRATE, ITEM_GREAT_BALL},
{TRAINER_CLASS_PKMN_TRAINER_2, ITEM_HEAVY_BALL},
{0xFF, ITEM_POKE_BALL},
};
```
You are free to customize this table to your liking.
Finally, we need to have the trainers use the Poke Balls we defined earlier. In the `CreateNPCTrainerParty` function of [src/battle_main.c](../blob/master/src/battle_main.c), add the following:
```diff
for (j = 0; j < MAX_MON_MOVES; j++)
{
SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
}
break;
}
}
+ for (j = 0; gTrainerBallTable[j].classId != 0xFF; j++)
+ {
+ if (gTrainerBallTable[j].classId == gTrainers[trainerNum].trainerClass)
+ break;
+ }
+ SetMonData(&party[i], MON_DATA_POKEBALL, &gTrainerBallTable[j].Ball);
}
gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle;
}
return gTrainers[trainerNum].partySize;
}
```
And that's it!

|