battle_controller_pokedude data

This commit is contained in:
jiangzhengwenjz
2019-11-01 02:17:23 +08:00
parent 4eb386f7c4
commit 71eb0fc9d8
9 changed files with 945 additions and 503 deletions
File diff suppressed because it is too large Load Diff
-24
View File
@@ -191,30 +191,6 @@ gUnknown_8478EC4:: @ 8478EC4
gUnknown_8478F14:: @ 8478F14
.incbin "baserom.gba", 0x478F14, 0x8
gUnknown_8478F1C:: @ 8478F1C
.incbin "baserom.gba", 0x478F1C, 0x144
gUnknown_8479060:: @ 8479060
.incbin "baserom.gba", 0x479060, 0x78
gUnknown_84790D8:: @ 84790D8
.incbin "baserom.gba", 0x4790D8, 0xC0
gUnknown_8479198:: @ 8479198
.incbin "baserom.gba", 0x479198, 0x10
gUnknown_84791A8:: @ 84791A8
.incbin "baserom.gba", 0x4791A8, 0x10
gUnknown_84791B8:: @ 84791B8
.incbin "baserom.gba", 0x4791B8, 0x14
gUnknown_84791CC:: @ 84791CC
.incbin "baserom.gba", 0x4791CC, 0x1C
gUnknown_84791E8:: @ 84791E8
.incbin "baserom.gba", 0x4791E8, 0x18
.section .rodata.8479668
.align 2
+1 -1
View File
@@ -260,7 +260,7 @@ void SetControllerToPlayerPartner(void);
void SetControllerToSafari(void);
// pokedude controller
void SetControllerToPokeDude(void);
void SetControllerToPokedude(void);
// oak and old man controller
void SetControllerToOakOrOldMan(void);
+22
View File
@@ -243,6 +243,28 @@ extern const u8 gUnknown_83FDDEB[];
extern const u8 gUnknown_83FDCD2[];
extern const u8 gUnknown_83FE6FA[];
// battle_controller_pokedude
extern const u8 gUnknown_81C5F69[];
extern const u8 gUnknown_81C5FA7[];
extern const u8 gUnknown_81C5FDC[];
extern const u8 gUnknown_81C601C[];
extern const u8 gUnknown_81C60FA[];
extern const u8 gUnknown_81C615A[];
extern const u8 gUnknown_81C6196[];
extern const u8 gUnknown_81C61EA[];
extern const u8 gUnknown_81C6202[];
extern const u8 gUnknown_81C6301[];
extern const u8 gUnknown_81C63A9[];
extern const u8 gUnknown_81C63F9[];
extern const u8 gUnknown_81C6446[];
extern const u8 gUnknown_81C657A[];
extern const u8 gUnknown_81C6637[];
extern const u8 gUnknown_81C6645[];
extern const u8 gUnknown_81C66CF[];
extern const u8 gUnknown_81C6787[];
extern const u8 gUnknown_81C684B[];
extern const u8 gUnknown_81C686C[];
// credits
extern const u8 gString_Dummy[];
extern const u8 gString_PokemonFireRed_Staff[]; // FR
+3 -2
View File
@@ -277,8 +277,9 @@ SECTIONS {
src/text_window.o(.text);
src/quest_log_8150454.o(.text);
asm/dodrio_berry_picking.o(.text);
src/battle_controller_pokedude.o(.text);
asm/battle_controller_pokedude.o(.text);
src/unk_8159F40.o(.text);
src/quest_log_815A008.o(.text);
src/dodrio_berry_picking_2.o(.text);
asm/dodrio_berry_picking_2.o(.text);
src/teachy_tv.o(.text);
@@ -548,7 +549,7 @@ SECTIONS {
src/text_window_graphics.o(.rodata);
src/quest_log_8150454.o(.rodata);
data/data_8471F00.o(.rodata);
src/unk_8159F40.o(.rodata);
src/battle_controller_pokedude.o(.rodata);
src/teachy_tv.o(.rodata);
src/unk_815C980.o(.rodata);
data/data_8471F00.o(.rodata.8479668);
-1
View File
@@ -1003,7 +1003,6 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1)
{
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
+537
View File
@@ -0,0 +1,537 @@
#include "global.h"
#include "task.h"
#include "pokemon.h"
#include "party_menu.h"
#include "bg.h"
#include "data.h"
#include "palette.h"
#include "util.h"
#include "m4a.h"
#include "link.h"
#include "sound.h"
#include "item.h"
#include "item_menu.h"
#include "text.h"
#include "strings.h"
#include "string_util.h"
#include "window.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "reshow_battle_screen.h"
#include "constants/songs.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/pokemon.h"
struct Unk_84790E8
{
u8 unk_0;
u8 unk_1;
u16 unk_2;
void (*unk_4)(void);
};
struct PokedudeBattlePartyInfo
{
u8 side;
u8 level;
u16 species;
u16 moves[4];
u8 nature;
u8 gender;
};
void PokedudeHandleGetMonData(void);
void PokedudeHandleGetRawMonData(void);
void PokedudeHandleSetMonData(void);
void PokedudeHandleSetRawMonData(void);
void PokedudeHandleLoadMonSprite(void);
void PokedudeHandleSwitchInAnim(void);
void PokedudeHandleReturnMonToBall(void);
void PokedudeHandleDrawTrainerPic(void);
void PokedudeHandleTrainerSlide(void);
void PokedudeHandleTrainerSlideBack(void);
void PokedudeHandleFaintAnimation(void);
void PokedudeHandlePaletteFade(void);
void PokedudeHandleSuccessBallThrowAnim(void);
void PokedudeHandleBallThrowAnim(void);
void PokedudeHandlePause(void);
void PokedudeHandleMoveAnimation(void);
void PokedudeHandlePrintString(void);
void PokedudeHandlePrintSelectionString(void);
void PokedudeHandleChooseAction(void);
void PokedudeHandleUnknownYesNoBox(void);
void PokedudeHandleChooseMove(void);
void PokedudeHandleChooseItem(void);
void PokedudeHandleChoosePokemon(void);
void PokedudeHandleCmd23(void);
void PokedudeHandleHealthBarUpdate(void);
void PokedudeHandleExpUpdate(void);
void PokedudeHandleStatusIconUpdate(void);
void PokedudeHandleStatusAnimation(void);
void PokedudeHandleStatusXor(void);
void PokedudeHandleDataTransfer(void);
void PokedudeHandleDMA3Transfer(void);
void PokedudeHandlePlayBGM(void);
void PokedudeHandleCmd32(void);
void PokedudeHandleTwoReturnValues(void);
void PokedudeHandleChosenMonReturnValue(void);
void PokedudeHandleOneReturnValue(void);
void PokedudeHandleOneReturnValue_Duplicate(void);
void PokedudeHandleCmd37(void);
void PokedudeHandleCmd38(void);
void PokedudeHandleCmd39(void);
void PokedudeHandleCmd40(void);
void PokedudeHandleHitAnimation(void);
void PokedudeHandleCmd42(void);
void PokedudeHandlePlaySE(void);
void PokedudeHandlePlayFanfare(void);
void PokedudeHandleFaintingCry(void);
void PokedudeHandleIntroSlide(void);
void PokedudeHandleIntroTrainerBallThrow(void);
void PokedudeHandleDrawPartyStatusSummary(void);
void PokedudeHandleHidePartyStatusSummary(void);
void PokedudeHandleEndBounceEffect(void);
void PokedudeHandleSpriteInvisibility(void);
void PokedudeHandleBattleAnimation(void);
void PokedudeHandleLinkStandbyMsg(void);
void PokedudeHandleResetActionMoveSelection(void);
void PokedudeHandleCmd55(void);
void PokedudeCmdEnd(void);
void sub_8159BA8(void);
void sub_8159D04(void);
void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{
PokedudeHandleGetMonData,
PokedudeHandleGetRawMonData,
PokedudeHandleSetMonData,
PokedudeHandleSetRawMonData,
PokedudeHandleLoadMonSprite,
PokedudeHandleSwitchInAnim,
PokedudeHandleReturnMonToBall,
PokedudeHandleDrawTrainerPic,
PokedudeHandleTrainerSlide,
PokedudeHandleTrainerSlideBack,
PokedudeHandleFaintAnimation,
PokedudeHandlePaletteFade,
PokedudeHandleSuccessBallThrowAnim,
PokedudeHandleBallThrowAnim,
PokedudeHandlePause,
PokedudeHandleMoveAnimation,
PokedudeHandlePrintString,
PokedudeHandlePrintSelectionString,
PokedudeHandleChooseAction,
PokedudeHandleUnknownYesNoBox,
PokedudeHandleChooseMove,
PokedudeHandleChooseItem,
PokedudeHandleChoosePokemon,
PokedudeHandleCmd23,
PokedudeHandleHealthBarUpdate,
PokedudeHandleExpUpdate,
PokedudeHandleStatusIconUpdate,
PokedudeHandleStatusAnimation,
PokedudeHandleStatusXor,
PokedudeHandleDataTransfer,
PokedudeHandleDMA3Transfer,
PokedudeHandlePlayBGM,
PokedudeHandleCmd32,
PokedudeHandleTwoReturnValues,
PokedudeHandleChosenMonReturnValue,
PokedudeHandleOneReturnValue,
PokedudeHandleOneReturnValue_Duplicate,
PokedudeHandleCmd37,
PokedudeHandleCmd38,
PokedudeHandleCmd39,
PokedudeHandleCmd40,
PokedudeHandleHitAnimation,
PokedudeHandleCmd42,
PokedudeHandlePlaySE,
PokedudeHandlePlayFanfare,
PokedudeHandleFaintingCry,
PokedudeHandleIntroSlide,
PokedudeHandleIntroTrainerBallThrow,
PokedudeHandleDrawPartyStatusSummary,
PokedudeHandleHidePartyStatusSummary,
PokedudeHandleEndBounceEffect,
PokedudeHandleSpriteInvisibility,
PokedudeHandleBattleAnimation,
PokedudeHandleLinkStandbyMsg,
PokedudeHandleResetActionMoveSelection,
PokedudeHandleCmd55,
PokedudeCmdEnd,
};
// not used
const u8 gUnknown_8479000[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
const u8 gUnknown_8479008[][8] =
{
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 4, 4, 0, 0, 0, 0, 0, 0 },
};
const u8 gUnknown_8479018[][8] =
{
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 1, 0, 0, 0, 64, 0, 0, 0 },
{ 0, 0, 0, 0, 64, 0, 0, 0 },
};
const u8 gUnknown_8479030[][8] =
{
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 2, 0, 0, 0, 64, 0, 0, 0 },
{ 0, 0, 0, 0, 64, 0, 0, 0 },
};
const u8 gUnknown_8479048[][8] =
{
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 1, 0, 0, 0, 64, 0, 0, 0 },
};
const u8 (*const gUnknown_8479060[])[8] =
{
gUnknown_8479008,
gUnknown_8479018,
gUnknown_8479030,
gUnknown_8479048,
};
const u8 gUnknown_8479070[][8] =
{
{ 2, 2, 0, 0, 64, 0, 0, 0 },
{ 255, 255, 0, 0, 0, 0, 0, 0 },
};
const u8 gUnknown_8479080[][8] =
{
{ 2, 2, 0, 0, 64, 0, 0, 0 },
{ 2, 0, 0, 0, 64, 0, 0, 0 },
{ 2, 0, 0, 0, 64, 0, 0, 0 },
{ 255, 255, 0, 0, 0, 0, 0, 0 },
};
const u8 gUnknown_84790A0[][8] =
{
{ 2, 0, 0, 0, 64, 0, 0, 0 },
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 0, 0, 0, 0, 64, 0, 0, 0 },
{ 255, 255, 0, 0, 0, 0, 0, 0 },
};
const u8 gUnknown_84790C0[][8] =
{
{ 0, 2, 0, 0, 64, 0, 0, 0 },
{ 2, 2, 0, 0, 64, 0, 0, 0 },
{ 255, 255, 0, 0, 0, 0, 0, 0 },
};
const u8 (*const gUnknown_84790D8[])[8] =
{
gUnknown_8479070,
gUnknown_8479080,
gUnknown_84790A0,
gUnknown_84790C0,
};
const struct Unk_84790E8 gUnknown_84790E8[] =
{
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 1,
.unk_2 = 4,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 0,
.unk_2 = 13,
.unk_4 = sub_8159BA8,
},
};
const struct Unk_84790E8 gUnknown_8479108[] =
{
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = NULL,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159D04,
},
{
.unk_0 = 21,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 1,
.unk_2 = 4,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 0,
.unk_2 = 13,
.unk_4 = sub_8159BA8,
},
};
const struct Unk_84790E8 gUnknown_8479130[] =
{
{
.unk_0 = 16,
.unk_1 = 1,
.unk_2 = 4,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 22,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 1,
.unk_2 = 4,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 20,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 0,
.unk_2 = 13,
.unk_4 = sub_8159BA8,
},
};
const struct Unk_84790E8 gUnknown_8479168[] =
{
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = NULL,
},
{
.unk_0 = 18,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 16,
.unk_1 = 1,
.unk_2 = 107,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 21,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
{
.unk_0 = 55,
.unk_1 = 0,
.unk_2 = 0,
.unk_4 = sub_8159BA8,
},
};
const struct Unk_84790E8 *const gUnknown_8479198[] =
{
gUnknown_84790E8,
gUnknown_8479108,
gUnknown_8479130,
gUnknown_8479168,
};
const u8 *const gUnknown_84791A8[] =
{
gUnknown_81C5F69,
gUnknown_81C5FA7,
gUnknown_81C5FDC,
gUnknown_81C601C,
};
const u8 *const gUnknown_84791B8[] =
{
gUnknown_81C60FA,
gUnknown_81C60FA,
gUnknown_81C615A,
gUnknown_81C6196,
gUnknown_81C61EA,
};
const u8 *const gUnknown_84791CC[] =
{
gUnknown_81C6202,
gUnknown_81C6301,
gUnknown_81C63A9,
gUnknown_81C63F9,
gUnknown_81C6446,
gUnknown_81C657A,
gUnknown_81C6637,
};
const u8 *const gUnknown_84791E8[] =
{
gUnknown_81C6645,
gUnknown_81C6645,
gUnknown_81C66CF,
gUnknown_81C6787,
gUnknown_81C684B,
gUnknown_81C686C,
};
const struct PokedudeBattlePartyInfo sParties_Battle[] =
{
{
.side = 0,
.level = 15,
.species = SPECIES_RATTATA,
.moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
.nature = NATURE_LONELY,
.gender = MALE,
},
{
.side = 1,
.level = 18,
.species = SPECIES_PIDGEY,
.moves = {MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK},
.nature = NATURE_NAUGHTY,
.gender = MALE,
},
{0xFF}
};
const struct PokedudeBattlePartyInfo sParties_Status[] =
{
{
.side = 0,
.level = 15,
.species = SPECIES_RATTATA,
.moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
.nature = NATURE_LONELY,
.gender = MALE,
},
{
.side = 1,
.level = 14,
.species = SPECIES_ODDISH,
.moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
.nature = NATURE_RASH,
.gender = MALE,
},
{0xFF}
};
const struct PokedudeBattlePartyInfo sParties_Matchups[] =
{
{
.side = 0,
.level = 15,
.species = SPECIES_POLIWAG,
.moves = {MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE},
.nature = NATURE_RASH,
.gender = MALE,
},
{
.side = 0,
.level = 15,
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER},
.nature = NATURE_RASH,
.gender = MALE,
},
{
.side = 1,
.level = 14,
.species = SPECIES_ODDISH,
.moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
.nature = NATURE_RASH,
.gender = MALE,
},
{0xFF}
};
const struct PokedudeBattlePartyInfo sParties_Catching[] =
{
{
.side = 0,
.level = 15,
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
.nature = NATURE_RASH,
.gender = MALE,
},
{
.side = 1,
.level = 11,
.species = SPECIES_JIGGLYPUFF,
.moves = {MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND},
.nature = NATURE_CAREFUL,
.gender = MALE,
},
{0xFF}
};
const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] =
{
sParties_Battle,
sParties_Status,
sParties_Matchups,
sParties_Catching,
};
+6 -6
View File
@@ -85,9 +85,9 @@ static void InitSinglePlayerBtlControllers(void)
gBattleMainFunc = BeginBattleIntro;
if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
gBattlerControllerFuncs[0] = SetControllerToPokeDude;
gBattlerControllerFuncs[0] = SetControllerToPokedude;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToPokeDude;
gBattlerControllerFuncs[1] = SetControllerToPokedude;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2;
}
@@ -110,13 +110,13 @@ static void InitSinglePlayerBtlControllers(void)
gBattleMainFunc = BeginBattleIntro;
if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
gBattlerControllerFuncs[0] = SetControllerToPokeDude;
gBattlerControllerFuncs[0] = SetControllerToPokedude;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToPokeDude;
gBattlerControllerFuncs[1] = SetControllerToPokedude;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[2] = SetControllerToPokeDude;
gBattlerControllerFuncs[2] = SetControllerToPokedude;
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[3] = SetControllerToPokeDude;
gBattlerControllerFuncs[3] = SetControllerToPokedude;
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT;
}
+4 -97
View File
@@ -11,6 +11,9 @@
#include "constants/moves.h"
#include "constants/pokemon.h"
// Don't forget to delete these move the function to battle_controller_pokedude.c
// and headers
// currently I need these for building
struct PokedudeBattlePartyInfo
{
u8 side;
@@ -20,103 +23,7 @@ struct PokedudeBattlePartyInfo
u8 nature;
u8 gender;
};
static const struct PokedudeBattlePartyInfo sParties_Battle[] = {
{
.side = 0,
.level = 15,
.species = SPECIES_RATTATA,
.moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
.nature = NATURE_LONELY,
.gender = MALE
},
{
.side = 1,
.level = 18,
.species = SPECIES_PIDGEY,
.moves = {MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK},
.nature = NATURE_NAUGHTY,
.gender = MALE
},
{0xFF}
};
static const struct PokedudeBattlePartyInfo sParties_Status[] = {
{
.side = 0,
.level = 15,
.species = SPECIES_RATTATA,
.moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
.nature = NATURE_LONELY,
.gender = MALE
},
{
.side = 1,
.level = 14,
.species = SPECIES_ODDISH,
.moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
.nature = NATURE_RASH,
.gender = MALE
},
{0xFF}
};
static const struct PokedudeBattlePartyInfo sParties_Matchups[] = {
{
.side = 0,
.level = 15,
.species = SPECIES_POLIWAG,
.moves = {MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE},
.nature = NATURE_RASH,
.gender = MALE
},
{
.side = 0,
.level = 15,
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER},
.nature = NATURE_RASH,
.gender = MALE
},
{
.side = 1,
.level = 14,
.species = SPECIES_ODDISH,
.moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
.nature = NATURE_RASH,
.gender = MALE
},
{0xFF}
};
static const struct PokedudeBattlePartyInfo sParties_Catching[] = {
{
.side = 0,
.level = 15,
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
.nature = NATURE_RASH,
.gender = MALE
},
{
.side = 1,
.level = 11,
.species = SPECIES_JIGGLYPUFF,
.moves = {MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND},
.nature = NATURE_CAREFUL,
.gender = MALE
},
{0xFF}
};
static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = {
sParties_Battle,
sParties_Status,
sParties_Matchups,
sParties_Catching
};
extern const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[];
void InitPokedudePartyAndOpponent(void)
{
s32 i, j;