summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bard_music.c14
-rw-r--r--src/battle_6.c1465
-rw-r--r--src/battle_811DA74.c10
-rw-r--r--src/battle_anim_8137220.c1486
-rw-r--r--src/battle_party_menu.c57
-rw-r--r--src/cable_club.c25
-rw-r--r--src/choose_party.c1071
-rw-r--r--src/contest_link_80C857C.c55
-rw-r--r--src/contest_painting.c10
-rw-r--r--src/data/decoration/decorations.h1212
-rw-r--r--src/data/decoration/descriptions_de.h699
-rw-r--r--src/data/pokedex_entries_de.h7955
-rw-r--r--src/data/pokedex_orders.h423
-rw-r--r--src/data/text/font0_widths.h21
-rw-r--r--src/data/text/font1_widths.h2
-rw-r--r--src/data/text/font3_widths.h21
-rw-r--r--src/data/text/font4_widths.h2
-rw-r--r--src/de_rom_8040FE0.c272
-rw-r--r--src/decoration.c61
-rw-r--r--src/intro.c4
-rw-r--r--src/link.c18
-rw-r--r--src/menu.c134
-rw-r--r--src/menu_cursor.c197
-rw-r--r--src/mystery_event_script.c16
-rw-r--r--src/naming_screen.c57
-rw-r--r--src/option_menu.c93
-rw-r--r--src/party_menu.c159
-rw-r--r--src/pokedex.c78
-rw-r--r--src/pokemon_size_record.c7
-rw-r--r--src/pokemon_storage_system.c5
-rw-r--r--src/pokemon_summary_screen.c6
-rw-r--r--src/pokenav.c10
-rw-r--r--src/script_menu.c165
-rw-r--r--src/script_pokemon_util_80C4BF0.c10
-rw-r--r--src/script_pokemon_util_80F99CC.c3
-rw-r--r--src/secret_base.c5
-rw-r--r--src/starter_choose.c159
-rw-r--r--src/title_screen.c163
-rw-r--r--src/trade.c88
-rw-r--r--src/trainer_card.c4
-rw-r--r--src/tv.c36
-rw-r--r--src/unused_8124F94.c126
42 files changed, 16283 insertions, 121 deletions
diff --git a/src/bard_music.c b/src/bard_music.c
index a5514e3f7..a31568475 100644
--- a/src/bard_music.c
+++ b/src/bard_music.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "easy_chat.h"
struct BardSound
{
@@ -44,12 +45,25 @@ static s16 sub_814A2B8(u32 arg0, u32 arg1)
return gUnknown_08417068[arg0][arg1];
}
+#if ENGLISH
struct BardSound *sub_814A2D0(u16 arg0, u16 arg1)
{
struct BardSound *sounds = gBardMusicTable[arg0];
return &sounds[arg1];
}
+#elif GERMAN
+struct BardSound *sub_814A2D0(u16 arg0, u16 arg1)
+{
+ u32 index;
+ struct BardSound *sounds;
+
+ sounds = gBardMusicTable[arg0];
+ index = de_sub_80EB748(arg0, arg1);
+
+ return &sounds[index];
+}
+#endif
s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2)
{
diff --git a/src/battle_6.c b/src/battle_6.c
index df2419f70..9ea3f240a 100644
--- a/src/battle_6.c
+++ b/src/battle_6.c
@@ -1,8 +1,27 @@
#include "global.h"
#include "battle.h"
+#include "battle_interface.h"
#include "battle_message.h"
+#include "data2.h"
#include "menu_cursor.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "rom3.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
#include "text.h"
+#include "util.h"
+
+//Possibly PokemonSubstruct1
+struct UnknownStruct3
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppBonuses;
+};
extern u16 gUnknown_030042A4;
extern u16 gUnknown_030042A0;
@@ -14,16 +33,42 @@ extern void (*gBattleBankFunc[])(void);
extern u8 gActiveBank;
extern u8 gActionSelectionCursor[];
extern u8 gDisplayedStringBattle[];
-
-extern u16 gUnknown_030042C0;
-extern u16 gUnknown_030041B4;
-extern u16 gUnknown_03004288;
-extern u16 gUnknown_03004280;
+extern u8 gMoveSelectionCursor[];
+extern u8 gBattleBufferA[][0x200];
+extern u8 gBankInMenu;
+extern u16 gBattlePartyID[];
+extern u8 gHealthboxIDs[];
+extern u8 gDoingBattleAnim;
+extern u8 gObjectBankIDs[];
+extern u16 gBattleTypeFlags;
+extern u8 gBattleOutcome;
+extern void (*gAnimScriptCallback)(void);
+extern bool8 gAnimScriptActive;
+extern u16 gMovePowerMoveAnim;
+extern u32 gMoveDmgMoveAnim;
+extern u8 gHappinessMoveAnim;
+extern u16 gWeatherMoveAnim;
+extern u32 *gDisableStructMoveAnim;
+extern u32 gPID_perBank[];
+extern u8 gBattleMonForms[];
+extern u16 gUnknown_02024DE8;
+extern u8 gUnknown_02024E68[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u8 gUnknown_0202F7C4;
+extern u8 gUnknown_02038470[];
extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B4;
extern u16 gUnknown_030041B8;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042C0;
+extern u8 gUnknown_03004344;
+extern u8 gUnknown_0300434C[];
extern const u8 gUnknown_08400CA8[];
extern const u8 gUnknown_08400CF3[];
+extern const u8 gUnknown_08400D38[];
#if ENGLISH
#define SUB_803037C_TILE_DATA_OFFSET 440
@@ -31,7 +76,952 @@ extern const u8 gUnknown_08400CF3[];
#define SUB_803037C_TILE_DATA_OFFSET 444
#endif
-void sub_803037C(void) {
+extern void sub_802C68C(void);
+extern void sub_802E1B0(void);
+extern void sub_802E3B4();
+extern void sub_802E220();
+extern void sub_802E2D4();
+extern void sub_802E004(void);
+extern void sub_802DF30(void);
+extern void sub_80325B8(void);
+extern void PlayerBufferExecCompleted(void);
+extern void bx_t1_healthbar_update(void);
+extern void nullsub_91(void);
+extern void sub_802D924(u8);
+extern void sub_802E434(void);
+extern bool8 mplay_80342A4(u8);
+extern void move_anim_start_t2_for_situation();
+extern void bx_blink_t1(void);
+extern void sub_8047858();
+extern u8 GetBankSide(u8);
+extern void sub_80E43C0();
+extern void oamt_add_pos2_onto_pos1();
+extern void sub_8078B34(struct Sprite *);
+extern void oamt_set_x3A_32();
+extern void sub_80318FC();
+extern bool8 IsDoubleBattle(void);
+extern void sub_802D500(void);
+extern void dp11b_obj_free();
+extern bool8 sub_8078874(u8);
+extern bool8 move_anim_start_t3();
+extern void sub_802E460(void);
+extern void b_link_standby_message(void);
+extern void sub_802D18C(void);
+extern void sub_802DF18(void);
+extern void BufferStringBattle();
+extern void sub_80326EC();
+extern void ExecuteMoveAnim();
+extern void sub_8031F24(void);
+extern void sub_80324BC();
+extern u8 sub_8031720();
+extern void bx_wait_t1(void);
+extern u8 GetBankByPlayerAI(u8);
+extern void sub_802DE10(void);
+extern void sub_80105EC(struct Sprite *);
+extern void sub_802D274(void);
+extern void sub_802D23C(void);
+extern u8 GetBankIdentity(u8);
+extern void sub_8031AF4();
+extern void sub_80313A0(struct Sprite *);
+extern void sub_802D204(void);
+extern u8 sub_8079E90();
+extern void sub_802DEAC(void);
+extern void sub_80312F0(struct Sprite *);
+extern u8 sub_8077ABC();
+extern u8 sub_8077F68();
+extern u8 sub_8046400();
+extern void sub_802D798(void);
+extern void bx_0802E404(void);
+
+u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *);
+void dp01_setattr_by_ch1_for_player_pokemon(u8);
+void sub_802F934(u8, u8);
+void sub_802FB2C(void);
+void sub_8030190(void);
+void sub_80304A8(void);
+void sub_8030E38(struct Sprite *);
+void task05_08033660(u8);
+void sub_8031064(void);
+
+void PlayerHandleGetAttributes(void)
+{
+ u8 unkData[0x100];
+ u32 offset = 0;
+ u8 r4;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset);
+ r4 >>= 1;
+ }
+ }
+ dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData);
+ PlayerBufferExecCompleted();
+}
+
+// Duplicate of dp01_getattr_by_ch1_for_player_pokemon
+u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
+{
+ struct BattlePokemon battlePokemon;
+ struct UnknownStruct3 moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
+ battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY);
+ battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battlePokemon.nickname, nickname);
+ GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName);
+ src = (u8 *)&battlePokemon;
+ for (size = 0; size < sizeof(battlePokemon); size++)
+ buffer[size] = src[size];
+ break;
+ case 1:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 2:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 3:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ src = (u8 *)&moveData;
+ for (size = 0; size < sizeof(moveData); size++)
+ buffer[size] = src[size];
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 8:
+ for (size = 0; size < 4; size++)
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9);
+ size = 1;
+ break;
+ case 17:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 18:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 19:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case 20:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case 21:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case 22:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case 23:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case 24:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case 25:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case 26:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case 27:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case 28:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case 29:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case 30:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case 31:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case 32:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case 33:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case 34:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case 35:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case 36:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case 37:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case 38:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 39:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 40:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 41:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case 42:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 43:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 44:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 45:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 46:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 47:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 48:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 49:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL);
+ size = 1;
+ break;
+ case 50:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case 51:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case 52:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART);
+ size = 1;
+ break;
+ case 53:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case 54:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case 55:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case 56:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case 57:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case 58:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case 59:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+void sub_802ECF0(void)
+{
+ struct BattlePokemon battleMon; // I think this is a BattlePokemon
+ u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = src[i];
+ dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleSetAttributes(void)
+{
+ u8 r4;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ dp01_setattr_by_ch1_for_player_pokemon(i);
+ r4 >>= 1;
+ }
+ }
+ PlayerBufferExecCompleted();
+}
+
+// Duplicate of sub_811EC68
+void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species);
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship);
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality);
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1);
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level);
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp);
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
+ }
+ break;
+ case 1:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 2:
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 3:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 8:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 17:
+ SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 18:
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 19:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 20:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 21:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 22:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 23:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 24:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 25:
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 26:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 27:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 28:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 29:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 30:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 31:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case 32:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 33:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 34:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 35:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 36:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 37:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 38:
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 39:
+ SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 40:
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 41:
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 42:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 43:
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 44:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 45:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 46:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 47:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 48:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 49:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 50:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 51:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 52:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 53:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 54:
+ SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 55:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 56:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 57:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 58:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 59:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+void sub_802F7CC(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = gBattleBufferA[gActiveBank][3 + i];
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleLoadPokeSprite(void)
+{
+ sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gBattleBankFunc[gActiveBank] = bx_0802E404;
+}
+
+void PlayerHandleSendOutPoke(void)
+{
+ sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
+ sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattleBankFunc[gActiveBank] = sub_802D798;
+}
+
+void sub_802F934(u8 bank, u8 b)
+{
+ u16 species;
+
+ sub_8032AA8(bank, b);
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
+ GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank));
+ gObjectBankIDs[bank] = CreateSprite(
+ &gUnknown_02024E8C,
+ sub_8077ABC(bank, 2),
+ sub_8077F68(bank),
+ sub_8079E90(bank));
+ gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank];
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ gSprites[gObjectBankIDs[bank]].data2 = species;
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
+ gSprites[gObjectBankIDs[bank]].invisible = TRUE;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF);
+}
+
+void PlayerHandleReturnPokeToBall(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802FB2C;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802FB2C(void)
+{
+ switch (ewram17810[gActiveBank].unk4)
+ {
+ case 0:
+ if (ewram17800[gActiveBank].unk0_2)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ ewram17810[gActiveBank].unk4 = 1;
+ break;
+ case 1:
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1);
+ gBattleBankFunc[gActiveBank] = sub_802DEAC;
+ }
+ }
+}
+
+void PlayerHandleTrainerThrow(void)
+{
+ s16 r7;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBankIdentity(gActiveBank) & 2)
+ r7 = 16;
+ else
+ r7 = -16;
+ }
+ else
+ {
+ r7 = 0;
+ }
+ sub_8031AF4(gSaveBlock2.playerGender, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ r7 + 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ sub_8079E90(gActiveBank));
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = -2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_802D204;
+}
+
+void PlayerHandleTrainerSlide(void)
+{
+ sub_8031AF4(gSaveBlock2.playerGender, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ 30);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_802D23C;
+}
+
+void PlayerHandleTrainerSlideBack(void)
+{
+ oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
+ gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
+ oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
+ gBattleBankFunc[gActiveBank] = sub_802D274;
+}
+
+void sub_802FE7C(void)
+{
+ if (ewram17810[gActiveBank].unk4 == 0)
+ {
+ if (ewram17800[gActiveBank].unk0_2)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ ewram17810[gActiveBank].unk4++;
+ }
+ else
+ {
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = 5;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC;
+ gBattleBankFunc[gActiveBank] = sub_802DE10;
+ }
+ }
+}
+
+void sub_802FF60(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+void sub_802FF80(void)
+{
+ ewram17840.unk8 = 4;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
+ gBattleBankFunc[gActiveBank] = bx_wait_t1;
+}
+
+void PlayerHandleBallThrow(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ ewram17840.unk8 = var;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
+ gBattleBankFunc[gActiveBank] = bx_wait_t1;
+}
+
+void PlayerHandlePuase(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ // WTF is this??
+ while (var != 0)
+ var--;
+
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3];
+ gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gHappinessMoveAnim = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16];
+ gPID_perBank[gActiveBank] = *gDisableStructMoveAnim;
+ if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
+ {
+ // Dead code. sub_8031720 always returns 0.
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8030190;
+ }
+ }
+}
+
+void sub_8030190(void)
+{
+ u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+ u8 r7 = gBattleBufferA[gActiveBank][11];
+
+ switch (ewram17810[gActiveBank].unk4)
+ {
+ case 0:
+ if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0)
+ {
+ ewram17800[gActiveBank].unk0_3 = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ }
+ ewram17810[gActiveBank].unk4 = 1;
+ break;
+ case 1:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_80326EC(0);
+ ExecuteMoveAnim(r4);
+ ewram17810[gActiveBank].unk4 = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80326EC(1);
+ if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2)
+ {
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ ewram17800[gActiveBank].unk0_3 = 0;
+ }
+ ewram17810[gActiveBank].unk4 = 3;
+ }
+ break;
+ case 3:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_8031F24();
+ sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ ewram17810[gActiveBank].unk4 = 0;
+ PlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+void PlayerHandlePrintString(void)
+{
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15);
+ gBattleBankFunc[gActiveBank] = sub_802DF18;
+}
+
+void PlayerHandlePrintStringPlayerOnly(void)
+{
+ if (GetBankSide(gActiveBank) == 0)
+ PlayerHandlePrintString();
+ else
+ PlayerBufferExecCompleted();
+}
+
+void sub_803037C(void)
+{
int r4;
gUnknown_030042A4 = 0;
@@ -46,9 +1036,7 @@ void sub_803037C(void) {
sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
for (r4 = 0; r4 < 4; r4++)
- {
nullsub_8(r4);
- }
sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
@@ -56,3 +1044,464 @@ void sub_803037C(void) {
InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35);
sub_8002F44(&gUnknown_03004210);
}
+
+void nullsub_42()
+{
+}
+
+void sub_8030468(void)
+{
+ sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
+ sub_80304A8();
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+}
+
+void sub_80304A8(void)
+{
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 320;
+ sub_802E1B0();
+ gUnknown_03004344 = 0xFF;
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ if (gBattleBufferA[gActiveBank][2] != 1)
+ {
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55);
+ sub_8002F44(&gUnknown_03004210);
+ }
+ sub_802E220();
+ sub_802E2D4();
+}
+
+void PlayerHandleOpenBag(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_802E004;
+ gBankInMenu = gActiveBank;
+ for (i = 0; i < 3; i++)
+ gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i];
+}
+
+void sub_8030594(void)
+{
+ s32 i;
+
+ gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF;
+ ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4;
+ ewram[0x1609D] = gBattleBufferA[gActiveBank][2];
+ ewram[0x160C0] = gBattleBufferA[gActiveBank][3];
+ for (i = 0; i < 3; i++)
+ gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_802DF30;
+ gBankInMenu = gActiveBank;
+}
+
+void sub_8030674(void)
+{
+ sub_80325B8();
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleHealthBarUpdate(void)
+{
+ s16 r7;
+
+ load_gfxc_health_bar(0);
+ r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ if (r7 != 0x7FFF)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7);
+ sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0);
+ }
+ gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update;
+}
+
+void PlayerHandleExpBarUpdate(void)
+{
+ u8 r7 = gBattleBufferA[gActiveBank][1];
+
+ if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ u16 r4;
+ u8 taskId;
+
+ load_gfxc_health_bar(1);
+ GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value
+ r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ taskId = CreateTask(sub_802D924, 10);
+ gTasks[taskId].data[0] = r7;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = gActiveBank;
+ gBattleBankFunc[gActiveBank] = nullsub_91;
+ }
+}
+
+void PlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9);
+ ewram17810[gActiveBank].unk0_4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802E434;
+ }
+}
+
+void PlayerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ move_anim_start_t2_for_situation(
+ gBattleBufferA[gActiveBank][1],
+ gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
+ gBattleBankFunc[gActiveBank] = sub_802E434;
+ }
+}
+
+void PlayerHandleStatusXor(void)
+{
+ u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1];
+
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val);
+ PlayerBufferExecCompleted();
+}
+
+void sub_803097C(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleDMATransfer(void)
+{
+ u32 val1 = gBattleBufferA[gActiveBank][1]
+ | (gBattleBufferA[gActiveBank][2] << 8)
+ | (gBattleBufferA[gActiveBank][3] << 16)
+ | (gBattleBufferA[gActiveBank][4] << 24);
+ u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8);
+
+ const u8 *src = &gBattleBufferA[gActiveBank][7];
+ u8 *dst = (u8 *)val1;
+ u32 size = val2;
+
+ while (1)
+ {
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030A3C(void)
+{
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030A6C(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030A78(void)
+{
+ dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030A8C(void)
+{
+ dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030AA0(void)
+{
+ dp01_build_cmdbuf_x23_aa_0(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030AB4(void)
+{
+ dp01_build_cmdbuf_x24_aa_0(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030AC8(void)
+{
+ gUnknown_020238C8.unk0_0 = 0;
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030AE4(void)
+{
+ gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030B1C(void)
+{
+ gUnknown_020238C8.unk0_7 = 0;
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030B34(void)
+{
+ gUnknown_020238C8.unk0_7 ^= 1;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleHitAnimation(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = 1;
+ gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
+ sub_8047858(gActiveBank);
+ gBattleBankFunc[gActiveBank] = bx_blink_t1;
+ }
+}
+
+void sub_8030BCC(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == 0)
+ pan = -64;
+ else
+ pan = 63;
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ PlayerBufferExecCompleted();
+}
+
+void sub_8030C1C(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleIntroSlide(void)
+{
+ sub_80E43C0(gBattleBufferA[gActiveBank][1]);
+ gUnknown_02024DE8 |= 1;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
+ gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
+ gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
+ oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(task05_08033660, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+ if (ewram17810[gActiveBank].unk0_0)
+ gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
+ ewram17810[4].unk9 |= 1;
+ gBattleBankFunc[gActiveBank] = nullsub_91;
+}
+
+void sub_8030E38(struct Sprite *sprite)
+{
+ u8 r4 = sprite->data5;
+
+ FreeSpriteOamMatrix(sprite);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ DestroySprite(sprite);
+ sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0);
+}
+
+void task05_08033660(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40))
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_802F934(gActiveBank, 0);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_802F934(gActiveBank, 0);
+ gActiveBank ^= 2;
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_802F934(gActiveBank, 0);
+ gActiveBank ^= 2;
+ }
+ gBattleBankFunc[gActiveBank] = sub_802D500;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8030FAC(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk0_0 = 1;
+ gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ ewram17810[gActiveBank].unk5 = 0;
+ if (gBattleBufferA[gActiveBank][2] != 0)
+ ewram17810[gActiveBank].unk5 = 0x5D;
+ gBattleBankFunc[gActiveBank] = sub_8031064;
+ }
+}
+
+void sub_8031064(void)
+{
+ if (ewram17810[gActiveBank].unk5++ > 0x5C)
+ {
+ ewram17810[gActiveBank].unk5 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_80310A4(void)
+{
+ if (ewram17810[gActiveBank].unk0_0)
+ gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
+ PlayerBufferExecCompleted();
+}
+
+void sub_80310F0(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleSpriteInvisibility(void)
+{
+ if (sub_8078874(gActiveBank))
+ {
+ gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
+ sub_8031F88(gActiveBank);
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 val2 = gBattleBufferA[gActiveBank][1];
+ u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val))
+ PlayerBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = sub_802E460;
+ }
+}
+
+void PlayerHandleLinkStandbyMsg(void)
+{
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ b_link_standby_message();
+ // fall through
+ case 1:
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ break;
+ case 2:
+ b_link_standby_message();
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleResetActionMoveSelection(void)
+{
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ case 1:
+ gActionSelectionCursor[gActiveBank] = 0;
+ break;
+ case 2:
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void sub_80312A0(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerBufferExecCompleted();
+ gBattleBankFunc[gActiveBank] = sub_802D18C;
+}
+
+void nullsub_43(void)
+{
+}
diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c
index 743dd2554..42c700844 100644
--- a/src/battle_811DA74.c
+++ b/src/battle_811DA74.c
@@ -35,15 +35,7 @@ struct UnknownStruct3
u8 ppBonuses;
};
-struct UnknownStruct5
-{
- u8 unk0_0:7;
- u8 unk0_7:1;
-};
-
extern u16 gBattleTypeFlags;
-
-extern struct UnknownStruct5 gUnknown_020238C8;
extern u8 gDisplayedStringBattle[];
extern u8 gBattleBufferA[][0x200];
extern u8 gActiveBank;
@@ -433,6 +425,7 @@ void LinkPartnerHandleGetAttributes(void)
LinkPartnerBufferExecCompleted();
}
+// Duplicate of dp01_getattr_by_ch1_for_player_pokemon_
u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
{
struct BattlePokemon battlePokemon;
@@ -765,6 +758,7 @@ void LinkPartnerHandleSetAttributes(void)
LinkPartnerBufferExecCompleted();
}
+// Duplicate of dp01_setattr_by_ch1_for_player_pokemon
void sub_811EC68(u8 a)
{
struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c
new file mode 100644
index 000000000..42d6cb8da
--- /dev/null
+++ b/src/battle_anim_8137220.c
@@ -0,0 +1,1486 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "data2.h"
+#include "link.h"
+#include "main.h"
+#include "menu_cursor.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "rom3.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+
+//Possibly PokemonSubstruct1
+struct UnknownStruct3
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppBonuses;
+};
+
+extern u8 gActiveBank;
+extern void (*gBattleBankFunc[])(void);
+extern u32 gBattleExecBuffer;
+extern void (*gWallyBufferCommands[])(void);
+extern u8 gBattleBufferA[][0x200];
+extern u8 gObjectBankIDs[];
+extern MainCallback gPreBattleCallback1;
+extern bool8 gDoingBattleAnim;
+extern u16 gScriptItemId;
+extern u16 gBattlePartyID[];
+extern u8 gHealthboxIDs[];
+extern u16 gBattleTypeFlags;
+extern u16 gMovePowerMoveAnim;
+extern u32 gMoveDmgMoveAnim;
+extern u8 gHappinessMoveAnim;
+extern u16 gWeatherMoveAnim;
+extern u32 *gDisableStructMoveAnim;
+extern u32 gPID_perBank[];
+extern void (*gAnimScriptCallback)(void);
+extern bool8 gAnimScriptActive;
+extern u8 gDisplayedStringBattle[];
+extern u8 gBankInMenu;
+extern u8 gBattleMonForms[];
+extern u8 gBattleOutcome;
+extern u16 gUnknown_02024DE8;
+extern u8 gUnknown_02024E68[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u8 gUnknown_0202F7C4;
+extern struct Window gUnknown_03004210;
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern u8 gUnknown_0300434C[];
+extern const u8 gUnknown_08400CCC[];
+extern const u8 gUnknown_08400CF3[];
+
+// TODO: include rom3.h when my other PR gets merged
+extern void dp01_build_cmdbuf_x21_a_bb(u8, u8, u16);
+extern void dp01_build_cmdbuf_x23_aa_0(u8, u16);
+
+extern void nullsub_14(void);
+extern void PrepareBagForWallyTutorial(void);
+extern void sub_8141828();
+extern void sub_8045A5C();
+extern void sub_804777C();
+extern void sub_8043DFC();
+extern bool8 IsDoubleBattle(void);
+extern void c3_0802FDF4(u8);
+extern void sub_802ECF0(void);
+extern void sub_8031AF4();
+extern u8 GetBankIdentity(u8);
+extern void sub_80313A0(struct Sprite *);
+extern u8 GetBankByPlayerAI(u8);
+extern u8 sub_8031720();
+extern void ExecuteMoveAnim();
+extern void sub_80326EC();
+extern void sub_8031F24(void);
+extern void sub_80324BC();
+extern void BufferStringBattle();
+extern u8 GetBankSide(u8);
+extern void sub_80304A8(void);
+extern void sub_8047858();
+extern void sub_80E43C0();
+extern void oamt_add_pos2_onto_pos1();
+extern void sub_8078B34(struct Sprite *);
+extern void sub_8030E38(struct Sprite *);
+extern void oamt_set_x3A_32();
+extern u8 sub_8046400();
+extern u8 sub_8077ABC();
+extern u8 sub_8077F68();
+extern u8 sub_8079E90();
+extern void sub_80312F0(struct Sprite *);
+extern bool8 move_anim_start_t3();
+
+void WallyBufferRunCommand(void);
+void sub_81374FC(void);
+void sub_81376B8(void);
+void WallyBufferExecCompleted(void);
+u32 sub_8137A84(u8, u8 *);
+void sub_8138294(u8);
+void sub_81390D0(void);
+void sub_8139A2C(u8);
+
+void unref_sub_8137220(void)
+{
+}
+
+void SetBankFuncToWallyBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = WallyBufferRunCommand;
+ ewram[0x160A8] = 0;
+ ewram[0x160A9] = 0;
+ ewram[0x160AA] = 0;
+ ewram[0x160AB] = 0;
+}
+
+void WallyBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < 0x39)
+ gWallyBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ WallyBufferExecCompleted();
+ }
+}
+
+void sub_81372BC(void)
+{
+ u8 r4;
+
+ switch (ewram[0x160A8])
+ {
+ case 0:
+ ewram[0x160AA] = 64;
+ ewram[0x160A8]++;
+ // fall through
+ case 1:
+ r4 = --ewram[0x160AA];
+ if (r4 == 0)
+ {
+ PlaySE(SE_SELECT);
+ dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ WallyBufferExecCompleted();
+ ewram[0x160A8]++;
+ ewram[0x160A9] = r4;
+ ewram[0x160AA] = 64;
+ }
+ break;
+ case 2:
+ r4 = --ewram[0x160AA];
+ if (r4 == 0)
+ {
+ PlaySE(SE_SELECT);
+ dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ WallyBufferExecCompleted();
+ ewram[0x160A8]++;
+ ewram[0x160A9] = r4;
+ ewram[0x160AA] = 64;
+ }
+ break;
+ case 3:
+ r4 = --ewram[0x160AA];
+ if (r4 == 0)
+ {
+ dp01_build_cmdbuf_x21_a_bb(1, 9, 0);
+ WallyBufferExecCompleted();
+ ewram[0x160A8]++;
+ ewram[0x160A9] = r4;
+ ewram[0x160AA] = 64;
+ }
+ break;
+ case 4:
+ if (--ewram[0x160AA] == 0)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(0);
+ sub_802E3E4(1, 0);
+ ewram[0x160AA] = 64;
+ ewram[0x160A8]++;
+ }
+ break;
+ case 5:
+ if (--ewram[0x160AA] == 0)
+ {
+ PlaySE(SE_SELECT);
+ DestroyMenuCursor();
+ dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
+ WallyBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+void sub_813741C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ WallyBufferExecCompleted();
+}
+
+void sub_8137454(void)
+{
+ if (gUnknown_03004210.state == 0)
+ WallyBufferExecCompleted();
+}
+
+void sub_813746C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+void bx_wait_t5(void)
+{
+ if (!gDoingBattleAnim)
+ WallyBufferExecCompleted();
+}
+
+void sub_81374C4(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = sub_81374FC;
+ nullsub_14();
+ PrepareBagForWallyTutorial();
+ }
+}
+
+void sub_81374FC(void)
+{
+ if (gMain.callback2 == sub_800F808
+ && !gPaletteFade.active)
+ {
+ dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
+ WallyBufferExecCompleted();
+ }
+}
+
+void sub_8137538(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
+
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(gHealthboxIDs[gActiveBank ^ 2], &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_81376B8;
+ }
+}
+
+void sub_81376B8(void)
+{
+ bool8 r4 = FALSE;
+
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r4 = TRUE;
+ if (r4 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ CreateTask(c3_0802FDF4, 10);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ WallyBufferExecCompleted();
+ }
+}
+
+void sub_81377B0(void)
+{
+ s16 r4;
+
+ r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ {
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ }
+ else
+ {
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ WallyBufferExecCompleted();
+ }
+}
+
+void bx_blink_t5(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = FALSE;
+ WallyBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_813789C(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ WallyBufferExecCompleted();
+ }
+}
+
+// Duplicate of sub_813741C
+void sub_8137908(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ WallyBufferExecCompleted();
+}
+
+void sub_8137940(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ WallyBufferExecCompleted();
+}
+
+void WallyBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = WallyBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 multiplayerId = GetMultiplayerId();
+
+ dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+void unref_sub_81379E4(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ WallyBufferExecCompleted();
+}
+
+void dp01t_00_5_getattr(void)
+{
+ u8 arr[0x100];
+ u32 r6 = 0;
+ u8 r4;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ r6 = sub_8137A84(gBattlePartyID[gActiveBank], arr);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ r6 += sub_8137A84(i, arr + r6);
+ r4 >>= 1;
+ }
+ }
+ dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, arr);
+ WallyBufferExecCompleted();
+}
+
+u32 sub_8137A84(u8 a, u8 *buffer)
+{
+ struct BattlePokemon battlePokemon;
+ struct UnknownStruct3 moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
+ battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY);
+ battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battlePokemon.nickname, nickname);
+ GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName);
+ src = (u8 *)&battlePokemon;
+ for (size = 0; size < sizeof(battlePokemon); size++)
+ buffer[size] = src[size];
+ break;
+ case 1:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 2:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 3:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ src = (u8 *)&moveData;
+ for (size = 0; size < sizeof(moveData); size++)
+ buffer[size] = src[size];
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 8:
+ for (size = 0; size < 4; size++)
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9);
+ size = 1;
+ break;
+ case 17:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 18:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 19:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case 20:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case 21:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case 22:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case 23:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case 24:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case 25:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case 26:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case 27:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case 28:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case 29:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case 30:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case 31:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case 32:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case 33:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case 34:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case 35:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case 36:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case 37:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case 38:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 39:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 40:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 41:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case 42:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 43:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 44:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 45:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 46:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 47:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 48:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 49:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL);
+ size = 1;
+ break;
+ case 50:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case 51:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case 52:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART);
+ size = 1;
+ break;
+ case 53:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case 54:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case 55:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case 56:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case 57:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case 58:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case 59:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+void sub_8138230(void)
+{
+ sub_802ECF0();
+}
+
+void sub_813823C(void)
+{
+ u8 r4;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ sub_8138294(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ sub_8138294(i);
+ r4 >>= 1;
+ }
+ }
+ WallyBufferExecCompleted();
+}
+
+void sub_8138294(u8 a)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species);
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship);
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality);
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1);
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level);
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp);
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
+ }
+ break;
+ case 1:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 2:
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 3:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 8:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 17:
+ SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 18:
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 19:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 20:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 21:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 22:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 23:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 24:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 25:
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 26:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 27:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 28:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 29:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 30:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 31:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case 32:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 33:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 34:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 35:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 36:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 37:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 38:
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 39:
+ SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 40:
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 41:
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 42:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 43:
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 44:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 45:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 46:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 47:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 48:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 49:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 50:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 51:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 52:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 53:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 54:
+ SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 55:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 56:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 57:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 58:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 59:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+void sub_8138C90(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138C9C(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138CA8(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138CB4(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1);
+ gBattleBankFunc[gActiveBank] = sub_813789C;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ WallyBufferExecCompleted();
+ }
+}
+
+void sub_8138D38(void)
+{
+ sub_8031AF4(2, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords),
+ 30);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = -2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_813741C;
+}
+
+void sub_8138E04(void)
+{
+ sub_8031AF4(2, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords),
+ 30);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_8137908;
+}
+
+void sub_8138ED0(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138EDC(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138EE8(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138EF4(void)
+{
+ ewram17840.unk8 = 4;
+ gDoingBattleAnim = TRUE;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4);
+ gBattleBankFunc[gActiveBank] = bx_wait_t5;
+}
+
+void sub_8138F44(void)
+{
+ u8 val = gBattleBufferA[gActiveBank][1];
+
+ ewram17840.unk8 = val;
+ gDoingBattleAnim = TRUE;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4);
+ gBattleBankFunc[gActiveBank] = bx_wait_t5;
+}
+
+void sub_8138FA0(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8138FAC(void)
+{
+ u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3];
+ gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gHappinessMoveAnim = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16];
+ gPID_perBank[gActiveBank] = *gDisableStructMoveAnim;
+ if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
+ {
+ // Dead code. sub_8031720 always returns 0.
+ WallyBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_81390D0;
+ }
+}
+
+void sub_81390D0(void)
+{
+ u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+#ifndef NONMATCHING
+ asm("":::"r6");
+#endif
+
+ switch (ewram17810[gActiveBank].unk4)
+ {
+ case 0:
+ if (ewram17800[gActiveBank].unk0_2 == 1)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ ewram17810[gActiveBank].unk4 = 1;
+ break;
+ case 1:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_80326EC(0);
+ ExecuteMoveAnim(r4);
+ ewram17810[gActiveBank].unk4 = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80326EC(1);
+ if (ewram17800[gActiveBank].unk0_2 == 1)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ ewram17810[gActiveBank].unk4 = 3;
+ }
+ break;
+ case 3:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_8031F24();
+ sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ ewram17810[gActiveBank].unk4 = 0;
+ WallyBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+void sub_8139208(void)
+{
+ u16 *ptr;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ ptr = (u16 *)&gBattleBufferA[gActiveBank][2];
+ if (*ptr == 2)
+ DestroyMenuCursor();
+ BufferStringBattle(*ptr);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15);
+ gBattleBankFunc[gActiveBank] = sub_8137454;
+}
+
+void dp01t_11_5_message_for_player_only(void)
+{
+ if (GetBankSide(gActiveBank) == 0)
+ sub_8139208();
+ else
+ WallyBufferExecCompleted();
+}
+
+void sub_8139298(void)
+{
+ s32 i;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ gUnknown_03004210.paletteNum = 0;
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
+ gBattleBankFunc[gActiveBank] = sub_81372BC;
+ InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
+ for (i = 0; i < 4; i++)
+ nullsub_8(i);
+ sub_802E3E4(0, 0);
+ StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CCC);
+#ifdef ENGLISH
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35);
+#else
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35);
+#endif
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void sub_8139378(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139384(void)
+{
+ switch (ewram[0x160A9])
+ {
+ case 0:
+ sub_80304A8();
+ ewram[0x160A9]++;
+ ewram[0x160AB] = 80;
+ // fall through
+ case 1:
+ ewram[0x160AB]--;
+ if (ewram[0x160AB] == 0)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ dp01_build_cmdbuf_x21_a_bb(1, 10, 256);
+ WallyBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+void sub_81393EC(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_81374C4;
+ gBankInMenu = gActiveBank;
+}
+
+void sub_813942C(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139438(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139444(void)
+{
+ s16 r7;
+
+ load_gfxc_health_bar(0);
+ r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ if (r7 != 0x7FFF)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7);
+ sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0);
+ }
+ gBattleBankFunc[gActiveBank] = sub_81377B0;
+}
+
+void sub_8139544(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139550(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_813955C(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139568(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139574(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139580(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_813958C(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139598(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395A4(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395B0(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395BC(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395C8(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395D4(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395E0(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395EC(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_81395F8(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139604(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
+ {
+ WallyBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = 1;
+ gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
+ sub_8047858(gActiveBank);
+ gBattleBankFunc[gActiveBank] = bx_blink_t5;
+ }
+}
+
+void sub_8139674(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139680(void)
+{
+ PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ WallyBufferExecCompleted();
+}
+
+void sub_81396B0(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ WallyBufferExecCompleted();
+}
+
+void sub_81396E0(void)
+{
+ PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25);
+ WallyBufferExecCompleted();
+}
+
+void dp01t_2E_5_battle_intro(void)
+{
+ sub_80E43C0(gBattleBufferA[gActiveBank][1]);
+ gUnknown_02024DE8 |= 1;
+ WallyBufferExecCompleted();
+}
+
+void sub_8139750(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
+ gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
+ gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
+ oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(sub_8139A2C, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+ if (ewram17810[gActiveBank].unk0_0)
+ gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
+ ewram17810[4].unk9 |= 1;
+ gBattleBankFunc[gActiveBank] = nullsub_91;
+}
+
+void sub_81398BC(u8 bank)
+{
+ u16 species;
+
+ ewram17800[bank].unk2 = 0;
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
+ GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank));
+ gObjectBankIDs[bank] = CreateSprite(
+ &gUnknown_02024E8C,
+ sub_8077ABC(bank, 2),
+ sub_8077F68(bank),
+ sub_8079E90(bank));
+ gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank];
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ gSprites[gObjectBankIDs[bank]].data2 = species;
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
+ gSprites[gObjectBankIDs[bank]].invisible = TRUE;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF);
+}
+
+void sub_8139A2C(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_81398BC(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_8137538;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8139AA0(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
+ {
+ WallyBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk0_0 = 1;
+ gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ WallyBufferExecCompleted();
+ }
+}
+
+void sub_8139B20(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139B2C(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139B38(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139B44(void)
+{
+ u8 val2 = gBattleBufferA[gActiveBank][1];
+ u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val))
+ WallyBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = sub_8137940;
+}
+
+void sub_8139BA0(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139BAC(void)
+{
+ WallyBufferExecCompleted();
+}
+
+void sub_8139BB8(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ WallyBufferExecCompleted();
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
+ gBattleBankFunc[gActiveBank] = sub_813746C;
+}
+
+void nullsub_80(void)
+{
+}
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index 96b68adba..cf572642e 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -18,30 +18,43 @@
#include "task.h"
#include "text.h"
-#define DATA_COUNT (6)
-
extern u8 ewram[];
-
-struct Unk201B000
-{
- //u8 filler0[0x260];
- struct Pokemon unk0[6];
- u8 filler258[1];
- u8 unk259;
- u8 filler25A[6];
- u8 unk260;
- u8 unk261;
- u8 filler262[2];
- s16 unk264[DATA_COUNT * 2]; // This may be a union
- u8 filler27C[2];
- s16 unk27E;
- s16 unk280;
- s16 unk282;
-};
-
-#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever.
+extern u8 IsLinkDoubleBattle(void);
+extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
+extern void LoadHeldItemIconGraphics(void);
+extern void CreateHeldItemIcons_806DC34();
+extern u8 sub_806BD58(u8, u8);
+extern void PartyMenuPrintMonsLevelOrStatus(void);
+extern void PrintPartyMenuMonNicknames(void);
+extern void PartyMenuTryPrintMonsHP(void);
+extern void nullsub_13(void);
+extern void PartyMenuDrawHPBars(void);
+extern u8 sub_806B58C(u8);
+extern u8 GetItemEffectType();
+extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int);
+extern u16 sub_806BD80();
+extern u8 sub_806CA38();
+extern void sub_806D5A4(void);
+extern void sub_802E414(void);
+extern void sub_80A6DCC(void);
+extern void sub_806AF4C();
+extern u8 sub_80F9344(void);
+extern u8 sub_806B124(void);
+extern void sub_806C994();
+extern void sub_806BF74();
+extern void sub_806AEDC(void);
+extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8);
+extern void sub_806E7D0(u8, const struct PartyPopupMenu *);
+extern u8 *sub_8040D08();
+extern void sub_8040B8C(void);
+extern void sub_806E6F0();
+extern void sub_806D538();
+extern void nullsub_14();
+extern void OpenPartyMenu();
+extern u8 sub_803FBBC(void);
+
extern u16 gScriptItemId;
extern u8 gPlayerPartyCount;
extern u8 gNoOfAllBanks;
@@ -562,7 +575,7 @@ static void Task_8095330(u8 taskId)
}
}
-static void Task_809535C(u8 taskId)
+static void Task_809535C(void)
{
gPaletteFade.bufferTransferDisabled = TRUE;
sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5);
diff --git a/src/cable_club.c b/src/cable_club.c
index 13ae65322..70b372205 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -13,6 +13,7 @@
extern u16 gScriptResult;
extern struct TrainerCard gTrainerCards[4];
+extern struct LinkPlayer gLinkPlayers[];
extern u8 gUnknown_03004860;
extern u8 gFieldLinkPlayerCount;
@@ -46,6 +47,7 @@ void sub_808303C(u8 taskId) {
return;
}
+#if ENGLISH
if (linkPlayerCount < taskData[1])
{
return;
@@ -56,6 +58,17 @@ void sub_808303C(u8 taskId) {
ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5
ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975);
gTasks[taskId].func = sub_80830E4;
+#elif GERMAN
+ if ((gLinkType == 0x2255 && (u32) linkPlayerCount > 1) ||
+ (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount))
+ {
+ sub_80081C8(linkPlayerCount);
+ sub_8082D4C();
+ ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5
+ ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975);
+ gTasks[taskId].func = sub_80830E4;
+ }
+#endif
}
#ifdef NONMATCHING
@@ -280,9 +293,21 @@ static void sub_8083314(u8 taskId) {
if (gScriptResult == 1)
{
+#if ENGLISH
u16 linkType;
linkType = gLinkType;
+ // FIXME: sub_8082D4C doesn't take any arguments
sub_8082D4C(0x00004411, linkType);
+#elif GERMAN
+ if (gLinkType != 0x4411)
+ {
+ if (gLinkType == 0x6601)
+ {
+ deUnkValue2 = 1;
+ }
+ }
+ sub_8082D4C();
+#endif
EnableBothScriptContexts();
DestroyTask(taskId);
return;
diff --git a/src/choose_party.c b/src/choose_party.c
new file mode 100644
index 000000000..63e9c8477
--- /dev/null
+++ b/src/choose_party.c
@@ -0,0 +1,1071 @@
+#include "global.h"
+#include "decoration.h"
+#include "field_fadetransition.h"
+#include "main.h"
+#include "menu.h"
+#include "name_string_util.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "pokemon_summary_screen.h"
+#include "rom4.h"
+#include "script.h"
+#include "songs.h"
+#include "sound.h"
+#include "strings.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+
+struct UnknownPokemonStruct2
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[11];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
+extern u8 gSelectedOrderFromParty[];
+extern u8 gPlayerPartyCount;
+extern u8 gLastFieldPokeMenuOpened;
+extern u8 gUnknown_020384F0;
+extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
+extern u8 gUnknown_0202E8F6;
+extern struct Pokemon gUnknown_030042FC[];
+extern const u16 gBattleTowerBanlist[];
+
+extern void OpenPartyMenu();
+extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
+extern void LoadHeldItemIconGraphics(void);
+extern void CreateHeldItemIcons_806DC34();
+extern u8 sub_806BD58(u8, u8);
+extern void PartyMenuPrintMonsLevelOrStatus(void);
+extern void PrintPartyMenuMonNicknames(void);
+extern void sub_806BC3C(u8, u8);
+extern u8 sub_806B58C(u8);
+extern void sub_806D538();
+extern u16 sub_806BE38();
+extern u8 sub_806CA38();
+extern void sub_808B5B4();
+extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8);
+extern u8 sub_806B124();
+extern void sub_806C994();
+extern void sub_806C658();
+extern void sub_806AEDC(void);
+extern void sub_806AF4C();
+extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int);
+extern void sub_806C890();
+extern void sub_806D5A4();
+extern void sub_806B908(void);
+extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *);
+extern void sub_806D50C(int, u8);
+extern void CreatePartyMenuMonIcon();
+extern void CreateHeldItemIcon_806DCD4(int, u8, int);
+extern u8 GetMonStatusAndPokerus();
+extern void PartyMenuPrintHP();
+extern void PartyMenuPutStatusTilemap(u8, int, u8);
+extern void PartyMenuPrintLevel();
+extern void PartyMenuPutNicknameTilemap();
+extern void PrintPartyMenuMonNickname();
+extern void PartyMenuDrawHPBar();
+extern bool8 sub_80F9344(void);
+extern void sub_806D4AC();
+extern void sub_806D3B4();
+extern void PartyMenuDoPrintLevel(u8, u8, u8);
+extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16);
+extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *);
+extern void box_print(u8, int, const u8 *);
+extern void sub_806BCE8(void);
+extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int);
+extern u16 sub_806BD80();
+extern void sub_806BF74();
+
+static void ClearPartySelection(void);
+static bool8 IsMonAllowedInBattleTower(struct Pokemon *);
+static void sub_812238C(u8);
+static void sub_8122450(u8);
+static void sub_81224A8(u8);
+static void sub_8122728(u8);
+static void BattleTowerEntryMenuCallback_Exit(u8);
+static void sub_81228E8(u8);
+static void sub_8122950(u8);
+static void sub_81229B8(void);
+static void sub_8122AB8(u8);
+static void sub_8122B10(u8);
+static void sub_8122C18(u8);
+static void Task_DaycareStorageMenu8122EAC(u8);
+void sub_8123138(u8);
+static void sub_8123170(u8);
+static void sub_81231AC(void);
+
+void sub_8121E10(void)
+{
+ ClearPartySelection();
+ ewram1B000.unk263 = 0;
+ OpenPartyMenu(4, 0);
+}
+
+void sub_8121E34(void)
+{
+ ClearPartySelection();
+ ewram1B000.unk263 = 1;
+ OpenPartyMenu(4, 0);
+}
+
+static void ClearPartySelection(void)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ gSelectedOrderFromParty[i] = 0;
+}
+
+bool8 sub_8121E78(void)
+{
+ u8 i;
+
+ switch (ewram1B000_alt.unk264)
+ {
+ case 0:
+ if (ewram1B000_alt.unk266 < gPlayerPartyCount)
+ {
+ TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]);
+ ewram1B000_alt.unk266++;
+ }
+ else
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264++;
+ }
+ break;
+ case 1:
+ LoadHeldItemIconGraphics();
+ ewram1B000_alt.unk264++;
+ break;
+ case 2:
+ CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260);
+ ewram1B000_alt.unk264++;
+ break;
+ case 3:
+ if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1)
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264++;
+ }
+ else
+ {
+ ewram1B000_alt.unk266++;
+ }
+ break;
+ case 4:
+ PartyMenuPrintMonsLevelOrStatus();
+ ewram1B000_alt.unk264++;
+ break;
+ case 5:
+ PrintPartyMenuMonNicknames();
+ ewram1B000_alt.unk264++;
+ break;
+ case 6:
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ u8 j;
+
+ for (j = 0; j < 3; j++)
+ {
+ if (gSelectedOrderFromParty[j] == i + 1)
+ {
+ sub_806BC3C(i, j * 14 + 0x1C);
+ break;
+ }
+ }
+ if (j == 3)
+ {
+ if (IsMonAllowedInBattleTower(&gPlayerParty[i]) == TRUE)
+ sub_806BC3C(i, 0x70);
+ else
+ sub_806BC3C(i, 0x7E);
+ }
+ }
+ ewram1B000_alt.unk264++;
+ break;
+ case 7:
+ if (sub_806B58C(ewram1B000_alt.unk266) == 1)
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264 = 0;
+ return TRUE;
+ }
+ else
+ {
+ ewram1B000_alt.unk266++;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+#ifdef NONMATCHING
+static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
+{
+ u16 r3;
+ s32 i;
+
+ if (GetMonData(pkmn, MON_DATA_IS_EGG))
+ return FALSE;
+
+ if (ewram1B000.unk263 == 0)
+ {
+ if (GetMonData(pkmn, MON_DATA_HP) == 0)
+ return FALSE;
+ else
+ return TRUE;
+ }
+
+ if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0
+ && GetMonData(pkmn, MON_DATA_LEVEL) > 50)
+ return FALSE;
+
+ r3 = GetMonData(pkmn, MON_DATA_SPECIES);
+ // Can't stop the compiler from optimizing out the first index
+ for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++)
+ {
+ if (gBattleTowerBanlist[i] == r3)
+ return FALSE;
+ }
+ return TRUE;
+}
+#else
+__attribute__((naked))
+static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
+{
+ asm_unified(
+ "push {r4,lr}\n\
+ adds r4, r0, 0\n\
+ movs r1, 0x2D\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0812207C\n\
+ ldr r0, _08122058 @ =0x0201b000\n\
+ ldr r1, _0812205C @ =0x00000263\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08122060\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0812207C\n\
+ b _081220B6\n\
+ .align 2, 0\n\
+_08122058: .4byte 0x0201b000\n\
+_0812205C: .4byte 0x00000263\n\
+_08122060:\n\
+ ldr r0, _08122080 @ =gSaveBlock2\n\
+ ldr r1, _08122084 @ =0x00000554\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08122088\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x32\n\
+ bls _08122088\n\
+_0812207C:\n\
+ movs r0, 0\n\
+ b _081220B8\n\
+ .align 2, 0\n\
+_08122080: .4byte gSaveBlock2\n\
+_08122084: .4byte 0x00000554\n\
+_08122088:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ ldr r1, _081220C0 @ =gBattleTowerBanlist\n\
+ movs r0, 0\n\
+ lsls r0, 1\n\
+ adds r2, r0, r1\n\
+ ldrh r0, [r2]\n\
+ ldr r1, _081220C4 @ =0x0000ffff\n\
+ cmp r0, r1\n\
+ beq _081220B6\n\
+ adds r4, r1, 0\n\
+ adds r1, r2, 0\n\
+_081220A8:\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r3\n\
+ beq _0812207C\n\
+ adds r1, 0x2\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r4\n\
+ bne _081220A8\n\
+_081220B6:\n\
+ movs r0, 0x1\n\
+_081220B8:\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_081220C0: .4byte gBattleTowerBanlist\n\
+_081220C4: .4byte 0x0000ffff\n"
+ );
+}
+#endif
+
+static u8 sub_81220C8(void)
+{
+ u8 i;
+
+ if (ewram1B000.unk263 == 0)
+ return 0xFF;
+ if (gSelectedOrderFromParty[2] == 0)
+ return 0x11;
+ for (i = 0; i < 2; i++)
+ {
+ u8 j;
+
+ ewram1B000.unk282 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_SPECIES);
+ ewram1B000.unk280 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_HELD_ITEM);
+ for (j = i + 1; j < 3; j++)
+ {
+ if (ewram1B000.unk282 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_SPECIES))
+ return 0x12;
+ if (ewram1B000.unk280 != 0 && ewram1B000.unk280 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_HELD_ITEM))
+ return 0x13;
+ }
+ }
+ return 0xFF;
+}
+
+//------------------------------------------------------------------------------
+// Battle Tower Entry Menu
+//------------------------------------------------------------------------------
+
+static void BattleTowerEntryMenuCallback_Summary(u8);
+static void BattleTowerEntryMenuCallback_Enter(u8);
+static void BattleTowerEntryMenuCallback_NoEntry(u8);
+static void BattleTowerEntryMenuCallback_Exit(u8);
+
+static const struct PartyMenuItem sBattleTowerEntryMenuItems[] =
+{
+ {OtherText_Summary, BattleTowerEntryMenuCallback_Summary},
+ {OtherText_Enter2, BattleTowerEntryMenuCallback_Enter},
+ {OtherText_NoEntry, BattleTowerEntryMenuCallback_NoEntry},
+ {gUnknownText_Exit, BattleTowerEntryMenuCallback_Exit},
+};
+
+static const u8 gUnknown_084017D0[] = {1, 0, 3};
+static const u8 gUnknown_084017D3[] = {2, 0, 3};
+static const u8 gUnknown_084017D6[] = {0, 3};
+
+static const struct PartyPopupMenu sBattleTowerEntryMenu[] =
+{
+ {ARRAY_COUNT(gUnknown_084017D0), 9, gUnknown_084017D0},
+ {ARRAY_COUNT(gUnknown_084017D3), 9, gUnknown_084017D3},
+ {ARRAY_COUNT(gUnknown_084017D6), 9, gUnknown_084017D6},
+};
+
+
+static bool8 IsPartyMemberAlreadySelected(u8 partyMember)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gSelectedOrderFromParty[i] == partyMember)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_81221F8(u8 taskId)
+{
+ sub_806D538(5, 1);
+ if (IsMonAllowedInBattleTower(&gPlayerParty[gLastFieldPokeMenuOpened]) == TRUE)
+ {
+ if (IsPartyMemberAlreadySelected(gLastFieldPokeMenuOpened + 1) == TRUE)
+ {
+ gTasks[taskId].data[4] = 1;
+ sub_806E750(1, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0);
+ }
+ else
+ {
+ gTasks[taskId].data[4] = 0;
+ sub_806E750(0, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0);
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[4] = 2;
+ sub_806E750(2, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0);
+ }
+}
+
+void sub_81222B0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ switch (sub_806BE38(taskId))
+ {
+ case 1:
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = sub_806CA38(taskId);
+ if (gLastFieldPokeMenuOpened != 6)
+ {
+ GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
+ sub_81221F8(taskId);
+ gTasks[taskId].func = sub_812238C;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_81224A8;
+ }
+ sub_808B5B4(taskId);
+ break;
+ case 2:
+ PlaySE(SE_SELECT);
+ ClearPartySelection();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8122450;
+ break;
+ }
+ }
+}
+
+// Handle input
+static void sub_812238C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gMain.newAndRepeatedKeys & 0x40)
+ {
+ if (GetMenuCursorPos() != 0)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(-1);
+ }
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & 0x80)
+ {
+ if (GetMenuCursorPos() != 3)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(1);
+ }
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ TaskFunc popupMenuFunc;
+
+ PlaySE(SE_SELECT);
+ popupMenuFunc = PartyMenuGetPopupMenuFunc(
+ gTasks[taskId].data[4],
+ sBattleTowerEntryMenu,
+ sBattleTowerEntryMenuItems,
+ GetMenuCursorPos());
+ popupMenuFunc(taskId);
+ return;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ BattleTowerEntryMenuCallback_Exit(taskId);
+ return;
+ }
+ }
+}
+
+// Return from menu?
+static void sub_8122450(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(gMain.savedCallback);
+ DestroyTask(taskId);
+ }
+}
+
+// Wait for A or B press
+static void sub_8122480(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ BattleTowerEntryMenuCallback_Exit(taskId);
+}
+
+static void sub_81224A8(u8 taskId)
+{
+ u8 val = sub_81220C8();
+
+ if (val != 0xFF)
+ {
+ sub_806D538(val, 0);
+ gTasks[taskId].func = sub_8122480;
+ }
+ else
+ {
+ if (gSelectedOrderFromParty[0] != 0)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8122450;
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ sub_806D538(14, 0);
+ gTasks[taskId].func = sub_8122480;
+ }
+ }
+}
+
+// CB2 for menu?
+static void sub_8122530(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == 1)
+ {
+ sub_806C994(ewram1B000.unk260, gUnknown_020384F0);
+ sub_806C658(ewram1B000.unk260, 0);
+ GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1);
+ gLastFieldPokeMenuOpened = gUnknown_020384F0;
+ sub_81221F8(ewram1B000.unk260);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == 1)
+ break;
+ }
+}
+
+static void sub_81225A4(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ sub_806AF4C(4, 0xFF, sub_812238C, 5);
+ SetMainCallback2(sub_8122530);
+}
+
+// Wait for fade, then show summary screen
+static void sub_81225D4(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0;
+
+ DestroyTask(taskId);
+ ewram1B000.unk262 = 1;
+ ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0);
+ }
+}
+
+// Summary callback?
+static void BattleTowerEntryMenuCallback_Summary(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_81225D4;
+}
+
+static void BattleTowerEntryMenuCallback_Enter(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gSelectedOrderFromParty[i] == 0)
+ {
+ gSelectedOrderFromParty[i] = gLastFieldPokeMenuOpened + 1;
+ sub_806BC3C(gLastFieldPokeMenuOpened, i * 14 + 0x1C);
+ if (i == 2)
+ sub_806C890(taskId);
+ BattleTowerEntryMenuCallback_Exit(taskId);
+ return;
+ }
+ }
+ PlaySE(SE_HAZURE);
+ MenuZeroFillWindowRect(20, 10, 29, 19);
+ HandleDestroyMenuCursors();
+ sub_806D5A4();
+ sub_806E834(gOtherText_NoMoreThreePoke, 1);
+ gTasks[taskId].func = sub_8122728;
+}
+
+static void sub_8122728(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 1)
+ return;
+
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ HandleDestroyMenuCursors();
+ BattleTowerEntryMenuCallback_Exit(taskId);
+ }
+}
+
+static void BattleTowerEntryMenuCallback_NoEntry(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gSelectedOrderFromParty[i] == gLastFieldPokeMenuOpened + 1)
+ {
+ gSelectedOrderFromParty[i] = 0;
+ switch (i)
+ {
+ case 0:
+ gSelectedOrderFromParty[0] = gSelectedOrderFromParty[1];
+ gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2];
+ gSelectedOrderFromParty[2] = 0;
+ break;
+ case 1:
+ gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2];
+ gSelectedOrderFromParty[2] = 0;
+ break;
+ }
+ break; // exit loop
+ }
+ }
+ sub_806BC3C(gLastFieldPokeMenuOpened, 0x70);
+ if (gSelectedOrderFromParty[0] != 0)
+ sub_806BC3C(gSelectedOrderFromParty[0] - 1, 0x1C);
+ if (gSelectedOrderFromParty[1] != 0)
+ sub_806BC3C(gSelectedOrderFromParty[1] - 1, 0x2A);
+ BattleTowerEntryMenuCallback_Exit(taskId);
+}
+
+static void sub_81227FC(u8 taskId)
+{
+ MenuZeroFillWindowRect(20, 10, 29, 19);
+ HandleDestroyMenuCursors();
+ sub_806D538(0, 0);
+ gTasks[taskId].func = sub_81222B0;
+}
+
+static void BattleTowerEntryMenuCallback_Exit(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81227FC(taskId);
+}
+
+bool8 sub_8122854(void)
+{
+ switch (ewram1B000_alt.unk264)
+ {
+ case 0:
+ sub_81228E8(ewram1B000_alt.unk260);
+ ewram1B000_alt.unk264++;
+ break;
+ case 1:
+ LoadHeldItemIconGraphics();
+ ewram1B000_alt.unk264++;
+ break;
+ case 2:
+ sub_8122950(ewram1B000_alt.unk260);
+ ewram1B000_alt.unk264++;
+ break;
+ case 3:
+ sub_81229B8();
+ ewram1B000_alt.unk264++;
+ break;
+ case 4:
+ sub_806B908();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_81228E8(u8 a)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0)
+ CreatePartyMenuMonIcon(a, i, 3, &gPlayerParty[i]);
+ if (gUnknown_02023A00[i].species != 0)
+ {
+ CreateMonIcon_806D99C(a, i + 3, 3, &gUnknown_02023A00[i]);
+ sub_806D50C(a, i + 3);
+ }
+ }
+}
+
+static void sub_8122950(u8 a)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0)
+ {
+ u16 item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+
+ CreateHeldItemIcon_806DCD4(a, i, item);
+ }
+ if (gUnknown_02023A00[i].species != 0)
+ CreateHeldItemIcon_806DCD4(a, i + 3, gUnknown_02023A00[i].heldItem);
+ }
+}
+
+static void sub_81229B8(void)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0)
+ {
+ u8 status;
+
+ PartyMenuPrintHP(i, 3, &gPlayerParty[i]);
+ status = GetMonStatusAndPokerus(&gPlayerParty[i]);
+ if (status != 0 && status != 6)
+ PartyMenuPutStatusTilemap(i, 3, status - 1);
+ else
+ PartyMenuPrintLevel(i, 3, &gPlayerParty[i]);
+ PartyMenuPutNicknameTilemap(i, 3, &gPlayerParty[i]);
+ PrintPartyMenuMonNickname(i, 3, &gPlayerParty[i]);
+ PartyMenuDrawHPBar(i, 3, &gPlayerParty[i]);
+ }
+ }
+}
+
+void sub_8122A48(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].data[0] = 30;
+ sub_806D4AC(taskId, gUnknown_02023A00[0].species, 0);
+ sub_806D4AC(taskId, gUnknown_02023A00[1].species, 1);
+ sub_806D4AC(taskId, gUnknown_02023A00[2].species, 2);
+ gTasks[taskId].func = sub_8122AB8;
+ ewram1B000.unk261 = 1;
+ }
+}
+
+static void sub_8122AB8(u8 taskId)
+{
+ sub_806D3B4(taskId, gUnknown_02023A00[1].species, gUnknown_02023A00[2].species);
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].func = sub_8122B10;
+ ewram1B000.unk261 = 2;
+ PlaySE(SE_W231);
+ }
+}
+
+static void sub_8122B10(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gUnknown_02023A00[i].species != 0)
+ {
+ u8 r2;
+
+ PartyMenuDoPrintHP(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp);
+ if (gUnknown_02023A00[i].hp == 0)
+ r2 = 7;
+ else
+ r2 = pokemon_ailments_get_primary(gUnknown_02023A00[i].status);
+ if (r2 != 0)
+ PartyMenuPutStatusTilemap(i + 3, 3, r2 - 1);
+ else
+ PartyMenuDoPrintLevel(i + 3, 3, gUnknown_02023A00[i].level);
+ PartyMenuDoPutNicknameTilemap(gUnknown_02023A00[i].species, gUnknown_02023A00[i].gender, 3, i + 3, gUnknown_02023A00[i].nickname);
+ StringCopy(gStringVar1, gUnknown_02023A00[i].nickname);
+ StringGetEnd10(gStringVar1);
+ SanitizeNameString(gStringVar1);
+ box_print(i + 3, 3, gStringVar1);
+ PartyMenuDoDrawHPBar(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp);
+ }
+ }
+ gTasks[taskId].func = sub_8122C18;
+ gTasks[taskId].data[0] = 0;
+}
+
+static void sub_8122C18(u8 taskId)
+{
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] == 256)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8122450;
+ }
+}
+
+// Exactly the same as sub_8121E78 except for case 6
+bool8 unref_sub_8122C60(void)
+{
+ switch (ewram1B000_alt.unk264)
+ {
+ case 0:
+ if (ewram1B000_alt.unk266 < gPlayerPartyCount)
+ {
+ TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]);
+ ewram1B000_alt.unk266++;
+ }
+ else
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264++;
+ }
+ break;
+ case 1:
+ LoadHeldItemIconGraphics();
+ ewram1B000_alt.unk264++;
+ break;
+ case 2:
+ CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260);
+ ewram1B000_alt.unk264++;
+ break;
+ case 3:
+ if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1)
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264++;
+ }
+ else
+ {
+ ewram1B000_alt.unk266++;
+ }
+ break;
+ case 4:
+ PartyMenuPrintMonsLevelOrStatus();
+ ewram1B000_alt.unk264++;
+ break;
+ case 5:
+ PrintPartyMenuMonNicknames();
+ ewram1B000_alt.unk264++;
+ break;
+ case 6:
+ sub_806BCE8();
+ ewram1B000_alt.unk264++;
+ break;
+ case 7:
+ if (sub_806B58C(ewram1B000_alt.unk266) == 1)
+ {
+ ewram1B000_alt.unk266 = 0;
+ ewram1B000_alt.unk264 = 0;
+ return TRUE;
+ }
+ else
+ {
+ ewram1B000_alt.unk266++;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// Daycare Pokemon Storage Menu
+//------------------------------------------------------------------------------
+
+static void DaycareStorageMenuCallback_Store(u8);
+static void DaycareStorageMenuCallback_Summary(u8);
+static void DaycareStorageMenuCallback_Exit(u8);
+
+static const struct PartyMenuItem sDaycareStorageMenuItems[] =
+{
+ {OtherText_Store, DaycareStorageMenuCallback_Store},
+ {OtherText_Summary, DaycareStorageMenuCallback_Summary},
+ {gUnknownText_Exit, DaycareStorageMenuCallback_Exit},
+};
+
+static const u8 gUnknown_08401808[] = {0, 1, 2};
+static const u8 gUnknown_0840180B[] = {1, 2};
+
+static const struct PartyPopupMenu sDaycareStorageMenus[] =
+{
+ {ARRAY_COUNT(gUnknown_08401808), 9, gUnknown_08401808},
+ {ARRAY_COUNT(gUnknown_0840180B), 9, gUnknown_0840180B},
+};
+
+static void sub_8122D94(u8 taskId)
+{
+ if (!GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG))
+ {
+ gTasks[taskId].data[4] = 0;
+ sub_806E750(0, sDaycareStorageMenus, sDaycareStorageMenuItems, 0);
+ }
+ else
+ {
+ gTasks[taskId].data[4] = 1;
+ sub_806E750(1, sDaycareStorageMenus, sDaycareStorageMenuItems, 0);
+ }
+}
+
+void sub_8122E0C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ switch (sub_806BD80(taskId))
+ {
+ case 1:
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = sub_806CA38(taskId);
+ GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
+ sub_8122D94(taskId);
+ gTasks[taskId].func = Task_DaycareStorageMenu8122EAC;
+ break;
+ case 2:
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = 0xFF;
+ gSpecialVar_0x8004 = 0xFF;
+ sub_8123138(taskId);
+ break;
+ }
+ }
+}
+
+static void Task_DaycareStorageMenu8122EAC(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gMain.newAndRepeatedKeys & 0x40)
+ {
+ if (GetMenuCursorPos() != 0)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(-1);
+ }
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & 0x80)
+ {
+ if (GetMenuCursorPos() != 3)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(1);
+ }
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ TaskFunc popupMenuFunc;
+
+ PlaySE(SE_SELECT);
+ popupMenuFunc = PartyMenuGetPopupMenuFunc(
+ gTasks[taskId].data[4],
+ sDaycareStorageMenus,
+ sDaycareStorageMenuItems,
+ GetMenuCursorPos());
+ popupMenuFunc(taskId);
+ return;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ DaycareStorageMenuCallback_Exit(taskId);
+ return;
+ }
+ }
+}
+
+static void DaycareStorageMenuCallback_Store(u8 taskId)
+{
+ gSpecialVar_0x8004 = gLastFieldPokeMenuOpened;
+ sub_8123138(taskId);
+}
+
+static void sub_8122F90(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == 1)
+ {
+ sub_806C994(ewram1B000.unk260, gUnknown_020384F0);
+ sub_806BF74(ewram1B000.unk260, 0);
+ GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1);
+ gLastFieldPokeMenuOpened = gUnknown_020384F0;
+ sub_8122D94(ewram1B000.unk260);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == 1)
+ break;
+ }
+}
+
+static void sub_8123004(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ sub_806AF4C(6, 0xFF, Task_DaycareStorageMenu8122EAC, 5);
+ SetMainCallback2(sub_8122F90);
+}
+
+static void sub_8123034(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0;
+
+ DestroyTask(taskId);
+ ewram1B000.unk262 = 1;
+ ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0);
+ }
+}
+
+static void DaycareStorageMenuCallback_Summary(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8123034;
+}
+
+static void DaycareStorageMenuCallback_Exit(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(20, 10, 29, 19);
+ HandleDestroyMenuCursors();
+ sub_806D538(15, 0);
+ gTasks[taskId].func = sub_8122E0C;
+}
+
+void sub_8123138(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8123170;
+}
+
+static void sub_8123170(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ gFieldCallback = sub_81231AC;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ DestroyTask(taskId);
+ }
+}
+
+// Do these last two functions really belong in here?
+
+static void sub_81231C4(u8);
+
+void sub_81231AC(void)
+{
+ pal_fill_black();
+ CreateTask(sub_81231C4, 10);
+}
+
+static void sub_81231C4(u8 taskId)
+{
+ if (sub_807D770() == TRUE)
+ {
+ DestroyTask(taskId);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ }
+}
diff --git a/src/contest_link_80C857C.c b/src/contest_link_80C857C.c
new file mode 100644
index 000000000..0ae98af09
--- /dev/null
+++ b/src/contest_link_80C857C.c
@@ -0,0 +1,55 @@
+#include "global.h"
+#include "link.h"
+
+#if GERMAN
+
+void de_sub_80C9274(bool32 arg0) {
+ if (deUnkValue2 != 1)
+ {
+ return;
+ }
+
+ if (arg0)
+ {
+ deUnkValue2 = 3;
+ }
+ else
+ {
+ deUnkValue2 = 2;
+ }
+}
+
+void de_sub_80C9294(bool32 arg0) {
+ if (deUnkValue2 == 1)
+ {
+ if (arg0)
+ {
+ deUnkValue2 = 3;
+ }
+ else
+ {
+ deUnkValue2 = 2;
+ }
+
+ return;
+ }
+
+
+ if (deUnkValue2 == 2)
+ {
+ SendBlock(0, sBlockRequestLookupTable[deUnkValue1].address, sBlockRequestLookupTable[deUnkValue1].size);
+
+ if (arg0)
+ {
+ deUnkValue2 = 0;
+ }
+ else
+ {
+ deUnkValue2 = 1;
+ }
+
+ return;
+ }
+}
+
+#endif
diff --git a/src/contest_painting.c b/src/contest_painting.c
index eddcc87c1..d75947e05 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -263,15 +263,23 @@ static void ContestPaintingPrintCaption(u8 contestType, u8 arg1)
{
ptr = StringCopy(ptr, gUnknown_083F60AC[type]);
ptr = StringCopy(ptr, gContestText_ContestWinner);
+#if ENGLISH
ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name);
+#elif GERMAN
+ ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name);
+#endif
- // {ENG}
+ // {LATIN}
ptr[0] = 0xFC;
ptr[1] = 0x16;
ptr += 2;
ptr = StringCopy(ptr, gOtherText_Unknown1);
+#if ENGLISH
ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name);
+#elif GERMAN
+ ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name);
+#endif
xPos = 6;
yPos = 14;
diff --git a/src/data/decoration/decorations.h b/src/data/decoration/decorations.h
new file mode 100644
index 000000000..a25f3408f
--- /dev/null
+++ b/src/data/decoration/decorations.h
@@ -0,0 +1,1212 @@
+const struct Decoration gDecorations[] = {
+ {
+ .id = DECOR_NONE,
+ .name = DECORNAME_SMALL_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DESK,
+ .price = 0,
+ .description = DecorDesc_SMALL_DESK,
+ .tiles = DecorGfx_SMALL_DESK,
+ },
+ {
+ .id = DECOR_SMALL_DESK,
+ .name = DECORNAME_SMALL_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DESK,
+ .price = 3000,
+ .description = DecorDesc_SMALL_DESK,
+ .tiles = DecorGfx_SMALL_DESK,
+ },
+ {
+ .id = DECOR_POKEMON_DESK,
+ .name = DECORNAME_POKEMON_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DESK,
+ .price = 3000,
+ .description = DecorDesc_POKEMON_DESK,
+ .tiles = DecorGfx_POKEMON_DESK,
+ },
+ {
+ .id = DECOR_HEAVY_DESK,
+ .name = DECORNAME_HEAVY_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x2,
+ .category = DECORCAT_DESK,
+ .price = 6000,
+ .description = DecorDesc_HEAVY_DESK,
+ .tiles = DecorGfx_HEAVY_DESK,
+ },
+ {
+ .id = DECOR_RAGGED_DESK,
+ .name = DECORNAME_RAGGED_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x2,
+ .category = DECORCAT_DESK,
+ .price = 6000,
+ .description = DecorDesc_RAGGED_DESK,
+ .tiles = DecorGfx_RAGGED_DESK,
+ },
+ {
+ .id = DECOR_COMFORT_DESK,
+ .name = DECORNAME_COMFORT_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x2,
+ .category = DECORCAT_DESK,
+ .price = 6000,
+ .description = DecorDesc_COMFORT_DESK,
+ .tiles = DecorGfx_COMFORT_DESK,
+ },
+ {
+ .id = DECOR_PRETTY_DESK,
+ .name = DECORNAME_PRETTY_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_DESK,
+ .price = 9000,
+ .description = DecorDesc_PRETTY_DESK,
+ .tiles = DecorGfx_PRETTY_DESK,
+ },
+ {
+ .id = DECOR_BRICK_DESK,
+ .name = DECORNAME_BRICK_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_DESK,
+ .price = 9000,
+ .description = DecorDesc_BRICK_DESK,
+ .tiles = DecorGfx_BRICK_DESK,
+ },
+ {
+ .id = DECOR_CAMP_DESK,
+ .name = DECORNAME_CAMP_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_DESK,
+ .price = 9000,
+ .description = DecorDesc_CAMP_DESK,
+ .tiles = DecorGfx_CAMP_DESK,
+ },
+ {
+ .id = DECOR_HARD_DESK,
+ .name = DECORNAME_HARD_DESK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_DESK,
+ .price = 9000,
+ .description = DecorDesc_HARD_DESK,
+ .tiles = DecorGfx_HARD_DESK,
+ },
+ {
+ .id = DECOR_SMALL_CHAIR,
+ .name = DECORNAME_SMALL_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_SMALL_CHAIR,
+ .tiles = DecorGfx_SMALL_CHAIR,
+ },
+ {
+ .id = DECOR_POKEMON_CHAIR,
+ .name = DECORNAME_POKEMON_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_POKEMON_CHAIR,
+ .tiles = DecorGfx_POKEMON_CHAIR,
+ },
+ {
+ .id = DECOR_HEAVY_CHAIR,
+ .name = DECORNAME_HEAVY_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_HEAVY_CHAIR,
+ .tiles = DecorGfx_HEAVY_CHAIR,
+ },
+ {
+ .id = DECOR_PRETTY_CHAIR,
+ .name = DECORNAME_PRETTY_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_PRETTY_CHAIR,
+ .tiles = DecorGfx_PRETTY_CHAIR,
+ },
+ {
+ .id = DECOR_COMFORT_CHAIR,
+ .name = DECORNAME_COMFORT_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_COMFORT_CHAIR,
+ .tiles = DecorGfx_COMFORT_CHAIR,
+ },
+ {
+ .id = DECOR_RAGGED_CHAIR,
+ .name = DECORNAME_RAGGED_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_RAGGED_CHAIR,
+ .tiles = DecorGfx_RAGGED_CHAIR,
+ },
+ {
+ .id = DECOR_BRICK_CHAIR,
+ .name = DECORNAME_BRICK_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_BRICK_CHAIR,
+ .tiles = DecorGfx_BRICK_CHAIR,
+ },
+ {
+ .id = DECOR_CAMP_CHAIR,
+ .name = DECORNAME_CAMP_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_CAMP_CHAIR,
+ .tiles = DecorGfx_CAMP_CHAIR,
+ },
+ {
+ .id = DECOR_HARD_CHAIR,
+ .name = DECORNAME_HARD_CHAIR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CHAIR,
+ .price = 2000,
+ .description = DecorDesc_HARD_CHAIR,
+ .tiles = DecorGfx_HARD_CHAIR,
+ },
+ {
+ .id = DECOR_RED_PLANT,
+ .name = DECORNAME_RED_PLANT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_PLANT,
+ .price = 3000,
+ .description = DecorDesc_RED_PLANT,
+ .tiles = DecorGfx_RED_PLANT,
+ },
+ {
+ .id = DECOR_TROPICAL_PLANT,
+ .name = DECORNAME_TROPICAL_PLANT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_PLANT,
+ .price = 3000,
+ .description = DecorDesc_TROPICAL_PLANT,
+ .tiles = DecorGfx_TROPICAL_PLANT,
+ },
+ {
+ .id = DECOR_PRETTY_FLOWERS,
+ .name = DECORNAME_PRETTY_FLOWERS,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_PLANT,
+ .price = 3000,
+ .description = DecorDesc_PRETTY_FLOWERS,
+ .tiles = DecorGfx_PRETTY_FLOWERS,
+ },
+ {
+ .id = DECOR_COLORFUL_PLANT,
+ .name = DECORNAME_COLORFUL_PLANT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_2x2,
+ .category = DECORCAT_PLANT,
+ .price = 5000,
+ .description = DecorDesc_COLORFUL_PLANT,
+ .tiles = DecorGfx_COLORFUL_PLANT,
+ },
+ {
+ .id = DECOR_BIG_PLANT,
+ .name = DECORNAME_BIG_PLANT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_2x2,
+ .category = DECORCAT_PLANT,
+ .price = 5000,
+ .description = DecorDesc_BIG_PLANT,
+ .tiles = DecorGfx_BIG_PLANT,
+ },
+ {
+ .id = DECOR_GORGEOUS_PLANT,
+ .name = DECORNAME_GORGEOUS_PLANT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_2x2,
+ .category = DECORCAT_PLANT,
+ .price = 5000,
+ .description = DecorDesc_GORGEOUS_PLANT,
+ .tiles = DecorGfx_GORGEOUS_PLANT,
+ },
+ {
+ .id = DECOR_RED_BRICK,
+ .name = DECORNAME_RED_BRICK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_RED_BRICK,
+ .tiles = DecorGfx_RED_BRICK,
+ },
+ {
+ .id = DECOR_YELLOW_BRICK,
+ .name = DECORNAME_YELLOW_BRICK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_YELLOW_BRICK,
+ .tiles = DecorGfx_YELLOW_BRICK,
+ },
+ {
+ .id = DECOR_BLUE_BRICK,
+ .name = DECORNAME_BLUE_BRICK,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_BLUE_BRICK,
+ .tiles = DecorGfx_BLUE_BRICK,
+ },
+ {
+ .id = DECOR_RED_BALLOON,
+ .name = DECORNAME_RED_BALLOON,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_RED_BALLOON,
+ .tiles = DecorGfx_RED_BALLOON,
+ },
+ {
+ .id = DECOR_BLUE_BALLOON,
+ .name = DECORNAME_BLUE_BALLOON,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_BLUE_BALLOON,
+ .tiles = DecorGfx_BLUE_BALLOON,
+ },
+ {
+ .id = DECOR_YELLOW_BALLOON,
+ .name = DECORNAME_YELLOW_BALLOON,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_YELLOW_BALLOON,
+ .tiles = DecorGfx_YELLOW_BALLOON,
+ },
+ {
+ .id = DECOR_RED_TENT,
+ .name = DECORNAME_RED_TENT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_ORNAMENT,
+ .price = 10000,
+ .description = DecorDesc_RED_TENT,
+ .tiles = DecorGfx_RED_TENT,
+ },
+ {
+ .id = DECOR_BLUE_TENT,
+ .name = DECORNAME_BLUE_TENT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_ORNAMENT,
+ .price = 10000,
+ .description = DecorDesc_BLUE_TENT,
+ .tiles = DecorGfx_BLUE_TENT,
+ },
+ {
+ .id = DECOR_SOLID_BOARD,
+ .name = DECORNAME_SOLID_BOARD,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 3000,
+ .description = DecorDesc_SOLID_BOARD,
+ .tiles = DecorGfx_SOLID_BOARD,
+ },
+ {
+ .id = DECOR_SLIDE,
+ .name = DECORNAME_SLIDE,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_2x4,
+ .category = DECORCAT_ORNAMENT,
+ .price = 8000,
+ .description = DecorDesc_SLIDE,
+ .tiles = DecorGfx_SLIDE,
+ },
+ {
+ .id = DECOR_FENCE_LENGTH,
+ .name = DECORNAME_FENCE_LENGTH,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_FENCE_LENGTH,
+ .tiles = DecorGfx_FENCE_LENGTH,
+ },
+ {
+ .id = DECOR_FENCE_WIDTH,
+ .name = DECORNAME_FENCE_WIDTH,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 500,
+ .description = DecorDesc_FENCE_WIDTH,
+ .tiles = DecorGfx_FENCE_WIDTH,
+ },
+ {
+ .id = DECOR_TIRE,
+ .name = DECORNAME_TIRE,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_2x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 800,
+ .description = DecorDesc_TIRE,
+ .tiles = DecorGfx_TIRE,
+ },
+ {
+ .id = DECOR_STAND,
+ .name = DECORNAME_STAND,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_4x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 7000,
+ .description = DecorDesc_STAND,
+ .tiles = DecorGfx_STAND,
+ },
+ {
+ .id = DECOR_MUD_BALL,
+ .name = DECORNAME_MUD_BALL,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 200,
+ .description = DecorDesc_MUD_BALL,
+ .tiles = DecorGfx_MUD_BALL,
+ },
+ {
+ .id = DECOR_BREAKABLE_DOOR,
+ .name = DECORNAME_BREAKABLE_DOOR,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 3000,
+ .description = DecorDesc_BREAKABLE_DOOR,
+ .tiles = DecorGfx_BREAKABLE_DOOR,
+ },
+ {
+ .id = DECOR_SAND_ORNAMENT,
+ .name = DECORNAME_SAND_ORNAMENT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 3000,
+ .description = DecorDesc_SAND_ORNAMENT,
+ .tiles = DecorGfx_SAND_ORNAMENT,
+ },
+ {
+ .id = DECOR_SILVER_SHIELD,
+ .name = DECORNAME_SILVER_SHIELD,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 0,
+ .description = DecorDesc_SILVER_SHIELD,
+ .tiles = DecorGfx_SILVER_SHIELD,
+ },
+ {
+ .id = DECOR_GOLD_SHIELD,
+ .name = DECORNAME_GOLD_SHIELD,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 0,
+ .description = DecorDesc_GOLD_SHIELD,
+ .tiles = DecorGfx_GOLD_SHIELD,
+ },
+ {
+ .id = DECOR_GLASS_ORNAMENT,
+ .name = DECORNAME_GLASS_ORNAMENT,
+ .permission = DECORPERM_BEHIND_FLOOR,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_ORNAMENT,
+ .price = 0,
+ .description = DecorDesc_GLASS_ORNAMENT,
+ .tiles = DecorGfx_GLASS_ORNAMENT,
+ },
+ {
+ .id = DECOR_TV,
+ .name = DECORNAME_TV,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 3000,
+ .description = DecorDesc_TV,
+ .tiles = DecorGfx_TV,
+ },
+ {
+ .id = DECOR_ROUND_TV,
+ .name = DECORNAME_ROUND_TV,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 4000,
+ .description = DecorDesc_ROUND_TV,
+ .tiles = DecorGfx_ROUND_TV,
+ },
+ {
+ .id = DECOR_CUTE_TV,
+ .name = DECORNAME_CUTE_TV,
+ .permission = DECORPERM_SOLID_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_ORNAMENT,
+ .price = 4000,
+ .description = DecorDesc_CUTE_TV,
+ .tiles = DecorGfx_CUTE_TV,
+ },
+ {
+ .id = DECOR_GLITTER_MAT,
+ .name = DECORNAME_GLITTER_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 2000,
+ .description = DecorDesc_GLITTER_MAT,
+ .tiles = DecorGfx_GLITTER_MAT,
+ },
+ {
+ .id = DECOR_JUMP_MAT,
+ .name = DECORNAME_JUMP_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 2000,
+ .description = DecorDesc_JUMP_MAT,
+ .tiles = DecorGfx_JUMP_MAT,
+ },
+ {
+ .id = DECOR_SPIN_MAT,
+ .name = DECORNAME_SPIN_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 2000,
+ .description = DecorDesc_SPIN_MAT,
+ .tiles = DecorGfx_SPIN_MAT,
+ },
+ {
+ .id = DECOR_C_LOW_NOTE_MAT,
+ .name = DECORNAME_C_LOW_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_C_LOW_NOTE_MAT,
+ .tiles = DecorGfx_C_LOW_NOTE_MAT,
+ },
+ {
+ .id = DECOR_D_NOTE_MAT,
+ .name = DECORNAME_D_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_D_NOTE_MAT,
+ .tiles = DecorGfx_D_NOTE_MAT,
+ },
+ {
+ .id = DECOR_E_NOTE_MAT,
+ .name = DECORNAME_E_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_E_NOTE_MAT,
+ .tiles = DecorGfx_E_NOTE_MAT,
+ },
+ {
+ .id = DECOR_F_NOTE_MAT,
+ .name = DECORNAME_F_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_F_NOTE_MAT,
+ .tiles = DecorGfx_F_NOTE_MAT,
+ },
+ {
+ .id = DECOR_G_NOTE_MAT,
+ .name = DECORNAME_G_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_G_NOTE_MAT,
+ .tiles = DecorGfx_G_NOTE_MAT,
+ },
+ {
+ .id = DECOR_A_NOTE_MAT,
+ .name = DECORNAME_A_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_A_NOTE_MAT,
+ .tiles = DecorGfx_A_NOTE_MAT,
+ },
+ {
+ .id = DECOR_B_NOTE_MAT,
+ .name = DECORNAME_B_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_B_NOTE_MAT,
+ .tiles = DecorGfx_B_NOTE_MAT,
+ },
+ {
+ .id = DECOR_C_HIGH_NOTE_MAT,
+ .name = DECORNAME_C_HIGH_NOTE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_MAT,
+ .price = 500,
+ .description = DecorDesc_C_HIGH_NOTE_MAT,
+ .tiles = DecorGfx_C_HIGH_NOTE_MAT,
+ },
+ {
+ .id = DECOR_SURF_MAT,
+ .name = DECORNAME_SURF_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_SURF_MAT,
+ .tiles = DecorGfx_SURF_MAT,
+ },
+ {
+ .id = DECOR_THUNDER_MAT,
+ .name = DECORNAME_THUNDER_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_THUNDER_MAT,
+ .tiles = DecorGfx_THUNDER_MAT,
+ },
+ {
+ .id = DECOR_FIRE_BLAST_MAT,
+ .name = DECORNAME_FIRE_BLAST_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_FIRE_BLAST_MAT,
+ .tiles = DecorGfx_FIRE_BLAST_MAT,
+ },
+ {
+ .id = DECOR_POWDER_SNOW_MAT,
+ .name = DECORNAME_POWDER_SNOW_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_POWDER_SNOW_MAT,
+ .tiles = DecorGfx_POWDER_SNOW_MAT,
+ },
+ {
+ .id = DECOR_ATTRACT_MAT,
+ .name = DECORNAME_ATTRACT_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_ATTRACT_MAT,
+ .tiles = DecorGfx_ATTRACT_MAT,
+ },
+ {
+ .id = DECOR_FISSURE_MAT,
+ .name = DECORNAME_FISSURE_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_FISSURE_MAT,
+ .tiles = DecorGfx_FISSURE_MAT,
+ },
+ {
+ .id = DECOR_SPIKES_MAT,
+ .name = DECORNAME_SPIKES_MAT,
+ .permission = DECORPERM_PASS_FLOOR,
+ .shape = DECORSHAPE_3x3,
+ .category = DECORCAT_MAT,
+ .price = 4000,
+ .description = DecorDesc_SPIKES_MAT,
+ .tiles = DecorGfx_SPIKES_MAT,
+ },
+ {
+ .id = DECOR_BALL_POSTER,
+ .name = DECORNAME_BALL_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_POSTER,
+ .price = 1000,
+ .description = DecorDesc_BALL_POSTER,
+ .tiles = DecorGfx_BALL_POSTER,
+ },
+ {
+ .id = DECOR_GREEN_POSTER,
+ .name = DECORNAME_GREEN_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_POSTER,
+ .price = 1000,
+ .description = DecorDesc_GREEN_POSTER,
+ .tiles = DecorGfx_GREEN_POSTER,
+ },
+ {
+ .id = DECOR_RED_POSTER,
+ .name = DECORNAME_RED_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_POSTER,
+ .price = 1000,
+ .description = DecorDesc_RED_POSTER,
+ .tiles = DecorGfx_RED_POSTER,
+ },
+ {
+ .id = DECOR_BLUE_POSTER,
+ .name = DECORNAME_BLUE_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_POSTER,
+ .price = 1000,
+ .description = DecorDesc_BLUE_POSTER,
+ .tiles = DecorGfx_BLUE_POSTER,
+ },
+ {
+ .id = DECOR_CUTE_POSTER,
+ .name = DECORNAME_CUTE_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_POSTER,
+ .price = 1000,
+ .description = DecorDesc_CUTE_POSTER,
+ .tiles = DecorGfx_CUTE_POSTER,
+ },
+ {
+ .id = DECOR_PIKA_POSTER,
+ .name = DECORNAME_PIKA_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_2x1,
+ .category = DECORCAT_POSTER,
+ .price = 1500,
+ .description = DecorDesc_PIKA_POSTER,
+ .tiles = DecorGfx_PIKA_POSTER,
+ },
+ {
+ .id = DECOR_LONG_POSTER,
+ .name = DECORNAME_LONG_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_2x1,
+ .category = DECORCAT_POSTER,
+ .price = 1500,
+ .description = DecorDesc_LONG_POSTER,
+ .tiles = DecorGfx_LONG_POSTER,
+ },
+ {
+ .id = DECOR_SEA_POSTER,
+ .name = DECORNAME_SEA_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_2x1,
+ .category = DECORCAT_POSTER,
+ .price = 1500,
+ .description = DecorDesc_SEA_POSTER,
+ .tiles = DecorGfx_SEA_POSTER,
+ },
+ {
+ .id = DECOR_SKY_POSTER,
+ .name = DECORNAME_SKY_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_2x1,
+ .category = DECORCAT_POSTER,
+ .price = 1500,
+ .description = DecorDesc_SKY_POSTER,
+ .tiles = DecorGfx_SKY_POSTER,
+ },
+ {
+ .id = DECOR_KISS_POSTER,
+ .name = DECORNAME_KISS_POSTER,
+ .permission = DECORPERM_NA_WALL,
+ .shape = DECORSHAPE_2x1,
+ .category = DECORCAT_POSTER,
+ .price = 1500,
+ .description = DecorDesc_KISS_POSTER,
+ .tiles = DecorGfx_KISS_POSTER,
+ },
+ {
+ .id = DECOR_PICHU_DOLL,
+ .name = DECORNAME_PICHU_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_PICHU_DOLL,
+ .tiles = DecorGfx_PICHU_DOLL,
+ },
+ {
+ .id = DECOR_PIKACHU_DOLL,
+ .name = DECORNAME_PIKACHU_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_PIKACHU_DOLL,
+ .tiles = DecorGfx_PIKACHU_DOLL,
+ },
+ {
+ .id = DECOR_MARILL_DOLL,
+ .name = DECORNAME_MARILL_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_MARILL_DOLL,
+ .tiles = DecorGfx_MARILL_DOLL,
+ },
+ {
+ .id = DECOR_TOGEPI_DOLL,
+ .name = DECORNAME_TOGEPI_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_TOGEPI_DOLL,
+ .tiles = DecorGfx_TOGEPI_DOLL,
+ },
+ {
+ .id = DECOR_CYNDAQUIL_DOLL,
+ .name = DECORNAME_CYNDAQUIL_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_CYNDAQUIL_DOLL,
+ .tiles = DecorGfx_CYNDAQUIL_DOLL,
+ },
+ {
+ .id = DECOR_CHIKORITA_DOLL,
+ .name = DECORNAME_CHIKORITA_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_CHIKORITA_DOLL,
+ .tiles = DecorGfx_CHIKORITA_DOLL,
+ },
+ {
+ .id = DECOR_TOTODILE_DOLL,
+ .name = DECORNAME_TOTODILE_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_TOTODILE_DOLL,
+ .tiles = DecorGfx_TOTODILE_DOLL,
+ },
+ {
+ .id = DECOR_JIGGLYPUFF_DOLL,
+ .name = DECORNAME_JIGGLYPUFF_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_JIGGLYPUFF_DOLL,
+ .tiles = DecorGfx_JIGGLYPUFF_DOLL,
+ },
+ {
+ .id = DECOR_MEOWTH_DOLL,
+ .name = DECORNAME_MEOWTH_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_MEOWTH_DOLL,
+ .tiles = DecorGfx_MEOWTH_DOLL,
+ },
+ {
+ .id = DECOR_CLEFAIRY_DOLL,
+ .name = DECORNAME_CLEFAIRY_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_CLEFAIRY_DOLL,
+ .tiles = DecorGfx_CLEFAIRY_DOLL,
+ },
+ {
+ .id = DECOR_DITTO_DOLL,
+ .name = DECORNAME_DITTO_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_DITTO_DOLL,
+ .tiles = DecorGfx_DITTO_DOLL,
+ },
+ {
+ .id = DECOR_SMOOCHUM_DOLL,
+ .name = DECORNAME_SMOOCHUM_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_SMOOCHUM_DOLL,
+ .tiles = DecorGfx_SMOOCHUM_DOLL,
+ },
+ {
+ .id = DECOR_TREECKO_DOLL,
+ .name = DECORNAME_TREECKO_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_TREECKO_DOLL,
+ .tiles = DecorGfx_TREECKO_DOLL,
+ },
+ {
+ .id = DECOR_TORCHIC_DOLL,
+ .name = DECORNAME_TORCHIC_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_TORCHIC_DOLL,
+ .tiles = DecorGfx_TORCHIC_DOLL,
+ },
+ {
+ .id = DECOR_MUDKIP_DOLL,
+ .name = DECORNAME_MUDKIP_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_MUDKIP_DOLL,
+ .tiles = DecorGfx_MUDKIP_DOLL,
+ },
+ {
+ .id = DECOR_DUSKULL_DOLL,
+ .name = DECORNAME_DUSKULL_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_DUSKULL_DOLL,
+ .tiles = DecorGfx_DUSKULL_DOLL,
+ },
+ {
+ .id = DECOR_WYNAUT_DOLL,
+ .name = DECORNAME_WYNAUT_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_WYNAUT_DOLL,
+ .tiles = DecorGfx_WYNAUT_DOLL,
+ },
+ {
+ .id = DECOR_BALTOY_DOLL,
+ .name = DECORNAME_BALTOY_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_BALTOY_DOLL,
+ .tiles = DecorGfx_BALTOY_DOLL,
+ },
+ {
+ .id = DECOR_KECLEON_DOLL,
+ .name = DECORNAME_KECLEON_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_KECLEON_DOLL,
+ .tiles = DecorGfx_KECLEON_DOLL,
+ },
+ {
+ .id = DECOR_AZURILL_DOLL,
+ .name = DECORNAME_AZURILL_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_AZURILL_DOLL,
+ .tiles = DecorGfx_AZURILL_DOLL,
+ },
+ {
+ .id = DECOR_SKITTY_DOLL,
+ .name = DECORNAME_SKITTY_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_SKITTY_DOLL,
+ .tiles = DecorGfx_SKITTY_DOLL,
+ },
+ {
+ .id = DECOR_SWABLU_DOLL,
+ .name = DECORNAME_SWABLU_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_SWABLU_DOLL,
+ .tiles = DecorGfx_SWABLU_DOLL,
+ },
+ {
+ .id = DECOR_GULPIN_DOLL,
+ .name = DECORNAME_GULPIN_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_GULPIN_DOLL,
+ .tiles = DecorGfx_GULPIN_DOLL,
+ },
+ {
+ .id = DECOR_LOTAD_DOLL,
+ .name = DECORNAME_LOTAD_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_LOTAD_DOLL,
+ .tiles = DecorGfx_LOTAD_DOLL,
+ },
+ {
+ .id = DECOR_SEEDOT_DOLL,
+ .name = DECORNAME_SEEDOT_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_DOLL,
+ .price = 3000,
+ .description = DecorDesc_SEEDOT_DOLL,
+ .tiles = DecorGfx_SEEDOT_DOLL,
+ },
+ {
+ .id = DECOR_PIKA_CUSHION,
+ .name = DECORNAME_PIKA_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_PIKA_CUSHION,
+ .tiles = DecorGfx_PIKA_CUSHION,
+ },
+ {
+ .id = DECOR_ROUND_CUSHION,
+ .name = DECORNAME_ROUND_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_ROUND_CUSHION,
+ .tiles = DecorGfx_ROUND_CUSHION,
+ },
+ {
+ .id = DECOR_KISS_CUSHION,
+ .name = DECORNAME_KISS_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_KISS_CUSHION,
+ .tiles = DecorGfx_KISS_CUSHION,
+ },
+ {
+ .id = DECOR_ZIGZAG_CUSHION,
+ .name = DECORNAME_ZIGZAG_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_ZIGZAG_CUSHION,
+ .tiles = DecorGfx_ZIGZAG_CUSHION,
+ },
+ {
+ .id = DECOR_SPIN_CUSHION,
+ .name = DECORNAME_SPIN_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_SPIN_CUSHION,
+ .tiles = DecorGfx_SPIN_CUSHION,
+ },
+ {
+ .id = DECOR_DIAMOND_CUSHION,
+ .name = DECORNAME_DIAMOND_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_DIAMOND_CUSHION,
+ .tiles = DecorGfx_DIAMOND_CUSHION,
+ },
+ {
+ .id = DECOR_BALL_CUSHION,
+ .name = DECORNAME_BALL_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_BALL_CUSHION,
+ .tiles = DecorGfx_BALL_CUSHION,
+ },
+ {
+ .id = DECOR_GRASS_CUSHION,
+ .name = DECORNAME_GRASS_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_GRASS_CUSHION,
+ .tiles = DecorGfx_GRASS_CUSHION,
+ },
+ {
+ .id = DECOR_FIRE_CUSHION,
+ .name = DECORNAME_FIRE_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_FIRE_CUSHION,
+ .tiles = DecorGfx_FIRE_CUSHION,
+ },
+ {
+ .id = DECOR_WATER_CUSHION,
+ .name = DECORNAME_WATER_CUSHION,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x1,
+ .category = DECORCAT_CUSHION,
+ .price = 2000,
+ .description = DecorDesc_WATER_CUSHION,
+ .tiles = DecorGfx_WATER_CUSHION,
+ },
+ {
+ .id = DECOR_SNORLAX_DOLL,
+ .name = DECORNAME_SNORLAX_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_SNORLAX_DOLL,
+ .tiles = DecorGfx_SNORLAX_DOLL,
+ },
+ {
+ .id = DECOR_RHYDON_DOLL,
+ .name = DECORNAME_RHYDON_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_RHYDON_DOLL,
+ .tiles = DecorGfx_RHYDON_DOLL,
+ },
+ {
+ .id = DECOR_LAPRAS_DOLL,
+ .name = DECORNAME_LAPRAS_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_LAPRAS_DOLL,
+ .tiles = DecorGfx_LAPRAS_DOLL,
+ },
+ {
+ .id = DECOR_VENUSAUR_DOLL,
+ .name = DECORNAME_VENUSAUR_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_VENUSAUR_DOLL,
+ .tiles = DecorGfx_VENUSAUR_DOLL,
+ },
+ {
+ .id = DECOR_CHARIZARD_DOLL,
+ .name = DECORNAME_CHARIZARD_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_CHARIZARD_DOLL,
+ .tiles = DecorGfx_CHARIZARD_DOLL,
+ },
+ {
+ .id = DECOR_BLASTOISE_DOLL,
+ .name = DECORNAME_BLASTOISE_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_BLASTOISE_DOLL,
+ .tiles = DecorGfx_BLASTOISE_DOLL,
+ },
+ {
+ .id = DECOR_WAILMER_DOLL,
+ .name = DECORNAME_WAILMER_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_WAILMER_DOLL,
+ .tiles = DecorGfx_WAILMER_DOLL,
+ },
+ {
+ .id = DECOR_REGIROCK_DOLL,
+ .name = DECORNAME_REGIROCK_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_REGIROCK_DOLL,
+ .tiles = DecorGfx_REGIROCK_DOLL,
+ },
+ {
+ .id = DECOR_REGICE_DOLL,
+ .name = DECORNAME_REGICE_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_REGICE_DOLL,
+ .tiles = DecorGfx_REGICE_DOLL,
+ },
+ {
+ .id = DECOR_REGISTEEL_DOLL,
+ .name = DECORNAME_REGISTEEL_DOLL,
+ .permission = DECORPERM_SOLID_MAT,
+ .shape = DECORSHAPE_1x2,
+ .category = DECORCAT_DOLL,
+ .price = 10000,
+ .description = DecorDesc_REGISTEEL_DOLL,
+ .tiles = DecorGfx_REGISTEEL_DOLL,
+ }
+};
diff --git a/src/data/decoration/descriptions_de.h b/src/data/decoration/descriptions_de.h
new file mode 100644
index 000000000..4c5559044
--- /dev/null
+++ b/src/data/decoration/descriptions_de.h
@@ -0,0 +1,699 @@
+const u8 DecorDesc_SMALL_DESK[] = _(
+ "Ein kleiner Tisch\n"
+ "für eine Person.");
+
+const u8 DecorDesc_POKEMON_DESK[] = _(
+ "Ein kleiner Tisch,\n"
+ "geformt wie ein\n"
+ "POKéBALL.");
+
+const u8 DecorDesc_HEAVY_DESK[] = _(
+ "Ein großer Tisch\n"
+ "aus Stahl. Für\n"
+ "Dekorationen.");
+
+const u8 DecorDesc_RAGGED_DESK[] = _(
+ "Ein großer Tisch\n"
+ "aus Holz. Für\n"
+ "Dekorationen.");
+
+const u8 DecorDesc_COMFORT_DESK[] = _(
+ "Ein riesiger Tisch\n"
+ "aus Blättern. Für\n"
+ "Dekorationen.");
+
+const u8 DecorDesc_PRETTY_DESK[] = _(
+ "Ein riesiger Tisch\n"
+ "aus Glas. Trägt\n"
+ "viele Dekorationen.");
+
+const u8 DecorDesc_BRICK_DESK[] = _(
+ "Ein riesiger Tisch\n"
+ "aus Backstein. Für\n"
+ "viele Dekorationen.");
+
+const u8 DecorDesc_CAMP_DESK[] = _(
+ "Ein riesiger Tisch\n"
+ "aus Baumstämmen.\n"
+ "Für Dekorationen.");
+
+const u8 DecorDesc_HARD_DESK[] = _(
+ "Ein riesiger Tisch\n"
+ "aus Stein. Trägt\n"
+ "viele Dekorationen.");
+
+const u8 DecorDesc_SMALL_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "für eine Person.");
+
+const u8 DecorDesc_POKEMON_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "in der Form eines\n"
+ "POKéBALLS.");
+
+const u8 DecorDesc_HEAVY_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Stahl.");
+
+const u8 DecorDesc_PRETTY_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Glas.");
+
+const u8 DecorDesc_COMFORT_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Blättern.");
+
+const u8 DecorDesc_RAGGED_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Holz.");
+
+const u8 DecorDesc_BRICK_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Backstein.");
+
+const u8 DecorDesc_CAMP_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Baumstämmen.");
+
+const u8 DecorDesc_HARD_CHAIR[] = _(
+ "Ein kleiner Stuhl\n"
+ "aus Stein.");
+
+const u8 DecorDesc_RED_PLANT[] = _(
+ "Eine leuchtend\n"
+ "rote Pflanze.");
+
+const u8 DecorDesc_TROPICAL_PLANT[] = _(
+ "Eine blühende,\n"
+ "tropische Pflanze\n"
+ "in einem Übertopf.");
+
+const u8 DecorDesc_PRETTY_FLOWERS[] = _(
+ "Ein Topf mit\n"
+ "hübschen Blumen.");
+
+const u8 DecorDesc_COLORFUL_PLANT[] = _(
+ "Ein großer Topf mit\n"
+ "vielen, farben-\n"
+ "prächtigen Blumen.");
+
+const u8 DecorDesc_BIG_PLANT[] = _(
+ "Eine große, schirm-\n"
+ "förmige Pflanze in\n"
+ "einem großen Topf.");
+
+const u8 DecorDesc_GORGEOUS_PLANT[] = _(
+ "Eine beeindruckend\n"
+ "große Pflanze in\n"
+ "einem großen Topf.");
+
+const u8 DecorDesc_RED_BRICK[] = _(
+ "Ein roter Back-\n"
+ "stein. Stelle Deko-\n"
+ "rationen darauf.");
+
+const u8 DecorDesc_YELLOW_BRICK[] = _(
+ "Ein gelber Back-\n"
+ "stein. Stelle Deko-\n"
+ "rationen darauf.");
+
+const u8 DecorDesc_BLUE_BRICK[] = _(
+ "Ein blauer Back-\n"
+ "stein. Stelle Deko-\n"
+ "rationen darauf.");
+
+const u8 DecorDesc_RED_BALLOON[] = _(
+ "Ein roter Ballon mit\n"
+ "Wasser. Platzt beim\n"
+ "Drauftreten.");
+
+const u8 DecorDesc_BLUE_BALLOON[] = _(
+ "Ein blauer Ballon\n"
+ "mit Wasser. Platzt\n"
+ "beim Drauftreten.");
+
+const u8 DecorDesc_YELLOW_BALLOON[] = _(
+ "Ein gelber Ballon\n"
+ "mit Wasser. Platzt\n"
+ "beim Drauftreten.");
+
+const u8 DecorDesc_RED_TENT[] = _(
+ "Ein großes, rotes\n"
+ "Zelt. Darin kann man\n"
+ "sich verstecken.");
+
+const u8 DecorDesc_BLUE_TENT[] = _(
+ "Ein großes, blaues\n"
+ "Zelt. Darin kann man\n"
+ "sich verstecken.");
+
+const u8 DecorDesc_SOLID_BOARD[] = _(
+ "Leg es über ein\n"
+ "Loch, um die andere\n"
+ "Seite zu erreichen.");
+
+const u8 DecorDesc_SLIDE[] = _(
+ "Nützlich, um von der\n"
+ "Plattform hinab-\n"
+ "gleiten zu können.");
+
+const u8 DecorDesc_FENCE_LENGTH[] = _(
+ "Ein kleiner Zaun,\n"
+ "der den Durchgang\n"
+ "versperrt.");
+
+const u8 DecorDesc_FENCE_WIDTH[] = _(
+ "Ein kleiner Zaun,\n"
+ "der den Durchgang\n"
+ "versperrt.");
+
+const u8 DecorDesc_TIRE[] = _(
+ "Ein großer, alter\n"
+ "Reifen. Für\n"
+ "Dekorationen.");
+
+const u8 DecorDesc_STAND[] = _(
+ "Ein Podest mit\n"
+ "Stufen.");
+
+const u8 DecorDesc_MUD_BALL[] = _(
+ "Ein großer Ball aus\n"
+ "Lehm. Geht kaputt\n"
+ "beim Drauftreten.");
+
+const u8 DecorDesc_BREAKABLE_DOOR[] = _(
+ "Eine verrückte Tür,\n"
+ "durch die man hin-\n"
+ "durchlaufen kann.");
+
+const u8 DecorDesc_SAND_ORNAMENT[] = _(
+ "Ein Ornament aus\n"
+ "Sand. Fällt bei\n"
+ "Kontakt zusammen.");
+
+const u8 DecorDesc_SILVER_SHIELD[] = _(
+ "Belohnung für\n"
+ "50 Siege in Folge im\n"
+ "DUELLTURM.");
+
+const u8 DecorDesc_GOLD_SHIELD[] = _(
+ "Belohnung für\n"
+ "100 Siege in Folge\n"
+ "im DUELLTURM.");
+
+const u8 DecorDesc_GLASS_ORNAMENT[] = _(
+ "Das Replikat einer\n"
+ "berühmten Skulptur\n"
+ "des KUNSTMUSEUMS.");
+
+const u8 DecorDesc_TV[] = _(
+ "Ein kleiner, grauer\n"
+ "Spielzeug-\n"
+ "Fernseher.");
+
+const u8 DecorDesc_ROUND_TV[] = _(
+ "Ein Spielzeug-\n"
+ "Fernseher in der\n"
+ "Form von SAMURZEL.");
+
+const u8 DecorDesc_CUTE_TV[] = _(
+ "Ein Spielzeug-\n"
+ "Fernseher in der\n"
+ "Form eines ENECO.");
+
+const u8 DecorDesc_GLITTER_MAT[] = _(
+ "Eine seltsame\n"
+ "Matte. Glitzert\n"
+ "beim Drauftreten.");
+
+const u8 DecorDesc_JUMP_MAT[] = _(
+ "Eine Trick-Matte,\n"
+ "die hüpft, wenn man\n"
+ "drauftritt.");
+
+const u8 DecorDesc_SPIN_MAT[] = _(
+ "Eine Trick-Matte,\n"
+ "die sich beim\n"
+ "Drauftreten dreht.");
+
+const u8 DecorDesc_C_LOW_NOTE_MAT[] = _(
+ "Eine Matte, die das\n"
+ "tiefe C spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_D_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein D spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_E_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein E spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_F_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein F spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_G_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein G spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_A_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein A spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_B_NOTE_MAT[] = _(
+ "Eine Matte, die\n"
+ "ein H spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_C_HIGH_NOTE_MAT[] = _(
+ "Eine Matte, die das\n"
+ "hohe C spielt, wenn\n"
+ "man drauftritt.");
+
+const u8 DecorDesc_SURF_MAT[] = _(
+ "Eine Matte mit\n"
+ "einem SURFER-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_THUNDER_MAT[] = _(
+ "Eine Matte mit\n"
+ "einem DONNER-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_FIRE_BLAST_MAT[] = _(
+ "Eine Matte mit\n"
+ "FEUERSTURM-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_POWDER_SNOW_MAT[] = _(
+ "Eine Matte mit\n"
+ "PULVERSCHNEE-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_ATTRACT_MAT[] = _(
+ "Eine Matte mit\n"
+ "ANZIEHUNG-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_FISSURE_MAT[] = _(
+ "Eine Matte mit\n"
+ "GEOFISSUR-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_SPIKES_MAT[] = _(
+ "Eine Matte mit\n"
+ "STACHLER-\n"
+ "Muster. Für Items.");
+
+const u8 DecorDesc_BALL_POSTER[] = _(
+ "Ein kleines Poster\n"
+ "von POKéBÄLLEN.");
+
+const u8 DecorDesc_GREEN_POSTER[] = _(
+ "Ein kleines Poster\n"
+ "von GECKARBOR.");
+
+const u8 DecorDesc_RED_POSTER[] = _(
+ "Ein kleines Poster\n"
+ "von FLEMMLI.");
+
+const u8 DecorDesc_BLUE_POSTER[] = _(
+ "Ein kleines Poster\n"
+ "von HYDROPI.");
+
+const u8 DecorDesc_CUTE_POSTER[] = _(
+ "Ein kleines Poster\n"
+ "von AZURILL.");
+
+const u8 DecorDesc_PIKA_POSTER[] = _(
+ "Ein großes Poster\n"
+ "von PIKACHU und\n"
+ "PICHU.");
+
+const u8 DecorDesc_LONG_POSTER[] = _(
+ "Ein großes Poster\n"
+ "von VIPITIS.");
+
+const u8 DecorDesc_SEA_POSTER[] = _(
+ "Ein großes Poster\n"
+ "von RELICANTH.");
+
+const u8 DecorDesc_SKY_POSTER[] = _(
+ "Ein großes Poster\n"
+ "von WINGULL.");
+
+const u8 DecorDesc_KISS_POSTER[] = _(
+ "Ein großes Poster\n"
+ "von KUSSILLA.");
+
+const u8 DecorDesc_PICHU_DOLL[] = _(
+ "PICHU-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_PIKACHU_DOLL[] = _(
+ "PIKACHU-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_MARILL_DOLL[] = _(
+ "MARILL-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_TOGEPI_DOLL[] = _(
+ "TOGEPI-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_CYNDAQUIL_DOLL[] = _(
+ "FEURIGEL-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_CHIKORITA_DOLL[] = _(
+ "ENDIVIE-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_TOTODILE_DOLL[] = _(
+ "KARNIMANI-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_JIGGLYPUFF_DOLL[] = _(
+ "PUMMELUFF-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_MEOWTH_DOLL[] = _(
+ "MAUZI-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_CLEFAIRY_DOLL[] = _(
+ "PIEPI-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_DITTO_DOLL[] = _(
+ "DITTO-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_SMOOCHUM_DOLL[] = _(
+ "KUSSILLA-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_TREECKO_DOLL[] = _(
+ "GECKARBOR-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_TORCHIC_DOLL[] = _(
+ "FLEMMLI-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_MUDKIP_DOLL[] = _(
+ "HYDROPI-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_DUSKULL_DOLL[] = _(
+ "ZWIRRLICHT-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_WYNAUT_DOLL[] = _(
+ "ISSO-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_BALTOY_DOLL[] = _(
+ "PUPPANCE-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_KECLEON_DOLL[] = _(
+ "KECLEON-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_AZURILL_DOLL[] = _(
+ "AZURILL-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_SKITTY_DOLL[] = _(
+ "ENECO-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_SWABLU_DOLL[] = _(
+ "WABLU-Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder einen Tisch.");
+
+const u8 DecorDesc_GULPIN_DOLL[] = _(
+ "SCHLUPPUCK-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_LOTAD_DOLL[] = _(
+ "LOTURZEL-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_SEEDOT_DOLL[] = _(
+ "SAMURZEL-Puppe.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_PIKA_CUSHION[] = _(
+ "PIKACHU-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_ROUND_CUSHION[] = _(
+ "MARILL-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_KISS_CUSHION[] = _(
+ "KUSSILLA-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_ZIGZAG_CUSHION[] = _(
+ "ZIGZACHS-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_SPIN_CUSHION[] = _(
+ "PANDIR-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_DIAMOND_CUSHION[] = _(
+ "ZOBIRIS-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_BALL_CUSHION[] = _(
+ "BALL-Kissen.\n"
+ "Für eine Matte oder\n"
+ "den Tisch.");
+
+const u8 DecorDesc_GRASS_CUSHION[] = _(
+ "Kissen mit Gras-\n"
+ "muster. Für\n"
+ "Matte oder Tisch.");
+
+const u8 DecorDesc_FIRE_CUSHION[] = _(
+ "Kissen mit Feuer-\n"
+ "muster. Für\n"
+ "Matte oder Tisch.");
+
+const u8 DecorDesc_WATER_CUSHION[] = _(
+ "Kissen mit Wasser-\n"
+ "muster. Für\n"
+ "Matte oder Tisch.");
+
+const u8 DecorDesc_SNORLAX_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_RHYDON_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_LAPRAS_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_VENUSAUR_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_CHARIZARD_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_BLASTOISE_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_WAILMER_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_REGIROCK_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_REGICE_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+const u8 DecorDesc_REGISTEEL_DOLL[] = _(
+ "Große Puppe. Leg\n"
+ "sie auf eine Matte\n"
+ "oder den Tisch.");
+
+#define DECORNAME_SMALL_DESK _("KLEINER TISCH")
+#define DECORNAME_POKEMON_DESK _("POKéMONTISCH")
+#define DECORNAME_HEAVY_DESK _("SCHWERER TISCH")
+#define DECORNAME_RAGGED_DESK _("INTARSIENTISCH")
+#define DECORNAME_COMFORT_DESK _("NATURTISCH")
+#define DECORNAME_PRETTY_DESK _("EDLER TISCH")
+#define DECORNAME_BRICK_DESK _("BACKSTEINTISCH")
+#define DECORNAME_CAMP_DESK _("CAMPINGTISCH")
+#define DECORNAME_HARD_DESK _("MASSIVER TISCH")
+#define DECORNAME_SMALL_CHAIR _("KLEINER STUHL")
+#define DECORNAME_POKEMON_CHAIR _("POKéMON STUHL")
+#define DECORNAME_HEAVY_CHAIR _("SCHWERER STUHL")
+#define DECORNAME_PRETTY_CHAIR _("EDLER STUHL")
+#define DECORNAME_COMFORT_CHAIR _("NATURSTUHL")
+#define DECORNAME_RAGGED_CHAIR _("INTARSIENSTUHL")
+#define DECORNAME_BRICK_CHAIR _("BACKSTEINSTUHL")
+#define DECORNAME_CAMP_CHAIR _("CAMPINGSTUHL")
+#define DECORNAME_HARD_CHAIR _("MASSIVER STUHL")
+#define DECORNAME_RED_PLANT _("ROTE PFLANZE")
+#define DECORNAME_TROPICAL_PLANT _("TROPENPFLANZE")
+#define DECORNAME_PRETTY_FLOWERS _("HÜBSCHE BLUMEN")
+#define DECORNAME_COLORFUL_PLANT _("BUNTE PFLANZE")
+#define DECORNAME_BIG_PLANT _("GROSSE PFLANZE")
+#define DECORNAME_GORGEOUS_PLANT _("ZIERPFLANZE")
+#define DECORNAME_RED_BRICK _("ROTER STEIN")
+#define DECORNAME_YELLOW_BRICK _("GELBER STEIN")
+#define DECORNAME_BLUE_BRICK _("BLAUER STEIN")
+#define DECORNAME_RED_BALLOON _("ROTER BALLON")
+#define DECORNAME_BLUE_BALLOON _("BLAUER BALLON")
+#define DECORNAME_YELLOW_BALLOON _("GELBER BALLON")
+#define DECORNAME_RED_TENT _("ROTES ZELT")
+#define DECORNAME_BLUE_TENT _("BLAUES ZELT")
+#define DECORNAME_SOLID_BOARD _("SOLIDES BRETT")
+#define DECORNAME_SLIDE _("RUTSCHE")
+#define DECORNAME_FENCE_LENGTH _("ZAUN VERTIKAL")
+#define DECORNAME_FENCE_WIDTH _("ZAUN HORIZONTAL")
+#define DECORNAME_TIRE _("REIFEN")
+#define DECORNAME_STAND _("PODEST")
+#define DECORNAME_MUD_BALL _("LEHMBALL")
+#define DECORNAME_BREAKABLE_DOOR _("BRECHBARE TÜR")
+#define DECORNAME_SAND_ORNAMENT _("SANDORNAMENT")
+#define DECORNAME_SILVER_SHIELD _("SILBERSCHILD")
+#define DECORNAME_GOLD_SHIELD _("GOLDSCHILD")
+#define DECORNAME_GLASS_ORNAMENT _("GLASORNAMENT")
+#define DECORNAME_TV _("FERNSEHER")
+#define DECORNAME_ROUND_TV _("RUNDER TV")
+#define DECORNAME_CUTE_TV _("HÜBSCHER TV")
+#define DECORNAME_GLITTER_MAT _("GLITZER-MATTE")
+#define DECORNAME_JUMP_MAT _("SPRUNG-MATTE")
+#define DECORNAME_SPIN_MAT _("DREH-MATTE")
+#define DECORNAME_C_LOW_NOTE_MAT _("Tiefes C-MATTE")
+#define DECORNAME_D_NOTE_MAT _("D-MATTE")
+#define DECORNAME_E_NOTE_MAT _("E-MATTE")
+#define DECORNAME_F_NOTE_MAT _("F-MATTE")
+#define DECORNAME_G_NOTE_MAT _("G-MATTE")
+#define DECORNAME_A_NOTE_MAT _("A-MATTE")
+#define DECORNAME_B_NOTE_MAT _("H-MATTE")
+#define DECORNAME_C_HIGH_NOTE_MAT _("Hohes C-MATTE")
+#define DECORNAME_SURF_MAT _("SURFER-MATTE")
+#define DECORNAME_THUNDER_MAT _("DONNER-MATTE")
+#define DECORNAME_FIRE_BLAST_MAT _("FEUER-MATTE")
+#define DECORNAME_POWDER_SNOW_MAT _("SCHNEE-MATTE")
+#define DECORNAME_ATTRACT_MAT _("ANZIEHUNG-MAT.")
+#define DECORNAME_FISSURE_MAT _("GEOFISSUR-MAT.")
+#define DECORNAME_SPIKES_MAT _("STACHLER-MATTE")
+#define DECORNAME_BALL_POSTER _("BALLPOSTER")
+#define DECORNAME_GREEN_POSTER _("GRÜNES POSTER")
+#define DECORNAME_RED_POSTER _("ROTES POSTER")
+#define DECORNAME_BLUE_POSTER _("BLAUES POSTER")
+#define DECORNAME_CUTE_POSTER _("HÜBSCHES POSTER")
+#define DECORNAME_PIKA_POSTER _("PICHUKA-POSTER")
+#define DECORNAME_LONG_POSTER _("SCHLANG-POSTER")
+#define DECORNAME_SEA_POSTER _("MEER-POSTER")
+#define DECORNAME_SKY_POSTER _("HIMMEL-POSTER")
+#define DECORNAME_KISS_POSTER _("KUSS-POSTER")
+#define DECORNAME_PICHU_DOLL _("PICHU-PUPPE")
+#define DECORNAME_PIKACHU_DOLL _("PIKACHU-PUPPE")
+#define DECORNAME_MARILL_DOLL _("MARILL-PUPPE")
+#define DECORNAME_TOGEPI_DOLL _("TOGEPI-PUPPE")
+#define DECORNAME_CYNDAQUIL_DOLL _("FEURIGEL-PUPPE")
+#define DECORNAME_CHIKORITA_DOLL _("ENDIVIE-PUPPE")
+#define DECORNAME_TOTODILE_DOLL _("KARNIMANIPUPPE")
+#define DECORNAME_JIGGLYPUFF_DOLL _("PUMMELUFFPUPPE")
+#define DECORNAME_MEOWTH_DOLL _("MAUZI-PUPPE")
+#define DECORNAME_CLEFAIRY_DOLL _("PIEPI-PUPPE")
+#define DECORNAME_DITTO_DOLL _("DITTO-PUPPE")
+#define DECORNAME_SMOOCHUM_DOLL _("KUSSILLA-PUPPE")
+#define DECORNAME_TREECKO_DOLL _("GECKARBOR-PUPP.")
+#define DECORNAME_TORCHIC_DOLL _("FLEMMLI-PUPPE")
+#define DECORNAME_MUDKIP_DOLL _("HYDROPI-PUPPE")
+#define DECORNAME_DUSKULL_DOLL _("ZWIRRLICHTPUP.")
+#define DECORNAME_WYNAUT_DOLL _("ISSO-PUPPE")
+#define DECORNAME_BALTOY_DOLL _("PUPPANCE-PUPPE")
+#define DECORNAME_KECLEON_DOLL _("KECLEON-PUPPE")
+#define DECORNAME_AZURILL_DOLL _("AZURILL-PUPPE")
+#define DECORNAME_SKITTY_DOLL _("ENECO-PUPPE")
+#define DECORNAME_SWABLU_DOLL _("WABLU-PUPPE")
+#define DECORNAME_GULPIN_DOLL _("SCHLUPPUCKPUP.")
+#define DECORNAME_LOTAD_DOLL _("LOTURZEL-PUPPE")
+#define DECORNAME_SEEDOT_DOLL _("SAMURZEL-PUPPE")
+#define DECORNAME_PIKA_CUSHION _("PIKA-KISSEN")
+#define DECORNAME_ROUND_CUSHION _("RUNDES KISSEN")
+#define DECORNAME_KISS_CUSHION _("KUSS-KISSEN")
+#define DECORNAME_ZIGZAG_CUSHION _("ZIGZACHS-KISS.")
+#define DECORNAME_SPIN_CUSHION _("KREISEL-KISSEN")
+#define DECORNAME_DIAMOND_CUSHION _("DIAMANT-KISSEN")
+#define DECORNAME_BALL_CUSHION _("BALL-KISSEN")
+#define DECORNAME_GRASS_CUSHION _("PFLANZEN-KISS.")
+#define DECORNAME_FIRE_CUSHION _("FEUER-KISSEN")
+#define DECORNAME_WATER_CUSHION _("WASSER-KISSEN")
+#define DECORNAME_SNORLAX_DOLL _("RELAXO-PUPPE")
+#define DECORNAME_RHYDON_DOLL _("RIZEROS-PUPPE")
+#define DECORNAME_LAPRAS_DOLL _("LAPRAS-PUPPE")
+#define DECORNAME_VENUSAUR_DOLL _("BISAFLOR-PUPPE")
+#define DECORNAME_CHARIZARD_DOLL _("GLURAK-PUPPE")
+#define DECORNAME_BLASTOISE_DOLL _("TURTOK-PUPPE")
+#define DECORNAME_WAILMER_DOLL _("WAILMER-PUPPE")
+#define DECORNAME_REGIROCK_DOLL _("REGIROCK-PUPPE")
+#define DECORNAME_REGICE_DOLL _("REGICE-PUPPE")
+#define DECORNAME_REGISTEEL_DOLL _("REGISTEEL-PUPP.")
diff --git a/src/data/pokedex_entries_de.h b/src/data/pokedex_entries_de.h
new file mode 100644
index 000000000..38263ec6e
--- /dev/null
+++ b/src/data/pokedex_entries_de.h
@@ -0,0 +1,7955 @@
+static const u8 DexDescription_Dummy_1[] = _(
+ "Dieses POKéMON wurde erst vor kurzem \n"
+ "entdeckt und wird noch erforscht.");
+static const u8 DexDescription_Dummy_2[] = _(
+ "Zur Zeit sind keine genauen\n"
+ "Informationen über dieses\n"
+ "POKéMON vorhanden.");
+
+static const u8 DexDescription_Bisasam_1[] = _(
+ "BISASAM macht gern einmal ein\n"
+ "Nickerchen im Sonnenschein.\n"
+ "Auf seinem Rücken trägt es einen Samen.");
+static const u8 DexDescription_Bisasam_2[] = _(
+ "Indem es Sonnenstrahlen aufsaugt,\n"
+ "wird der Samen zunehmend größer.");
+
+static const u8 DexDescription_Bisaknosp_1[] = _(
+ "BISAKNOSP hat eine Knospe auf seinem\n"
+ "Rücken. Beine und Rumpf sind kräftig\n"
+ "genug, um sein Gewicht zu tragen.");
+static const u8 DexDescription_Bisaknosp_2[] = _(
+ "Wenn es lange in der Sonne liegt, ist das\n"
+ "ein Anzeichen dafür, dass die Knospe\n"
+ "bald blüht.");
+
+static const u8 DexDescription_Bisaflor_1[] = _(
+ "BISAFLOR hat eine Blume auf seinem\n"
+ "Rücken. Wenn sie viel Nahrung und Sonne\n"
+ "aufnimmt, verfärbt sie sich bunt.");
+static const u8 DexDescription_Bisaflor_2[] = _(
+ "Der Duft der Blume mildert die Emotionen\n"
+ "der Menschen.");
+
+static const u8 DexDescription_Glumanda_1[] = _(
+ "Die Flamme auf seiner Schweifspitze\n"
+ "zeigt seine Gefühlslage an. Sie\n"
+ "flackert, wenn GLUMANDA zufrieden ist.");
+static const u8 DexDescription_Glumanda_2[] = _(
+ "Wenn dieses POKéMON wütend wird, lodert\n"
+ "die Flamme gewaltig.");
+
+static const u8 DexDescription_Glutexo_1[] = _(
+ "Gnadenlos besiegt GLUTEXO seine Geg-\n"
+ "ner mit seinen scharfen Klauen. Wenn es \n"
+ "auf starke Gegner trifft, wird es");
+static const u8 DexDescription_Glutexo_2[] = _(
+ "wütend und die Flamme auf seiner\n"
+ "Schweifspitze flackert in einem\n"
+ "bläulichen Ton.");
+
+static const u8 DexDescription_Glurak_1[] = _(
+ "GLURAK fliegt durch die Lüfte, um\n"
+ "starke Gegner aufzuspüren. Sein heißer\n"
+ "Feueratem bringt alles zum Schmelzen.");
+static const u8 DexDescription_Glurak_2[] = _(
+ "Aber es richtet seinen Feueratem nie\n"
+ "auf schwächere Gegner.");
+
+static const u8 DexDescription_Schiggy_1[] = _(
+ "SCHIGGYs Panzer dient nicht nur zum\n"
+ "Schutz. Die runde Form und die Furchen\n"
+ "auf der Oberfläche verringern den");
+static const u8 DexDescription_Schiggy_2[] = _(
+ "Widerstand im Wasser, so dass dieses\n"
+ "POKéMON sehr schnell schwimmen kann.");
+
+static const u8 DexDescription_Schillok_1[] = _(
+ "SCHILLOK hat einen langen, buschigen\n"
+ "Schweif, dessen Farbe intensiver wird,\n"
+ "wenn es altert.");
+static const u8 DexDescription_Schillok_2[] = _(
+ "Die Kratzer auf seinem Panzer zeugen\n"
+ "von seiner Kampfkraft.");
+
+static const u8 DexDescription_Turtok_1[] = _(
+ "TURTOK besitzt Wasserdüsen, die aus\n"
+ "seinem Panzer herausragen. Diese sind\n"
+ "sehr präzise.");
+static const u8 DexDescription_Turtok_2[] = _(
+ "Es kann Wassergeschosse so genau\n"
+ "verschießen, dass es damit aus fast\n"
+ "50 Metern leere Dosen trifft.");
+
+static const u8 DexDescription_Raupy_1[] = _(
+ "RAUPY ist sehr gefräßig, es kann\n"
+ "Blätter verschlingen, die größer sind\n"
+ "als es selbst.");
+static const u8 DexDescription_Raupy_2[] = _(
+ "Seine Antennen sondern einen\n"
+ "übel riechenden Gestank ab.");
+
+static const u8 DexDescription_Safcon_1[] = _(
+ "Der Panzer dieses POKéMON ist hart wie\n"
+ "Stahl. SAFCON bewegt sich kaum,");
+static const u8 DexDescription_Safcon_2[] = _(
+ "da es das weiche Innere unter seiner\n"
+ "harten Schale auf seine Entwicklung \n"
+ "vorbereitet.");
+
+static const u8 DexDescription_Smettbo_1[] = _(
+ "SMETTBOs größte Fähigkeit ist das Auf-\n"
+ "spüren köstlichen Blütenhonigs.");
+static const u8 DexDescription_Smettbo_2[] = _(
+ "Es findet sogar Honig in Blumen, die\n"
+ "fast 10 km von seinem Nest entfernt\n"
+ "blühen.");
+
+static const u8 DexDescription_Hornliu_1[] = _(
+ "HORNLIU verfügt über einen ausge-\n"
+ "zeichneten Geruchssinn. So kann es\n"
+ "seine Lieblingsblätter von denen");
+static const u8 DexDescription_Hornliu_2[] = _(
+ "unterscheiden, die es nicht mag, indem\n"
+ "es mit seiner großen roten Nase daran\n"
+ "schnuppert.");
+
+static const u8 DexDescription_Kokuna_1[] = _(
+ "KOKUNA bewegt sich kaum, wenn es an\n"
+ "einem Baum haftet. In seinem Inneren\n"
+ "jedoch regt sich einiges, da es sich auf");
+static const u8 DexDescription_Kokuna_2[] = _(
+ "seine bevorstehende Entwicklung vor-\n"
+ "bereitet. Dabei wird seine Schale sehr\n"
+ "heiß.");
+
+static const u8 DexDescription_Bibor_1[] = _(
+ "BIBOR sind sehr wehrhaft. Es sollte sich\n"
+ "besser niemand ihrem Nest nähern.");
+static const u8 DexDescription_Bibor_2[] = _(
+ "Wenn man sie ärgert, greifen sie in\n"
+ "Schwärmen an.");
+
+static const u8 DexDescription_Taubsi_1[] = _(
+ "TAUBSI verfügt über einen sehr ge-\n"
+ "schulten Orientierungssinn. Es kehrt \n"
+ "zielsicher zu seinem Nest zurück,");
+static const u8 DexDescription_Taubsi_2[] = _(
+ "egal, wie weit es sich von seiner\n"
+ "gewohnten Umgebung entfernt hat.");
+
+static const u8 DexDescription_Tauboga_1[] = _(
+ "TAUBOGA nennt ein großes Gebiet sein\n"
+ "Eigen. Es fliegt umher und kontrolliert\n"
+ "seinen Lebensraum.");
+static const u8 DexDescription_Tauboga_2[] = _(
+ "Wenn jemand sein Gebiet betritt, zeigt\n"
+ "es keine Gnade und greift seine Gegner\n"
+ "mit seinen scharfen Krallen an.");
+
+static const u8 DexDescription_Tauboss_1[] = _(
+ "Dieses POKéMON hat ein wunderschönes, \n"
+ "glänzendes Gefieder.\n"
+ "Viele TRAINER sind von der auffälligen");
+static const u8 DexDescription_Tauboss_2[] = _(
+ "Schönheit seines Federkleids begeis-\n"
+ "tert, so dass sie TAUBOSS als ihr\n"
+ "POKéMON wählen.");
+
+static const u8 DexDescription_Rattfratz_1[] = _(
+ "RATTFRATZ ist extrem vorsichtig. Sogar\n"
+ "im Schlaf nimmt es alles wahr, indem es\n"
+ "seine Ohren bewegt.");
+static const u8 DexDescription_Rattfratz_2[] = _(
+ "Es stellt keine großen Ansprüche an\n"
+ "seinen Lebensraum und richtet sein\n"
+ "Nest überall ein.");
+
+static const u8 DexDescription_Rattikarl_1[] = _(
+ "RATTIKARLs kräftige Zähne wachsen\n"
+ "ständig. Deshalb nagt es unablässig\n"
+ "Steine und Baumstämme an,");
+static const u8 DexDescription_Rattikarl_2[] = _(
+ "um sie abzuwetzen. Manchmal knabbert\n"
+ "es sogar Hauswände an.");
+
+static const u8 DexDescription_Habitak_1[] = _(
+ "HABITAK kann einen sehr lauten Schrei\n"
+ "ausstoßen, den man über die Entfernung\n"
+ "von 1 km vernehmen kann.");
+static const u8 DexDescription_Habitak_2[] = _(
+ "Durch das Echo seiner hohen, wehklagen-\n"
+ "den Schreie warnt dieses POKéMON seine\n"
+ "Artgenossen vor drohender Gefahr.");
+
+static const u8 DexDescription_Ibitak_1[] = _(
+ "IBITAK erkennt man an seinem langen \n"
+ "Hals und Schnabel. \n"
+ "Er ist hervorragend dafür geeignet,");
+static const u8 DexDescription_Ibitak_2[] = _(
+ "im Erdreich oder im Wasser Beute zu\n"
+ "jagen. Es setzt seinen langen, dünnen\n"
+ "Schnabel dabei sehr geschickt ein.");
+
+static const u8 DexDescription_Rettan_1[] = _(
+ "RETTAN rollt sich zu einer Spirale zu-\n"
+ "sammen, wenn es sich ausruht.\n"
+ "Aus dieser Haltung kann es blitzschnell");
+static const u8 DexDescription_Rettan_2[] = _(
+ "auf Bedrohungen aus allen Richtungen\n"
+ "reagieren, indem es seinen Kopf hebt.");
+
+static const u8 DexDescription_Arbok_1[] = _(
+ "Dieses POKéMON ist unheimlich stark. Es\n"
+ "kann seine Beute mit seinem Körper um-\n"
+ "wickeln und sogar Ölfässer zerdrücken.");
+static const u8 DexDescription_Arbok_2[] = _(
+ "Wenn ARBOK einen Gegner umwickelt, ist\n"
+ "es unmöglich, seinem Würgegriff zu ent-\n"
+ "kommen.");
+
+static const u8 DexDescription_Pikachu_1[] = _(
+ "Immer wenn PIKACHU auf etwas Neues\n"
+ "stößt, jagt es einen Elektroschock \n"
+ "hindurch.");
+static const u8 DexDescription_Pikachu_2[] = _(
+ "Wenn du eine verkohlte Beere findest,\n"
+ "hat dieses POKéMON seine elektrische\n"
+ "Ladung falsch eingeschätzt.");
+
+static const u8 DexDescription_Raichu_1[] = _(
+ "Wenn seine elektrische Ladung zu groß\n"
+ "wird, entlädt RAICHU seine Energie ins\n"
+ "Erdreich.");
+static const u8 DexDescription_Raichu_2[] = _(
+ "Neben dem Nest dieses POKéMON findet\n"
+ "man häufig versengtes Erdreich.");
+
+static const u8 DexDescription_Sandan_1[] = _(
+ "SANDANs Körper kann sehr viel Wasser\n"
+ "aufnehmen, so dass es auch in der\n"
+ "Wüste überleben kann.");
+static const u8 DexDescription_Sandan_2[] = _(
+ "Dieses POKéMON rollt sich zusammen, um\n"
+ "sich vor Feinden zu schützen.");
+
+static const u8 DexDescription_Sandamer_1[] = _(
+ "SANDAMERs Körper ist übersät\n"
+ "mit spitzen Stacheln, die eigentlich\n"
+ "Hauthärtungen darstellen.");
+static const u8 DexDescription_Sandamer_2[] = _(
+ "Einmal im Jahr fallen die alten Stacheln\n"
+ "aus und werden durch neue ersetzt.");
+
+static const u8 DexDescription_NidoranF_1[] = _(
+ "NIDORAN besitzt Widerhaken, die ein\n"
+ "starkes Gift ausstoßen. Sie sind ver-\n"
+ "mutlich zum Schutz dieses");
+static const u8 DexDescription_NidoranF_2[] = _(
+ "schmächtigen POKéMON entstanden.\n"
+ "Wenn es wütend wird, stößt es ein\n"
+ "gefährliches Gift aus seinem Horn aus.");
+
+static const u8 DexDescription_Nidorina_1[] = _(
+ "Wenn NIDORINA mit seinen Freunden oder\n"
+ "seiner Familie zusammen ist, zieht\n"
+ "es seine Widerhaken ein, damit es");
+static const u8 DexDescription_Nidorina_2[] = _(
+ "niemanden verletzt. Dieses\n"
+ "POKéMON wird nervös, wenn man es\n"
+ "von seinen Artgenossen trennt.");
+
+static const u8 DexDescription_Nidoqueen_1[] = _(
+ "NIDOQUEENs Körper ist mit sehr harten\n"
+ "Schuppen bedeckt. Es ist sehr ge-\n"
+ "schickt darin, Gegner mit starken");
+static const u8 DexDescription_Nidoqueen_2[] = _(
+ "Attacken wegzuschleudern.\n"
+ "Dieses POKéMON entwickelt am meisten\n"
+ "Kraft, wenn es seine Jungen verteidigt.");
+
+static const u8 DexDescription_NidoranM_1[] = _(
+ "Das männliche NIDORAN hat Muskeln ent-\n"
+ "wickelt, um seine Ohren bewegen zu kön-\n"
+ "nen. Dadurch kann es sie in jede beliebi-");
+static const u8 DexDescription_NidoranM_2[] = _(
+ "ge Richtung drehen. Diesem POKéMON \n"
+ "entgeht nicht einmal das leiseste Ge-\n"
+ "räusch.");
+
+static const u8 DexDescription_Nidorino_1[] = _(
+ "NIDORINO besitzt ein Horn, das sogar\n"
+ "härter ist als ein Diamant. Wenn es\n"
+ "einen Feind wahrnimmt, stellen sich");
+static const u8 DexDescription_Nidorino_2[] = _(
+ "all die Widerhaken auf seinem Rücken\n"
+ "auf und es schlägt den Gegner mit aller\n"
+ "Kraft in die Flucht.");
+
+static const u8 DexDescription_Nidoking_1[] = _(
+ "NIDOKINGs Schweif ist enorm stark. Mit\n"
+ "einer Bewegung kann es einen metalle-\n"
+ "nen Sendemast zum Einsturz bringen.");
+static const u8 DexDescription_Nidoking_2[] = _(
+ "Wenn es in Rage gerät, ist es nur schwer\n"
+ "aufzuhalten.");
+
+static const u8 DexDescription_Piepi_1[] = _(
+ "In Vollmondnächten sammeln sich einige\n"
+ "dieser POKéMON, um zu spielen. Wird es \n"
+ "Tag, kehrt PIEPI zu seinem Zufluchts-");
+static const u8 DexDescription_Piepi_2[] = _(
+ "ort in den Bergen zurück und\n"
+ "schläft eingekuschelt neben\n"
+ "seinen Artgenossen ein.");
+
+static const u8 DexDescription_Pixi_1[] = _(
+ "PIXI bewegt sich fort, indem es leicht\n"
+ "mit den Flügeln schlägt. Durch seinen\n"
+ "federnden Gang kann es sogar über");
+static const u8 DexDescription_Pixi_2[] = _(
+ "Wasser gehen. Bei Mondschein \n"
+ "unternimmt es Spaziergänge auf Seen.");
+
+static const u8 DexDescription_Vulpix_1[] = _(
+ "VULPIX kommt mit einem weißen Schweif\n"
+ "zur Welt. Dieser teilt sich sechsfach, \n"
+ "wenn das POKéMON von seinem TRAINER");
+static const u8 DexDescription_Vulpix_2[] = _(
+ "viel Zuneigung bekommt.\n"
+ "Seine sechs Schweife kräuseln sich\n"
+ "schließlich.");
+
+static const u8 DexDescription_Vulnona_1[] = _(
+ "VULNONA sendet einen unheimlichen\n"
+ "Lichtstrahl aus seinen hellroten Augen\n"
+ "aus, um totale Kontrolle über die");
+static const u8 DexDescription_Vulnona_2[] = _(
+ "Gedanken seines Gegners zu erlangen.\n"
+ "Man sagt, dieses POKéMON könne 1000\n"
+ "Jahre leben.");
+
+static const u8 DexDescription_Pummeluff_1[] = _(
+ "PUMMELUFFs Stimmbänder können die\n"
+ "Tonlage seiner Stimme beliebig vari-\n"
+ "ieren. Dieses POKéMON benutzt diese");
+static const u8 DexDescription_Pummeluff_2[] = _(
+ "Fähigkeit, um seine Gegner mit monoto-\n"
+ "nem Gesang in Tiefschlaf zu versetzen.");
+
+static const u8 DexDescription_Knuddeluff_1[] = _(
+ "KNUDDELUFF hat handtellergroße Augen,\n"
+ "die immer mit Tränenflüssigkeit bedeckt\n"
+ "sind. Gerät Staub in die Augen dieses");
+static const u8 DexDescription_Knuddeluff_2[] = _(
+ "POKéMON, so wird dieser sofort ausge-\n"
+ "spült.");
+
+static const u8 DexDescription_Zubat_1[] = _(
+ "Tagsüber bleibt ZUBAT an einem dunklen\n"
+ "Ort und bewegt sich kaum. Wenn es dem \n"
+ "Sonnenlicht längere Zeit ausgesetzt");
+static const u8 DexDescription_Zubat_2[] = _(
+ "wird, zieht es sich Verbrennungen an\n"
+ "seinem Körper zu.");
+
+static const u8 DexDescription_Golbat_1[] = _(
+ "GOLBAT hat es auf das Blut von Lebe-\n"
+ "wesen abgesehen. Im Schutze der Nacht\n"
+ "wird es besonders aktiv.");
+static const u8 DexDescription_Golbat_2[] = _(
+ "Dieses POKéMON fliegt durch die\n"
+ "Nacht, um nach frischem Blut zu\n"
+ "suchen.");
+
+static const u8 DexDescription_Myrapla_1[] = _(
+ "Am Tage vergräbt sich MYRAPLA im Boden,\n"
+ "um mit seinem ganzen Körper Nahrung\n"
+ "aufzunehmen.");
+static const u8 DexDescription_Myrapla_2[] = _(
+ "Je fruchtbarer der Boden ist, desto\n"
+ "glänzender werden seine Blätter.");
+
+static const u8 DexDescription_Duflor_1[] = _(
+ "DUFLOR produziert einen Ekel\n"
+ "erregenden Gestank aus dem Stempel\n"
+ "seiner Blume. Wenn es in Gefahr gerät,");
+static const u8 DexDescription_Duflor_2[] = _(
+ "wird der Gestank noch unerträglicher. \n"
+ "Wenn sich dieses POKéMON in Sicherheit\n"
+ "befindet, stößt es keinen Gestank aus.");
+
+static const u8 DexDescription_Giflor_1[] = _(
+ "GIFLORs giftige Pollen rufen böse\n"
+ "allergische Anfälle hervor. Deshalb ist\n"
+ "es ratsam, sich keiner schönen Blume im");
+static const u8 DexDescription_Giflor_2[] = _(
+ "Dschungel zu nähern, so anziehend sie\n"
+ "auch sein mag.");
+
+static const u8 DexDescription_Paras_1[] = _(
+ "Auf PARAS’ Rücken wachsen parasitäre\n"
+ "Pilze, die Tochukaso genannt werden.\n"
+ "Sie wachsen, indem sie dem");
+static const u8 DexDescription_Paras_2[] = _(
+ "KÄFER/PFLANZEN-PKMN Nährstoffe\n"
+ "entziehen. Sie sind sehr wertvoll als\n"
+ "lebensverlängernde Medizin.");
+
+static const u8 DexDescription_Parasek_1[] = _(
+ "PARASEK sucht große Bäume heim und\n"
+ "entzieht Nährstoffe aus Stamm und \n"
+ "Wurzeln.");
+static const u8 DexDescription_Parasek_2[] = _(
+ "Wenn ein befallener Baum stirbt, sucht\n"
+ "es sich zusammen mit seinen Artge-\n"
+ "nossen einen neuen Wirt.");
+
+static const u8 DexDescription_Bluzuk_1[] = _(
+ "BLUZUK hat einen Pelz aus dünnen\n"
+ "Borsten entwickelt, der dem Schutz\n"
+ "seines Körpers dient.");
+static const u8 DexDescription_Bluzuk_2[] = _(
+ "Es hat große Augen, denen auch winzig\n"
+ "kleine Beute nicht entgeht.");
+
+static const u8 DexDescription_Omot_1[] = _(
+ "OMOT ist ein nachtaktives POKéMON.\n"
+ "Kleine Insekten, die vom Licht in der\n"
+ "Dunkelheit angezogen Straßenlaternen");
+static const u8 DexDescription_Omot_2[] = _(
+ "umschwärmen, sind seine bevorzugte\n"
+ "Beute.");
+
+static const u8 DexDescription_Digda_1[] = _(
+ "DIGDA wird zumeist auf Farmen\n"
+ "gezüchtet. Denn wo auch immer dieses\n"
+ "POKéMON zu graben beginnt, hinterlässt");
+static const u8 DexDescription_Digda_2[] = _(
+ "es Erde, die für das Anpflanzen von\n"
+ "Feldfrüchten perfekt geeignet und für\n"
+ "den Anbau köstlichen Gemüses ideal ist.");
+
+static const u8 DexDescription_Digdri_1[] = _(
+ "DIGDRI sind Drillinge, die aus einem\n"
+ "Körper entstanden sind. Daher denken\n"
+ "alle Köpfe gleich.");
+static const u8 DexDescription_Digdri_2[] = _(
+ "Sie arbeiten so gut zusammen, dass sie \n"
+ "endlos graben können.");
+
+static const u8 DexDescription_Mauzi_1[] = _(
+ "MAUZI zieht seine scharfen Krallen ein,\n"
+ "um umherschleichen zu können, ohne\n"
+ "verräterische Spuren zu hinterlassen.");
+static const u8 DexDescription_Mauzi_2[] = _(
+ "Dieses POKéMON hat eine Vorliebe für\n"
+ "Münzen, die im Licht glitzern.");
+
+static const u8 DexDescription_Snobilikat_1[] = _(
+ "SNOBILIKAT hat sechs dicke Schnurr-\n"
+ "haare, wodurch es Furcht einflößend\n"
+ "wirkt. Durch diese nimmt es wahr, wenn");
+static const u8 DexDescription_Snobilikat_2[] = _(
+ "sich etwas in seiner Nähe bewegt. Es\n"
+ "wird sehr zutraulich, wenn man es an den\n"
+ "Schnurrhaaren berührt.");
+
+static const u8 DexDescription_Enton_1[] = _(
+ "ENTON verwendet eine geheimnisvolle\n"
+ "Kraft. Dabei erzeugt es Gehirnströme,\n"
+ "die man sonst nur von Schlafenden");
+static const u8 DexDescription_Enton_2[] = _(
+ "kennt. Diese Entdeckung führte zu \n"
+ "einer umstrittenen Diskussion unter\n"
+ "Wissenschaftlern.");
+
+static const u8 DexDescription_Entoron_1[] = _(
+ "Die schwimmhäutigen Flossen an seinen\n"
+ "Vorder- und Hinterbeinen und der \n"
+ "stromlinienförmige Körper machen");
+static const u8 DexDescription_Entoron_2[] = _(
+ "ENTORON unheimlich schnell. Dieses\n"
+ "POKéMON ist auf jeden Fall schneller als\n"
+ "die meisten Hochleistungsschwimmer.");
+
+static const u8 DexDescription_Menki_1[] = _(
+ "Wenn MENKI sich schüttelt und schwer\n"
+ "durch die Nase atmet, dann ist es \n"
+ "wütend. Da es blitzartig in Raserei");
+static const u8 DexDescription_Menki_2[] = _(
+ "gerät, ist es unmöglich seinem Zorn\n"
+ "zu entkommen.");
+
+static const u8 DexDescription_Rasaff_1[] = _(
+ "Wenn RASAFF wütend ist, wird seine Blut-\n"
+ "zirkulation gesteigert und seine Mus-\n"
+ "keln werden noch stärker.");
+static const u8 DexDescription_Rasaff_2[] = _(
+ "Allerdings mindert das auch die \n"
+ "Fähigkeit zum logischen Denken.");
+
+static const u8 DexDescription_Fukano_1[] = _(
+ "FUKANO hat einen ausgezeichneten Ge-\n"
+ "ruchssinn. Wenn dieses POKéMON ein-\n"
+ "mal einen Geruch wahrgenommen hat,");
+static const u8 DexDescription_Fukano_2[] = _(
+ "vergisst es ihn nicht mehr. Es benutzt\n"
+ "diese Fähigkeit dazu, die Gefühlslage\n"
+ "von Lebewesen auszuloten.");
+
+static const u8 DexDescription_Arkani_1[] = _(
+ "ARKANI ist sehr schnell. Es kann an\n"
+ "einem Tag fast 10.000 km zurücklegen.\n"
+ "Das Feuer, das im Innern dieses POKéMON");
+static const u8 DexDescription_Arkani_2[] = _(
+ "lodert, dient ihm als Energiequelle.");
+
+static const u8 DexDescription_Quapsel_1[] = _(
+ "QUAPSEL hat eine sehr dünne Haut.\n"
+ "Durch sie hindurch kann man sogar sein\n"
+ "spiralförmiges Inneres sehen.");
+static const u8 DexDescription_Quapsel_2[] = _(
+ "Obwohl seine Haut so dünn ist, ist sie\n"
+ "sehr elastisch. Selbst scharfe Reiß-\n"
+ "zähne können sie nicht durchdringen.");
+
+static const u8 DexDescription_Quaputzi_1[] = _(
+ "QUAPUTZIs Körper ist immer feucht und\n"
+ "glitschig. Dadurch kann es während\n"
+ "eines Kampfes leicht der Umklammerung");
+static const u8 DexDescription_Quaputzi_2[] = _(
+ "eines Gegners entkommen.");
+
+static const u8 DexDescription_Quappo_1[] = _(
+ "QUAPPO besitzt hochentwickelte, starke\n"
+ "Muskeln, die niemals ermüden, egal, wie\n"
+ "sehr es sie auch beansprucht.");
+static const u8 DexDescription_Quappo_2[] = _(
+ "Es ist so kräftig, dass es mühelos den\n"
+ "Pazifik durchschwimmen kann.");
+
+static const u8 DexDescription_Abra_1[] = _(
+ "ABRA schläft 18 Stunden am Tag.\n"
+ "Es nimmt die Gegenwart von Feinden\n"
+ "aber auch im Schlaf wahr.");
+static const u8 DexDescription_Abra_2[] = _(
+ "In einer solchen Situation bringt es\n"
+ "sich umgehend mit TELEPORT in\n"
+ "Sicherheit.");
+
+static const u8 DexDescription_Kadabra_1[] = _(
+ "KADABRA sendet Alphawellen aus, wenn es\n"
+ "Kopfschmerzen hat. Nur wer eine beson-\n"
+ "ders starke Psyche hat, kann");
+static const u8 DexDescription_Kadabra_2[] = _(
+ "dieses POKéMON unter seine Fittiche\n"
+ "nehmen.");
+
+static const u8 DexDescription_Simsala_1[] = _(
+ "SIMSALAs Gehirn hört nicht auf zu\n"
+ "wachsen, so dass sein Kopf zu schwer\n"
+ "für seine Nackenmuskulatur wird.");
+static const u8 DexDescription_Simsala_2[] = _(
+ "Dieses POKéMON hält seinen Kopf mit\n"
+ "psychokinetischer Energie aufrecht.");
+
+static const u8 DexDescription_Machollo_1[] = _(
+ "MACHOLLOs Muskeln sind etwas Beson-\n"
+ "deres. Sie schmerzen nie, egal, wie sehr\n"
+ "sie beansprucht werden.");
+static const u8 DexDescription_Machollo_2[] = _(
+ "Dieses POKéMON hat genug Kraft, um 100\n"
+ "Erwachsene umherzuwerfen.");
+
+static const u8 DexDescription_Maschock_1[] = _(
+ "MASCHOCKs starke Muskeln sind so hart\n"
+ "wie Stahl. Dieses POKéMON hat so viel\n"
+ "Kraft, dass es mit nur einem Finger");
+static const u8 DexDescription_Maschock_2[] = _(
+ "einen Sumo-Ringer in der Luft halten\n"
+ "kann.");
+
+static const u8 DexDescription_Machomei_1[] = _(
+ "MACHOMEI hat genug Kraft, um alles \n"
+ "Mögliche zu stemmen. Bei Tätigkeiten,\n"
+ "die Geschick und Sorgfalt erfordern,");
+static const u8 DexDescription_Machomei_2[] = _(
+ "machen es ihm seine Arme jedoch nicht\n"
+ "leicht. Dieses POKéMON neigt dazu,\n"
+ "zuerst zu handeln und dann zu denken.");
+
+static const u8 DexDescription_Knofensa_1[] = _(
+ "KNOFENSAs schlanker und elastischer\n"
+ "Körper ermöglicht es ihm, jedem\n"
+ "Angriff auszuweichen, so heftig dieser");
+static const u8 DexDescription_Knofensa_2[] = _(
+ "auch sein mag. Dieses POKéMON spuckt\n"
+ "eine ätzende Flüssigkeit aus, die sogar\n"
+ "Eisen zersetzen kann.");
+
+static const u8 DexDescription_Ultrigaria_1[] = _(
+ "ULTRIGARIA hat einen großen Haken\n"
+ "an seinem Hinterteil. Nachts hängt\n"
+ "sich dieses POKéMON zum Schlafen an");
+static const u8 DexDescription_Ultrigaria_2[] = _(
+ "einen Ast. Wenn es sich im Schlaf be-\n"
+ "wegt, kann es passieren, dass es auf\n"
+ "dem Boden wieder aufwacht.");
+
+static const u8 DexDescription_Sarzenia_1[] = _(
+ "Aus SARZENIAs Kopf ragt eine lange\n"
+ "Ranke hervor. Diese schwingt hin und \n"
+ "her, als ob sie etwas fangen");
+static const u8 DexDescription_Sarzenia_2[] = _(
+ "möchte. Wenn sich ahnungslose Beute \n"
+ "nähert, wird sie von diesem POKéMON\n"
+ "im Ganzen verschlungen.");
+
+static const u8 DexDescription_Tentacha_1[] = _(
+ "TENTACHAs Körper setzt sich zum größ-\n"
+ "ten Teil aus Wasser zusammen. Wenn es\n"
+ "das Meer verlässt, vertrocknet es.");
+static const u8 DexDescription_Tentacha_2[] = _(
+ "Wenn dieses POKéMON auszutrocknen be-\n"
+ "ginnt, sollte man es schnell wieder ins\n"
+ "Wasser zurückbringen.");
+
+static const u8 DexDescription_Tentoxa_1[] = _(
+ "TENTOXA hat große, rote Kugeln auf \n"
+ "seinem Kopf. Sie glühen auf, bevor sie \n"
+ "seine Gegner mit Ultraschall");
+static const u8 DexDescription_Tentoxa_2[] = _(
+ "erschüttern. Ein Ausbruch dieses \n"
+ "POKéMON erzeugt starke Wellen \n"
+ "in seiner Umgebung.");
+
+static const u8 DexDescription_Kleinstein_1[] = _(
+ "Je länger ein KLEINSTEIN lebt, desto\n"
+ "mehr wird seine raue Oberfläche ab-\n"
+ "geschliffen, so dass es runder wird.");
+static const u8 DexDescription_Kleinstein_2[] = _(
+ "Das Herz dieses POKéMON bleibt aber\n"
+ "für immer versteinert, hart und rau.");
+
+static const u8 DexDescription_Georok_1[] = _(
+ "GEOROK wächst, indem es sich von Stei-\n"
+ "nen ernährt. Am liebsten mag es Steine,\n"
+ "die mit Moos überzogen sind.");
+static const u8 DexDescription_Georok_2[] = _(
+ "Dieses POKéMON frisst sich täglich\n"
+ "durch eine riesige Menge von Steinen.");
+
+static const u8 DexDescription_Geowaz_1[] = _(
+ "GEOWAZ lebt hoch in den Bergen. Gibt es \n"
+ "ein starkes Erdbeben, rollt dieses\n"
+ "POKéMON so lange den Berg hinunter,");
+static const u8 DexDescription_Geowaz_2[] = _(
+ "bis es schließlich unten angekommen ist.");
+
+static const u8 DexDescription_Ponita_1[] = _(
+ "Nach seiner Geburt ist PONITA so\n"
+ "schwach, dass es kaum von alleine\n"
+ "aufstehen kann. Dieses POKéMON wird");
+static const u8 DexDescription_Ponita_2[] = _(
+ "dadurch schnell stärker, dass es sich\n"
+ "beim Versuch, mit seinen Eltern Schritt\n"
+ "zu halten, immer wieder aufrappeln muss.");
+
+static const u8 DexDescription_Gallopa_1[] = _(
+ "Man kann GALLOPA dabei beobachten, \n"
+ "wie es lässig über Felder und Wiesen\n"
+ "galoppiert. Wenn dieses POKéMON");
+static const u8 DexDescription_Gallopa_2[] = _(
+ "jedoch Ernst macht, erreicht es bis zu\n"
+ "240 km/h. Dann beginnt seine Mähne\n"
+ "zu lodern.");
+
+static const u8 DexDescription_Flegmon_1[] = _(
+ "FLEGMON benutzt seinen Schweif, um \n"
+ "Beute zu fangen, indem es ihn an einem \n"
+ "Flussufer ins Wasser taucht.");
+static const u8 DexDescription_Flegmon_2[] = _(
+ "Dieses POKéMON vergisst häufig, was es\n"
+ "gerade tun wollte, und verbringt ganze \n"
+ "Tage damit, am Ufer herumzutrödeln.");
+
+static const u8 DexDescription_Lahmus_1[] = _(
+ "An LAHMUS’ Rute hat sich ein MUSCHAS\n"
+ "festgebissen. Daher kann es ihn nicht\n"
+ "mehr zum Angeln benutzen");
+static const u8 DexDescription_Lahmus_2[] = _(
+ "und es ist dazu gezwungen, umherzu-\n"
+ "schwimmen und nach Beute Ausschau\n"
+ "zu halten.");
+
+static const u8 DexDescription_Magnetilo_1[] = _(
+ "MAGNETILO ernährt sich von Elektri-\n"
+ "zität aus Stromleitungen. Dieses\n"
+ "POKéMON hängt sich gern an");
+static const u8 DexDescription_Magnetilo_2[] = _(
+ "Sicherungskästen. Wenn es in deinem\n"
+ "Haus zu einem Stromausfall kommt,\n"
+ "solltest du die Sicherungen überprüfen.");
+
+static const u8 DexDescription_Magneton_1[] = _(
+ "MAGNETON erzeugt ein sehr starkes Mag-\n"
+ "netfeld, das Maschinen zerstören kann.\n"
+ "Deshalb hört man in großen Städten oft");
+static const u8 DexDescription_Magneton_2[] = _(
+ "Sirenen, die die Bürger vor Scharen\n"
+ "dieses POKéMON warnen sollen.");
+
+static const u8 DexDescription_Porenta_1[] = _(
+ "PORENTA trifft man immer mit einer\n"
+ "Lauchstange an. Es gibt gute und\n"
+ "schlechte Stangen.");
+static const u8 DexDescription_Porenta_2[] = _(
+ "Dieses POKéMON kämpft mit Hilfe seiner\n"
+ "Stange gegen seine Gegner.");
+
+static const u8 DexDescription_Dodu_1[] = _(
+ "DODU hat zwei Köpfe, die nie zur \n"
+ "selben Zeit, sondern abwechselnd\n"
+ "schlafen. Während ein Kopf schläft,");
+static const u8 DexDescription_Dodu_2[] = _(
+ "hält der andere Ausschau nach Feinden.");
+
+static const u8 DexDescription_Dodri_1[] = _(
+ "DODRIs drei Köpfe blicken in drei ver-\n"
+ "schiedene Richtungen. Es ist immer auf\n"
+ "der Hut.");
+static const u8 DexDescription_Dodri_2[] = _(
+ "Du solltest dich diesem POKéMON nicht\n"
+ "nähern, wenn es bereits misstrauisch \n"
+ "ist. Es könnte nach dir hacken.");
+
+static const u8 DexDescription_Jurob_1[] = _(
+ "JUROB jagt unter der eisigen Ober-\n"
+ "fläche des Eismeeres nach Beute. Zum\n"
+ "Luft holen schlägt es mit dem");
+static const u8 DexDescription_Jurob_2[] = _(
+ "vorstehenden Teil seines Kopfes ein \n"
+ "Loch ins Eis.");
+
+static const u8 DexDescription_Jugong_1[] = _(
+ "JUGONG liebt es, auf bitterkalten Eis-\n"
+ "schollen ein Nickerchen zu machen.\n"
+ "Ein Seemann, der einmal ein solches");
+static const u8 DexDescription_Jugong_2[] = _(
+ "POKéMON schlafend auf einem\n"
+ "Eisberg sah, hielt es irrtümlicherweise\n"
+ "für eine Meerjungfrau.");
+
+static const u8 DexDescription_Sleima_1[] = _(
+ "SLEIMAs glitschiger, gummiartiger\n"
+ "Körper passt durch jede noch so kleine\n"
+ "Öffnung. Dieses POKéMON steigt in die");
+static const u8 DexDescription_Sleima_2[] = _(
+ "Kanalisation hinab, um fauliges\n"
+ "Abwasser zu trinken.");
+
+static const u8 DexDescription_Sleimok_1[] = _(
+ "SLEIMOK scheidet eine widerlich\n"
+ "stinkende Substanz aus. Ein einziger\n"
+ "Tropfen seiner Körpersubstanz reicht");
+static const u8 DexDescription_Sleimok_2[] = _(
+ "aus, um ein Gewässer zu verseuchen.");
+
+static const u8 DexDescription_Muschas_1[] = _(
+ "Nachts benutzt dieses POKéMON seine\n"
+ "breite Zunge, um ein Loch in den \n"
+ "Meeresboden zu graben.");
+static const u8 DexDescription_Muschas_2[] = _(
+ "Darin schläft es. Dabei schließt es\n"
+ "seine Schale, aber die Zunge hängt\n"
+ "heraus.");
+
+static const u8 DexDescription_Austos_1[] = _(
+ "AUSTOS kann im Meerwasser schwimmen,\n"
+ "indem es Wasser schluckt und wieder\n"
+ "herausspritzt.");
+static const u8 DexDescription_Austos_2[] = _(
+ "Dieses POKéMON kann sich auch ver- \n"
+ "teidigen, indem es spitze Stacheln mit\n"
+ "Hilfe des Wasserdrucks verschießt.");
+
+static const u8 DexDescription_Nebulak_1[] = _(
+ "NEBULAK hat einen gasförmigen Körper.\n"
+ "Wenn es starkem Wind ausgesetzt wird,\n"
+ "kann es davongeweht werden.");
+static const u8 DexDescription_Nebulak_2[] = _(
+ "Scharen dieses POKéMON sammeln sich\n"
+ "unter Dachrinnen, um sich vor dem\n"
+ "gefährlichen Wind zu schützen.");
+
+static const u8 DexDescription_Alpollo_1[] = _(
+ "ALPOLLO ist ein gefährliches POKéMON.\n"
+ "Wenn es dich zu sich lockt, während es\n"
+ "durch die Dunkelheit schwebt, darfst");
+static const u8 DexDescription_Alpollo_2[] = _(
+ "du ihm keinesfalls zu nahe kommen.\n"
+ "Dieses POKéMON wird versuchen, an dir\n"
+ "zu lecken und dein Leben zu stehlen.");
+
+static const u8 DexDescription_Gengar_1[] = _(
+ "Nachts kann es passieren, dass dich\n"
+ "dein Schatten im Licht einer\n"
+ "Straßenlaterne plötzlich überholt.");
+static const u8 DexDescription_Gengar_2[] = _(
+ "Dann ist es ein GENGAR, das an dir\n"
+ "vorbeiläuft und sich als dein Schatten\n"
+ "ausgibt.");
+
+static const u8 DexDescription_Onix_1[] = _(
+ "ONIX hat einen Magneten in seinem\n"
+ "Gehirn. Er dient ihm als Kompass,\n"
+ "so dass es beim Graben von Tunneln");
+static const u8 DexDescription_Onix_2[] = _(
+ "nicht die Orientierung verliert. Wenn es\n"
+ "älter wird, wird sein Körper immer\n"
+ "runder und glatter.");
+
+static const u8 DexDescription_Traumato_1[] = _(
+ "Wenn dir im Schlaf die Nase juckt, ist\n"
+ "das ein sicheres Zeichen dafür, dass\n"
+ "eines dieser POKéMON auf deinem");
+static const u8 DexDescription_Traumato_2[] = _(
+ "Kissen sitzt, um deinen Traum durch\n"
+ "deine Nasenlöcher hindurch zu\n"
+ "verspeisen.");
+
+static const u8 DexDescription_Hypno_1[] = _(
+ "HYPNO hält ein Pendel in der Hand. Das\n"
+ "Schwingen und Glitzern des Pendels \n"
+ "versetzt seine Feinde in eine tiefe");
+static const u8 DexDescription_Hypno_2[] = _(
+ "Hypnose. Während dieses POKéMON auf \n"
+ "der Suche nach Beute ist, poliert es \n"
+ "sein Pendel.");
+
+static const u8 DexDescription_Krabby_1[] = _(
+ "KRABBY lebt an Stränden, in Löchern im \n"
+ "Sand. An Sandstränden, an denen es\n"
+ "wenig Nahrung findet, sieht man dieses");
+static const u8 DexDescription_Krabby_2[] = _(
+ "POKéMON mit Artgenossen um sein\n"
+ "Revier streiten.");
+
+static const u8 DexDescription_Kingler_1[] = _(
+ "KINGLER hat eine riesige Schere. Es\n"
+ "winkt damit, um mit anderen zu \n"
+ "kommunizieren.");
+static const u8 DexDescription_Kingler_2[] = _(
+ "Da seine Schere aber so schwer ist, wird\n"
+ "dieses POKéMON schnell müde.");
+
+static const u8 DexDescription_Voltobal_1[] = _(
+ "VOLTOBAL wurde zuerst bei einer Firma\n"
+ "beobachtet, die POKéBÄLLE herstellt.\n"
+ "Der Zusammenhang zwischen dieser");
+static const u8 DexDescription_Voltobal_2[] = _(
+ "Beobachtung und der Tatsache, dass\n"
+ "dieses POKéMON wie ein POKéBALL\n"
+ "aussieht, ist noch ungeklärt.");
+
+static const u8 DexDescription_Lektrobal_1[] = _(
+ "LEKTROBAL ernährt sich von\n"
+ "Elektrizität aus der Atmosphäre. An\n"
+ "Tagen, an denen es blitzt, explodiert");
+static const u8 DexDescription_Lektrobal_2[] = _(
+ "dieses POKéMON dauernd, da es zu viel\n"
+ "Elektrizität zu sich nimmt.");
+
+static const u8 DexDescription_Owei_1[] = _(
+ "Dieses POKéMON besteht aus sechs\n"
+ "Eiern, die ein engmaschiges Netz\n"
+ "bilden. Die sechs Eier ziehen sich");
+static const u8 DexDescription_Owei_2[] = _(
+ "gegenseitig an und drehen sich. Wenn\n"
+ "die Eier Risse bekommen, steht OWEI\n"
+ "kurz vor seiner Entwicklung.");
+
+static const u8 DexDescription_Kokowei_1[] = _(
+ "KOKOWEI stammt ursprünglich aus den\n"
+ "Tropen. Seine Köpfe wachsen stetig,\n"
+ "wenn es starkem Sonnenlicht");
+static const u8 DexDescription_Kokowei_2[] = _(
+ "ausgesetzt ist. Wenn seine Köpfe\n"
+ "abfallen, bilden sie zusammen ein OWEI.");
+
+static const u8 DexDescription_Tragosso_1[] = _(
+ "TRAGOSSO sehnt sich nach seiner\n"
+ "Mutter, die nicht mehr da ist. Wenn es\n"
+ "im Vollmond das Ebenbild seiner Mutter");
+static const u8 DexDescription_Tragosso_2[] = _(
+ "erblickt, muss es weinen. Die Flecken\n"
+ "auf dem Totenkopf, den es trägt,\n"
+ "stammen von vergossenen Tränen.");
+
+static const u8 DexDescription_Knogga_1[] = _(
+ "KNOGGA ist eine entwickelte Form von\n"
+ "TRAGOSSO, die den Verlust der Mutter\n"
+ "überwunden hat und stärker geworden");
+static const u8 DexDescription_Knogga_2[] = _(
+ "ist. Die temperamentvolle und\n"
+ "gestärkte Seele dieses POKéMON ist\n"
+ "nur schwer zu brechen.");
+
+static const u8 DexDescription_Kicklee_1[] = _(
+ "KICKLEE kann seine Beine ausfahren\n"
+ "und einziehen. Es verblüfft seine\n"
+ "Gegner mit brutalen Tritten.");
+static const u8 DexDescription_Kicklee_2[] = _(
+ "Nach einem Kampf massiert es seine\n"
+ "Beine und lockert die Muskeln, um der\n"
+ "Erschöpfung vorzubeugen.");
+
+static const u8 DexDescription_Nockchan_1[] = _(
+ "NOCKCHAN besitzt das Herz eines\n"
+ "Boxers, der sich auf eine\n"
+ "Weltmeisterschaft vorbereitet.");
+static const u8 DexDescription_Nockchan_2[] = _(
+ "Dieses POKéMON hat einen unbeugsamen\n"
+ "Willen und gibt niemals auf.");
+
+static const u8 DexDescription_Schlurp_1[] = _(
+ "Wenn SCHLURP etwas Neues entdeckt,\n"
+ "leckt es daran. Es merkt sich \n"
+ "Gegenstände anhand der Struktur und");
+static const u8 DexDescription_Schlurp_2[] = _(
+ "des Geschmacks.\n"
+ "Saure Sachen schrecken es eher ab.");
+
+static const u8 DexDescription_Smogon_1[] = _(
+ "Wenn SMOGON sich aufregt, lässt es\n"
+ "das giftige Gas in seinem Inneren\n"
+ "entweichen. Wenn es sich zu sehr");
+static const u8 DexDescription_Smogon_2[] = _(
+ "aufbläht, explodiert dieses POKéMON.");
+
+static const u8 DexDescription_Smogmog_1[] = _(
+ "SMOGMOG liebt die Gase verrottender,\n"
+ "fauler Küchenabfälle. Dieses POKéMON\n"
+ "sucht sich ein vernachlässigtes,");
+static const u8 DexDescription_Smogmog_2[] = _(
+ "schmutziges Gebäude und richtet sich\n"
+ "dort häuslich ein. Nachts, wenn die\n"
+ "Menschen schlafen, wühlt es im Müll.");
+
+static const u8 DexDescription_Rihorn_1[] = _(
+ "RIHORN läuft immer geradeaus und\n"
+ "zerstampft alles, was ihm in die Quere\n"
+ "kommt. Es macht ihm auch nichts aus,");
+static const u8 DexDescription_Rihorn_2[] = _(
+ "wenn es mit dem Kopf voran gegen einen\n"
+ "Stahlklotz rennt. Am nächsten Tag\n"
+ "allerdings könnte es Schmerzen haben.");
+
+static const u8 DexDescription_Rizeros_1[] = _(
+ "Mit seinem Horn kann RIZEROS selbst\n"
+ "Diamanten zerbrechen. Ein einziger\n"
+ "Hieb mit seinem Schweif kann ein Haus");
+static const u8 DexDescription_Rizeros_2[] = _(
+ "zum Einsturz bringen. Die Haut dieses\n"
+ "POKéMON ist so hart, dass nicht einmal\n"
+ "Kanonenkugeln Kratzer hinterlassen.");
+
+static const u8 DexDescription_Chaneira_1[] = _(
+ "CHANEIRA legt täglich ausgesprochen\n"
+ "nahrhafte Eier. Sie sind so köstlich,\n"
+ "dass sie sogar von Menschen verspeist");
+static const u8 DexDescription_Chaneira_2[] = _(
+ "werden, die gar keinen Appetit haben.");
+
+static const u8 DexDescription_Tangela_1[] = _(
+ "Wenn man TANGELAs Ranken berührt, \n"
+ "fallen diese sofort ab. Das tut ihm\n"
+ "aber nicht weh und es kann");
+static const u8 DexDescription_Tangela_2[] = _(
+ "sich schnell in Sicherheit bringen. \n"
+ "Verliert es Ranken, werden diese am\n"
+ "nächsten Tag durch neue ersetzt.");
+
+static const u8 DexDescription_Kangama_1[] = _(
+ "Wenn du auf ein spielendes KANGAMA\n"
+ "stößt, solltest du es nicht stören oder\n"
+ "versuchen, es einzufangen.");
+static const u8 DexDescription_Kangama_2[] = _(
+ "Die Mutter dieses Baby-POKéMON ist\n"
+ "bestimmt in Reichweite und könnte\n"
+ "sehr wütend auf dich werden.");
+
+static const u8 DexDescription_Seeper_1[] = _(
+ "SEEPER ernährt sich von kleinen\n"
+ "Insekten und dem Moos auf Steinen.\n"
+ "Bei unruhiger See verankert sich");
+static const u8 DexDescription_Seeper_2[] = _(
+ "dieses POKéMON mit seinem Schweif an\n"
+ "Steinen oder Korallen, damit es nicht\n"
+ "weggespült wird.");
+
+static const u8 DexDescription_Seemon_1[] = _(
+ "Sobald sich SEEMON um eine Koralle\n"
+ "gewickelt hat, schläft es. Von Zeit zu\n"
+ "Zeit werden Menschen durch die");
+static const u8 DexDescription_Seemon_2[] = _(
+ "Widerhaken dieses POKéMON verletzt, \n"
+ "wenn sie versuchen, Korallen zu ernten\n"
+ "und es dabei nicht bemerken.");
+
+static const u8 DexDescription_Goldini_1[] = _(
+ "GOLDINI ist ein wunderschönes POKéMON,\n"
+ "dessen Flossen sich elegant im Wasser\n"
+ "wiegen. Aber man muss auf dieses");
+static const u8 DexDescription_Goldini_2[] = _(
+ "POKéMON Acht geben. Es könnte einen\n"
+ "sonst heftig mit seinem Horn rammen.");
+
+static const u8 DexDescription_Golking_1[] = _(
+ "Im Herbst kann man männliche GOLKING\n"
+ "dabei beobachten, wie sie Balztänze in \n"
+ "Flussbetten aufführen, um die");
+static const u8 DexDescription_Golking_2[] = _(
+ "weiblichen Exemplare zu beeindrucken.\n"
+ "Während dieser Zeit ist die Farbe\n"
+ "dieser POKéMON am schönsten.");
+
+static const u8 DexDescription_Sterndu_1[] = _(
+ "In STERNDUs Körpermitte befindet sich\n"
+ "ein hellrot leuchtendes Organ - \n"
+ "sein Kern. Wenn du im Spätsommer");
+static const u8 DexDescription_Sterndu_2[] = _(
+ "an einen Strand gehst, sehen die\n"
+ "leuchtenden Kerne dieser POKéMON aus\n"
+ "wie Sterne.");
+
+static const u8 DexDescription_Starmie_1[] = _(
+ "STARMIEs Mittelteil, sein Kern, leuchtet\n"
+ "in sieben Farben. Aufgrund dieser\n"
+ "Eigenschaft wird es auch");
+static const u8 DexDescription_Starmie_2[] = _(
+ "“Juwel des Meeres” genannt.");
+
+static const u8 DexDescription_Pantimos_1[] = _(
+ "PANTIMOS ist ein Meister der Pantomime.\n"
+ "Seine Gesten und Bewegungen machen\n"
+ "den Zuschauer glauben, dass etwas");
+static const u8 DexDescription_Pantimos_2[] = _(
+ "Unsichtbares tatsächlich existiert.\n"
+ "Wenn ein Objekt für real gehalten wird,\n"
+ "beginnt es wirklich zu existieren.");
+
+static const u8 DexDescription_Sichlor_1[] = _(
+ "SICHLOR ist unheimlich schnell. Dadurch\n"
+ "werden die beiden Sensen an seinen\n"
+ "Unterarmen noch effektiver.");
+static const u8 DexDescription_Sichlor_2[] = _(
+ "Dieses POKéMON kann mit seinen Sensen\n"
+ "in Sekundenschnelle Baumstämme\n"
+ "zerteilen.");
+
+static const u8 DexDescription_Rossana_1[] = _(
+ "ROSSANA bewegt sich rhythmisch fort.\n"
+ "Es wiegt und schwingt seine Hüften, als\n"
+ "würde es tanzen. Seine Bewegungen");
+static const u8 DexDescription_Rossana_2[] = _(
+ "wirken so anziehend auf Menschen, dass\n"
+ "diese beginnen, mit den Hüften zu\n"
+ "schwingen, ohne darüber nachzudenken.");
+
+static const u8 DexDescription_Elektek_1[] = _(
+ "Bei Gewitter konkurrieren diese\n"
+ "POKéMON darum, wie viele\n"
+ "Spannungseinheiten sie erreichen,");
+static const u8 DexDescription_Elektek_2[] = _(
+ "wenn sie vom Blitz getroffen werden.\n"
+ "Einige Ortschaften benutzen ELEKTEK\n"
+ "an Stelle von Blitzableitern.");
+
+static const u8 DexDescription_Magmar_1[] = _(
+ "Im Kampf stößt MAGMAR glühend heiße\n"
+ "Flammen aus, um seinen Gegner\n"
+ "einzuschüchtern.");
+static const u8 DexDescription_Magmar_2[] = _(
+ "Diese Feuersalven erzeugen Hitzewellen,\n"
+ "die das Gras und die Bäume der Umgebung\n"
+ "in Brand setzen.");
+
+static const u8 DexDescription_Pinsir_1[] = _(
+ "PINSIR ist erstaunlich stark. Es kann\n"
+ "einen Feind, der doppelt so viel wiegt\n"
+ "wie es selbst, mit seinen Hörnern");
+static const u8 DexDescription_Pinsir_2[] = _(
+ "packen und hochheben. Bei niedrigen\n"
+ "Temperaturen werden die Bewegungen\n"
+ "dieses POKéMON schwerfällig.");
+
+static const u8 DexDescription_Tauros_1[] = _(
+ "Dieses POKéMON ist nur zufrieden, wenn\n"
+ "es kämpfen kann. Wenn TAUROS keinen\n"
+ "Gegner findet, sucht es sich starke");
+static const u8 DexDescription_Tauros_2[] = _(
+ "Bäume und lässt sich an ihnen aus,\n"
+ "um sich abzureagieren.");
+
+static const u8 DexDescription_Karpador_1[] = _(
+ "KARPADOR ist ein armseliges POKéMON,\n"
+ "das nur platschen kann. Sein\n"
+ "merkwürdiges Verhalten hat so manchen");
+static const u8 DexDescription_Karpador_2[] = _(
+ "Wissenschaftler zum Forschen\n"
+ "angeregt.");
+
+static const u8 DexDescription_Garados_1[] = _(
+ "Wenn sich KARPADOR zu GARADOS\n"
+ "entwickelt, durchlaufen seine\n"
+ "Gehirnzellen eine strukturelle");
+static const u8 DexDescription_Garados_2[] = _(
+ "Veränderung, was wohl der Grund für die\n"
+ "zügellose, gewalttätige Natur dieses\n"
+ "POKéMON ist.");
+
+static const u8 DexDescription_Lapras_1[] = _(
+ "Die Menschen sind dafür verantwortlich,\n"
+ "dass LAPRAS fast ausgestorben wäre.\n"
+ "Abends singt es traurige Klagelieder,");
+static const u8 DexDescription_Lapras_2[] = _(
+ "da nur noch wenige seiner Artgenossen\n"
+ "übrig sind.");
+
+static const u8 DexDescription_Ditto_1[] = _(
+ "DITTO verändert seine Zellstruktur, um\n"
+ "sich in eine andere Form zu verwandeln.\n"
+ "Wenn es sich dabei jedoch auf sein");
+static const u8 DexDescription_Ditto_2[] = _(
+ "Gedächtnis verlässt, unterlaufen \n"
+ "diesem POKéMON schon mal Fehler.");
+
+static const u8 DexDescription_Evoli_1[] = _(
+ "EVOLIs genetisches Erbmaterial ist so\n"
+ "instabil, dass die Umgebung plötzliche\n"
+ "Mutationen auslösen kann.");
+static const u8 DexDescription_Evoli_2[] = _(
+ "Die Wirkung verschiedener \n"
+ "STEINE führt zur Entwicklung dieses \n"
+ "POKéMON.");
+
+static const u8 DexDescription_Aquana_1[] = _(
+ "AQUANA hat eine spontane Mutation\n"
+ "durchgemacht und ihm sind Flossen und \n"
+ "Kiemen gewachsen. Dadurch kann es");
+static const u8 DexDescription_Aquana_2[] = _(
+ "unter Wasser leben.\n"
+ "Dieses POKéMON kann Wasser nach\n"
+ "Belieben manipulieren.");
+
+static const u8 DexDescription_Blitza_1[] = _(
+ "BLITZAs Zellen erzeugen schwache\n"
+ "Elektrizität. Diese wird aber durch die\n"
+ "statische Aufladung seines Fells");
+static const u8 DexDescription_Blitza_2[] = _(
+ "verstärkt, so dass es Blitzschläge\n"
+ "erzeugen kann. Sein Fell besteht aus \n"
+ "elektrisch geladenen Nadeln.");
+
+static const u8 DexDescription_Flamara_1[] = _(
+ "FLAMARAs flauschiges Fell dient einem\n"
+ "besonderen Zweck. Es gibt Hitze an die\n"
+ "Luft ab, damit sein Körper nicht");
+static const u8 DexDescription_Flamara_2[] = _(
+ "zu heiß wird. Die Körpertemperatur \n"
+ "dieses POKéMON kann bis auf 900 Grad\n"
+ "ansteigen.");
+
+static const u8 DexDescription_Porygon_1[] = _(
+ "PORYGON ist in der Lage, sich in Daten\n"
+ "zurückzuverwandeln und in den\n"
+ "Cyberspace zu gelangen.");
+static const u8 DexDescription_Porygon_2[] = _(
+ "Dieses POKéMON ist kopiergeschützt, so\n"
+ "dass es durch Kopieren nicht\n"
+ "vervielfältigt werden kann.");
+
+static const u8 DexDescription_Amonitas_1[] = _(
+ "AMONITAS ist ein POKéMON, das seit\n"
+ "langer Zeit ausgestorben war, aber\n"
+ "von den Menschen aus Fossilien");
+static const u8 DexDescription_Amonitas_2[] = _(
+ "reproduziert wurde. Wenn es von einem\n"
+ "Feind angegriffen wird, zieht es sich in\n"
+ "sein hartes Gehäuse zurück.");
+
+static const u8 DexDescription_Amoroso_1[] = _(
+ "AMOROSO benutzt seine Tentakel, um\n"
+ "Beute einzufangen. Man nimmt an,\n"
+ "dass es ausgestorben ist, weil seine");
+static const u8 DexDescription_Amoroso_2[] = _(
+ "Schale zu groß und zu schwer geworden\n"
+ "war, so dass seine Bewegungen immer\n"
+ "langsamer und schwerfälliger wurden.");
+
+static const u8 DexDescription_Kabuto_1[] = _(
+ "KABUTO ist ein POKéMON, das aus einem\n"
+ "Fossil reproduziert wurde. Höchst\n"
+ "selten wurden lebende Exemplare dieser");
+static const u8 DexDescription_Kabuto_2[] = _(
+ "Art entdeckt.\n"
+ "Dieses POKéMON hat sich seit 300 Mio.\n"
+ "Jahren überhaupt nicht verändert.");
+
+static const u8 DexDescription_Kabutops_1[] = _(
+ "In der Antike jagte KABUTOPS unter\n"
+ "Wasser nach Beute. Es hat sich von\n"
+ "einem Meeresbewohner zu einem Land-");
+static const u8 DexDescription_Kabutops_2[] = _(
+ "bewohner entwickelt, was man an den\n"
+ "Veränderungen seiner Kiemen und\n"
+ "Beine sehen kann.");
+
+static const u8 DexDescription_Aerodactyl_1[] = _(
+ "AERODACTYL ist ein POKéMON aus dem\n"
+ "Zeitalter der Dinosaurier. Es wurde aus\n"
+ "genetischem Material reproduziert, das");
+static const u8 DexDescription_Aerodactyl_2[] = _(
+ "aus Bernstein gewonnen wurde.\n"
+ "Man geht davon aus, dass es in der\n"
+ "Antike der König der Lüfte war.");
+
+static const u8 DexDescription_Relaxo_1[] = _(
+ "Der typische Tagesablauf von RELAXO\n"
+ "besteht lediglich aus Essen und\n"
+ "Schlafen. Es ist so zutraulich, dass");
+static const u8 DexDescription_Relaxo_2[] = _(
+ "Kinder seinen dicken Bauch als Platz\n"
+ "zum Spielen nutzen.");
+
+static const u8 DexDescription_Arktos_1[] = _(
+ "ARKTOS ist ein sagenumwobenes\n"
+ "Vogel-POKéMON, das Eis manipulieren\n"
+ "kann. Das Schlagen seiner Flügel");
+static const u8 DexDescription_Arktos_2[] = _(
+ "bringt die Luft zum Gefrieren. Es wird\n"
+ "behauptet, dass es zu schneien\n"
+ "beginnt, wenn dieses POKéMON fliegt.");
+
+static const u8 DexDescription_Zapdos_1[] = _(
+ "ZAPDOS ist ein legendäres\n"
+ "Vogel-POKéMON, das die Fähigkeit\n"
+ "besitzt, Elektrizität zu manipulieren.");
+static const u8 DexDescription_Zapdos_2[] = _(
+ "Es lebt in Gewitterwolken.\n"
+ "Dieses POKéMON nimmt Energie auf,\n"
+ "wenn es vom Blitz getroffen wird.");
+
+static const u8 DexDescription_Lavados_1[] = _(
+ "LAVADOS ist ein legendäres\n"
+ "Vogel-POKéMON, das Feuer manipulieren\n"
+ "kann. Wenn es verletzt wird, taucht es");
+static const u8 DexDescription_Lavados_2[] = _(
+ "seinen Körper in das Magma eines\n"
+ "Vulkans, um sich zu verbrennen\n"
+ "und selbst zu heilen.");
+
+static const u8 DexDescription_Dratini_1[] = _(
+ "DRATINI häutet sich ständig und\n"
+ "entledigt sich so seiner Haut, da die\n"
+ "Lebensenergie in seinem Körper");
+static const u8 DexDescription_Dratini_2[] = _(
+ "stetig und unkontrollierbar ansteigt.");
+
+static const u8 DexDescription_Dragonir_1[] = _(
+ "DRAGONIR speichert eine enorme Menge\n"
+ "an Energie in seinem Körper. Es kann die\n"
+ "Witterung in seiner Umgebung ändern,");
+static const u8 DexDescription_Dragonir_2[] = _(
+ "indem es Energie aus den Kristallen an\n"
+ "seinem Nacken und an seinem Schweif\n"
+ "entlädt.");
+
+static const u8 DexDescription_Dragoran_1[] = _(
+ "DRAGORAN kann die Welt innerhalb\n"
+ "von 16 Stunden umkreisen.\n"
+ "Es ist ein gutherziges POKéMON, das");
+static const u8 DexDescription_Dragoran_2[] = _(
+ "vermisste und sinkende Schiffe bei\n"
+ "Unwetter sicher an Land zurückbringt.");
+
+static const u8 DexDescription_Mewtu_1[] = _(
+ "MEWTU ist ein POKéMON, das durch\n"
+ "Genmanipulation entstanden ist. Die\n"
+ "Menschen haben es zwar mit ihrem");
+static const u8 DexDescription_Mewtu_2[] = _(
+ "wissenschaftlichen Sachverstand\n"
+ "erzeugt, aber nicht mit einem\n"
+ "mitfühlenden Herzen ausgestattet.");
+
+static const u8 DexDescription_Mew_1[] = _(
+ "MEW soll die genetische\n"
+ "Zusammensetzung aller POKéMON\n"
+ "besitzen. Es kann sich unsichtbar");
+static const u8 DexDescription_Mew_2[] = _(
+ "machen, so dass es sich auch Menschen\n"
+ "nähern kann, ohne bemerkt zu werden.");
+
+static const u8 DexDescription_Endivie_1[] = _(
+ "Im Kampf wedelt ENDIVIE mit seinem\n"
+ "Blatt, um den Feind fern zu halten. Von\n"
+ "dem Blatt geht auch ein süßlicher Duft");
+static const u8 DexDescription_Endivie_2[] = _(
+ "aus, der die kämpfenden POKéMON\n"
+ "beruhigt und eine gemütliche,\n"
+ "freundliche Atmosphäre schafft.");
+
+static const u8 DexDescription_Lorblatt_1[] = _(
+ "LORBLATTs Nacken ist mit\n"
+ "zusammengerollten Blättern behangen.\n"
+ "In jedem Blatt befindet sich ein kleiner");
+static const u8 DexDescription_Lorblatt_2[] = _(
+ "Trieb eines Baumes.\n"
+ "Der Duft dieses Triebes bringt\n"
+ "Menschen auf Trab.");
+
+static const u8 DexDescription_Meganie_1[] = _(
+ "Der Duft von MEGANIEs Blume besänftigt\n"
+ "Gemüter. Im Kampf gibt dieses POKéMON\n"
+ "mehr von seinem beruhigenden");
+static const u8 DexDescription_Meganie_2[] = _(
+ "Duftstoff ab, um den Kampfgeist des\n"
+ "Gegners zu schwächen.");
+
+static const u8 DexDescription_Feurigel_1[] = _(
+ "FEURIGEL lässt Flammen aus seinem\n"
+ "Rücken lodern, wenn es sich schützen\n"
+ "muss. Die Flammen sind sehr verzehrend,");
+static const u8 DexDescription_Feurigel_2[] = _(
+ "wenn dieses POKéMON wütend ist. Ist es\n"
+ "aber müde, flackern die Flammen nur\n"
+ "unregelmäßig und schwach.");
+
+static const u8 DexDescription_Igelavar_1[] = _(
+ "IGELAVAR hält seine Gegner mit Flammen\n"
+ "und Böen heißer Luft auf Distanz.\n"
+ "Dieses POKéMON nutzt seine");
+static const u8 DexDescription_Igelavar_2[] = _(
+ "außergewöhnliche Gewandtheit dazu,\n"
+ "Angriffen auszuweichen und seinen\n"
+ "Gegner gleichzeitig zu versengen.");
+
+static const u8 DexDescription_Tornupto_1[] = _(
+ "TORNUPTO versteckt sich hinter einem\n"
+ "flimmernden Hitzeschild, den es mit\n"
+ "Hilfe seiner heißen Flammen erzeugt.");
+static const u8 DexDescription_Tornupto_2[] = _(
+ "Dieses POKéMON erzeugt Explosionen,\n"
+ "die alles in Schutt und Asche\n"
+ "legen.");
+
+static const u8 DexDescription_Karnimani_1[] = _(
+ "KARNIMANI ist zwar sehr klein, aber\n"
+ "seine Kiefer sind sehr stark. Wenn\n"
+ "die POKéMON denken, dass es nur");
+static const u8 DexDescription_Karnimani_2[] = _(
+ "spielerisch an ihnen knabbert, sollten\n"
+ "sie vorsichtig sein, denn sein Biss \n"
+ "kann zu schweren Verletzungen führen.");
+
+static const u8 DexDescription_Tyracroc_1[] = _(
+ "Wenn TYRACROC einen Feind mit seinen\n"
+ "Kiefern eingeklemmt hat, lässt es ihn\n"
+ "nicht mehr los. Da seine Zahnspitzen");
+static const u8 DexDescription_Tyracroc_2[] = _(
+ "wie Angelhaken gebogen sind, kann man\n"
+ "sie nicht mehr entfernen, wenn sie\n"
+ "sich verfangen haben.");
+
+static const u8 DexDescription_Impergator_1[] = _(
+ "IMPERGATOR schüchtert seine Feinde\n"
+ "dadurch ein, dass es sein riesiges Maul\n"
+ "aufreißt. Im Kampf erschüttert es den");
+static const u8 DexDescription_Impergator_2[] = _(
+ "Boden mit seinen kräftigen Hinterbei-\n"
+ "nen, wenn es mit unglaublicher Geschwin-\n"
+ "digkeit auf seinen Gegner losrennt.");
+
+static const u8 DexDescription_Wiesor_1[] = _(
+ "Wenn WIESOR schläft, hält immer jemand\n"
+ "Wache. Beim ersten Anflug von Gefahr\n"
+ "weckt die Wache die anderen auf.");
+static const u8 DexDescription_Wiesor_2[] = _(
+ "Wenn dieses POKéMON von seinen\n"
+ "Artgenossen getrennt wird, kann es\n"
+ "vor Angst nicht mehr schlafen.");
+
+static const u8 DexDescription_Wiesenior_1[] = _(
+ "WIESENIOR ist sehr schlank. Wenn es\n"
+ "angegriffen wird, kann es sich durch\n"
+ "enge Zwischenräume schlängeln und");
+static const u8 DexDescription_Wiesenior_2[] = _(
+ "entkommen. Trotz seiner kurzen\n"
+ "Gliedmaßen ist dieses POKéMON sehr\n"
+ "wendig und flink.");
+
+static const u8 DexDescription_Hoothoot_1[] = _(
+ "HOOTHOOT besitzt ein inneres Organ, das\n"
+ "die Erdumdrehung wahrnimmt. Dieses\n"
+ "besondere Organ ermöglicht es diesem");
+static const u8 DexDescription_Hoothoot_2[] = _(
+ "POKéMON, jeden Tag zur selben Zeit zu\n"
+ "schreien.");
+
+static const u8 DexDescription_Noctuh_1[] = _(
+ "Dank seines hervorragenden\n"
+ "Sehvermögens, mit dem es auch bei\n"
+ "geringer Beleuchtung sehen kann, und");
+static const u8 DexDescription_Noctuh_2[] = _(
+ "dank seiner geschmeidigen Flügel,\n"
+ "mit denen es geräuschlos fliegt,\n"
+ "entgeht NOCTUH keine Beute.");
+
+static const u8 DexDescription_Ledyba_1[] = _(
+ "LEDYBA sondert eine duftende\n"
+ "Flüssigkeit ab. Darüber kommuniziert\n"
+ "es mit anderen. Dieses POKéMON");
+static const u8 DexDescription_Ledyba_2[] = _(
+ "übermittelt seine Gefühle, indem es die\n"
+ "Duftnote des Sekrets verändert.");
+
+static const u8 DexDescription_Ledian_1[] = _(
+ "In Ländern mit frischer Luft und\n"
+ "Sternen am Himmel leben unzählig viele\n"
+ "LEDIAN.");
+static const u8 DexDescription_Ledian_2[] = _(
+ "Dafür gibt es einen guten Grund:\n"
+ "Dieses POKéMON nutzt das Licht der\n"
+ "Sterne als Energie.");
+
+static const u8 DexDescription_Webarak_1[] = _(
+ "Das von WEBARAK gesponnene Netz ist\n"
+ "sein zweites Nervensystem. Dieses\n"
+ "POKéMON kann anhand der feinen");
+static const u8 DexDescription_Webarak_2[] = _(
+ "Vibrationen der Netzfäden bestimmen,\n"
+ "welche Art Beute sich darauf befindet.");
+
+static const u8 DexDescription_Ariados_1[] = _(
+ "ARIADOS hat kleine hakenförmige Krallen\n"
+ "an seinen Füßen. Damit kann es an\n"
+ "Decken und Wänden entlang flitzen.");
+static const u8 DexDescription_Ariados_2[] = _(
+ "Dieses POKéMON erdrückt seine Gegner\n"
+ "mit starkem, dünnem Seidenfaden.");
+
+static const u8 DexDescription_Iksbat_1[] = _(
+ "Wenn IKSBAT fliegt, indem es nur ein \n"
+ "Paar Flügel, entweder an seinen Vorder-\n"
+ "oder Hinterbeinen bewegt, ist dies ein");
+static const u8 DexDescription_Iksbat_2[] = _(
+ "Anzeichen dafür, dass dieses POKéMON \n"
+ "bereits eine lange Strecke hinter sich\n"
+ "hat. Dann wechselt es die Flügel häufig.");
+
+static const u8 DexDescription_Lampi_1[] = _(
+ "LAMPI gibt positive und negative\n"
+ "elektrische Ladungen durch seine\n"
+ "Antennen ab, um seine Beute zu lähmen.");
+static const u8 DexDescription_Lampi_2[] = _(
+ "Dieses POKéMON lässt seine Lichter\n"
+ "aufflackern und tauscht Signale mit\n"
+ "seinen Artgenossen aus.");
+
+static const u8 DexDescription_Lanturn_1[] = _(
+ "LANTURN wird auch “Tiefseestern”\n"
+ "genannt, da es leuchtende Antennen\n"
+ "besitzt. Dieses POKéMON erzeugt Licht,");
+static const u8 DexDescription_Lanturn_2[] = _(
+ "indem es in den Antennen eine chemische\n"
+ "Reaktion zwischen Bakterien und seinen\n"
+ "Körperflüssigkeiten erzeugt.");
+
+static const u8 DexDescription_Pichu_1[] = _(
+ "An Gewittertagen oder Tagen, an denen\n"
+ "die Luft sehr trocken ist, kann sich\n"
+ "PICHU leichter mit Elektrizität");
+static const u8 DexDescription_Pichu_2[] = _(
+ "aufladen. Dann kann man das Knistern\n"
+ "statischer Aufladung hören.");
+
+static const u8 DexDescription_Pii_1[] = _(
+ "In Nächten mit vielen Sternschnuppen,\n"
+ "kann man PII im Kreis tanzen sehen. Es\n"
+ "tanzt die ganze Nacht hindurch und");
+static const u8 DexDescription_Pii_2[] = _(
+ "hört erst bei Sonnenaufgang auf, um\n"
+ "seinen Durst mit Morgentau zu stillen.");
+
+static const u8 DexDescription_Fluffeluff_1[] = _(
+ "FLUFFELUFFs Stimmbänder sind noch\n"
+ "nicht voll entwickelt. Wenn es zu viel\n"
+ "singt, schmerzt ihm die Kehle.");
+static const u8 DexDescription_Fluffeluff_2[] = _(
+ "Dieses POKéMON gurgelt mit Süßwasser\n"
+ "aus einem sauberen Fluss.");
+
+static const u8 DexDescription_Togepi_1[] = _(
+ "TOGEPI nutzt die positiven Emotionen,\n"
+ "wie Freude und Mitgefühl, von Menschen\n"
+ "und POKéMON als Energie.");
+static const u8 DexDescription_Togepi_2[] = _(
+ "Dieses POKéMON speichert Glücksgefühle\n"
+ "in seiner Schale und teilt sie mit\n"
+ "anderen.");
+
+static const u8 DexDescription_Togetic_1[] = _(
+ "TOGETIC ist ein POKéMON, das Glück\n"
+ "bringt. Wenn es jemanden trifft, der\n"
+ "reinen Herzens ist, zeigt es sich und");
+static const u8 DexDescription_Togetic_2[] = _(
+ "teilt sein Glück mit dieser Person.");
+
+static const u8 DexDescription_Natu_1[] = _(
+ "NATU kann nicht fliegen, da seine Flügel\n"
+ "noch nicht ausgewachsen sind. Wenn du\n"
+ "diesem POKéMON in die Augen schaust,");
+static const u8 DexDescription_Natu_2[] = _(
+ "starrt es dich konzentriert an. Wenn du\n"
+ "dich aber bewegst, hüpft es weg, um sich\n"
+ "in Sicherheit zu bringen.");
+
+static const u8 DexDescription_Xatu_1[] = _(
+ "XATU bleibt den ganzen Tag an ein und\n"
+ "demselben Ort wie angewurzelt stehen. \n"
+ "Die Menschen glauben, dass es dies aus");
+static const u8 DexDescription_Xatu_2[] = _(
+ "Angst vor den Dingen tut, die es für die\n"
+ "Zukunft vorausgesehen hat.");
+
+static const u8 DexDescription_Voltilamm_1[] = _(
+ "VOLTILAMMs flauschiges, wollenes Fell\n"
+ "erzeugt Reibung und statische\n"
+ "Aufladung. Je höher die elektrische");
+static const u8 DexDescription_Voltilamm_2[] = _(
+ "Ladung wird, desto heller leuchtet die\n"
+ "Glühbirne an seinem Schweif.");
+
+static const u8 DexDescription_Waaty_1[] = _(
+ "Die Qualität von WAATYs Wolle verändert\n"
+ "sich, so dass es mit nur wenig Wolle eine\n"
+ "große statische Aufladung erzeugen");
+static const u8 DexDescription_Waaty_2[] = _(
+ "kann. Die kahlen Stellen in seinem Fell\n"
+ "sind gegen Elektrizität abgeschirmt.");
+
+static const u8 DexDescription_Ampharos_1[] = _(
+ "AMPHAROS strahlt so viel Licht aus,\n"
+ "dass es sogar aus dem Weltraum noch \n"
+ "gesehen werden kann. In der Antike");
+static const u8 DexDescription_Ampharos_2[] = _(
+ "benutzten die Menschen das Licht\n"
+ "dieses POKéMON dazu, Signale über\n"
+ "weite Entfernungen auszutauschen.");
+
+static const u8 DexDescription_Blubella_1[] = _(
+ "Wenn BLUBELLA starkem Sonnenlicht\n"
+ "ausgesetzt ist, beginnen sich die Blät-\n"
+ "ter an seinem Körper zu drehen.");
+static const u8 DexDescription_Blubella_2[] = _(
+ "Der Tanz dieses POKéMON ist in\n"
+ "südlichen Ländern sehr bekannt.");
+
+static const u8 DexDescription_Marill_1[] = _(
+ "MARILLs Schweif ist mit Öl gefüllt und\n"
+ "dient ihm als eine Art Rettungsring.\n"
+ "Wenn nur sein Schweif an der");
+static const u8 DexDescription_Marill_2[] = _(
+ "Wasseroberfläche zu sehen ist, taucht\n"
+ "dieses POKéMON gerade, um sich von\n"
+ "Wasserpflanzen zu ernähren.");
+
+static const u8 DexDescription_Azumarill_1[] = _(
+ "AZUMARILLs lange Ohren dienen ihm\n"
+ "als unentbehrliche Sensoren. Wenn es\n"
+ "sein Gehör fokussiert, kann dieses");
+static const u8 DexDescription_Azumarill_2[] = _(
+ "POKéMON auch in reißenden Flüssen\n"
+ "identifizieren, welche Art von Beute\n"
+ "sich in seiner Nähe befindet.");
+
+static const u8 DexDescription_Mogelbaum_1[] = _(
+ "MOGELBAUM tarnt sich als Baum, um\n"
+ "Angriffen von Feinden aus dem Weg\n"
+ "zu gehen. Da seine Vorderbeine aber");
+static const u8 DexDescription_Mogelbaum_2[] = _(
+ "das ganze Jahr über grün bleiben, fällt\n"
+ "seine Tarnung im Winter leicht auf.");
+
+static const u8 DexDescription_Quaxo_1[] = _(
+ "QUAXO hat gelocktes Haar, das ihm den\n"
+ "Status eines Königs bescheinigt. Je\n"
+ "länger und lockiger sein Haar ist, desto");
+static const u8 DexDescription_Quaxo_2[] = _(
+ "mehr Respekt erntet dieses POKéMON\n"
+ "von seinen Artgenossen.");
+
+static const u8 DexDescription_Hoppspross_1[] = _(
+ "HOPPSPROSS lässt sich vom Wind\n"
+ "treiben. Wenn es bemerkt, dass ein\n"
+ "Sturm aufkommt, verbindet es seine");
+static const u8 DexDescription_Hoppspross_2[] = _(
+ "Blätter mit anderen HOPPSPROSS,\n"
+ "damit es nicht davongeweht wird.");
+
+static const u8 DexDescription_Hubelupf_1[] = _(
+ "HUBELUPFs Blume beginnt zu blühen, wenn\n"
+ "die Temperatur über 18 Grad steigt. Wie\n"
+ "weit sich die Blüte öffnet, hängt von");
+static const u8 DexDescription_Hubelupf_2[] = _(
+ "der Höhe der Temperatur ab. Daher wird\n"
+ "dieses POKéMON manchmal als\n"
+ "Thermometer eingesetzt.");
+
+static const u8 DexDescription_Papungha_1[] = _(
+ "PAPUNGHA nutzt den Südwind, um das\n"
+ "Meer zu überqueren und in ferne\n"
+ "Länder zu fliegen. Dieses POKéMON");
+static const u8 DexDescription_Papungha_2[] = _(
+ "sinkt zu Boden, wenn es während seines\n"
+ "Fluges auf kalte Luftschichten stößt.");
+
+static const u8 DexDescription_Griffel_1[] = _(
+ "An GRIFFELs Schweif befindet sich ein\n"
+ "handähnliches Anhängsel, mit dem es\n"
+ "geschickt zu Werke gehen kann.");
+static const u8 DexDescription_Griffel_2[] = _(
+ "Da dieses POKéMON sehr häufig seinen\n"
+ "Schweif einsetzt, wirken seine Hände\n"
+ "eher plump.");
+
+static const u8 DexDescription_Sonnkern_1[] = _(
+ "SONNKERN versucht, sich so wenig wie\n"
+ "möglich zu bewegen, um alle\n"
+ "gespeicherten Nährstoffe für seine");
+static const u8 DexDescription_Sonnkern_2[] = _(
+ "Entwicklung aufzusparen. Außer\n"
+ "Morgentau nimmt es nichts weiter zu\n"
+ "sich.");
+
+static const u8 DexDescription_Sonnflora_1[] = _(
+ "SONNFLORA verwandelt Solarenergie in\n"
+ "Nährstoffe. Tagsüber, wenn es warm ist,\n"
+ "ist es sehr aktiv.");
+static const u8 DexDescription_Sonnflora_2[] = _(
+ "Wenn aber die Sonne untergegangen ist,\n"
+ "hört es auf sich zu bewegen.");
+
+static const u8 DexDescription_Yanma_1[] = _(
+ "YANMA hat einen Blickwinkel von 360\n"
+ "Grad, ohne die Augen bewegen zu müssen.\n"
+ "Es ist ein großartiger Flieger und geübt");
+static const u8 DexDescription_Yanma_2[] = _(
+ "darin, plötzlich anzuhalten oder\n"
+ "Wendemanöver vorzunehmen. So kann es\n"
+ "sich blitzschnell auf Beute stürzen.");
+
+static const u8 DexDescription_Felino_1[] = _(
+ "FELINO lebt eigentlich im Wasser.\n"
+ "Manchmal kommt es jedoch an Land, um \n"
+ "nach Nahrung zu suchen.");
+static const u8 DexDescription_Felino_2[] = _(
+ "An Land bedeckt es seinen Körper mit\n"
+ "einem schleimigen Giftfilm.");
+
+static const u8 DexDescription_Morlord_1[] = _(
+ "MORLORD jagt seine Nahrung, indem es im\n"
+ "Wasser sein Maul weit aufmacht und\n"
+ "auf unvorsichtige Beute wartet.");
+static const u8 DexDescription_Morlord_2[] = _(
+ "Da sich dieses POKéMON nicht bewegt,\n"
+ "wird es auch nicht besonders hungrig.");
+
+static const u8 DexDescription_Psiana_1[] = _(
+ "PSIANA ist jedem TRAINER treu, dem es\n"
+ "zugetan ist. Dieses POKéMON hat die\n"
+ "Fähigkeit der Prophezeiung entwickelt,");
+static const u8 DexDescription_Psiana_2[] = _(
+ "um seine TRAINER vor Unheil zu\n"
+ "bewahren.");
+
+static const u8 DexDescription_Nachtara_1[] = _(
+ "NACHTARA hat sich dadurch entwickelt,\n"
+ "dass es den Mondwellen ausgesetzt war.\n"
+ "Es versteckt sich im Schutze der");
+static const u8 DexDescription_Nachtara_2[] = _(
+ "Dunkelheit und wartet darauf, dass sich\n"
+ "ein Feind bewegt. Die Ringe an seinem\n"
+ "Körper leuchten auf, wenn es angreift.");
+
+static const u8 DexDescription_Kramurx_1[] = _(
+ "KRAMURX wurde als vermeintlicher\n"
+ "Überbringer des Unheils verabscheut\n"
+ "und gefürchtet. Dieses POKéMON hat");
+static const u8 DexDescription_Kramurx_2[] = _(
+ "ein großes Interesse an allem, was\n"
+ "funkelt und glitzert. Es stiehlt auch\n"
+ "Ringe von Frauen.");
+
+static const u8 DexDescription_Laschoking_1[] = _(
+ "LASCHOKING betreibt jeden Tag \n"
+ "Forschung, um die Geheimnisse der Welt\n"
+ "zu lüften. Dieses POKéMON vergisst aber");
+static const u8 DexDescription_Laschoking_2[] = _(
+ "alles, was es bereits herausgefunden\n"
+ "hat, wenn das MUSCHAS auf seinem\n"
+ "Kopf abfällt.");
+
+static const u8 DexDescription_Traunfugil_1[] = _(
+ "TRAUNFUGIL erschreckt Menschen mit\n"
+ "einem markerschütternden Schrei.\n"
+ "Dieses POKéMON verwendet seine roten");
+static const u8 DexDescription_Traunfugil_2[] = _(
+ "Kraftfelder dazu, die Ängste seiner\n"
+ "Feinde aufzunehmen und sie in\n"
+ "Nahrung umzuwandeln.");
+
+static const u8 DexDescription_Icognito_1[] = _(
+ "ICOGNITO hat die Form antiker\n"
+ "Schriftzeichen. Bis heute ist unklar,\n"
+ "was zuerst da war: Die antiken");
+static const u8 DexDescription_Icognito_2[] = _(
+ "Schriftzeichen oder die vielen unter-\n"
+ "schiedlichen ICOGNITO. Trotz umfang-\n"
+ "reicher Forschung bleiben Fragen offen.");
+
+static const u8 DexDescription_Woingenau_1[] = _(
+ "Wenn zwei oder mehr WOINGENAU \n"
+ "aufeinander treffen, versuchen sie,\n"
+ "gegenseitig ihre Geduld zu übertreffen.");
+static const u8 DexDescription_Woingenau_2[] = _(
+ "Sie möchten herausfinden, welches\n"
+ "POKéMON es am längsten ohne Nahrung\n"
+ "aushält. Darauf müssen Trainer achten.");
+
+static const u8 DexDescription_Girafarig_1[] = _(
+ "Der Kopf an GIRAFARIGs Hinterteil hat\n"
+ "ein eigenes Gehirn. Er reagiert mit\n"
+ "Angriffen auf Gerüche und Geräusche.");
+static const u8 DexDescription_Girafarig_2[] = _(
+ "Wenn man sich diesem POKéMON von\n"
+ "hinten nähert, könnte der hintere Kopf\n"
+ "plötzlich vorschnellen und zubeißen.");
+
+static const u8 DexDescription_Tannza_1[] = _(
+ "TANNZA hängt an Ästen und wartet auf\n"
+ "Beute. Wenn man dieses POKéMON bei\n"
+ "einer Mahlzeit stört, indem man den");
+static const u8 DexDescription_Tannza_2[] = _(
+ "Baum, auf dem es sich befindet,\n"
+ "schüttelt, fällt es herunter und\n"
+ "explodiert ohne Vorwarnung.");
+
+static const u8 DexDescription_Forstellka_1[] = _(
+ "FORSTELLKA versteckt sich in seiner\n"
+ "stahlharten Schale. Die Schale öffnet\n"
+ "sich, wenn es nach Beute schnappt.");
+static const u8 DexDescription_Forstellka_2[] = _(
+ "Dies geht jedoch so schnell, dass man\n"
+ "das Innere der Schale nicht zu Gesicht\n"
+ "bekommt.");
+
+static const u8 DexDescription_Dummisel_1[] = _(
+ "DUMMISEL hat einen Bohrer als Schweif.\n"
+ "Diesen benutzt es, um sich rückwärts in\n"
+ "den Boden einzugraben.");
+static const u8 DexDescription_Dummisel_2[] = _(
+ "Dieses POKéMON baut seinen \n"
+ "Nestkomplex tief unter der\n"
+ "Erdoberfläche auf.");
+
+static const u8 DexDescription_Skorgla_1[] = _(
+ "SKORGLA segelt lautlos durch die Lüfte.\n"
+ "Es verankert sich mit Hilfe der Krallen\n"
+ "an seinen Hinterbeinen und der riesigen");
+static const u8 DexDescription_Skorgla_2[] = _(
+ "Scheren an seinen Vorderbeinen am\n"
+ "Gesicht eines Feindes fest und\n"
+ "vergiftet ihn mit seinem Giftstachel.");
+
+static const u8 DexDescription_Stahlos_1[] = _(
+ "STAHLOS lebt noch tiefer unter der Erde\n"
+ "als ONIX. Dieses POKéMON gräbt immer\n"
+ "in Richtung des Erdkerns.");
+static const u8 DexDescription_Stahlos_2[] = _(
+ "Nachweislich hat dieses POKéMON\n"
+ "bereits Tiefen von einem Kilometer\n"
+ "erreicht.");
+
+static const u8 DexDescription_Snubbull_1[] = _(
+ "Indem es seine Zähne fletscht und\n"
+ "ein Furcht erregendes Gesicht macht,\n"
+ "schlägt SNUBBULL kleinere POKéMON");
+static const u8 DexDescription_Snubbull_2[] = _(
+ "in die Flucht. Es scheint darüber jedoch\n"
+ "etwas traurig zu sein.");
+
+static const u8 DexDescription_Granbull_1[] = _(
+ "GRANBULL besitzt einen besonders\n"
+ "ausgeprägten Unterkiefer. Wegen seiner\n"
+ "schweren Zähne wackelt es mit dem Kopf.");
+static const u8 DexDescription_Granbull_2[] = _(
+ "Es beißt nur zu, wenn es erschreckt\n"
+ "wird.");
+
+static const u8 DexDescription_Baldorfish_1[] = _(
+ "BALDORFISH saugt Wasser ein, um sich\n"
+ "aufzublasen. Dieses POKéMON nutzt den\n"
+ "Druck des Wassers dazu, giftige");
+static const u8 DexDescription_Baldorfish_2[] = _(
+ "Stacheln aus seinem Körper zu\n"
+ "verschießen. Es betrachtet Schwimmen\n"
+ "als eine echte Herausforderung.");
+
+static const u8 DexDescription_Scherox_1[] = _(
+ "SCHEROX’ Körper ist hart wie Stahl.\n"
+ "Gewöhnliche Angriffe jagen ihm keine\n"
+ "Angst ein. Dieses POKéMON schlägt");
+static const u8 DexDescription_Scherox_2[] = _(
+ "mit den Flügeln, um seine\n"
+ "Körpertemperatur zu regulieren.");
+
+static const u8 DexDescription_Pottrott_1[] = _(
+ "POTTROTT versteckt sich leise unter\n"
+ "Steinen und verbirgt seinen Körper in\n"
+ "seiner harten Schale, wenn es");
+static const u8 DexDescription_Pottrott_2[] = _(
+ "gesammelte Beeren zu sich nimmt. Die\n"
+ "Beeren vermischen sich mit seinen\n"
+ "Körperflüssigkeiten zu einem Saft.");
+
+static const u8 DexDescription_Skaraborn_1[] = _(
+ "SKARABORN geht direkt auf seinen\n"
+ "Gegner los, rutscht auf ihn zu, um ihn\n"
+ "auszuhebeln und mit seinem mächtigen");
+static const u8 DexDescription_Skaraborn_2[] = _(
+ "Horn wegzuschleudern. Dieses POKéMON\n"
+ "hat genug Kraft, um einen massigen\n"
+ "Baum umzustoßen.");
+
+static const u8 DexDescription_Sniebel_1[] = _(
+ "SNIEBEL klettert an Bäumen hoch, indem\n"
+ "es seine hakenförmigen Krallen in die\n"
+ "Rinde schlägt. Dieses POKéMON sucht");
+static const u8 DexDescription_Sniebel_2[] = _(
+ "nach unbewachten Nestern und stiehlt\n"
+ "die Eier, wenn die Eltern auf Nahrungs-\n"
+ "suche sind. Davon ernährt es sich.");
+
+static const u8 DexDescription_Teddiursa_1[] = _(
+ "TEDDIURSA leckt gern seine mit Honig\n"
+ "bedeckten Pranken ab. Dieses POKéMON\n"
+ "bereitet seinen eigenen Honig zu, indem");
+static const u8 DexDescription_Teddiursa_2[] = _(
+ "es die von BIBOR gesammelten Früchte\n"
+ "und Pollen miteinander vermengt.");
+
+static const u8 DexDescription_Ursaring_1[] = _(
+ "In den von URSARING bewohnten Wäldern\n"
+ "gibt es viele Flüsse und hohe Bäume, in\n"
+ "denen es Nahrung findet. Dieses");
+static const u8 DexDescription_Ursaring_2[] = _(
+ "POKéMON läuft täglich durch den Wald,\n"
+ "um nach Essbarem zu suchen.");
+
+static const u8 DexDescription_Schneckmag_1[] = _(
+ "Durch SCHNECKMAGs Kreislaufsystem\n"
+ "fließt Magma. Wenn dieses POKéMON\n"
+ "erkältet ist, kühlt das Magma");
+static const u8 DexDescription_Schneckmag_2[] = _(
+ "aus und erhärtet. Sein Körper wird\n"
+ "spröde und es brechen Stücke heraus,\n"
+ "so dass es kleiner wird.");
+
+static const u8 DexDescription_Magcargo_1[] = _(
+ "MAGCARGOs Schale ist eigentlich seine\n"
+ "Haut, die erhärtet ist, als es auskühlte.\n"
+ "Seine Schale ist sehr spröde und");
+static const u8 DexDescription_Magcargo_2[] = _(
+ "zerbrechlich. Schon bei einer leichten\n"
+ "Berührung bricht sie auseinander. Dann\n"
+ "muss es ein Bad in Magma nehmen.");
+
+static const u8 DexDescription_Quiekel_1[] = _(
+ "Auf Nahrungssuche schnüffelt QUIEKEL\n"
+ "am Boden entlang. Seine \n"
+ "Lieblingsspeise ist ein Pilz, der unter");
+static const u8 DexDescription_Quiekel_2[] = _(
+ "verwesendem Gras wächst. \n"
+ "Manchmal spürt dieses POKéMON heiße\n"
+ "Quellen auf.");
+
+static const u8 DexDescription_Keifel_1[] = _(
+ "KEIFEL hat ein dichtes Fell aus langen\n"
+ "Haaren. Dadurch ist es gegen eisige\n"
+ "Kälte gewappnet.");
+static const u8 DexDescription_Keifel_2[] = _(
+ "Dieses POKéMON benutzt seine\n"
+ "Hauer, um an Nahrung zu gelangen, die\n"
+ "unter dem Eis eingeschlossen ist.");
+
+static const u8 DexDescription_Corasonn_1[] = _(
+ "Wenn CORASONNs Arme Sonnenlicht\n"
+ "abbekommen, glitzern sie wunderschön\n"
+ "in sieben Farben. Wenn ein Arm");
+static const u8 DexDescription_Corasonn_2[] = _(
+ "abbricht, wächst über Nacht ein neuer\n"
+ "nach.");
+
+static const u8 DexDescription_Remoraid_1[] = _(
+ "REMORAID saugt Wasser ein und spritzt\n"
+ "es unter Einsatz seiner Bauchmuskeln\n"
+ "mit Hochdruck wieder heraus. So schießt");
+static const u8 DexDescription_Remoraid_2[] = _(
+ "es fliegende Beute ab. Wenn seine\n"
+ "Entwicklung näher rückt, wandert\n"
+ "dieses POKéMON flussabwärts.");
+
+static const u8 DexDescription_Octillery_1[] = _(
+ "OCTILLERY saugt sich mit seinen\n"
+ "Tentakeln an einem Feind fest. Dieses\n"
+ "POKéMON betäubt seinen Gegner,");
+static const u8 DexDescription_Octillery_2[] = _(
+ "bevor es ihm den Rest gibt.\n"
+ "Wenn ein Feind zu stark ist, speit es\n"
+ "Tinte aus und flüchtet.");
+
+static const u8 DexDescription_Botogel_1[] = _(
+ "BOTOGEL sammelt seine Nahrung in\n"
+ "seinem Schweif. Es gab einmal einen\n"
+ "berühmten Entdecker, der es dank eines");
+static const u8 DexDescription_Botogel_2[] = _(
+ "BOTOGELs geschafft hat, einen der\n"
+ "höchsten Berge der Welt zu besteigen.\n"
+ "Es hatte seine Nahrung mit ihm geteilt.");
+
+static const u8 DexDescription_Mantax_1[] = _(
+ "An schönen Tagen sieht man Schwärme\n"
+ "von MANTAX elegant über die Wellen des\n"
+ "Ozeans springen.");
+static const u8 DexDescription_Mantax_2[] = _(
+ "Durch REMORAID, die an ihm haften\n"
+ "und ihn begleiten, fühlt sich dieses\n"
+ "POKéMON nicht belästigt.");
+
+static const u8 DexDescription_Panzaeron_1[] = _(
+ "PANZAERON ist komplett in einen harten,\n"
+ "schützenden Panzer eingehüllt. Dieses\n"
+ "POKéMON fliegt 300 km/h.");
+static const u8 DexDescription_Panzaeron_2[] = _(
+ "Es greift seine Feinde mit seinen\n"
+ "messerscharfen Flügeln an.");
+
+static const u8 DexDescription_Hunduster_1[] = _(
+ "HUNDUSTER jagen in Gruppen. Sie\n"
+ "kommunizieren miteinander über\n"
+ "verschiedene Arten von Geheul und");
+static const u8 DexDescription_Hunduster_2[] = _(
+ "treiben ihre Feinde in die Enge.\n"
+ "Die Zusammenarbeit dieser POKéMON\n"
+ "ist einzigartig.");
+
+static const u8 DexDescription_Hundemon_1[] = _(
+ "In einer Gruppe von HUNDEMON ist\n"
+ "dasjenige mit den nach hinten\n"
+ "gebogenen Hörnern der Anführer.");
+static const u8 DexDescription_Hundemon_2[] = _(
+ "Diese POKéMON bestimmen ihren Anführer\n"
+ "durch das Ausfechten von Kämpfen\n"
+ "untereinander.");
+
+static const u8 DexDescription_Seedraking_1[] = _(
+ "SEEDRAKING lebt in den Tiefen des\n"
+ "Ozeans, die ansonsten verwaist sind.\n"
+ "Lange hat man geglaubt, dass das");
+static const u8 DexDescription_Seedraking_2[] = _(
+ "Gähnen dieses POKéMON Strudel auslöst.");
+
+static const u8 DexDescription_Phanpy_1[] = _(
+ "Um sich ein Nest zu bauen, gräbt\n"
+ "PHANPY am Flussufer ein Loch ins\n"
+ "Erdreich. Es markiert die Umgebung");
+static const u8 DexDescription_Phanpy_2[] = _(
+ "seines Nests mit Hilfe seines Rüssels,\n"
+ "damit seine Artgenossen wissen, dass\n"
+ "dieses Gebiet vergeben ist.");
+
+static const u8 DexDescription_Donphan_1[] = _(
+ "DONPHANs Lieblingsattacke ist es, als\n"
+ "Ball zusammengerollt mit voller Wucht\n"
+ "gegen seine Gegner zu krachen.");
+static const u8 DexDescription_Donphan_2[] = _(
+ "Wenn es erst einmal rollt, ist dieses\n"
+ "POKéMON nur schwer aufzuhalten.");
+
+static const u8 DexDescription_Porygon2_1[] = _(
+ "PORYGON2 wurde in einem\n"
+ "wissenschaftlichen Experiment von\n"
+ "Menschen erzeugt. Es verfügt über");
+static const u8 DexDescription_Porygon2_2[] = _(
+ "künstliche Intelligenz, wodurch es \n"
+ "selbstständig neue Gesten und Gefühle\n"
+ "erlernen kann.");
+
+static const u8 DexDescription_Damhirplex_1[] = _(
+ "DAMHIRPLEX hat ein prächtiges Geweih,\n"
+ "für das hohe Preise gezahlt werden, da\n"
+ "sie als Kunstwerke gelten.");
+static const u8 DexDescription_Damhirplex_2[] = _(
+ "Daher wurde dieses POKéMON gejagt und\n"
+ "wäre beinahe ausgestorben.");
+
+static const u8 DexDescription_Farbeagle_1[] = _(
+ "FARBEAGLE markiert sein Revier mit\n"
+ "einer Flüssigkeit, die aus seiner\n"
+ "Schweifspitze austritt.");
+static const u8 DexDescription_Farbeagle_2[] = _(
+ "Es wurden über 5000 unterschiedliche\n"
+ "Markierungen entdeckt, die dieses\n"
+ "POKéMON hinterlassen hat.");
+
+static const u8 DexDescription_Rabauz_1[] = _(
+ "RABAUZ muss jeden Tag trainieren,\n"
+ "sonst ist es nicht ausgelastet und\n"
+ "reagiert gestresst. Wenn man dieses");
+static const u8 DexDescription_Rabauz_2[] = _(
+ "POKéMON trainiert, muss man\n"
+ "zahlreiche Trainingsmethoden\n"
+ "einsetzen und sie ständig ausbauen.");
+
+static const u8 DexDescription_Kapoera_1[] = _(
+ "KAPOERA dreht sich auf dem Kopf\n"
+ "stehend um die eigene Achse und teilt\n"
+ "Tritte aus. Seine Technik ist eine");
+static const u8 DexDescription_Kapoera_2[] = _(
+ "bemerkenswerte Mischung aus Angriff \n"
+ "und Verteidigung. Es bewegt sich \n"
+ "drehend schneller voran als laufend.");
+
+static const u8 DexDescription_Kussilla_1[] = _(
+ "KUSSILLA läuft hektisch umher, fällt\n"
+ "aber auch ziemlich oft hin. Es lässt\n"
+ "keine Möglichkeit aus sein Spiegelbild");
+static const u8 DexDescription_Kussilla_2[] = _(
+ "zu betrachten, um sicherzustellen,\n"
+ "dass sein Gesicht nicht schmutzig\n"
+ "geworden ist.");
+
+static const u8 DexDescription_Elekid_1[] = _(
+ "ELEKID speichert Elektrizität in seinem\n"
+ "Körper. Wenn es Metall berührt und\n"
+ "versehentlich die aufgestaute Energie");
+static const u8 DexDescription_Elekid_2[] = _(
+ "entlädt, rotiert es mit den Armen, um\n"
+ "sich wieder aufzuladen.");
+
+static const u8 DexDescription_Magby_1[] = _(
+ "MAGBYs Gesundheitszustand kann man\n"
+ "am Feuer erkennen, das es ausatmet.\n"
+ "Wenn es gelbe Flammen ausstößt, ist es");
+static const u8 DexDescription_Magby_2[] = _(
+ "in guter Verfassung. Ist es erschöpft,\n"
+ "vermischen sich die Flammen mit\n"
+ "schwarzem Rauch.");
+
+static const u8 DexDescription_Miltank_1[] = _(
+ "MILTANK gibt täglich 20 Liter Milch.\n"
+ "Sie ist süßlich und wird von Kindern und\n"
+ "Erwachsenen gleichermaßen genossen.");
+static const u8 DexDescription_Miltank_2[] = _(
+ "Menschen, die keine Milch trinken,\n"
+ "essen sie stattdessen als Joghurt.");
+
+static const u8 DexDescription_Heiteira_1[] = _(
+ "HEITEIRA nimmt mit seinem flauschigen\n"
+ "Fell Traurigkeit wahr. Es hastet zu\n"
+ "einer traurigen Person, egal, wie weit");
+static const u8 DexDescription_Heiteira_2[] = _(
+ "diese entfernt ist und teilt ein \n"
+ "GLÜCKS-EI mit ihr, um sie zum Lächeln\n"
+ "zu bringen.");
+
+static const u8 DexDescription_Raikou_1[] = _(
+ "RAIKOU ist so schnell wie der Blitz. Das\n"
+ "Gebrüll dieses POKéMON sendet\n"
+ "Schockwellen aus, die wie Donnerschläge");
+static const u8 DexDescription_Raikou_2[] = _(
+ "durch die Luft beben und den Boden\n"
+ "erschüttern.");
+
+static const u8 DexDescription_Entei_1[] = _(
+ "ENTEI verfügt über die Leidenschaft\n"
+ "von Magma. Dieses POKéMON wurde\n"
+ "bei einem Vulkanausbruch geboren");
+static const u8 DexDescription_Entei_2[] = _(
+ "und bringt Feuersbrünste hervor, die\n"
+ "alles auslöschen, was mit ihnen in\n"
+ "Kontakt kommt.");
+
+static const u8 DexDescription_Suicune_1[] = _(
+ "SUICUNE wohnt die Reinheit einer\n"
+ "Quelle inne. Es bewegt sich graziös und \n"
+ "hat die Macht, schmutziges Wasser zu");
+static const u8 DexDescription_Suicune_2[] = _(
+ "reinigen.");
+
+static const u8 DexDescription_Larvitar_1[] = _(
+ "LARVITAR wurde tief unter der Erde\n"
+ "geboren. Um an die Oberfläche zu\n"
+ "gelangen, muss es sich durch das");
+static const u8 DexDescription_Larvitar_2[] = _(
+ "Erdreich fressen. Erst dann bekommt es\n"
+ "seine Eltern zu Gesicht.");
+
+static const u8 DexDescription_Pupitar_1[] = _(
+ "PUPITAR erzeugt in seinem Körper ein\n"
+ "Gas, das es komprimiert und kraftvoll\n"
+ "ausstößt, um sich wie ein");
+static const u8 DexDescription_Pupitar_2[] = _(
+ "Düsenflugzeug anzutreiben. Sein\n"
+ "Körper ist sehr robust und er hält\n"
+ "auch massivem Stahl stand.");
+
+static const u8 DexDescription_Despotar_1[] = _(
+ "DESPOTAR ist erstaunlich stark. Es\n"
+ "kann einen ganzen Berg vernichten, um\n"
+ "sein Nest zu bauen. Dieses POKéMON");
+static const u8 DexDescription_Despotar_2[] = _(
+ "wandert in den Bergen umher und sucht\n"
+ "nach Gegnern für einen Kampf.");
+
+static const u8 DexDescription_Lugia_1[] = _(
+ "LUGIAs Flügel haben eine\n"
+ "zerstörerische Kraft. Bereits ein\n"
+ "leichtes Flattern kann Häuser");
+static const u8 DexDescription_Lugia_2[] = _(
+ "hinfortwehen. Daher hat sich dieses\n"
+ "POKéMON dafür entschieden, tief unter\n"
+ "dem Meer zu leben, wo es niemand sieht.");
+
+static const u8 DexDescription_HoOh_1[] = _(
+ "HO-OHs Federn leuchten in sieben\n"
+ "Farben, je nachdem aus welchem Winkel\n"
+ "das Licht auf sie fällt.");
+static const u8 DexDescription_HoOh_2[] = _(
+ "Die Federn sollen ihrem Besitzer Glück\n"
+ "bringen. Dieses POKéMON lebt am Fuße\n"
+ "eines Regenbogens.");
+
+static const u8 DexDescription_Celebi_1[] = _(
+ "Dieses POKéMON kommt aus der Zukunft\n"
+ "und ist durch die Zeit gereist. Solange\n"
+ "CELEBI auftaucht,");
+static const u8 DexDescription_Celebi_2[] = _(
+ "ist der Menschheit angeblich eine\n"
+ "rosige Zukunft beschieden.");
+
+static const u8 DexDescription_Geckarbor_1[] = _(
+ "Mit den kleinen Haken unter seinen\n"
+ "Füßen kann GECKARBOR an Wänden\n"
+ "hochklettern. Dieses POKéMON greift");
+static const u8 DexDescription_Geckarbor_2[] = _(
+ "Feinde an, indem es mit seinem\n"
+ "mächtigen Schweif zuschlägt.");
+
+static const u8 DexDescription_Reptain_1[] = _(
+ "REPTAIN kann sich mit den Blättern, die\n"
+ "aus seinem Körper herauswachsen, im\n"
+ "Wald hervorragend tarnen.");
+static const u8 DexDescription_Reptain_2[] = _(
+ "Dieses POKéMON ist ein wahrer Meister\n"
+ "darin, auf die Bäume des Dschungels zu\n"
+ "klettern.");
+
+static const u8 DexDescription_Gewaldro_1[] = _(
+ "Die Blätter, die auf GEWALDROs Körper\n"
+ "wachsen, sind sehr scharfkantig. Dieses\n"
+ "POKéMON ist sehr agil. Es hüpft von");
+static const u8 DexDescription_Gewaldro_2[] = _(
+ "Ast zu Ast und springt seine Feinde\n"
+ "von oben oder hinten an.");
+
+static const u8 DexDescription_Flemmli_1[] = _(
+ "FLEMMLI hängt an seinem Trainer wie\n"
+ "eine Klette. Es schlurft immer hinter ihm\n"
+ "her. Dieses POKéMON spuckt 1000 Grad");
+static const u8 DexDescription_Flemmli_2[] = _(
+ "heißes Feuer, das seinen Feinden\n"
+ "ordentlich einheizt.");
+
+static const u8 DexDescription_Jungglut_1[] = _(
+ "JUNGGLUT trainiert seine Beine und\n"
+ "Oberschenkel, indem es über Felder und\n"
+ "Berge läuft. Die Beine dieses POKéMON");
+static const u8 DexDescription_Jungglut_2[] = _(
+ "sind sowohl schnell als auch kräftig,\n"
+ "so dass es 10 Tritte pro Sekunde\n"
+ "ausführen kann.");
+
+static const u8 DexDescription_Lohgock_1[] = _(
+ "LOHGOCK stößt heftige Flammen aus\n"
+ "seinen Handgelenken aus und greift\n"
+ "seine Feinde mutig an. Je stärker ein");
+static const u8 DexDescription_Lohgock_2[] = _(
+ "Feind ist, desto stärker lodern die\n"
+ "Handgelenke dieses POKéMON.");
+
+static const u8 DexDescription_Hydropi_1[] = _(
+ "Die Flosse an HYDROPIs Kopf dient als\n"
+ "hochempfindliches Radar. Damit kann es\n"
+ "Bewegungen im Wasser und in der Luft");
+static const u8 DexDescription_Hydropi_2[] = _(
+ "wahrnehmen. So weiß es jederzeit, was\n"
+ "in seiner Umgebung passiert, ohne\n"
+ "dabei seine Augen zu benutzen.");
+
+static const u8 DexDescription_Moorabbel_1[] = _(
+ "MOORABBELs Körper ist mit einem\n"
+ "klebrigen Film überzogen, durch den es\n"
+ "an Land überleben kann. Dieses POKéMON");
+static const u8 DexDescription_Moorabbel_2[] = _(
+ "spielt bei Ebbe in den Schlammpfützen\n"
+ "am Strand.");
+
+static const u8 DexDescription_Sumpex_1[] = _(
+ "SUMPEX ist sehr stark. Es kann mit\n"
+ "Leichtigkeit einen Felsblock bewegen,\n"
+ "der über eine Tonne wiegt.");
+static const u8 DexDescription_Sumpex_2[] = _(
+ "Weiterhin ist es mit einem exzellenten\n"
+ "Sehvermögen ausgestattet, wodurch es\n"
+ "auch in trüben Gewässern sehen kann.");
+
+static const u8 DexDescription_Fiffyen_1[] = _(
+ "Sobald FIFFYEN eine Bewegung wahr-\n"
+ "nimmt, schnappt es zu. Es jagt seine\n"
+ "Beute so lange, bis sie vollkommen");
+static const u8 DexDescription_Fiffyen_2[] = _(
+ "erschöpft ist. Wenn sich die Beute\n"
+ "allerdings wehrt, kann es passieren, \n"
+ "dass FIFFYEN klein beigibt und flieht.");
+
+static const u8 DexDescription_Magnayen_1[] = _(
+ "MAGNAYEN sendet deutliche Signale\n"
+ "aus, wenn es sich auf einen Angriff\n"
+ "vorbereitet. Es knurrt heftig und macht");
+static const u8 DexDescription_Magnayen_2[] = _(
+ "sich flach. Dieses POKéMON kann mit\n"
+ "seinen spitzen Zähnen brutal zubeißen.");
+
+static const u8 DexDescription_Zigzachs_1[] = _(
+ "ZIGZACHS ist ein rastloser Wanderer.\n"
+ "Dieses POKéMON ist nämlich sehr\n"
+ "neugierig und es inspiziert alles,");
+static const u8 DexDescription_Zigzachs_2[] = _(
+ "was ihm zufällig begegnet.");
+
+static const u8 DexDescription_Geradaks_1[] = _(
+ "GERADAKS rennt immer mit vollem Tempo\n"
+ "und nie im Zickzack, sondern nur gerade.\n"
+ "Wenn ihm ein Hindernis im Weg ist,");
+static const u8 DexDescription_Geradaks_2[] = _(
+ "läuft es rechtwinklig daran vorbei. Für\n"
+ "dieses POKéMON stellen leichte Kurven\n"
+ "eine große Herausforderung dar.");
+
+static const u8 DexDescription_Waumpel_1[] = _(
+ "WAUMPEL kann mit den Stacheln an\n"
+ "seinem Hinterteil die Rinde von Bäumen\n"
+ "entfernen und ernährt sich von dem");
+static const u8 DexDescription_Waumpel_2[] = _(
+ "austretenden Saft. An den Füßen dieses\n"
+ "POKéMON befinden sich Saugnäpfe, mit\n"
+ "denen es auch an Glas nicht abrutscht.");
+
+static const u8 DexDescription_Schaloko_1[] = _(
+ "SCHALOKO bindet sich mit einem\n"
+ "Seidenfaden an einen Ast. Es baumelt\n"
+ "dort und wartet auf seine Entwicklung.");
+static const u8 DexDescription_Schaloko_2[] = _(
+ "Durch ein kleines Loch in seinem\n"
+ "Seidenkokon lugt es heraus.");
+
+static const u8 DexDescription_Papinella_1[] = _(
+ "PAPINELLAs Lieblingsspeise ist\n"
+ "Blütenstaub. Wenn du dieses POKéMON\n"
+ "beobachten möchtest, musst du bloß");
+static const u8 DexDescription_Papinella_2[] = _(
+ "einen Blumentopf vor ein geöffnetes\n"
+ "Fenster stellen. PAPINELLA wird sich\n"
+ "diese Leckerei nicht entgehen lassen.");
+
+static const u8 DexDescription_Panekon_1[] = _(
+ "PANEKON baut seinen schützenden\n"
+ "Kokon, indem es seinen Körper mit\n"
+ "feiner Seide einwickelt, die aus seinem");
+static const u8 DexDescription_Panekon_2[] = _(
+ "Mund austritt. Wenn sein Körper mit\n"
+ "Seide bedeckt ist, wird diese hart. Im\n"
+ "Kokon wartet es auf seine Entwicklung.");
+
+static const u8 DexDescription_Pudox_1[] = _(
+ "PUDOX wird instinktiv vom Licht\n"
+ "angezogen. In hell erleuchteten \n"
+ "Städten kann man Scharen dieses");
+static const u8 DexDescription_Pudox_2[] = _(
+ "POKéMON dabei beobachten, die\n"
+ "großen Schaden anrichten, indem sie die\n"
+ "Blätter von Bäumen abfressen.");
+
+static const u8 DexDescription_Loturzel_1[] = _(
+ "LOTURZEL lebt auf der Wasseroberfläche\n"
+ "von Teichen oder Seen. Es wird\n"
+ "schwächer, wenn sein breites Blatt");
+static const u8 DexDescription_Loturzel_2[] = _(
+ "abstirbt. Nur selten geht dieses\n"
+ "POKéMON an Land, um nach sauberem\n"
+ "Wasser Ausschau zu halten.");
+
+static const u8 DexDescription_Lombrero_1[] = _(
+ "LOMBRERO liebt die Nacht und wird mit\n"
+ "Einbruch der Dunkelheit aktiv. Es spielt\n"
+ "auch gerne Streiche.");
+static const u8 DexDescription_Lombrero_2[] = _(
+ "Wenn es Angler sieht, zieht es unter\n"
+ "Wasser an ihren Angelschnüren und\n"
+ "erfreut sich an ihrer Entrüstung.");
+
+static const u8 DexDescription_Kappalores_1[] = _(
+ "KAPPALORES fängt sofort zu tanzen an,\n"
+ "wenn es stimmungsvolle, feierliche Musik\n"
+ "vernimmt. Dieses POKéMON erscheint");
+static const u8 DexDescription_Kappalores_2[] = _(
+ "angeblich, wenn es Kinder auf \n"
+ "Wanderausflügen singen hört.");
+
+static const u8 DexDescription_Samurzel_1[] = _(
+ "SAMURZEL hängt sich mit dem Kopf an\n"
+ "einen Ast. Dabei entzieht es dem Baum\n"
+ "Feuchtigkeit. Je mehr Wasser es trinkt,");
+static const u8 DexDescription_Samurzel_2[] = _(
+ "desto glänzender wird der Körper dieses\n"
+ "POKéMON.");
+
+static const u8 DexDescription_Blanas_1[] = _(
+ "BLANAS lebt in dichten Wäldern.\n"
+ "Manchmal wagt es sich aus dem Wald\n"
+ "heraus, um Menschen zu erschrecken.");
+static const u8 DexDescription_Blanas_2[] = _(
+ "Dieses POKéMON mag es überhaupt nicht,\n"
+ "wenn man seine lange Nase zwickt.");
+
+static const u8 DexDescription_Tengulist_1[] = _(
+ "TENGULIST ist ein geheimnisvolles\n"
+ "POKéMON, das angeblich auf hohen\n"
+ "Bäumen lebt, die tausende von Jahren");
+static const u8 DexDescription_Tengulist_2[] = _(
+ "alt sind. Mit den Blätterventilatoren an\n"
+ "seinen Händen kann es heftige Stürme\n"
+ "erzeugen.");
+
+static const u8 DexDescription_Schwalbini_1[] = _(
+ "Mutig behauptet SCHWALBINI sein\n"
+ "Territorium gegen Eindringlinge, so\n"
+ "stark diese auch sein mögen.");
+static const u8 DexDescription_Schwalbini_2[] = _(
+ "Dieses unerschrockene POKéMON bleibt\n"
+ "trotz einer Niederlage angriffslustig,\n"
+ "heult aber laut, wenn es Hunger hat.");
+
+static const u8 DexDescription_Schwalboss_1[] = _(
+ "Dieses POKéMON taucht in einem steilen\n"
+ "Winkel ab, sobald es Beute wahrgenommen\n"
+ "hat. Es packt seine Beute mit");
+static const u8 DexDescription_Schwalboss_2[] = _(
+ "seinen Krallen und lässt sie\n"
+ "nicht mehr entkommen.");
+
+static const u8 DexDescription_Wingull_1[] = _(
+ "Man sieht WINGULL oft mit seiner\n"
+ "Beute oder seinen Besitztümern im\n"
+ "Schnabel herumfliegen auf der Suche");
+static const u8 DexDescription_Wingull_2[] = _(
+ "nach geeigneten Verstecken. Dieses\n"
+ "POKéMON fliegt durch die Lüfte, als\n"
+ "würde es gleiten.");
+
+static const u8 DexDescription_Pelipper_1[] = _(
+ "PELIPPER transportiert kleine POKéMON\n"
+ "und Eier in seinem riesigen Schnabel\n"
+ "durch die Lüfte. Dieses POKéMON baut");
+static const u8 DexDescription_Pelipper_2[] = _(
+ "sein Nest auf steilen Klippen am Meer.");
+
+static const u8 DexDescription_Trasla_1[] = _(
+ "TRASLA nimmt mit den Hörnern an seinem\n"
+ "Kopf die Gefühle von Menschen wahr.\n"
+ "Menschen bekommen dieses POKéMON");
+static const u8 DexDescription_Trasla_2[] = _(
+ "nur selten zu Gesicht. Wenn es bemerkt,\n"
+ "dass eine Person gut gelaunt ist, traut\n"
+ "es sich näher an sie heran.");
+
+static const u8 DexDescription_Kirlia_1[] = _(
+ "Man sagt, dass ein KIRLIA, das häufig\n"
+ "positive Emotionen seines TRAINERs\n"
+ "wahrnimmt, sehr schön wird.");
+static const u8 DexDescription_Kirlia_2[] = _(
+ "Dieses POKéMON kontrolliert\n"
+ "psychokinetische Energie mit seinem\n"
+ "hochentwickelten Gehirn.");
+
+static const u8 DexDescription_Guardevoir_1[] = _(
+ "GUARDEVOIR kann in die Zukunft\n"
+ "schauen. Wenn es eine Gefahr für seinen\n"
+ "TRAINER voraussieht, entlädt es seine");
+static const u8 DexDescription_Guardevoir_2[] = _(
+ "psychokinetische Energie mit voller\n"
+ "Kraft.");
+
+static const u8 DexDescription_Gehweiher_1[] = _(
+ "GEHWEIHER scheidet aus seinen Zehen\n"
+ "ein Öl aus, das es ihm ermöglicht, über\n"
+ "Wasser zu gleiten. Dieses POKéMON");
+static const u8 DexDescription_Gehweiher_2[] = _(
+ "ernährt sich von Mikroorganismen aus\n"
+ "Teichen und Seen.");
+
+static const u8 DexDescription_Maskeregen_1[] = _(
+ "MASKEREGEN schüchtert seine Feinde\n"
+ "mit den augenähnlichen Mustern auf\n"
+ "seinen Antennen ein. Dieses POKéMON");
+static const u8 DexDescription_Maskeregen_2[] = _(
+ "kann mit seinen vier Flügeln wie ein\n"
+ "Hubschrauber in jede Richtung fliegen,\n"
+ "sogar seitwärts und rückwärts.");
+
+static const u8 DexDescription_Knilz_1[] = _(
+ "KNILZ lebt im feuchten Erdboden\n"
+ "finsterer Wälder. Es wird oft reglos\n"
+ "unter herabgefallenen Blättern");
+static const u8 DexDescription_Knilz_2[] = _(
+ "gefunden. Dieses POKéMON ernährt sich\n"
+ "von Kompost aus verrotteten Blättern.");
+
+static const u8 DexDescription_Kapilz_1[] = _(
+ "Mit leichtfüßiger Beinarbeit nähert \n"
+ "sich KAPILZ seinen Feinden und\n"
+ "schlägt dann mit seinen dehnbaren");
+static const u8 DexDescription_Kapilz_2[] = _(
+ "Armen um sich. Die Kampftechnik dieses\n"
+ "POKéMON treibt Profiboxern die\n"
+ "Schamesröte ins Gesicht.");
+
+static const u8 DexDescription_Bummelz_1[] = _(
+ "BUMMELZ geht zwanzig Stunden pro Tag\n"
+ "müßig. Da es sich sehr wenig bewegt,\n"
+ "braucht es auch nicht viel Nahrung.");
+static const u8 DexDescription_Bummelz_2[] = _(
+ "Seine Tagesration besteht lediglich aus\n"
+ "drei Blättern.");
+
+static const u8 DexDescription_Muntier_1[] = _(
+ "MUNTIER brennt darauf, sich\n"
+ "auszutoben. Es kann nicht einmal für\n"
+ "eine Minute stillsitzen. Es gerät in");
+static const u8 DexDescription_Muntier_2[] = _(
+ "Stress, wenn es sich nicht andauernd\n"
+ "bewegen kann.");
+
+static const u8 DexDescription_Letarking_1[] = _(
+ "LETARKING verbringt den Tag damit,\n"
+ "herumzuliegen und nichts zu tun. Es \n"
+ "ernährt sich von Gras, das in seiner");
+static const u8 DexDescription_Letarking_2[] = _(
+ "Reichweite wächst. Hat es alles\n"
+ "aufgefressen, so sucht es sich\n"
+ "widerwillig ein anderes Plätzchen.");
+
+static const u8 DexDescription_Nincada_1[] = _(
+ "NINCADA lebt viele Jahre in absoluter\n"
+ "Dunkelheit unter der Erde. Dieses\n"
+ "POKéMON nimmt Nährstoffe aus");
+static const u8 DexDescription_Nincada_2[] = _(
+ "Baumwurzeln auf. Es rührt sich nicht,\n"
+ "da es auf seine Entwicklung wartet.");
+
+static const u8 DexDescription_Ninjask_1[] = _(
+ "NINJASK bewegt sich so schnell, dass\n"
+ "man es nicht sehen kann. Seine Schreie\n"
+ "sind aber laut und deutlich zu hören.");
+static const u8 DexDescription_Ninjask_2[] = _(
+ "Deshalb hielt man dieses POKéMON lange\n"
+ "für unsichtbar.");
+
+static const u8 DexDescription_Ninjatom_1[] = _(
+ "NINJATOMs harter Körper bewegt sich\n"
+ "überhaupt nicht. Er scheint bloß eine\n"
+ "hohle Schale zu sein. Dieses POKéMON");
+static const u8 DexDescription_Ninjatom_2[] = _(
+ "soll angeblich die Seele eines jeden\n"
+ "stehlen, der hinterrücks einen Blick in\n"
+ "seinen hohlen Körper riskiert.");
+
+static const u8 DexDescription_Flurmel_1[] = _(
+ "Normalerweise ist FLURMELs Stimme sehr\n"
+ "leise, selbst mit größter Anstrengung\n"
+ "ist sie kaum hörbar. Wenn dieses");
+static const u8 DexDescription_Flurmel_2[] = _(
+ "POKéMON jedoch eine Gefahr wittert,\n"
+ "stößt es ohrenbetäubende Schreie aus.");
+
+static const u8 DexDescription_Krakeelo_1[] = _(
+ "KRAKEELOs Brüllen kann ein Holzhaus zum\n"
+ "Einsturz bringen. Es setzt seine Stimme\n"
+ "ein, um seine Gegner anzugreifen.");
+static const u8 DexDescription_Krakeelo_2[] = _(
+ "Die runden Ohren dieses POKéMON dienen\n"
+ "als Lautsprecher.");
+
+static const u8 DexDescription_Krawumms_1[] = _(
+ "KRAWUMMS kann durch sein Brüllen\n"
+ "Erdbeben auslösen. Wenn dieses\n"
+ "POKéMON durch seine Körperöffnungen");
+static const u8 DexDescription_Krawumms_2[] = _(
+ "kräftig einatmet, ist es kurz davor,\n"
+ "ein mächtiges Brüllen von sich zu geben.");
+
+static const u8 DexDescription_Makuhita_1[] = _(
+ "MAKUHITA ist sehr zäh. Selbst wenn es im\n"
+ "Kampf mehrfach niedergeschlagen\n"
+ "wurde, steht es immer wieder auf und");
+static const u8 DexDescription_Makuhita_2[] = _(
+ "greift seinen Gegner an. Bei jedem Mal\n"
+ "speichert es mehr Energie in seinem\n"
+ "Körper für seine Entwicklung.");
+
+static const u8 DexDescription_Hariyama_1[] = _(
+ "HARIYAMA führt seinen berüchtigten\n"
+ "Streckarm-Schlag überall aus. Ein Schlag\n"
+ "von diesem POKéMON reicht aus,");
+static const u8 DexDescription_Hariyama_2[] = _(
+ "um einen Strommast zu zerlegen.");
+
+static const u8 DexDescription_Azurill_1[] = _(
+ "AZURILL schleudert seinen Schweif wie\n"
+ "ein Lasso weit aus und fliegt dann \n"
+ "selbst hinterher. Ein AZURILL");
+static const u8 DexDescription_Azurill_2[] = _(
+ "hat es auf diese Weise geschafft, die\n"
+ "Rekordweite von 10 Metern\n"
+ "zurückzulegen.");
+
+static const u8 DexDescription_Nasgnet_1[] = _(
+ "NASGNET besitzt eine magnetische\n"
+ "Nase, die immer nach Norden zeigt. Wenn\n"
+ "sich zwei NASGNET treffen, können sie");
+static const u8 DexDescription_Nasgnet_2[] = _(
+ "sich einander nicht zuwenden, da ihre\n"
+ "magnetischen Nasen sich gegenseitig\n"
+ "abstoßen.");
+
+static const u8 DexDescription_Eneco_1[] = _(
+ "ENECO ist davon fasziniert,\n"
+ "Gegenstände zu bewegen und sie zu\n"
+ "jagen. Dieses POKéMON jagt häufig");
+static const u8 DexDescription_Eneco_2[] = _(
+ "seinen eigenen Schweif, so dass ihm\n"
+ "schwindlig wird.");
+
+static const u8 DexDescription_Enekoro_1[] = _(
+ "ENEKORO liebt seine Eigenständigkeit.\n"
+ "So kann es das tun, was es möchte, und\n"
+ "kann selbst das Tempo bestimmen.");
+static const u8 DexDescription_Enekoro_2[] = _(
+ "Da dieses POKéMON schläft und isst,\n"
+ "wenn es Lust dazu hat, ist sein\n"
+ "Tagesablauf eher zufälliger Natur.");
+
+static const u8 DexDescription_Zobiris_1[] = _(
+ "ZOBIRIS führt ein ruhiges, \n"
+ "zurückgezogenes Leben tief im Innern\n"
+ "einer Höhle. Es ist aber trotzdem sehr");
+static const u8 DexDescription_Zobiris_2[] = _(
+ "gefürchtet, da man sagt, es stehle die\n"
+ "Seelen der Menschen, wenn seine Augen\n"
+ "im Dunkeln Furcht erregend funkeln.");
+
+static const u8 DexDescription_Flunkifer_1[] = _(
+ "FLUNKIFERs sagenhafte Kiefer sind\n"
+ "eigentlich umgewandelte Stahlhörner.\n"
+ "Sein unterwürfiger Gesichtsausdruck");
+static const u8 DexDescription_Flunkifer_2[] = _(
+ "dient dazu, seinen Gegner in Sicherheit\n"
+ "zu wiegen, so dass er unaufmerksam\n"
+ "wird. Dann schnappt es zu!");
+
+static const u8 DexDescription_Stollunior_1[] = _(
+ "Dieses POKéMON hat einen Körper aus\n"
+ "Stahl. STOLLUNIOR ernährt sich von\n"
+ "Eisenerz aus den Bergen. Zuweilen");
+static const u8 DexDescription_Stollunior_2[] = _(
+ "richtet es großen Schaden an, weil es\n"
+ "Brücken und Bahngleise auffrisst.");
+
+static const u8 DexDescription_Stollrak_1[] = _(
+ "STOLLRAK temperiert seinen Körper,\n"
+ "indem es ausgesprochen nahrhaftes \n"
+ "Quellwasser trinkt, bis es völlig");
+static const u8 DexDescription_Stollrak_2[] = _(
+ "aufgebläht ist. Dieses POKéMON baut\n"
+ "sein Nest in der Nähe von Quellen, aus\n"
+ "denen köstliches Wasser sprudelt.");
+
+static const u8 DexDescription_Stolloss_1[] = _(
+ "STOLLOSS nennt einen ganzen Berg sein\n"
+ "Territorium. Gnadenlos schlägt es jeden\n"
+ "in die Flucht, der sein Reich betritt.");
+static const u8 DexDescription_Stolloss_2[] = _(
+ "Dieses POKéMON behält sein Territorium\n"
+ "jederzeit im Auge.");
+
+static const u8 DexDescription_Meditie_1[] = _(
+ "MEDITIE unterzieht sich einem\n"
+ "strikten mentalen Training tief in den\n"
+ "Bergen. Wenn es meditiert, verliert es");
+static const u8 DexDescription_Meditie_2[] = _(
+ "jedoch immer seine Konzentration.\n"
+ "Deshalb wird sein Training niemals\n"
+ "ein Ende haben.");
+
+static const u8 DexDescription_Meditalis_1[] = _(
+ "Mittels Meditation erhöht MEDITALIS\n"
+ "seine Körperenergie und schärft seinen\n"
+ "sechsten Sinn. Dieses POKéMON");
+static const u8 DexDescription_Meditalis_2[] = _(
+ "verbirgt sich, indem es eins mit den\n"
+ "Feldern und Bergen wird.");
+
+static const u8 DexDescription_Frizelbliz_1[] = _(
+ "FRIZELBLIZ speichert Elektrizität in\n"
+ "seiner langen Körperbehaarung. Dieses\n"
+ "POKéMON stimuliert seine");
+static const u8 DexDescription_Frizelbliz_2[] = _(
+ "Beinmuskulatur durch Stromstöße.\n"
+ "Dadurch ist es in der Lage, explosiv\n"
+ "zu beschleunigen.");
+
+static const u8 DexDescription_Voltenso_1[] = _(
+ "VOLTENSO entlädt ständig Elektrizität\n"
+ "aus seiner Mähne. Es fliegen dabei\n"
+ "Funken, die zuweilen zu Waldbränden");
+static const u8 DexDescription_Voltenso_2[] = _(
+ "führen. In einem Kampf erzeugt dieses\n"
+ "POKéMON Gewitterwolken.");
+
+static const u8 DexDescription_Plusle_1[] = _(
+ "PLUSLE dient seinen Artgenossen als\n"
+ "Cheerleader. Wenn ein Teamkamerad\n"
+ "im Kampf erfolgreich ist, erzeugt es");
+static const u8 DexDescription_Plusle_2[] = _(
+ "das prasselnde Geräusch von Funken, um\n"
+ "so seine Freude zu zeigen.");
+
+static const u8 DexDescription_Minun_1[] = _(
+ "MINUN kümmert sich mehr um das\n"
+ "Anfeuern seiner Partner als um seine\n"
+ "eigene Sicherheit. Es nutzt die");
+static const u8 DexDescription_Minun_2[] = _(
+ "Elektrizität in seinem Körper dazu,\n"
+ "einen Funkenregen zu erzeugen und\n"
+ "seine Teamkameraden anzufeuern.");
+
+static const u8 DexDescription_Volbeat_1[] = _(
+ "Wenn es Nacht wird, beginnt VOLBEATs\n"
+ "Schweif zu leuchten. Es kommuniziert\n"
+ "mit anderen, indem es die Helligkeit");
+static const u8 DexDescription_Volbeat_2[] = _(
+ "und das Blinken dieses Lichts reguliert.\n"
+ "Dieses POKéMON wird vom süßen Duft\n"
+ "der ILLUMISE angezogen.");
+
+static const u8 DexDescription_Illumise_1[] = _(
+ "ILLUMISE zieht ganze VOLBEAT-Scharen\n"
+ "mit seinem süßlichen Duft an. Dann\n"
+ "führt es diesen hell leuchtenden");
+static const u8 DexDescription_Illumise_2[] = _(
+ "Schwarm an, indem es geometrische\n"
+ "Figuren an den Nachthimmel malt.");
+
+static const u8 DexDescription_Roselia_1[] = _(
+ "ROSELIA verschießt scharfe Stacheln\n"
+ "auf jeden Feind, der versucht, die\n"
+ "Blumen an seinen Armen zu stehlen.");
+static const u8 DexDescription_Roselia_2[] = _(
+ "Der Duft dieses POKéMON beruhigt\n"
+ "Lebewesen.");
+
+static const u8 DexDescription_Schluppuck_1[] = _(
+ "Eigentlich besteht SCHLUPPUCKs Körper\n"
+ "nur aus einem Magen. Daher kann es\n"
+ "etwas verschlingen, das beinahe seine");
+static const u8 DexDescription_Schluppuck_2[] = _(
+ "Größe hat. Sein Magen enthält eine\n"
+ "spezielle Flüssigkeit, die wirklich alles\n"
+ "verdauen kann.");
+
+static const u8 DexDescription_Schlukwech_1[] = _(
+ "Wenn SCHLUKWECH Beute sichtet,\n"
+ "verspritzt es eine höchst giftige\n"
+ "Substanz aus seinen Poren und");
+static const u8 DexDescription_Schlukwech_2[] = _(
+ "besprüht damit sein Ziel. Wenn die Beute\n"
+ "geschwächt ist, schluckt es sie mit\n"
+ "seinem riesigen Maul im Ganzen herunter.");
+
+static const u8 DexDescription_Kanivanha_1[] = _(
+ "KANIVANHAs starke Kiefer und seine\n"
+ "spitzen Zähne verfügen über die \n"
+ "zerstörerische Kraft, Bootsrümpfe");
+static const u8 DexDescription_Kanivanha_2[] = _(
+ "verschlingen zu können. Dieses POKéMON\n"
+ "hat schon viele Boote versenkt.");
+
+static const u8 DexDescription_Tohaido_1[] = _(
+ "TOHAIDO trägt den Spitznamen\n"
+ "“Tyrann des Meeres” und ist\n"
+ "sehr gefürchtet. Seine grausamen Zähne");
+static const u8 DexDescription_Tohaido_2[] = _(
+ "wachsen sofort nach, wenn sie\n"
+ "ausgebrochen sind. Es kann sogar einen\n"
+ "Öltanker zerreißen.");
+
+static const u8 DexDescription_Wailmer_1[] = _(
+ "WAILMERs Nasenlöcher liegen über\n"
+ "seinen Augen. Dieses verspielte\n"
+ "POKéMON erschreckt gern Menschen,");
+static const u8 DexDescription_Wailmer_2[] = _(
+ "indem es das Meerwasser, das es in\n"
+ "seinem Körper speichert, mit aller Kraft\n"
+ "herausprustet.");
+
+static const u8 DexDescription_Wailord_1[] = _(
+ "WAILORD ist bisher das größte aller\n"
+ "identifizierten POKéMON. Es schwimmt\n"
+ "reglos auf dem offenen Meer und nimmt");
+static const u8 DexDescription_Wailord_2[] = _(
+ "mit seinem enormen Maul riesige Mengen\n"
+ "an Nahrung auf.");
+
+static const u8 DexDescription_Camaub_1[] = _(
+ "CAMAUB ist nicht besonders helle. Es\n"
+ "nimmt nicht einmal wahr, wenn es\n"
+ "getroffen wurde. Ein Hungergefühl");
+static const u8 DexDescription_Camaub_2[] = _(
+ "allerdings kann es nicht einmal eine\n"
+ "Sekunde lang aushalten. In seinem\n"
+ "Körper brodelt glühend heißes Magma.");
+
+static const u8 DexDescription_Camerupt_1[] = _(
+ "CAMERUPT trägt einen Vulkan in seinem\n"
+ "Körper. 10.000 Grad heißes Magma fließt\n"
+ "in ihm. Manchmal brechen die Höcker auf");
+static const u8 DexDescription_Camerupt_2[] = _(
+ "seinem Rücken aus und verspucken \n"
+ "glühend heißes Magma.");
+
+static const u8 DexDescription_Qurtel_1[] = _(
+ "QURTEL schaufelt sich auf der Suche\n"
+ "nach Kohle durch die Berge. Wenn es\n"
+ "welche findet, füllt es die Hohlräume");
+static const u8 DexDescription_Qurtel_2[] = _(
+ "seines Panzers mit Kohle und verbrennt\n"
+ "diese. Wenn es angegriffen wird, stößt\n"
+ "es dicken schwarzen Rauch aus.");
+
+static const u8 DexDescription_Spoink_1[] = _(
+ "SPOINK hüpft auf seinem Schweif durch\n"
+ "die Gegend. Die Erschütterung des\n"
+ "Hüpfens bringt sein Herz zum Schlagen.");
+static const u8 DexDescription_Spoink_2[] = _(
+ "Deshalb kann dieses POKéMON das Hüpfen\n"
+ "nicht sein lassen, ansonsten würde sein\n"
+ "Herz aufhören zu schlagen.");
+
+static const u8 DexDescription_Groink_1[] = _(
+ "GROINK benutzt die schwarzen Perlen\n"
+ "an seinem Körper dazu, die\n"
+ "psychischen Kraftwellen zu verstärken.");
+static const u8 DexDescription_Groink_2[] = _(
+ "Wenn es diese spezielle Fähigkeit nutzt,\n"
+ "wird sein schnaubender Atem\n"
+ "schwerfällig.");
+
+static const u8 DexDescription_Pandir_1[] = _(
+ "Jedes PANDIR auf der Welt soll ein\n"
+ "einzigartiges Fleckenmuster haben. Der\n"
+ "schwankende Gang dieses POKéMON");
+static const u8 DexDescription_Pandir_2[] = _(
+ "erweckt den Eindruck, es würde tanzen.");
+
+static const u8 DexDescription_Knacklion_1[] = _(
+ "KNACKLIONs Bau ist eine Art in den Sand\n"
+ "gegrabener Kessel. Dieses POKéMON\n"
+ "wartet geduldig auf Beute, um sie in");
+static const u8 DexDescription_Knacklion_2[] = _(
+ "seinen Bau zu werfen. Seine gigan-\n"
+ "tischen Kiefer verfügen über genügend\n"
+ "Kraft, um einen Felsen zu zerquetschen.");
+
+static const u8 DexDescription_Vibrava_1[] = _(
+ "Um seine Beute zu schwächen, erzeugt\n"
+ "VIBRAVA Ultraschallwellen, indem es\n"
+ "seine Flügel vibrieren lässt.");
+static const u8 DexDescription_Vibrava_2[] = _(
+ "Die Ultraschallwellen dieses POKéMON \n"
+ "sind so stark, dass sie bei Menschen\n"
+ "Kopfschmerzen verursachen können.");
+
+static const u8 DexDescription_Libelldra_1[] = _(
+ "LIBELLDRA wird auch “Geist der\n"
+ "Wüste” genannt. Da seine flatternden\n"
+ "Flügel eine Sandwolke aufwirbeln, ist");
+static const u8 DexDescription_Libelldra_2[] = _(
+ "dieses POKéMON beim Fliegen immer\n"
+ "von einem Sandsturm umgeben.");
+
+static const u8 DexDescription_Tuska_1[] = _(
+ "TUSKA lebt an trockenen Orten, z. B. in\n"
+ "Wüsten. Es versprüht einen starken\n"
+ "Duft aus seiner Blume, um Beute");
+static const u8 DexDescription_Tuska_2[] = _(
+ "anzuziehen. Wenn sich Beute nähert,\n"
+ "verschießt es scharfe Stacheln, um\n"
+ "seinen Gegner zu überwältigen.");
+
+static const u8 DexDescription_Noktuska_1[] = _(
+ "Am Tage bleibt NOKTUSKA reglos, damit es\n"
+ "in der brennenden Wüstenhitze keine\n"
+ "Feuchtigkeit verliert.");
+static const u8 DexDescription_Noktuska_2[] = _(
+ "Dieses POKéMON wird bei Nacht aktiv,\n"
+ "wenn die Temperatur sinkt.");
+
+static const u8 DexDescription_Wablu_1[] = _(
+ "WABLU hat leichte, flauschige Flügel,\n"
+ "die wie Schäfchenwolken aussehen.\n"
+ "Dieses POKéMON hat keine Angst vor");
+static const u8 DexDescription_Wablu_2[] = _(
+ "Menschen. Es landet auf ihren Köpfen \n"
+ "und bleibt dort sitzen wie ein \n"
+ "wattierter Hut.");
+
+static const u8 DexDescription_Altaria_1[] = _(
+ "ALTARIA tanzt und dreht sich in der\n"
+ "Luft durch viele Schäfchenwolken.\n"
+ "Indem es mit seiner kristallklaren");
+static const u8 DexDescription_Altaria_2[] = _(
+ "Stimme Melodien singt, versetzt es\n"
+ "seine Zuhörer in verträumtes\n"
+ "Erstaunen.");
+
+static const u8 DexDescription_Sengo_1[] = _(
+ "Die Erinnerungen an den Kampf mit\n"
+ "seinem Erzrivalen VIPITIS haben sich in\n"
+ "jede Zelle von SENGOs Körper");
+static const u8 DexDescription_Sengo_2[] = _(
+ "eingebrannt. Dieses POKéMON weicht\n"
+ "feindlichen Angriffen unheimlich\n"
+ "raffiniert und geschickt aus.");
+
+static const u8 DexDescription_Vipitis_1[] = _(
+ "VIPITIS lebt seit Generationen in\n"
+ "Fehde mit SENGO. Die Narben auf\n"
+ "seinem Körper sind Zeugen grausamer");
+static const u8 DexDescription_Vipitis_2[] = _(
+ "Kämpfe. Dieses POKéMON greift seine\n"
+ "Gegner mit seinem scharfkantigen\n"
+ "Schweif an.");
+
+static const u8 DexDescription_Lunastein_1[] = _(
+ "LUNASTEIN wurde in der Nähe eines\n"
+ "Meteoritenkraters entdeckt. Daher\n"
+ "nehmen einige Menschen an, dass");
+static const u8 DexDescription_Lunastein_2[] = _(
+ "dieses POKéMON aus dem Weltall stammt.\n"
+ "Diese Theorie konnte allerdings bisher\n"
+ "noch nicht belegt werden.");
+
+static const u8 DexDescription_Sonnfel_1[] = _(
+ "SONNFEL ist eine neue POKéMON-Spezies,\n"
+ "die angeblich aus dem Weltall\n"
+ "kam. Es gleitet durch die");
+static const u8 DexDescription_Sonnfel_2[] = _(
+ "Luft und bewegt sich leise. Im Kampf\n"
+ "setzt dieses POKéMON sehr helles Licht\n"
+ "ein.");
+
+static const u8 DexDescription_Schmerbe_1[] = _(
+ "SCHMERBEs empfindliche Barthaare\n"
+ "dienen ihm als hervorragendes\n"
+ "Radarsystem. Dieses POKéMON versteckt");
+static const u8 DexDescription_Schmerbe_2[] = _(
+ "sich im Schlamm, so dass nur noch seine\n"
+ "Barthaare herausgucken, und wartet\n"
+ "auf Beute.");
+
+static const u8 DexDescription_Welsar_1[] = _(
+ "WELSAR legt viel Wert auf sein\n"
+ "Territorium. Ein einzelnes POKéMON\n"
+ "dieser Art nennt einen Teich sein Eigen.");
+static const u8 DexDescription_Welsar_2[] = _(
+ "Wenn sich ein Feind nähert, schlägt es\n"
+ "um sich und verursacht ein gewaltiges\n"
+ "Erdbeben.");
+
+static const u8 DexDescription_Krebscorps_1[] = _(
+ "KREBSCORPS ist kein heimisches\n"
+ "POKéMON, sondern wurde als Haustier\n"
+ "importiert. Schließlich verwilderte es.");
+static const u8 DexDescription_Krebscorps_2[] = _(
+ "Dieses POKéMON ist mittlerweile sehr\n"
+ "robust und hat seine Population\n"
+ "vergrößert.");
+
+static const u8 DexDescription_Krebutack_1[] = _(
+ "KREBUTACK ist von Natur aus sehr\n"
+ "gewalttätig, so dass es dauernd andere\n"
+ "Lebewesen zum Kampf herausfordern");
+static const u8 DexDescription_Krebutack_2[] = _(
+ "muss. Andere Lebensformen lehnen es ab,\n"
+ "mit diesem POKéMON in ein und demselben\n"
+ "Teich zu leben.");
+
+static const u8 DexDescription_Puppance_1[] = _(
+ "PUPPANCE bewegt sich, indem es sich auf\n"
+ "seinem Fuß im Kreis dreht. In sehr alten\n"
+ "Ruinen wurden primitive Wandmalereien");
+static const u8 DexDescription_Puppance_2[] = _(
+ "entdeckt, die dieses POKéMON in\n"
+ "Begleitung von Menschen zeigen.");
+
+static const u8 DexDescription_Lepumentas_1[] = _(
+ "LEPUMENTAS sind aus Schlamm gefertigte\n"
+ "Puppen, die von primitiven Menschen\n"
+ "hergestellt und durch mysteriöse");
+static const u8 DexDescription_Lepumentas_2[] = _(
+ "Strahlen zum Leben erweckt wurden.\n"
+ "Diese POKéMON bewegen sich\n"
+ "schwebend fort.");
+
+static const u8 DexDescription_Liliep_1[] = _(
+ "Von LILIEP nahm man an, es sei seit\n"
+ "etwa hundert Millionen Jahren\n"
+ "ausgestorben. Mit seinen wie");
+static const u8 DexDescription_Liliep_2[] = _(
+ "Blütenblätter geformten Tentakeln\n"
+ "heftet es sich an einen Felsen auf dem\n"
+ "Meeresboden und fängt Beute.");
+
+static const u8 DexDescription_Wielie_1[] = _(
+ "WIELIE durchforstet den Meeresboden\n"
+ "nach Beute. Dieses POKéMON fährt\n"
+ "seinen baumstammartigen Nacken aus");
+static const u8 DexDescription_Wielie_2[] = _(
+ "und fängt mit seinen acht Tentakeln\n"
+ "Beute.");
+
+static const u8 DexDescription_Anorith_1[] = _(
+ "ANORITH wurde aus einem\n"
+ "prähistorischen Fossil erzeugt. Dieses\n"
+ "primitive POKéMON lebte einst in warmen");
+static const u8 DexDescription_Anorith_2[] = _(
+ "Gewässern. Es klemmt seine Beute\n"
+ "fest zwischen seine beiden riesigen\n"
+ "Klauen ein.");
+
+static const u8 DexDescription_Armaldo_1[] = _(
+ "Von ARMALDOs hartem Panzer prallen\n"
+ "alle Angriffe ab. Dieses POKéMON\n"
+ "hat zwei mächtige Klauen, die es");
+static const u8 DexDescription_Armaldo_2[] = _(
+ "ausfahren oder einziehen kann. Es hat\n"
+ "so viel Kraft, dass es damit eine\n"
+ "Stahlplatte pulverisieren kann.");
+
+static const u8 DexDescription_Barschwa_1[] = _(
+ "BARSCHWAs Flossen waren schon immer\n"
+ "zerfetzt. Wegen seines merkwürdigen\n"
+ "Aussehens wird dieses POKéMON");
+static const u8 DexDescription_Barschwa_2[] = _(
+ "weitgehend ignoriert. Es kann sowohl im\n"
+ "Meer als auch in Flüssen leben.");
+
+static const u8 DexDescription_Milotic_1[] = _(
+ "MILOTIC soll das Schönste aller\n"
+ "POKéMON sein. Es hat die Macht,\n"
+ "Emotionen wie Wut und Feindseligkeit zu");
+static const u8 DexDescription_Milotic_2[] = _(
+ "besänftigen und somit erbitterten\n"
+ "Streit zu vermeiden.");
+
+static const u8 DexDescription_Formeo_1[] = _(
+ "FORMEOs Erscheinung ändert sich\n"
+ "mit dem Wetter. Dieses POKéMON hat\n"
+ "die Fähigkeit erworben, die mächtige");
+static const u8 DexDescription_Formeo_2[] = _(
+ "Kraft der Natur zu nutzen, um seinen\n"
+ "winzigen Körper zu schützen.");
+
+static const u8 DexDescription_Kecleon_1[] = _(
+ "KECLEON kann die Farbe seines Körpers\n"
+ "bei Bedarf verändern, um sich seiner\n"
+ "Umgebung anzupassen. Es gibt allerdings");
+static const u8 DexDescription_Kecleon_2[] = _(
+ "eine Ausnahme: Das Zickzackmuster auf\n"
+ "seinem Bauch kann es nicht verändern.");
+
+static const u8 DexDescription_Shuppet_1[] = _(
+ "SHUPPET wird durch Gefühle wie Neid und\n"
+ "Rachsucht angezogen. Wenn jemand\n"
+ "starke Rachegelüste entwickelt,");
+static const u8 DexDescription_Shuppet_2[] = _(
+ "erscheint dieses POKéMON in Scharen\n"
+ "und reiht sich unter der Dachrinne der\n"
+ "Person auf.");
+
+static const u8 DexDescription_Banette_1[] = _(
+ "BANETTE belegt andere mit Flüchen,\n"
+ "indem es Nadeln in seinen eigenen\n"
+ "Körper sticht. Dieses POKéMON war");
+static const u8 DexDescription_Banette_2[] = _(
+ "ursprünglich eine Mitleid erregende\n"
+ "Plüschpuppe, die weggeworfen wurde.");
+
+static const u8 DexDescription_Zwirrlicht_1[] = _(
+ "ZWIRRLICHT kann durch jede Wand gehen,\n"
+ "egal, wie dick diese ist. Wenn dieses\n"
+ "POKéMON sich ein Ziel gesucht hat,");
+static const u8 DexDescription_Zwirrlicht_2[] = _(
+ "verfolgt es seinen Feind unnachgiebig\n"
+ "bis zum Sonnenaufgang.");
+
+static const u8 DexDescription_Zwirrklop_1[] = _(
+ "ZWIRRKLOPs Körper ist komplett hohl. Es\n"
+ "wird auch mit einem Schwarzen Loch\n"
+ "verglichen. Dieses POKéMON nimmt alles");
+static const u8 DexDescription_Zwirrklop_2[] = _(
+ "in seinem Körper auf, es kommt jedoch\n"
+ "nichts wieder heraus.");
+
+static const u8 DexDescription_Tropius_1[] = _(
+ "Die Früchte am Nacken von TROPIUS\n"
+ "sind bei Kindern sehr beliebt. Dieses\n"
+ "POKéMON liebt Früchte und isst sie");
+static const u8 DexDescription_Tropius_2[] = _(
+ "ständig. Offensichtlich sind ihm wegen\n"
+ "dieser Vorliebe selber Früchte\n"
+ "gewachsen.");
+
+static const u8 DexDescription_Palimpalim_1[] = _(
+ "PALIMPALIMs Schreie hallen durch\n"
+ "seinen hohlen Körper. Wenn dieses\n"
+ "POKéMON wütend wird, erzeugen");
+static const u8 DexDescription_Palimpalim_2[] = _(
+ "seine Schreie Ultraschallwellen, die\n"
+ "seine Feinde buchstäblich wegfegen\n"
+ "können.");
+
+static const u8 DexDescription_Absol_1[] = _(
+ "Jedes Mal, wenn ABSOL sich den Menschen\n"
+ "zeigt, endet dies in einer Katastrophe\n"
+ "wie Erdbeben oder Sturmflut.");
+static const u8 DexDescription_Absol_2[] = _(
+ "Deswegen ist es auch als das\n"
+ "Katastrophen-POKéMON bekannt.");
+
+static const u8 DexDescription_Isso_1[] = _(
+ "ISSO hat immer ein breites, fröhliches\n"
+ "Lächeln auf seinem Gesicht. Um \n"
+ "festzustellen, ob es wütend ist, muss");
+static const u8 DexDescription_Isso_2[] = _(
+ "man seinen Schweif betrachten. Wenn es\n"
+ "wütend ist, schlägt es damit auf den\n"
+ "Boden.");
+
+static const u8 DexDescription_Schneppke_1[] = _(
+ "SCHNEPPKE lebt in Gebieten mit heftigem\n"
+ "Schneefall. In Jahreszeiten, in denen es\n"
+ "nicht schneit, wie im Frühling oder im");
+static const u8 DexDescription_Schneppke_2[] = _(
+ "Sommer, nimmt das POKéMON Reißaus, um\n"
+ "in einer Höhle ein ruhiges Leben unter\n"
+ "Stalaktiten und Stalagmiten zu führen.");
+
+static const u8 DexDescription_Firnontor_1[] = _(
+ "FIRNONTOR hat einen Körper aus Stein,\n"
+ "den es mit einem Panzer aus Eis noch\n"
+ "verstärkt. Dieses POKéMON kann");
+static const u8 DexDescription_Firnontor_2[] = _(
+ "die Luftfeuchtigkeit der Atmosphäre\n"
+ "einfrieren und in jegliche Form\n"
+ "verwandeln.");
+
+static const u8 DexDescription_Seemops_1[] = _(
+ "SEEMOPS kann schneller rollen als laufen.\n"
+ "Wenn Gruppen dieses POKéMON \n"
+ "zusammen essen, klatschen sie");
+static const u8 DexDescription_Seemops_2[] = _(
+ "gleichzeitig, um ihre Freude zu zeigen.\n"
+ "Deswegen sind ihre Mahlzeiten sehr\n"
+ "laut.");
+
+static const u8 DexDescription_Seejong_1[] = _(
+ "SEEJONG hat die Angewohnheit, alles,\n"
+ "was es zum ersten Mal sieht, auf seiner \n"
+ "Nasenspitze zu jonglieren. Dieses");
+static const u8 DexDescription_Seejong_2[] = _(
+ "POKéMON hält sich bei Laune, indem es\n"
+ "manchmal ein SEEMOPS auf seiner Nase\n"
+ "balanciert und hin- und herrollt.");
+
+static const u8 DexDescription_Walraisa_1[] = _(
+ "WALRAISA hat zwei massive Stoßzähne,\n"
+ "die mit einem Hieb Eisblöcke\n"
+ "zertrümmern können, die bis zu");
+static const u8 DexDescription_Walraisa_2[] = _(
+ "10 Tonnen wiegen. Es besitzt eine dicke\n"
+ "Speckschicht, die es vor eisigen\n"
+ "Temperaturen schützt.");
+
+static const u8 DexDescription_Perlu_1[] = _(
+ "PERLUs kräftige Schale dient nicht\n"
+ "nur dem Schutz, es nutzt sie auch zum\n"
+ "Fangen von Beute. Die ausgewachsene");
+static const u8 DexDescription_Perlu_2[] = _(
+ "Schale eines PERLU weist viele\n"
+ "Kerben und Kratzer auf.");
+
+static const u8 DexDescription_Aalabyss_1[] = _(
+ "AALABYSS entging lange der\n"
+ "Aufmerksamkeit des Menschen, da es in\n"
+ "extremen Tiefen des Meeres lebt.");
+static const u8 DexDescription_Aalabyss_2[] = _(
+ "Die Augen dieses POKéMON können\n"
+ "selbst in den dunklen und trüben Tiefen\n"
+ "des Meeres einwandfrei sehen.");
+
+static const u8 DexDescription_Saganabyss_1[] = _(
+ "SAGANABYSS lebt in extremen Tiefen des\n"
+ "Südmeeres. Sein Körper ist so angelegt,\n"
+ "dass er dem enormen Wasserdruck dieser");
+static const u8 DexDescription_Saganabyss_2[] = _(
+ "unglaublichen Tiefe standhalten kann.\n"
+ "Daher übersteht dieses POKéMON\n"
+ "gewöhnliche Attacken unbeschadet.");
+
+static const u8 DexDescription_Relicanth_1[] = _(
+ "RELICANTH ist eine POKéMON-Spezies,\n"
+ "die vor hundert Millionen Jahren\n"
+ "existierte, ohne jemals ihre Form zu");
+static const u8 DexDescription_Relicanth_2[] = _(
+ "verändern. Dieses antike POKéMON\n"
+ "hat ein zahnloses Maul und ernährt sich\n"
+ "von Mikroorganismen.");
+
+static const u8 DexDescription_Liebiskus_1[] = _(
+ "LIEBISKUS lebt in den seichten\n"
+ "Gewässern der Tropen. Dieses herz-\n"
+ "förmige POKéMON verdankt seinen Namen");
+static const u8 DexDescription_Liebiskus_2[] = _(
+ "der Tatsache, dass es hinter Liebes-\n"
+ "paaren herschwamm, die es in den Wellen\n"
+ "des Ozeans beobachtet hatte.");
+
+static const u8 DexDescription_Kindwurm_1[] = _(
+ "KINDWURM hat den Traum, fliegen zu\n"
+ "können. In zahlreichen vergeblichen\n"
+ "Versuchen stürzte es sich die Klippen");
+static const u8 DexDescription_Kindwurm_2[] = _(
+ "herunter. Daher ist sein Kopf sehr\n"
+ "robust und so hart wie Stahl geworden.");
+
+static const u8 DexDescription_Draschel_1[] = _(
+ "In DRASCHELs panzerartiger Schale\n"
+ "vollziehen seine Zellen eine\n"
+ "Transformation, um einen völlig neuen");
+static const u8 DexDescription_Draschel_2[] = _(
+ "Körper zu bilden. Die Schale dieses\n"
+ "POKéMON ist ausgesprochen schwer, so\n"
+ "dass seine Bewegungen träge wirken.");
+
+static const u8 DexDescription_Brutalanda_1[] = _(
+ "BRUTALANDA träumte sehr lange davon,\n"
+ "dass ihm Flügel wachsen mögen. Dieser\n"
+ "sehnliche Wunsch hat wohl eine");
+static const u8 DexDescription_Brutalanda_2[] = _(
+ "plötzliche Mutation in den Zellen dieses\n"
+ "POKéMON hervorgerufen, so dass ihm\n"
+ "plötzlich prächtige Flügel wuchsen.");
+
+static const u8 DexDescription_Tanhel_1[] = _(
+ "Anstelle von Blut fließt eine starke\n"
+ "magnetische Energie durch TANHELs\n"
+ "Körper. Dieses POKéMON kommuniziert");
+static const u8 DexDescription_Tanhel_2[] = _(
+ "mit anderen, indem es kontrollierte\n"
+ "magnetische Impulse aussendet.");
+
+static const u8 DexDescription_Metang_1[] = _(
+ "Wenn zwei TANHEL miteinander\n"
+ "verschmelzen, entsteht daraus METANG.\n"
+ "Die Gehirne der TANHEL werden mit");
+static const u8 DexDescription_Metang_2[] = _(
+ "einem magnetischen Nervensystem\n"
+ "verbunden. Dadurch erzeugt es starke\n"
+ "psychokinetische Energie.");
+
+static const u8 DexDescription_Metagross_1[] = _(
+ "METAGROSS hat insgesamt vier Gehirne.\n"
+ "Diese können schwierige Berechnungen\n"
+ "schneller lösen als ein Supercomputer.");
+static const u8 DexDescription_Metagross_2[] = _(
+ "Dieses POKéMON kann durch die Lüfte\n"
+ "schweben, indem es seine vier Beine\n"
+ "einklappt.");
+
+static const u8 DexDescription_Regirock_1[] = _(
+ "REGIROCK wurde vor langer Zeit von\n"
+ "Menschen weggeschlossen. Wenn der\n"
+ "Körper dieses POKéMON im Kampf");
+static const u8 DexDescription_Regirock_2[] = _(
+ "Schaden nimmt, sucht es nach\n"
+ "passenden Steinen, um sich selber zu\n"
+ "reparieren.");
+
+static const u8 DexDescription_Regice_1[] = _(
+ "REGICEs tiefgefrorener Körper\n"
+ "entstand während der Eiszeit. Es kann\n"
+ "nicht einmal durch Feuer geschmolzen");
+static const u8 DexDescription_Regice_2[] = _(
+ "werden. Dieses POKéMON kontrolliert\n"
+ "eisige Luft von minus 200 Grad.");
+
+static const u8 DexDescription_Registeel_1[] = _(
+ "REGISTEEL hat einen Körper, der härter\n"
+ "ist als jede Art von Metall. Sein Körper\n"
+ "scheint hohl zu sein.");
+static const u8 DexDescription_Registeel_2[] = _(
+ "Niemand hat eine Ahnung, was dieses\n"
+ "POKéMON wohl frisst.");
+
+static const u8 DexDescription_Latias_1[] = _(
+ "LATIAS ist in höchstem Maße empfindlich\n"
+ "gegenüber den Emotionen der Menschen.\n"
+ "Wenn es den Anflug von Feindseligkeit");
+static const u8 DexDescription_Latias_2[] = _(
+ "wahrnimmt, werden seine Federn\n"
+ "zerzaust und es stößt schrille Schreie\n"
+ "aus, um seinen Gegner einzuschüchtern.");
+
+static const u8 DexDescription_Latios_1[] = _(
+ "LATIOS kann seinem Feind ein Bild\n"
+ "von etwas, das dieser einmal gesehen\n"
+ "hat, in den Kopf projizieren. Dieses");
+static const u8 DexDescription_Latios_2[] = _(
+ "POKéMON ist intelligent und es versteht\n"
+ "die menschliche Sprache.");
+
+static const u8 DexDescription_Kyogre_1[] = _(
+ "KYOGRE kann riesige Regenwolken\n"
+ "erzeugen, die den gesamten Himmel\n"
+ "bedecken, und wolkenbruchartige");
+static const u8 DexDescription_Kyogre_2[] = _(
+ "Niederschläge hervorrufen. Dieses\n"
+ "POKéMON hat vielen Menschen das Leben\n"
+ "gerettet, die unter einer Dürre litten.");
+
+static const u8 DexDescription_Groudon_1[] = _(
+ "GROUDON wurde lange Zeit in der\n"
+ "Mythologie als ein POKéMON\n"
+ "beschrieben, das Land erschaffen und");
+static const u8 DexDescription_Groudon_2[] = _(
+ "Kontinente vergrößern kann. Dieses\n"
+ "POKéMON fiel nach einem erbitterten\n"
+ "Kampf mit KYOGRE in den Schlaf.");
+
+static const u8 DexDescription_Rayquaza_1[] = _(
+ "RAYQUAZA lebte für hunderte Millionen\n"
+ "Jahre in der Ozonschicht und stieg nie\n"
+ "zur Erde hinab. Dieses POKéMON");
+static const u8 DexDescription_Rayquaza_2[] = _(
+ "lebt von Wasser und Partikeln aus der\n"
+ "Atmosphäre.");
+
+static const u8 DexDescription_Jirachi_1[] = _(
+ "Einer Legende nach erfüllt JIRACHI\n"
+ "jeden Wunsch, der auf einen Notizzettel\n"
+ "an seinem Kopf geschrieben wird. Wenn");
+static const u8 DexDescription_Jirachi_2[] = _(
+ "dieses POKéMON Gefahr wittert, kämpft\n"
+ "es bereits, bevor es überhaupt\n"
+ "aufgewacht ist.");
+
+static const u8 DexDescription_Deoxys_1[] = _(
+ "Die DNS eines Weltraumvirus hat eine\n"
+ "spontane Mutation erfahren, da sie\n"
+ "einem Laserstrahl ausgesetzt wurde.");
+static const u8 DexDescription_Deoxys_2[] = _(
+ "Daraus entstand DEOXYS. \n"
+ "Das kristallartige Organ auf der Brust\n"
+ "dieses POKéMON ist sein Gehirn.");
+
+static const struct PokedexEntry gPokedexEntries[] = {
+ {
+ // Dummy
+ .categoryName = _("UNBEKANNT"),
+ .height = 0,
+ .weight = 0,
+ .descriptionPage1 = DexDescription_Dummy_1,
+ .descriptionPage2 = DexDescription_Dummy_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bisasam
+ .categoryName = _("SAMEN"),
+ .height = 7,
+ .weight = 69,
+ .descriptionPage1 = DexDescription_Bisasam_1,
+ .descriptionPage2 = DexDescription_Bisasam_2,
+ .pokemonScale = 356,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bisaknosp
+ .categoryName = _("SAMEN"),
+ .height = 10,
+ .weight = 130,
+ .descriptionPage1 = DexDescription_Bisaknosp_1,
+ .descriptionPage2 = DexDescription_Bisaknosp_2,
+ .pokemonScale = 335,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bisaflor
+ .categoryName = _("SAMEN"),
+ .height = 20,
+ .weight = 1000,
+ .descriptionPage1 = DexDescription_Bisaflor_1,
+ .descriptionPage2 = DexDescription_Bisaflor_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 388,
+ .trainerOffset = 6,
+ },
+ {
+ // Glumanda
+ .categoryName = _("ECHSE"),
+ .height = 6,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Glumanda_1,
+ .descriptionPage2 = DexDescription_Glumanda_2,
+ .pokemonScale = 444,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Glutexo
+ .categoryName = _("FLAMME"),
+ .height = 11,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Glutexo_1,
+ .descriptionPage2 = DexDescription_Glutexo_2,
+ .pokemonScale = 302,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Glurak
+ .categoryName = _("FLAMME"),
+ .height = 17,
+ .weight = 905,
+ .descriptionPage1 = DexDescription_Glurak_1,
+ .descriptionPage2 = DexDescription_Glurak_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 302,
+ .trainerOffset = 3,
+ },
+ {
+ // Schiggy
+ .categoryName = _("MINIKRÖTE"),
+ .height = 5,
+ .weight = 90,
+ .descriptionPage1 = DexDescription_Schiggy_1,
+ .descriptionPage2 = DexDescription_Schiggy_2,
+ .pokemonScale = 412,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schillok
+ .categoryName = _("KRÖTE"),
+ .height = 10,
+ .weight = 225,
+ .descriptionPage1 = DexDescription_Schillok_1,
+ .descriptionPage2 = DexDescription_Schillok_2,
+ .pokemonScale = 332,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Turtok
+ .categoryName = _("PANZERTIER"),
+ .height = 16,
+ .weight = 855,
+ .descriptionPage1 = DexDescription_Turtok_1,
+ .descriptionPage2 = DexDescription_Turtok_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 65535,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ {
+ // Raupy
+ .categoryName = _("WURM"),
+ .height = 3,
+ .weight = 29,
+ .descriptionPage1 = DexDescription_Raupy_1,
+ .descriptionPage2 = DexDescription_Raupy_2,
+ .pokemonScale = 549,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Safcon
+ .categoryName = _("KOKON"),
+ .height = 7,
+ .weight = 99,
+ .descriptionPage1 = DexDescription_Safcon_1,
+ .descriptionPage2 = DexDescription_Safcon_2,
+ .pokemonScale = 350,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Smettbo
+ .categoryName = _("FALTER"),
+ .height = 11,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Smettbo_1,
+ .descriptionPage2 = DexDescription_Smettbo_2,
+ .pokemonScale = 312,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hornliu
+ .categoryName = _("RAUPE"),
+ .height = 3,
+ .weight = 32,
+ .descriptionPage1 = DexDescription_Hornliu_1,
+ .descriptionPage2 = DexDescription_Hornliu_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kokuna
+ .categoryName = _("KOKON"),
+ .height = 6,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Kokuna_1,
+ .descriptionPage2 = DexDescription_Kokuna_2,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bibor
+ .categoryName = _("GIFTBIENE"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Bibor_1,
+ .descriptionPage2 = DexDescription_Bibor_2,
+ .pokemonScale = 366,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Taubsi
+ .categoryName = _("KLEINVOGEL"),
+ .height = 3,
+ .weight = 18,
+ .descriptionPage1 = DexDescription_Taubsi_1,
+ .descriptionPage2 = DexDescription_Taubsi_2,
+ .pokemonScale = 508,
+ .pokemonOffset = 65533,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tauboga
+ .categoryName = _("VOGEL"),
+ .height = 11,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Tauboga_1,
+ .descriptionPage2 = DexDescription_Tauboga_2,
+ .pokemonScale = 331,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tauboss
+ .categoryName = _("VOGEL"),
+ .height = 15,
+ .weight = 395,
+ .descriptionPage1 = DexDescription_Tauboss_1,
+ .descriptionPage2 = DexDescription_Tauboss_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rattfratz
+ .categoryName = _("MAUS"),
+ .height = 3,
+ .weight = 35,
+ .descriptionPage1 = DexDescription_Rattfratz_1,
+ .descriptionPage2 = DexDescription_Rattfratz_2,
+ .pokemonScale = 481,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rattikarl
+ .categoryName = _("MAUS"),
+ .height = 7,
+ .weight = 185,
+ .descriptionPage1 = DexDescription_Rattikarl_1,
+ .descriptionPage2 = DexDescription_Rattikarl_2,
+ .pokemonScale = 459,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Habitak
+ .categoryName = _("KLEINVOGEL"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Habitak_1,
+ .descriptionPage2 = DexDescription_Habitak_2,
+ .pokemonScale = 571,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ibitak
+ .categoryName = _("PICKVOGEL"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Ibitak_1,
+ .descriptionPage2 = DexDescription_Ibitak_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rettan
+ .categoryName = _("SCHLANGE"),
+ .height = 20,
+ .weight = 69,
+ .descriptionPage1 = DexDescription_Rettan_1,
+ .descriptionPage2 = DexDescription_Rettan_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Arbok
+ .categoryName = _("KOBRA"),
+ .height = 35,
+ .weight = 650,
+ .descriptionPage1 = DexDescription_Arbok_1,
+ .descriptionPage2 = DexDescription_Arbok_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ {
+ // Pikachu
+ .categoryName = _("MAUS"),
+ .height = 4,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Pikachu_1,
+ .descriptionPage2 = DexDescription_Pikachu_2,
+ .pokemonScale = 479,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Raichu
+ .categoryName = _("MAUS"),
+ .height = 8,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Raichu_1,
+ .descriptionPage2 = DexDescription_Raichu_2,
+ .pokemonScale = 426,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sandan
+ .categoryName = _("MAUS"),
+ .height = 6,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Sandan_1,
+ .descriptionPage2 = DexDescription_Sandan_2,
+ .pokemonScale = 365,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sandamer
+ .categoryName = _("MAUS"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Sandamer_1,
+ .descriptionPage2 = DexDescription_Sandamer_2,
+ .pokemonScale = 341,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidoran♀
+ .categoryName = _("GIFTDORN"),
+ .height = 4,
+ .weight = 70,
+ .descriptionPage1 = DexDescription_NidoranF_1,
+ .descriptionPage2 = DexDescription_NidoranF_2,
+ .pokemonScale = 488,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidorina
+ .categoryName = _("GIFTDORN"),
+ .height = 8,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Nidorina_1,
+ .descriptionPage2 = DexDescription_Nidorina_2,
+ .pokemonScale = 381,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidoqueen
+ .categoryName = _("BOHRER"),
+ .height = 13,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Nidoqueen_1,
+ .descriptionPage2 = DexDescription_Nidoqueen_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidoran♂
+ .categoryName = _("GIFTDORN"),
+ .height = 5,
+ .weight = 90,
+ .descriptionPage1 = DexDescription_NidoranM_1,
+ .descriptionPage2 = DexDescription_NidoranM_2,
+ .pokemonScale = 511,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidorino
+ .categoryName = _("GIFTDORN"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Nidorino_1,
+ .descriptionPage2 = DexDescription_Nidorino_2,
+ .pokemonScale = 408,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nidoking
+ .categoryName = _("BOHRER"),
+ .height = 14,
+ .weight = 620,
+ .descriptionPage1 = DexDescription_Nidoking_1,
+ .descriptionPage2 = DexDescription_Nidoking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Piepi
+ .categoryName = _("FEE"),
+ .height = 6,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Piepi_1,
+ .descriptionPage2 = DexDescription_Piepi_2,
+ .pokemonScale = 441,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pixi
+ .categoryName = _("FEE"),
+ .height = 13,
+ .weight = 400,
+ .descriptionPage1 = DexDescription_Pixi_1,
+ .descriptionPage2 = DexDescription_Pixi_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Vulpix
+ .categoryName = _("FUCHS"),
+ .height = 6,
+ .weight = 99,
+ .descriptionPage1 = DexDescription_Vulpix_1,
+ .descriptionPage2 = DexDescription_Vulpix_2,
+ .pokemonScale = 542,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Vulnona
+ .categoryName = _("FUCHS"),
+ .height = 11,
+ .weight = 199,
+ .descriptionPage1 = DexDescription_Vulnona_1,
+ .descriptionPage2 = DexDescription_Vulnona_2,
+ .pokemonScale = 339,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pummeluff
+ .categoryName = _("BALLON"),
+ .height = 5,
+ .weight = 55,
+ .descriptionPage1 = DexDescription_Pummeluff_1,
+ .descriptionPage2 = DexDescription_Pummeluff_2,
+ .pokemonScale = 433,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Knuddeluff
+ .categoryName = _("BALLON"),
+ .height = 10,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Knuddeluff_1,
+ .descriptionPage2 = DexDescription_Knuddeluff_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Zubat
+ .categoryName = _("FLEDERMAUS"),
+ .height = 8,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Zubat_1,
+ .descriptionPage2 = DexDescription_Zubat_2,
+ .pokemonScale = 362,
+ .pokemonOffset = 65531,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Golbat
+ .categoryName = _("FLEDERMAUS"),
+ .height = 16,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Golbat_1,
+ .descriptionPage2 = DexDescription_Golbat_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Myrapla
+ .categoryName = _("UNKRAUT"),
+ .height = 5,
+ .weight = 54,
+ .descriptionPage1 = DexDescription_Myrapla_1,
+ .descriptionPage2 = DexDescription_Myrapla_2,
+ .pokemonScale = 423,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Duflor
+ .categoryName = _("UNKRAUT"),
+ .height = 8,
+ .weight = 86,
+ .descriptionPage1 = DexDescription_Duflor_1,
+ .descriptionPage2 = DexDescription_Duflor_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Giflor
+ .categoryName = _("BLUME"),
+ .height = 12,
+ .weight = 186,
+ .descriptionPage1 = DexDescription_Giflor_1,
+ .descriptionPage2 = DexDescription_Giflor_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Paras
+ .categoryName = _("PILZ"),
+ .height = 3,
+ .weight = 54,
+ .descriptionPage1 = DexDescription_Paras_1,
+ .descriptionPage2 = DexDescription_Paras_2,
+ .pokemonScale = 593,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Parasek
+ .categoryName = _("PILZ"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Parasek_1,
+ .descriptionPage2 = DexDescription_Parasek_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bluzuk
+ .categoryName = _("INSEKT"),
+ .height = 10,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Bluzuk_1,
+ .descriptionPage2 = DexDescription_Bluzuk_2,
+ .pokemonScale = 360,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 65535,
+ },
+ {
+ // Omot
+ .categoryName = _("GIFTMOTTE"),
+ .height = 15,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Omot_1,
+ .descriptionPage2 = DexDescription_Omot_2,
+ .pokemonScale = 285,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ {
+ // Digda
+ .categoryName = _("MAULWURF"),
+ .height = 2,
+ .weight = 8,
+ .descriptionPage1 = DexDescription_Digda_1,
+ .descriptionPage2 = DexDescription_Digda_2,
+ .pokemonScale = 833,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Digdri
+ .categoryName = _("MAULWURF"),
+ .height = 7,
+ .weight = 333,
+ .descriptionPage1 = DexDescription_Digdri_1,
+ .descriptionPage2 = DexDescription_Digdri_2,
+ .pokemonScale = 406,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Mauzi
+ .categoryName = _("KATZE"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Mauzi_1,
+ .descriptionPage2 = DexDescription_Mauzi_2,
+ .pokemonScale = 480,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Snobilikat
+ .categoryName = _("RASSEKATZE"),
+ .height = 10,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Snobilikat_1,
+ .descriptionPage2 = DexDescription_Snobilikat_2,
+ .pokemonScale = 320,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Enton
+ .categoryName = _("ENTE"),
+ .height = 8,
+ .weight = 196,
+ .descriptionPage1 = DexDescription_Enton_1,
+ .descriptionPage2 = DexDescription_Enton_2,
+ .pokemonScale = 369,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Entoron
+ .categoryName = _("ENTE"),
+ .height = 17,
+ .weight = 766,
+ .descriptionPage1 = DexDescription_Entoron_1,
+ .descriptionPage2 = DexDescription_Entoron_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 273,
+ .trainerOffset = 1,
+ },
+ {
+ // Menki
+ .categoryName = _("SCHW./ AFFE"),
+ .height = 5,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Menki_1,
+ .descriptionPage2 = DexDescription_Menki_2,
+ .pokemonScale = 404,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rasaff
+ .categoryName = _("SCHW./ AFFE"),
+ .height = 10,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Rasaff_1,
+ .descriptionPage2 = DexDescription_Rasaff_2,
+ .pokemonScale = 326,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Fukano
+ .categoryName = _("HUND"),
+ .height = 7,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Fukano_1,
+ .descriptionPage2 = DexDescription_Fukano_2,
+ .pokemonScale = 346,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Arkani
+ .categoryName = _("LEGENDÄR"),
+ .height = 19,
+ .weight = 1550,
+ .descriptionPage1 = DexDescription_Arkani_1,
+ .descriptionPage2 = DexDescription_Arkani_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 4,
+ },
+ {
+ // Quapsel
+ .categoryName = _("KAULQUAPPE"),
+ .height = 6,
+ .weight = 124,
+ .descriptionPage1 = DexDescription_Quapsel_1,
+ .descriptionPage2 = DexDescription_Quapsel_2,
+ .pokemonScale = 369,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Quaputzi
+ .categoryName = _("KAULQUAPPE"),
+ .height = 10,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Quaputzi_1,
+ .descriptionPage2 = DexDescription_Quaputzi_2,
+ .pokemonScale = 288,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Quappo
+ .categoryName = _("KAULQUAPPE"),
+ .height = 13,
+ .weight = 540,
+ .descriptionPage1 = DexDescription_Quappo_1,
+ .descriptionPage2 = DexDescription_Quappo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Abra
+ .categoryName = _("PSI"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Abra_1,
+ .descriptionPage2 = DexDescription_Abra_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kadabra
+ .categoryName = _("PSI"),
+ .height = 13,
+ .weight = 565,
+ .descriptionPage1 = DexDescription_Kadabra_1,
+ .descriptionPage2 = DexDescription_Kadabra_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Simsala
+ .categoryName = _("PSI"),
+ .height = 15,
+ .weight = 480,
+ .descriptionPage1 = DexDescription_Simsala_1,
+ .descriptionPage2 = DexDescription_Simsala_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Machollo
+ .categoryName = _("KRAFTPROTZ"),
+ .height = 8,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Machollo_1,
+ .descriptionPage2 = DexDescription_Machollo_2,
+ .pokemonScale = 342,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Maschock
+ .categoryName = _("KRAFTPROTZ"),
+ .height = 15,
+ .weight = 705,
+ .descriptionPage1 = DexDescription_Maschock_1,
+ .descriptionPage2 = DexDescription_Maschock_2,
+ .pokemonScale = 323,
+ .pokemonOffset = 9,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ {
+ // Machomei
+ .categoryName = _("KRAFTPROTZ"),
+ .height = 16,
+ .weight = 1300,
+ .descriptionPage1 = DexDescription_Machomei_1,
+ .descriptionPage2 = DexDescription_Machomei_2,
+ .pokemonScale = 280,
+ .pokemonOffset = 1,
+ .trainerScale = 269,
+ .trainerOffset = 65535,
+ },
+ {
+ // Knofensa
+ .categoryName = _("BLUME"),
+ .height = 7,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Knofensa_1,
+ .descriptionPage2 = DexDescription_Knofensa_2,
+ .pokemonScale = 354,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ultrigaria
+ .categoryName = _("FLIEGENTOT"),
+ .height = 10,
+ .weight = 64,
+ .descriptionPage1 = DexDescription_Ultrigaria_1,
+ .descriptionPage2 = DexDescription_Ultrigaria_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sarzenia
+ .categoryName = _("FLIEGENTOT"),
+ .height = 17,
+ .weight = 155,
+ .descriptionPage1 = DexDescription_Sarzenia_1,
+ .descriptionPage2 = DexDescription_Sarzenia_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 3,
+ },
+ {
+ // Tentacha
+ .categoryName = _("QUALLE"),
+ .height = 9,
+ .weight = 455,
+ .descriptionPage1 = DexDescription_Tentacha_1,
+ .descriptionPage2 = DexDescription_Tentacha_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tentoxa
+ .categoryName = _("QUALLE"),
+ .height = 16,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Tentoxa_1,
+ .descriptionPage2 = DexDescription_Tentoxa_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 312,
+ .trainerOffset = 1,
+ },
+ {
+ // Kleinstein
+ .categoryName = _("GESTEIN"),
+ .height = 4,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Kleinstein_1,
+ .descriptionPage2 = DexDescription_Kleinstein_2,
+ .pokemonScale = 347,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Georok
+ .categoryName = _("GESTEIN"),
+ .height = 10,
+ .weight = 1050,
+ .descriptionPage1 = DexDescription_Georok_1,
+ .descriptionPage2 = DexDescription_Georok_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Geowaz
+ .categoryName = _("URGESTEIN"),
+ .height = 14,
+ .weight = 3000,
+ .descriptionPage1 = DexDescription_Geowaz_1,
+ .descriptionPage2 = DexDescription_Geowaz_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ {
+ // Ponita
+ .categoryName = _("FEUERPFERD"),
+ .height = 10,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Ponita_1,
+ .descriptionPage2 = DexDescription_Ponita_2,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Gallopa
+ .categoryName = _("FEUERPFERD"),
+ .height = 17,
+ .weight = 950,
+ .descriptionPage1 = DexDescription_Gallopa_1,
+ .descriptionPage2 = DexDescription_Gallopa_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 289,
+ .trainerOffset = 1,
+ },
+ {
+ // Flegmon
+ .categoryName = _("SCHNARCHER"),
+ .height = 12,
+ .weight = 360,
+ .descriptionPage1 = DexDescription_Flegmon_1,
+ .descriptionPage2 = DexDescription_Flegmon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lahmus
+ .categoryName = _("SYMBIOSE"),
+ .height = 16,
+ .weight = 785,
+ .descriptionPage1 = DexDescription_Lahmus_1,
+ .descriptionPage2 = DexDescription_Lahmus_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ {
+ // Magnetilo
+ .categoryName = _("MAGNET"),
+ .height = 3,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Magnetilo_1,
+ .descriptionPage2 = DexDescription_Magnetilo_2,
+ .pokemonScale = 288,
+ .pokemonOffset = 65527,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Magneton
+ .categoryName = _("MAGNET"),
+ .height = 10,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Magneton_1,
+ .descriptionPage2 = DexDescription_Magneton_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Porenta
+ .categoryName = _("WILDENTE"),
+ .height = 8,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Porenta_1,
+ .descriptionPage2 = DexDescription_Porenta_2,
+ .pokemonScale = 330,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ {
+ // Dodu
+ .categoryName = _("DUOVOGEL"),
+ .height = 14,
+ .weight = 392,
+ .descriptionPage1 = DexDescription_Dodu_1,
+ .descriptionPage2 = DexDescription_Dodu_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 65535,
+ },
+ {
+ // Dodri
+ .categoryName = _("TRIVOGEL"),
+ .height = 18,
+ .weight = 852,
+ .descriptionPage1 = DexDescription_Dodri_1,
+ .descriptionPage2 = DexDescription_Dodri_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 0,
+ },
+ {
+ // Jurob
+ .categoryName = _("SEEHUND"),
+ .height = 11,
+ .weight = 900,
+ .descriptionPage1 = DexDescription_Jurob_1,
+ .descriptionPage2 = DexDescription_Jurob_2,
+ .pokemonScale = 297,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Jugong
+ .categoryName = _("SEEHUND"),
+ .height = 17,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Jugong_1,
+ .descriptionPage2 = DexDescription_Jugong_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 275,
+ .trainerOffset = 0,
+ },
+ {
+ // Sleima
+ .categoryName = _("SCHLAMM"),
+ .height = 9,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Sleima_1,
+ .descriptionPage2 = DexDescription_Sleima_2,
+ .pokemonScale = 258,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sleimok
+ .categoryName = _("SCHLAMM"),
+ .height = 12,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Sleimok_1,
+ .descriptionPage2 = DexDescription_Sleimok_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Muschas
+ .categoryName = _("MUSCHEL"),
+ .height = 3,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Muschas_1,
+ .descriptionPage2 = DexDescription_Muschas_2,
+ .pokemonScale = 675,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Austos
+ .categoryName = _("MUSCHEL"),
+ .height = 15,
+ .weight = 1325,
+ .descriptionPage1 = DexDescription_Austos_1,
+ .descriptionPage2 = DexDescription_Austos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 269,
+ .trainerOffset = 1,
+ },
+ {
+ // Nebulak
+ .categoryName = _("GAS"),
+ .height = 13,
+ .weight = 1,
+ .descriptionPage1 = DexDescription_Nebulak_1,
+ .descriptionPage2 = DexDescription_Nebulak_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Alpollo
+ .categoryName = _("GAS"),
+ .height = 16,
+ .weight = 1,
+ .descriptionPage1 = DexDescription_Alpollo_1,
+ .descriptionPage2 = DexDescription_Alpollo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ {
+ // Gengar
+ .categoryName = _("SCHATTEN"),
+ .height = 15,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Gengar_1,
+ .descriptionPage2 = DexDescription_Gengar_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 302,
+ .trainerOffset = 2,
+ },
+ {
+ // Onix
+ .categoryName = _("FELSNATTER"),
+ .height = 88,
+ .weight = 2100,
+ .descriptionPage1 = DexDescription_Onix_1,
+ .descriptionPage2 = DexDescription_Onix_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ {
+ // Traumato
+ .categoryName = _("HYPNOSE"),
+ .height = 10,
+ .weight = 324,
+ .descriptionPage1 = DexDescription_Traumato_1,
+ .descriptionPage2 = DexDescription_Traumato_2,
+ .pokemonScale = 274,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hypno
+ .categoryName = _("HYPNOSE"),
+ .height = 16,
+ .weight = 756,
+ .descriptionPage1 = DexDescription_Hypno_1,
+ .descriptionPage2 = DexDescription_Hypno_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ {
+ // Krabby
+ .categoryName = _("KRABBE"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Krabby_1,
+ .descriptionPage2 = DexDescription_Krabby_2,
+ .pokemonScale = 469,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kingler
+ .categoryName = _("KNEIFER"),
+ .height = 13,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Kingler_1,
+ .descriptionPage2 = DexDescription_Kingler_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Voltobal
+ .categoryName = _("BALL"),
+ .height = 5,
+ .weight = 104,
+ .descriptionPage1 = DexDescription_Voltobal_1,
+ .descriptionPage2 = DexDescription_Voltobal_2,
+ .pokemonScale = 364,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lektrobal
+ .categoryName = _("BALL"),
+ .height = 12,
+ .weight = 666,
+ .descriptionPage1 = DexDescription_Lektrobal_1,
+ .descriptionPage2 = DexDescription_Lektrobal_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Owei
+ .categoryName = _("EI"),
+ .height = 4,
+ .weight = 25,
+ .descriptionPage1 = DexDescription_Owei_1,
+ .descriptionPage2 = DexDescription_Owei_2,
+ .pokemonScale = 489,
+ .pokemonOffset = 65532,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kokowei
+ .categoryName = _("PALMFRUCHT"),
+ .height = 20,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Kokowei_1,
+ .descriptionPage2 = DexDescription_Kokowei_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ {
+ // Tragosso
+ .categoryName = _("EINSAM"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Tragosso_1,
+ .descriptionPage2 = DexDescription_Tragosso_2,
+ .pokemonScale = 545,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Knogga
+ .categoryName = _("KNOCHENFAN"),
+ .height = 10,
+ .weight = 450,
+ .descriptionPage1 = DexDescription_Knogga_1,
+ .descriptionPage2 = DexDescription_Knogga_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kicklee
+ .categoryName = _("KICKER"),
+ .height = 15,
+ .weight = 498,
+ .descriptionPage1 = DexDescription_Kicklee_1,
+ .descriptionPage2 = DexDescription_Kicklee_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 259,
+ .trainerOffset = 1,
+ },
+ {
+ // Nockchan
+ .categoryName = _("PUNCHER"),
+ .height = 14,
+ .weight = 502,
+ .descriptionPage1 = DexDescription_Nockchan_1,
+ .descriptionPage2 = DexDescription_Nockchan_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 277,
+ .trainerOffset = 2,
+ },
+ {
+ // Schlurp
+ .categoryName = _("SCHLECKER"),
+ .height = 12,
+ .weight = 655,
+ .descriptionPage1 = DexDescription_Schlurp_1,
+ .descriptionPage2 = DexDescription_Schlurp_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Smogon
+ .categoryName = _("GIFTWOLKE"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Smogon_1,
+ .descriptionPage2 = DexDescription_Smogon_2,
+ .pokemonScale = 369,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Smogmog
+ .categoryName = _("GIFTWOLKE"),
+ .height = 12,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Smogmog_1,
+ .descriptionPage2 = DexDescription_Smogmog_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rihorn
+ .categoryName = _("STACHLER"),
+ .height = 10,
+ .weight = 1150,
+ .descriptionPage1 = DexDescription_Rihorn_1,
+ .descriptionPage2 = DexDescription_Rihorn_2,
+ .pokemonScale = 267,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rizeros
+ .categoryName = _("BOHRER"),
+ .height = 19,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Rizeros_1,
+ .descriptionPage2 = DexDescription_Rizeros_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 299,
+ .trainerOffset = 2,
+ },
+ {
+ // Chaneira
+ .categoryName = _("EI"),
+ .height = 11,
+ .weight = 346,
+ .descriptionPage1 = DexDescription_Chaneira_1,
+ .descriptionPage2 = DexDescription_Chaneira_2,
+ .pokemonScale = 257,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tangela
+ .categoryName = _("RANKE"),
+ .height = 10,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Tangela_1,
+ .descriptionPage2 = DexDescription_Tangela_2,
+ .pokemonScale = 304,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kangama
+ .categoryName = _("MUTTERTIER"),
+ .height = 22,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Kangama_1,
+ .descriptionPage2 = DexDescription_Kangama_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ {
+ // Seeper
+ .categoryName = _("DRACHE"),
+ .height = 4,
+ .weight = 80,
+ .descriptionPage1 = DexDescription_Seeper_1,
+ .descriptionPage2 = DexDescription_Seeper_2,
+ .pokemonScale = 399,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Seemon
+ .categoryName = _("DRACHE"),
+ .height = 12,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Seemon_1,
+ .descriptionPage2 = DexDescription_Seemon_2,
+ .pokemonScale = 299,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Goldini
+ .categoryName = _("GOLDFISCH"),
+ .height = 6,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Goldini_1,
+ .descriptionPage2 = DexDescription_Goldini_2,
+ .pokemonScale = 379,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Golking
+ .categoryName = _("GOLDFISCH"),
+ .height = 13,
+ .weight = 390,
+ .descriptionPage1 = DexDescription_Golking_1,
+ .descriptionPage2 = DexDescription_Golking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sterndu
+ .categoryName = _("STERNFORM"),
+ .height = 8,
+ .weight = 345,
+ .descriptionPage1 = DexDescription_Sterndu_1,
+ .descriptionPage2 = DexDescription_Sterndu_2,
+ .pokemonScale = 326,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Starmie
+ .categoryName = _("MYSTERIÖS"),
+ .height = 11,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Starmie_1,
+ .descriptionPage2 = DexDescription_Starmie_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pantimos
+ .categoryName = _("SPERRE"),
+ .height = 13,
+ .weight = 545,
+ .descriptionPage1 = DexDescription_Pantimos_1,
+ .descriptionPage2 = DexDescription_Pantimos_2,
+ .pokemonScale = 258,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sichlor
+ .categoryName = _("MANTIS"),
+ .height = 15,
+ .weight = 560,
+ .descriptionPage1 = DexDescription_Sichlor_1,
+ .descriptionPage2 = DexDescription_Sichlor_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ {
+ // Rossana
+ .categoryName = _("HUMANOTYP"),
+ .height = 14,
+ .weight = 406,
+ .descriptionPage1 = DexDescription_Rossana_1,
+ .descriptionPage2 = DexDescription_Rossana_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ {
+ // Elektek
+ .categoryName = _("ELEKTRO"),
+ .height = 11,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Elektek_1,
+ .descriptionPage2 = DexDescription_Elektek_2,
+ .pokemonScale = 351,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Magmar
+ .categoryName = _("BRENNER"),
+ .height = 13,
+ .weight = 445,
+ .descriptionPage1 = DexDescription_Magmar_1,
+ .descriptionPage2 = DexDescription_Magmar_2,
+ .pokemonScale = 277,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pinsir
+ .categoryName = _("KNEIFKÄFER"),
+ .height = 15,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Pinsir_1,
+ .descriptionPage2 = DexDescription_Pinsir_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ {
+ // Tauros
+ .categoryName = _("WILDBULLE"),
+ .height = 14,
+ .weight = 884,
+ .descriptionPage1 = DexDescription_Tauros_1,
+ .descriptionPage2 = DexDescription_Tauros_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Karpador
+ .categoryName = _("FISCH"),
+ .height = 9,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Karpador_1,
+ .descriptionPage2 = DexDescription_Karpador_2,
+ .pokemonScale = 310,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Garados
+ .categoryName = _("GRAUSAM"),
+ .height = 65,
+ .weight = 2350,
+ .descriptionPage1 = DexDescription_Garados_1,
+ .descriptionPage2 = DexDescription_Garados_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 481,
+ .trainerOffset = 13,
+ },
+ {
+ // Lapras
+ .categoryName = _("TRANSPORT"),
+ .height = 25,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Lapras_1,
+ .descriptionPage2 = DexDescription_Lapras_2,
+ .pokemonScale = 257,
+ .pokemonOffset = 10,
+ .trainerScale = 423,
+ .trainerOffset = 8,
+ },
+ {
+ // Ditto
+ .categoryName = _("TRANSFORM"),
+ .height = 3,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Ditto_1,
+ .descriptionPage2 = DexDescription_Ditto_2,
+ .pokemonScale = 633,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Evoli
+ .categoryName = _("EVOLUTION"),
+ .height = 3,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Evoli_1,
+ .descriptionPage2 = DexDescription_Evoli_2,
+ .pokemonScale = 476,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Aquana
+ .categoryName = _("BLUBBLASE"),
+ .height = 10,
+ .weight = 290,
+ .descriptionPage1 = DexDescription_Aquana_1,
+ .descriptionPage2 = DexDescription_Aquana_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Blitza
+ .categoryName = _("BLITZ"),
+ .height = 8,
+ .weight = 245,
+ .descriptionPage1 = DexDescription_Blitza_1,
+ .descriptionPage2 = DexDescription_Blitza_2,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Flamara
+ .categoryName = _("FEUER"),
+ .height = 9,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Flamara_1,
+ .descriptionPage2 = DexDescription_Flamara_2,
+ .pokemonScale = 306,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Porygon
+ .categoryName = _("VIRTUELL"),
+ .height = 8,
+ .weight = 365,
+ .descriptionPage1 = DexDescription_Porygon_1,
+ .descriptionPage2 = DexDescription_Porygon_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Amonitas
+ .categoryName = _("SPIRALE"),
+ .height = 4,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Amonitas_1,
+ .descriptionPage2 = DexDescription_Amonitas_2,
+ .pokemonScale = 521,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Amoroso
+ .categoryName = _("SPIRALE"),
+ .height = 10,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Amoroso_1,
+ .descriptionPage2 = DexDescription_Amoroso_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kabuto
+ .categoryName = _("PANZERTIER"),
+ .height = 5,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Kabuto_1,
+ .descriptionPage2 = DexDescription_Kabuto_2,
+ .pokemonScale = 454,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kabutops
+ .categoryName = _("PANZERTIER"),
+ .height = 13,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Kabutops_1,
+ .descriptionPage2 = DexDescription_Kabutops_2,
+ .pokemonScale = 271,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Aerodactyl
+ .categoryName = _("FOSSIL"),
+ .height = 18,
+ .weight = 590,
+ .descriptionPage1 = DexDescription_Aerodactyl_1,
+ .descriptionPage2 = DexDescription_Aerodactyl_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 302,
+ .trainerOffset = 4,
+ },
+ {
+ // Relaxo
+ .categoryName = _("TAGTRÄUMER"),
+ .height = 21,
+ .weight = 4600,
+ .descriptionPage1 = DexDescription_Relaxo_1,
+ .descriptionPage2 = DexDescription_Relaxo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 423,
+ .trainerOffset = 11,
+ },
+ {
+ // Arktos
+ .categoryName = _("EIS"),
+ .height = 17,
+ .weight = 554,
+ .descriptionPage1 = DexDescription_Arktos_1,
+ .descriptionPage2 = DexDescription_Arktos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 2,
+ },
+ {
+ // Zapdos
+ .categoryName = _("ELEKTRO"),
+ .height = 16,
+ .weight = 526,
+ .descriptionPage1 = DexDescription_Zapdos_1,
+ .descriptionPage2 = DexDescription_Zapdos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 318,
+ .trainerOffset = 3,
+ },
+ {
+ // Lavados
+ .categoryName = _("FLAMME"),
+ .height = 20,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Lavados_1,
+ .descriptionPage2 = DexDescription_Lavados_2,
+ .pokemonScale = 270,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ {
+ // Dratini
+ .categoryName = _("DRACHE"),
+ .height = 18,
+ .weight = 33,
+ .descriptionPage1 = DexDescription_Dratini_1,
+ .descriptionPage2 = DexDescription_Dratini_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 8,
+ .trainerScale = 386,
+ .trainerOffset = 6,
+ },
+ {
+ // Dragonir
+ .categoryName = _("DRACHE"),
+ .height = 40,
+ .weight = 165,
+ .descriptionPage1 = DexDescription_Dragonir_1,
+ .descriptionPage2 = DexDescription_Dragonir_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 411,
+ .trainerOffset = 5,
+ },
+ {
+ // Dragoran
+ .categoryName = _("DRACHE"),
+ .height = 22,
+ .weight = 2100,
+ .descriptionPage1 = DexDescription_Dragoran_1,
+ .descriptionPage2 = DexDescription_Dragoran_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ {
+ // Mewtu
+ .categoryName = _("GENMUTANT"),
+ .height = 20,
+ .weight = 1220,
+ .descriptionPage1 = DexDescription_Mewtu_1,
+ .descriptionPage2 = DexDescription_Mewtu_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ {
+ // Mew
+ .categoryName = _("NEUE ART"),
+ .height = 4,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Mew_1,
+ .descriptionPage2 = DexDescription_Mew_2,
+ .pokemonScale = 457,
+ .pokemonOffset = 65534,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Endivie
+ .categoryName = _("LAUB"),
+ .height = 9,
+ .weight = 64,
+ .descriptionPage1 = DexDescription_Endivie_1,
+ .descriptionPage2 = DexDescription_Endivie_2,
+ .pokemonScale = 512,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lorblatt
+ .categoryName = _("LAUB"),
+ .height = 12,
+ .weight = 158,
+ .descriptionPage1 = DexDescription_Lorblatt_1,
+ .descriptionPage2 = DexDescription_Lorblatt_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Meganie
+ .categoryName = _("KRÄUTER"),
+ .height = 18,
+ .weight = 1005,
+ .descriptionPage1 = DexDescription_Meganie_1,
+ .descriptionPage2 = DexDescription_Meganie_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 277,
+ .trainerOffset = 1,
+ },
+ {
+ // Feurigel
+ .categoryName = _("FEUERMAUS"),
+ .height = 5,
+ .weight = 79,
+ .descriptionPage1 = DexDescription_Feurigel_1,
+ .descriptionPage2 = DexDescription_Feurigel_2,
+ .pokemonScale = 539,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Igelavar
+ .categoryName = _("VULKAN"),
+ .height = 9,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Igelavar_1,
+ .descriptionPage2 = DexDescription_Igelavar_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tornupto
+ .categoryName = _("VULKAN"),
+ .height = 17,
+ .weight = 795,
+ .descriptionPage1 = DexDescription_Tornupto_1,
+ .descriptionPage2 = DexDescription_Tornupto_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ {
+ // Karnimani
+ .categoryName = _("GROSSMAUL"),
+ .height = 6,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Karnimani_1,
+ .descriptionPage2 = DexDescription_Karnimani_2,
+ .pokemonScale = 487,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tyracroc
+ .categoryName = _("GROSSMAUL"),
+ .height = 11,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Tyracroc_1,
+ .descriptionPage2 = DexDescription_Tyracroc_2,
+ .pokemonScale = 378,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Impergator
+ .categoryName = _("GROSSMAUL"),
+ .height = 23,
+ .weight = 888,
+ .descriptionPage1 = DexDescription_Impergator_1,
+ .descriptionPage2 = DexDescription_Impergator_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ {
+ // Wiesor
+ .categoryName = _("SPÄHER"),
+ .height = 8,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Wiesor_1,
+ .descriptionPage2 = DexDescription_Wiesor_2,
+ .pokemonScale = 439,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Wiesenior
+ .categoryName = _("LANGLEIB"),
+ .height = 18,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Wiesenior_1,
+ .descriptionPage2 = DexDescription_Wiesenior_2,
+ .pokemonScale = 346,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hoothoot
+ .categoryName = _("EULE"),
+ .height = 7,
+ .weight = 212,
+ .descriptionPage1 = DexDescription_Hoothoot_1,
+ .descriptionPage2 = DexDescription_Hoothoot_2,
+ .pokemonScale = 380,
+ .pokemonOffset = 65534,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Noctuh
+ .categoryName = _("EULE"),
+ .height = 16,
+ .weight = 408,
+ .descriptionPage1 = DexDescription_Noctuh_1,
+ .descriptionPage2 = DexDescription_Noctuh_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ledyba
+ .categoryName = _("FÜNF-PUNKT"),
+ .height = 10,
+ .weight = 108,
+ .descriptionPage1 = DexDescription_Ledyba_1,
+ .descriptionPage2 = DexDescription_Ledyba_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ledian
+ .categoryName = _("FÜNF-PUNKT"),
+ .height = 14,
+ .weight = 356,
+ .descriptionPage1 = DexDescription_Ledian_1,
+ .descriptionPage2 = DexDescription_Ledian_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Webarak
+ .categoryName = _("FADENWURF"),
+ .height = 5,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Webarak_1,
+ .descriptionPage2 = DexDescription_Webarak_2,
+ .pokemonScale = 414,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ariados
+ .categoryName = _("LANGBEIN"),
+ .height = 11,
+ .weight = 335,
+ .descriptionPage1 = DexDescription_Ariados_1,
+ .descriptionPage2 = DexDescription_Ariados_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Iksbat
+ .categoryName = _("FLEDERMAUS"),
+ .height = 18,
+ .weight = 750,
+ .descriptionPage1 = DexDescription_Iksbat_1,
+ .descriptionPage2 = DexDescription_Iksbat_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 281,
+ .trainerOffset = 1,
+ },
+ {
+ // Lampi
+ .categoryName = _("ANGLER"),
+ .height = 5,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Lampi_1,
+ .descriptionPage2 = DexDescription_Lampi_2,
+ .pokemonScale = 424,
+ .pokemonOffset = 65534,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lanturn
+ .categoryName = _("LEUCHTE"),
+ .height = 12,
+ .weight = 225,
+ .descriptionPage1 = DexDescription_Lanturn_1,
+ .descriptionPage2 = DexDescription_Lanturn_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pichu
+ .categoryName = _("BABYMAUS"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Pichu_1,
+ .descriptionPage2 = DexDescription_Pichu_2,
+ .pokemonScale = 508,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pii
+ .categoryName = _("STERNFORM"),
+ .height = 3,
+ .weight = 30,
+ .descriptionPage1 = DexDescription_Pii_1,
+ .descriptionPage2 = DexDescription_Pii_2,
+ .pokemonScale = 462,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Fluffeluff
+ .categoryName = _("BALLON"),
+ .height = 3,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Fluffeluff_1,
+ .descriptionPage2 = DexDescription_Fluffeluff_2,
+ .pokemonScale = 457,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Togepi
+ .categoryName = _("ZACKENBALL"),
+ .height = 3,
+ .weight = 15,
+ .descriptionPage1 = DexDescription_Togepi_1,
+ .descriptionPage2 = DexDescription_Togepi_2,
+ .pokemonScale = 507,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Togetic
+ .categoryName = _("FREUDE"),
+ .height = 6,
+ .weight = 32,
+ .descriptionPage1 = DexDescription_Togetic_1,
+ .descriptionPage2 = DexDescription_Togetic_2,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Natu
+ .categoryName = _("KLEINVOGEL"),
+ .height = 2,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Natu_1,
+ .descriptionPage2 = DexDescription_Natu_2,
+ .pokemonScale = 610,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Xatu
+ .categoryName = _("MYSTIK"),
+ .height = 15,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Xatu_1,
+ .descriptionPage2 = DexDescription_Xatu_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 318,
+ .trainerOffset = 4,
+ },
+ {
+ // Voltilamm
+ .categoryName = _("WOLLE"),
+ .height = 6,
+ .weight = 78,
+ .descriptionPage1 = DexDescription_Voltilamm_1,
+ .descriptionPage2 = DexDescription_Voltilamm_2,
+ .pokemonScale = 379,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Waaty
+ .categoryName = _("WOLLE"),
+ .height = 8,
+ .weight = 133,
+ .descriptionPage1 = DexDescription_Waaty_1,
+ .descriptionPage2 = DexDescription_Waaty_2,
+ .pokemonScale = 372,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ampharos
+ .categoryName = _("LEUCHTE"),
+ .height = 14,
+ .weight = 615,
+ .descriptionPage1 = DexDescription_Ampharos_1,
+ .descriptionPage2 = DexDescription_Ampharos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Blubella
+ .categoryName = _("BLUME"),
+ .height = 4,
+ .weight = 58,
+ .descriptionPage1 = DexDescription_Blubella_1,
+ .descriptionPage2 = DexDescription_Blubella_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Marill
+ .categoryName = _("AQUAMAUS"),
+ .height = 4,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Marill_1,
+ .descriptionPage2 = DexDescription_Marill_2,
+ .pokemonScale = 476,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Azumarill
+ .categoryName = _("AQUAHASE"),
+ .height = 8,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Azumarill_1,
+ .descriptionPage2 = DexDescription_Azumarill_2,
+ .pokemonScale = 448,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Mogelbaum
+ .categoryName = _("IMITATION"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Mogelbaum_1,
+ .descriptionPage2 = DexDescription_Mogelbaum_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Quaxo
+ .categoryName = _("FROSCH"),
+ .height = 11,
+ .weight = 339,
+ .descriptionPage1 = DexDescription_Quaxo_1,
+ .descriptionPage2 = DexDescription_Quaxo_2,
+ .pokemonScale = 289,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hoppspross
+ .categoryName = _("LÖWENZAHN"),
+ .height = 4,
+ .weight = 5,
+ .descriptionPage1 = DexDescription_Hoppspross_1,
+ .descriptionPage2 = DexDescription_Hoppspross_2,
+ .pokemonScale = 562,
+ .pokemonOffset = 65529,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hubelupf
+ .categoryName = _("LÖWENZAHN"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Hubelupf_1,
+ .descriptionPage2 = DexDescription_Hubelupf_2,
+ .pokemonScale = 387,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Papungha
+ .categoryName = _("LÖWENZAHN"),
+ .height = 8,
+ .weight = 30,
+ .descriptionPage1 = DexDescription_Papungha_1,
+ .descriptionPage2 = DexDescription_Papungha_2,
+ .pokemonScale = 418,
+ .pokemonOffset = 65532,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Griffel
+ .categoryName = _("LANGSCHWEIF"),
+ .height = 8,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Griffel_1,
+ .descriptionPage2 = DexDescription_Griffel_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sonnkern
+ .categoryName = _("SAMEN"),
+ .height = 3,
+ .weight = 18,
+ .descriptionPage1 = DexDescription_Sonnkern_1,
+ .descriptionPage2 = DexDescription_Sonnkern_2,
+ .pokemonScale = 541,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sonnflora
+ .categoryName = _("SONNE"),
+ .height = 8,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Sonnflora_1,
+ .descriptionPage2 = DexDescription_Sonnflora_2,
+ .pokemonScale = 444,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Yanma
+ .categoryName = _("LIBELLE"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Yanma_1,
+ .descriptionPage2 = DexDescription_Yanma_2,
+ .pokemonScale = 274,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Felino
+ .categoryName = _("FISCH"),
+ .height = 4,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Felino_1,
+ .descriptionPage2 = DexDescription_Felino_2,
+ .pokemonScale = 479,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Morlord
+ .categoryName = _("FISCH"),
+ .height = 14,
+ .weight = 750,
+ .descriptionPage1 = DexDescription_Morlord_1,
+ .descriptionPage2 = DexDescription_Morlord_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Psiana
+ .categoryName = _("SONNE"),
+ .height = 9,
+ .weight = 265,
+ .descriptionPage1 = DexDescription_Psiana_1,
+ .descriptionPage2 = DexDescription_Psiana_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nachtara
+ .categoryName = _("MONDSCHEIN"),
+ .height = 10,
+ .weight = 270,
+ .descriptionPage1 = DexDescription_Nachtara_1,
+ .descriptionPage2 = DexDescription_Nachtara_2,
+ .pokemonScale = 317,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kramurx
+ .categoryName = _("FINSTERNIS"),
+ .height = 5,
+ .weight = 21,
+ .descriptionPage1 = DexDescription_Kramurx_1,
+ .descriptionPage2 = DexDescription_Kramurx_2,
+ .pokemonScale = 401,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ {
+ // Laschoking
+ .categoryName = _("MONARCH"),
+ .height = 20,
+ .weight = 795,
+ .descriptionPage1 = DexDescription_Laschoking_1,
+ .descriptionPage2 = DexDescription_Laschoking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ {
+ // Traunfugil
+ .categoryName = _("KREISCHER"),
+ .height = 7,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Traunfugil_1,
+ .descriptionPage2 = DexDescription_Traunfugil_2,
+ .pokemonScale = 407,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Icognito
+ .categoryName = _("SYMBOL"),
+ .height = 5,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Icognito_1,
+ .descriptionPage2 = DexDescription_Icognito_2,
+ .pokemonScale = 411,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Woingenau
+ .categoryName = _("GEDULD"),
+ .height = 13,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Woingenau_1,
+ .descriptionPage2 = DexDescription_Woingenau_2,
+ .pokemonScale = 274,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Girafarig
+ .categoryName = _("LANGHALS"),
+ .height = 15,
+ .weight = 415,
+ .descriptionPage1 = DexDescription_Girafarig_1,
+ .descriptionPage2 = DexDescription_Girafarig_2,
+ .pokemonScale = 281,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tannza
+ .categoryName = _("BEUTELWURM"),
+ .height = 6,
+ .weight = 72,
+ .descriptionPage1 = DexDescription_Tannza_1,
+ .descriptionPage2 = DexDescription_Tannza_2,
+ .pokemonScale = 445,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Forstellka
+ .categoryName = _("BEUTELWURM"),
+ .height = 12,
+ .weight = 1258,
+ .descriptionPage1 = DexDescription_Forstellka_1,
+ .descriptionPage2 = DexDescription_Forstellka_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Dummisel
+ .categoryName = _("SCHLANGE"),
+ .height = 15,
+ .weight = 140,
+ .descriptionPage1 = DexDescription_Dummisel_1,
+ .descriptionPage2 = DexDescription_Dummisel_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Skorgla
+ .categoryName = _("FLUGSKORPI"),
+ .height = 11,
+ .weight = 648,
+ .descriptionPage1 = DexDescription_Skorgla_1,
+ .descriptionPage2 = DexDescription_Skorgla_2,
+ .pokemonScale = 350,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Stahlos
+ .categoryName = _("STAHLBOA"),
+ .height = 92,
+ .weight = 4000,
+ .descriptionPage1 = DexDescription_Stahlos_1,
+ .descriptionPage2 = DexDescription_Stahlos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 516,
+ .trainerOffset = 13,
+ },
+ {
+ // Snubbull
+ .categoryName = _("FEE"),
+ .height = 6,
+ .weight = 78,
+ .descriptionPage1 = DexDescription_Snubbull_1,
+ .descriptionPage2 = DexDescription_Snubbull_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Granbull
+ .categoryName = _("FEE"),
+ .height = 14,
+ .weight = 487,
+ .descriptionPage1 = DexDescription_Granbull_1,
+ .descriptionPage2 = DexDescription_Granbull_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Baldorfish
+ .categoryName = _("BALLON"),
+ .height = 5,
+ .weight = 39,
+ .descriptionPage1 = DexDescription_Baldorfish_1,
+ .descriptionPage2 = DexDescription_Baldorfish_2,
+ .pokemonScale = 430,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Scherox
+ .categoryName = _("KNEIFER"),
+ .height = 18,
+ .weight = 1180,
+ .descriptionPage1 = DexDescription_Scherox_1,
+ .descriptionPage2 = DexDescription_Scherox_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pottrott
+ .categoryName = _("SCHIMMEL"),
+ .height = 6,
+ .weight = 205,
+ .descriptionPage1 = DexDescription_Pottrott_1,
+ .descriptionPage2 = DexDescription_Pottrott_2,
+ .pokemonScale = 485,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Skaraborn
+ .categoryName = _("EINZELHORN"),
+ .height = 15,
+ .weight = 540,
+ .descriptionPage1 = DexDescription_Skaraborn_1,
+ .descriptionPage2 = DexDescription_Skaraborn_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sniebel
+ .categoryName = _("STICHKLAUE"),
+ .height = 9,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Sniebel_1,
+ .descriptionPage2 = DexDescription_Sniebel_2,
+ .pokemonScale = 413,
+ .pokemonOffset = 65533,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Teddiursa
+ .categoryName = _("KLEINBÄR"),
+ .height = 6,
+ .weight = 88,
+ .descriptionPage1 = DexDescription_Teddiursa_1,
+ .descriptionPage2 = DexDescription_Teddiursa_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ursaring
+ .categoryName = _("SCHLÄFER"),
+ .height = 18,
+ .weight = 1258,
+ .descriptionPage1 = DexDescription_Ursaring_1,
+ .descriptionPage2 = DexDescription_Ursaring_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schneckmag
+ .categoryName = _("LAVA"),
+ .height = 7,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Schneckmag_1,
+ .descriptionPage2 = DexDescription_Schneckmag_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Magcargo
+ .categoryName = _("LAVA"),
+ .height = 8,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Magcargo_1,
+ .descriptionPage2 = DexDescription_Magcargo_2,
+ .pokemonScale = 332,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Quiekel
+ .categoryName = _("FERKEL"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Quiekel_1,
+ .descriptionPage2 = DexDescription_Quiekel_2,
+ .pokemonScale = 324,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Keifel
+ .categoryName = _("SCHWEIN"),
+ .height = 11,
+ .weight = 558,
+ .descriptionPage1 = DexDescription_Keifel_1,
+ .descriptionPage2 = DexDescription_Keifel_2,
+ .pokemonScale = 306,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Corasonn
+ .categoryName = _("KORALLE"),
+ .height = 6,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Corasonn_1,
+ .descriptionPage2 = DexDescription_Corasonn_2,
+ .pokemonScale = 410,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Remoraid
+ .categoryName = _("HOCHDRUCK"),
+ .height = 6,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Remoraid_1,
+ .descriptionPage2 = DexDescription_Remoraid_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Octillery
+ .categoryName = _("HOCHDRUCK"),
+ .height = 9,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Octillery_1,
+ .descriptionPage2 = DexDescription_Octillery_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Botogel
+ .categoryName = _("LIEFERANT"),
+ .height = 9,
+ .weight = 160,
+ .descriptionPage1 = DexDescription_Botogel_1,
+ .descriptionPage2 = DexDescription_Botogel_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Mantax
+ .categoryName = _("FLUGROCHEN"),
+ .height = 21,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Mantax_1,
+ .descriptionPage2 = DexDescription_Mantax_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ {
+ // Panzaeron
+ .categoryName = _("FLUGSTAHL"),
+ .height = 17,
+ .weight = 505,
+ .descriptionPage1 = DexDescription_Panzaeron_1,
+ .descriptionPage2 = DexDescription_Panzaeron_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 271,
+ .trainerOffset = 1,
+ },
+ {
+ // Hunduster
+ .categoryName = _("HADES"),
+ .height = 6,
+ .weight = 108,
+ .descriptionPage1 = DexDescription_Hunduster_1,
+ .descriptionPage2 = DexDescription_Hunduster_2,
+ .pokemonScale = 393,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hundemon
+ .categoryName = _("HADES"),
+ .height = 14,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Hundemon_1,
+ .descriptionPage2 = DexDescription_Hundemon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Seedraking
+ .categoryName = _("DRACHE"),
+ .height = 18,
+ .weight = 1520,
+ .descriptionPage1 = DexDescription_Seedraking_1,
+ .descriptionPage2 = DexDescription_Seedraking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 287,
+ .trainerOffset = 0,
+ },
+ {
+ // Phanpy
+ .categoryName = _("LANGRÜSSEL"),
+ .height = 5,
+ .weight = 335,
+ .descriptionPage1 = DexDescription_Phanpy_1,
+ .descriptionPage2 = DexDescription_Phanpy_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Donphan
+ .categoryName = _("PANZERTIER"),
+ .height = 11,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Donphan_1,
+ .descriptionPage2 = DexDescription_Donphan_2,
+ .pokemonScale = 313,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Porygon2
+ .categoryName = _("VIRTUELL"),
+ .height = 6,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Porygon2_1,
+ .descriptionPage2 = DexDescription_Porygon2_2,
+ .pokemonScale = 320,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Damhirplex
+ .categoryName = _("VIELENDER"),
+ .height = 14,
+ .weight = 712,
+ .descriptionPage1 = DexDescription_Damhirplex_1,
+ .descriptionPage2 = DexDescription_Damhirplex_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Farbeagle
+ .categoryName = _("MALER"),
+ .height = 12,
+ .weight = 580,
+ .descriptionPage1 = DexDescription_Farbeagle_1,
+ .descriptionPage2 = DexDescription_Farbeagle_2,
+ .pokemonScale = 287,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Rabauz
+ .categoryName = _("RACKER"),
+ .height = 7,
+ .weight = 210,
+ .descriptionPage1 = DexDescription_Rabauz_1,
+ .descriptionPage2 = DexDescription_Rabauz_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kapoera
+ .categoryName = _("KOPFSTAND"),
+ .height = 14,
+ .weight = 480,
+ .descriptionPage1 = DexDescription_Kapoera_1,
+ .descriptionPage2 = DexDescription_Kapoera_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ {
+ // Kussilla
+ .categoryName = _("KUSS"),
+ .height = 4,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Kussilla_1,
+ .descriptionPage2 = DexDescription_Kussilla_2,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Elekid
+ .categoryName = _("ELEKTRO"),
+ .height = 6,
+ .weight = 235,
+ .descriptionPage1 = DexDescription_Elekid_1,
+ .descriptionPage2 = DexDescription_Elekid_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Magby
+ .categoryName = _("GLUTHERD"),
+ .height = 7,
+ .weight = 214,
+ .descriptionPage1 = DexDescription_Magby_1,
+ .descriptionPage2 = DexDescription_Magby_2,
+ .pokemonScale = 284,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Miltank
+ .categoryName = _("MILCHKUH"),
+ .height = 12,
+ .weight = 755,
+ .descriptionPage1 = DexDescription_Miltank_1,
+ .descriptionPage2 = DexDescription_Miltank_2,
+ .pokemonScale = 280,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Heiteira
+ .categoryName = _("FREUDE"),
+ .height = 15,
+ .weight = 468,
+ .descriptionPage1 = DexDescription_Heiteira_1,
+ .descriptionPage2 = DexDescription_Heiteira_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 310,
+ .trainerOffset = 3,
+ },
+ {
+ // Raikou
+ .categoryName = _("DONNER"),
+ .height = 19,
+ .weight = 1780,
+ .descriptionPage1 = DexDescription_Raikou_1,
+ .descriptionPage2 = DexDescription_Raikou_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ {
+ // Entei
+ .categoryName = _("VULKAN"),
+ .height = 21,
+ .weight = 1980,
+ .descriptionPage1 = DexDescription_Entei_1,
+ .descriptionPage2 = DexDescription_Entei_2,
+ .pokemonScale = 259,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ {
+ // Suicune
+ .categoryName = _("POLARLICHT"),
+ .height = 20,
+ .weight = 1870,
+ .descriptionPage1 = DexDescription_Suicune_1,
+ .descriptionPage2 = DexDescription_Suicune_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ {
+ // Larvitar
+ .categoryName = _("FELSHAUT"),
+ .height = 6,
+ .weight = 720,
+ .descriptionPage1 = DexDescription_Larvitar_1,
+ .descriptionPage2 = DexDescription_Larvitar_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pupitar
+ .categoryName = _("HARTSCHALE"),
+ .height = 12,
+ .weight = 1520,
+ .descriptionPage1 = DexDescription_Pupitar_1,
+ .descriptionPage2 = DexDescription_Pupitar_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Despotar
+ .categoryName = _("PANZERTIER"),
+ .height = 20,
+ .weight = 2020,
+ .descriptionPage1 = DexDescription_Despotar_1,
+ .descriptionPage2 = DexDescription_Despotar_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ {
+ // Lugia
+ .categoryName = _("TAUCHER"),
+ .height = 52,
+ .weight = 2160,
+ .descriptionPage1 = DexDescription_Lugia_1,
+ .descriptionPage2 = DexDescription_Lugia_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 721,
+ .trainerOffset = 19,
+ },
+ {
+ // Ho-oh
+ .categoryName = _("REGENBOGEN"),
+ .height = 38,
+ .weight = 1990,
+ .descriptionPage1 = DexDescription_HoOh_1,
+ .descriptionPage2 = DexDescription_HoOh_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 610,
+ .trainerOffset = 17,
+ },
+ {
+ // Celebi
+ .categoryName = _("ZEITREISE"),
+ .height = 6,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Celebi_1,
+ .descriptionPage2 = DexDescription_Celebi_2,
+ .pokemonScale = 393,
+ .pokemonOffset = 65526,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Geckarbor
+ .categoryName = _("WALDGECKO"),
+ .height = 5,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Geckarbor_1,
+ .descriptionPage2 = DexDescription_Geckarbor_2,
+ .pokemonScale = 541,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Reptain
+ .categoryName = _("WALDGECKO"),
+ .height = 9,
+ .weight = 216,
+ .descriptionPage1 = DexDescription_Reptain_1,
+ .descriptionPage2 = DexDescription_Reptain_2,
+ .pokemonScale = 360,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Gewaldro
+ .categoryName = _("DSCHUNGEL"),
+ .height = 17,
+ .weight = 522,
+ .descriptionPage1 = DexDescription_Gewaldro_1,
+ .descriptionPage2 = DexDescription_Gewaldro_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 65535,
+ .trainerScale = 275,
+ .trainerOffset = 2,
+ },
+ {
+ // Flemmli
+ .categoryName = _("KÜKEN"),
+ .height = 4,
+ .weight = 25,
+ .descriptionPage1 = DexDescription_Flemmli_1,
+ .descriptionPage2 = DexDescription_Flemmli_2,
+ .pokemonScale = 566,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Jungglut
+ .categoryName = _("KLEINHAHN"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Jungglut_1,
+ .descriptionPage2 = DexDescription_Jungglut_2,
+ .pokemonScale = 343,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lohgock
+ .categoryName = _("GROSSBRAND"),
+ .height = 19,
+ .weight = 520,
+ .descriptionPage1 = DexDescription_Lohgock_1,
+ .descriptionPage2 = DexDescription_Lohgock_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 4,
+ },
+ {
+ // Hydropi
+ .categoryName = _("LEHMHÜPFER"),
+ .height = 4,
+ .weight = 76,
+ .descriptionPage1 = DexDescription_Hydropi_1,
+ .descriptionPage2 = DexDescription_Hydropi_2,
+ .pokemonScale = 535,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Moorabbel
+ .categoryName = _("LEHMHÜPFER"),
+ .height = 7,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Moorabbel_1,
+ .descriptionPage2 = DexDescription_Moorabbel_2,
+ .pokemonScale = 340,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sumpex
+ .categoryName = _("LEHMHÜPFER"),
+ .height = 15,
+ .weight = 819,
+ .descriptionPage1 = DexDescription_Sumpex_1,
+ .descriptionPage2 = DexDescription_Sumpex_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Fiffyen
+ .categoryName = _("BISS"),
+ .height = 5,
+ .weight = 136,
+ .descriptionPage1 = DexDescription_Fiffyen_1,
+ .descriptionPage2 = DexDescription_Fiffyen_2,
+ .pokemonScale = 481,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Magnayen
+ .categoryName = _("BISS"),
+ .height = 10,
+ .weight = 370,
+ .descriptionPage1 = DexDescription_Magnayen_1,
+ .descriptionPage2 = DexDescription_Magnayen_2,
+ .pokemonScale = 362,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Zigzachs
+ .categoryName = _("KLEINDACHS"),
+ .height = 4,
+ .weight = 175,
+ .descriptionPage1 = DexDescription_Zigzachs_1,
+ .descriptionPage2 = DexDescription_Zigzachs_2,
+ .pokemonScale = 560,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Geradaks
+ .categoryName = _("SPRINTER"),
+ .height = 5,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Geradaks_1,
+ .descriptionPage2 = DexDescription_Geradaks_2,
+ .pokemonScale = 321,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Waumpel
+ .categoryName = _("WURM"),
+ .height = 3,
+ .weight = 36,
+ .descriptionPage1 = DexDescription_Waumpel_1,
+ .descriptionPage2 = DexDescription_Waumpel_2,
+ .pokemonScale = 711,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schaloko
+ .categoryName = _("KOKON"),
+ .height = 6,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Schaloko_1,
+ .descriptionPage2 = DexDescription_Schaloko_2,
+ .pokemonScale = 431,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Papinella
+ .categoryName = _("FALTER"),
+ .height = 10,
+ .weight = 284,
+ .descriptionPage1 = DexDescription_Papinella_1,
+ .descriptionPage2 = DexDescription_Papinella_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Panekon
+ .categoryName = _("KOKON"),
+ .height = 7,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Panekon_1,
+ .descriptionPage2 = DexDescription_Panekon_2,
+ .pokemonScale = 391,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pudox
+ .categoryName = _("GIFTMOTTE"),
+ .height = 12,
+ .weight = 316,
+ .descriptionPage1 = DexDescription_Pudox_1,
+ .descriptionPage2 = DexDescription_Pudox_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Loturzel
+ .categoryName = _("WASSERLINSE"),
+ .height = 5,
+ .weight = 26,
+ .descriptionPage1 = DexDescription_Loturzel_1,
+ .descriptionPage2 = DexDescription_Loturzel_2,
+ .pokemonScale = 406,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lombrero
+ .categoryName = _("FROHMUT"),
+ .height = 12,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Lombrero_1,
+ .descriptionPage2 = DexDescription_Lombrero_2,
+ .pokemonScale = 277,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kappalores
+ .categoryName = _("SORGLOS"),
+ .height = 15,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Kappalores_1,
+ .descriptionPage2 = DexDescription_Kappalores_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 65535,
+ },
+ {
+ // Samurzel
+ .categoryName = _("EICHELNUSS"),
+ .height = 5,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Samurzel_1,
+ .descriptionPage2 = DexDescription_Samurzel_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Blanas
+ .categoryName = _("HINTERLIST"),
+ .height = 10,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Blanas_1,
+ .descriptionPage2 = DexDescription_Blanas_2,
+ .pokemonScale = 299,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tengulist
+ .categoryName = _("VERSCHLAGEN"),
+ .height = 13,
+ .weight = 596,
+ .descriptionPage1 = DexDescription_Tengulist_1,
+ .descriptionPage2 = DexDescription_Tengulist_2,
+ .pokemonScale = 290,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schwalbini
+ .categoryName = _("SCHWÄLBLEIN"),
+ .height = 3,
+ .weight = 23,
+ .descriptionPage1 = DexDescription_Schwalbini_1,
+ .descriptionPage2 = DexDescription_Schwalbini_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schwalboss
+ .categoryName = _("SCHWALBE"),
+ .height = 7,
+ .weight = 198,
+ .descriptionPage1 = DexDescription_Schwalboss_1,
+ .descriptionPage2 = DexDescription_Schwalboss_2,
+ .pokemonScale = 428,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Wingull
+ .categoryName = _("SEEMÖWE"),
+ .height = 6,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Wingull_1,
+ .descriptionPage2 = DexDescription_Wingull_2,
+ .pokemonScale = 295,
+ .pokemonOffset = 65534,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pelipper
+ .categoryName = _("WASSERVOGEL"),
+ .height = 12,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Pelipper_1,
+ .descriptionPage2 = DexDescription_Pelipper_2,
+ .pokemonScale = 288,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Trasla
+ .categoryName = _("GEFÜHL"),
+ .height = 4,
+ .weight = 66,
+ .descriptionPage1 = DexDescription_Trasla_1,
+ .descriptionPage2 = DexDescription_Trasla_2,
+ .pokemonScale = 457,
+ .pokemonOffset = 65533,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kirlia
+ .categoryName = _("EMOTION"),
+ .height = 8,
+ .weight = 202,
+ .descriptionPage1 = DexDescription_Kirlia_1,
+ .descriptionPage2 = DexDescription_Kirlia_2,
+ .pokemonScale = 354,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Guardevoir
+ .categoryName = _("UMARMUNG"),
+ .height = 16,
+ .weight = 484,
+ .descriptionPage1 = DexDescription_Guardevoir_1,
+ .descriptionPage2 = DexDescription_Guardevoir_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Gehweiher
+ .categoryName = _("WASSERGEHER"),
+ .height = 5,
+ .weight = 17,
+ .descriptionPage1 = DexDescription_Gehweiher_1,
+ .descriptionPage2 = DexDescription_Gehweiher_2,
+ .pokemonScale = 375,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Maskeregen
+ .categoryName = _("AUGE"),
+ .height = 8,
+ .weight = 36,
+ .descriptionPage1 = DexDescription_Maskeregen_1,
+ .descriptionPage2 = DexDescription_Maskeregen_2,
+ .pokemonScale = 378,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Knilz
+ .categoryName = _("PILZ"),
+ .height = 4,
+ .weight = 45,
+ .descriptionPage1 = DexDescription_Knilz_1,
+ .descriptionPage2 = DexDescription_Knilz_2,
+ .pokemonScale = 513,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kapilz
+ .categoryName = _("PILZ"),
+ .height = 12,
+ .weight = 392,
+ .descriptionPage1 = DexDescription_Kapilz_1,
+ .descriptionPage2 = DexDescription_Kapilz_2,
+ .pokemonScale = 324,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Bummelz
+ .categoryName = _("FAULPELZ"),
+ .height = 8,
+ .weight = 240,
+ .descriptionPage1 = DexDescription_Bummelz_1,
+ .descriptionPage2 = DexDescription_Bummelz_2,
+ .pokemonScale = 291,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Muntier
+ .categoryName = _("WILDAFFE"),
+ .height = 14,
+ .weight = 465,
+ .descriptionPage1 = DexDescription_Muntier_1,
+ .descriptionPage2 = DexDescription_Muntier_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Letarking
+ .categoryName = _("MÜSSIG"),
+ .height = 20,
+ .weight = 1305,
+ .descriptionPage1 = DexDescription_Letarking_1,
+ .descriptionPage2 = DexDescription_Letarking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ {
+ // Nincada
+ .categoryName = _("VORBEREITER"),
+ .height = 5,
+ .weight = 55,
+ .descriptionPage1 = DexDescription_Nincada_1,
+ .descriptionPage2 = DexDescription_Nincada_2,
+ .pokemonScale = 405,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ninjask
+ .categoryName = _("NINJA"),
+ .height = 8,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Ninjask_1,
+ .descriptionPage2 = DexDescription_Ninjask_2,
+ .pokemonScale = 383,
+ .pokemonOffset = 65527,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Ninjatom
+ .categoryName = _("HÄUTUNG"),
+ .height = 8,
+ .weight = 12,
+ .descriptionPage1 = DexDescription_Ninjatom_1,
+ .descriptionPage2 = DexDescription_Ninjatom_2,
+ .pokemonScale = 372,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Flurmel
+ .categoryName = _("FLÜSTER"),
+ .height = 6,
+ .weight = 163,
+ .descriptionPage1 = DexDescription_Flurmel_1,
+ .descriptionPage2 = DexDescription_Flurmel_2,
+ .pokemonScale = 373,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Krakeelo
+ .categoryName = _("LAUTHALS"),
+ .height = 10,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Krakeelo_1,
+ .descriptionPage2 = DexDescription_Krakeelo_2,
+ .pokemonScale = 356,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Krawumms
+ .categoryName = _("KRACH"),
+ .height = 15,
+ .weight = 840,
+ .descriptionPage1 = DexDescription_Krawumms_1,
+ .descriptionPage2 = DexDescription_Krawumms_2,
+ .pokemonScale = 284,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Makuhita
+ .categoryName = _("COURAGE"),
+ .height = 10,
+ .weight = 864,
+ .descriptionPage1 = DexDescription_Makuhita_1,
+ .descriptionPage2 = DexDescription_Makuhita_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Hariyama
+ .categoryName = _("ARMWURF"),
+ .height = 23,
+ .weight = 2538,
+ .descriptionPage1 = DexDescription_Hariyama_1,
+ .descriptionPage2 = DexDescription_Hariyama_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 343,
+ .trainerOffset = 7,
+ },
+ {
+ // Azurill
+ .categoryName = _("GEPUNKTET"),
+ .height = 2,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Azurill_1,
+ .descriptionPage2 = DexDescription_Azurill_2,
+ .pokemonScale = 603,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Nasgnet
+ .categoryName = _("KOMPASS"),
+ .height = 10,
+ .weight = 970,
+ .descriptionPage1 = DexDescription_Nasgnet_1,
+ .descriptionPage2 = DexDescription_Nasgnet_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 9,
+ .trainerScale = 289,
+ .trainerOffset = 3,
+ },
+ {
+ // Eneco
+ .categoryName = _("KÄTZCHEN"),
+ .height = 6,
+ .weight = 110,
+ .descriptionPage1 = DexDescription_Eneco_1,
+ .descriptionPage2 = DexDescription_Eneco_2,
+ .pokemonScale = 492,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Enekoro
+ .categoryName = _("EINGEBILDET"),
+ .height = 11,
+ .weight = 326,
+ .descriptionPage1 = DexDescription_Enekoro_1,
+ .descriptionPage2 = DexDescription_Enekoro_2,
+ .pokemonScale = 322,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Zobiris
+ .categoryName = _("FINSTERNIS"),
+ .height = 5,
+ .weight = 110,
+ .descriptionPage1 = DexDescription_Zobiris_1,
+ .descriptionPage2 = DexDescription_Zobiris_2,
+ .pokemonScale = 451,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Flunkifer
+ .categoryName = _("SCHWINDLER"),
+ .height = 6,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Flunkifer_1,
+ .descriptionPage2 = DexDescription_Flunkifer_2,
+ .pokemonScale = 466,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Stollunior
+ .categoryName = _("EISENPANZER"),
+ .height = 4,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Stollunior_1,
+ .descriptionPage2 = DexDescription_Stollunior_2,
+ .pokemonScale = 419,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Stollrak
+ .categoryName = _("EISENPANZER"),
+ .height = 9,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Stollrak_1,
+ .descriptionPage2 = DexDescription_Stollrak_2,
+ .pokemonScale = 275,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Stolloss
+ .categoryName = _("EISENPANZER"),
+ .height = 21,
+ .weight = 3600,
+ .descriptionPage1 = DexDescription_Stolloss_1,
+ .descriptionPage2 = DexDescription_Stolloss_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 65535,
+ .trainerScale = 350,
+ .trainerOffset = 6,
+ },
+ {
+ // Meditie
+ .categoryName = _("MEDITATION"),
+ .height = 6,
+ .weight = 112,
+ .descriptionPage1 = DexDescription_Meditie_1,
+ .descriptionPage2 = DexDescription_Meditie_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Meditalis
+ .categoryName = _("MEDITATION"),
+ .height = 13,
+ .weight = 315,
+ .descriptionPage1 = DexDescription_Meditalis_1,
+ .descriptionPage2 = DexDescription_Meditalis_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Frizelbliz
+ .categoryName = _("GEWITTER"),
+ .height = 6,
+ .weight = 152,
+ .descriptionPage1 = DexDescription_Frizelbliz_1,
+ .descriptionPage2 = DexDescription_Frizelbliz_2,
+ .pokemonScale = 290,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Voltenso
+ .categoryName = _("ENTLADUNG"),
+ .height = 15,
+ .weight = 402,
+ .descriptionPage1 = DexDescription_Voltenso_1,
+ .descriptionPage2 = DexDescription_Voltenso_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ {
+ // Plusle
+ .categoryName = _("JUBEL"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Plusle_1,
+ .descriptionPage2 = DexDescription_Plusle_2,
+ .pokemonScale = 515,
+ .pokemonOffset = 65527,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Minun
+ .categoryName = _("JUBEL"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Minun_1,
+ .descriptionPage2 = DexDescription_Minun_2,
+ .pokemonScale = 512,
+ .pokemonOffset = 65529,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Volbeat
+ .categoryName = _("LIBELLE"),
+ .height = 7,
+ .weight = 177,
+ .descriptionPage1 = DexDescription_Volbeat_1,
+ .descriptionPage2 = DexDescription_Volbeat_2,
+ .pokemonScale = 442,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Illumise
+ .categoryName = _("LIBELLE"),
+ .height = 6,
+ .weight = 177,
+ .descriptionPage1 = DexDescription_Illumise_1,
+ .descriptionPage2 = DexDescription_Illumise_2,
+ .pokemonScale = 572,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Roselia
+ .categoryName = _("DORN"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Roselia_1,
+ .descriptionPage2 = DexDescription_Roselia_2,
+ .pokemonScale = 677,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schluppuck
+ .categoryName = _("MAGEN"),
+ .height = 4,
+ .weight = 103,
+ .descriptionPage1 = DexDescription_Schluppuck_1,
+ .descriptionPage2 = DexDescription_Schluppuck_2,
+ .pokemonScale = 593,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schlukwech
+ .categoryName = _("GIFTBEUTEL"),
+ .height = 17,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Schlukwech_1,
+ .descriptionPage2 = DexDescription_Schlukwech_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 345,
+ .trainerOffset = 3,
+ },
+ {
+ // Kanivanha
+ .categoryName = _("GNADENLOS"),
+ .height = 8,
+ .weight = 208,
+ .descriptionPage1 = DexDescription_Kanivanha_1,
+ .descriptionPage2 = DexDescription_Kanivanha_2,
+ .pokemonScale = 362,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tohaido
+ .categoryName = _("BRUTAL"),
+ .height = 18,
+ .weight = 888,
+ .descriptionPage1 = DexDescription_Tohaido_1,
+ .descriptionPage2 = DexDescription_Tohaido_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 317,
+ .trainerOffset = 3,
+ },
+ {
+ // Wailmer
+ .categoryName = _("KUGELWAL"),
+ .height = 20,
+ .weight = 1300,
+ .descriptionPage1 = DexDescription_Wailmer_1,
+ .descriptionPage2 = DexDescription_Wailmer_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 493,
+ .trainerOffset = 0,
+ },
+ {
+ // Wailord
+ .categoryName = _("FLUTWAL"),
+ .height = 145,
+ .weight = 3980,
+ .descriptionPage1 = DexDescription_Wailord_1,
+ .descriptionPage2 = DexDescription_Wailord_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 1352,
+ .trainerOffset = 18,
+ },
+ {
+ // Camaub
+ .categoryName = _("TAUBHEIT"),
+ .height = 7,
+ .weight = 240,
+ .descriptionPage1 = DexDescription_Camaub_1,
+ .descriptionPage2 = DexDescription_Camaub_2,
+ .pokemonScale = 342,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Camerupt
+ .categoryName = _("AUSBRUCH"),
+ .height = 19,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Camerupt_1,
+ .descriptionPage2 = DexDescription_Camerupt_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 7,
+ .trainerScale = 345,
+ .trainerOffset = 6,
+ },
+ {
+ // Qurtel
+ .categoryName = _("KOHLE"),
+ .height = 5,
+ .weight = 804,
+ .descriptionPage1 = DexDescription_Qurtel_1,
+ .descriptionPage2 = DexDescription_Qurtel_2,
+ .pokemonScale = 390,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Spoink
+ .categoryName = _("SPRUNGFEDER"),
+ .height = 7,
+ .weight = 306,
+ .descriptionPage1 = DexDescription_Spoink_1,
+ .descriptionPage2 = DexDescription_Spoink_2,
+ .pokemonScale = 423,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Groink
+ .categoryName = _("MANIPULATOR"),
+ .height = 9,
+ .weight = 715,
+ .descriptionPage1 = DexDescription_Groink_1,
+ .descriptionPage2 = DexDescription_Groink_2,
+ .pokemonScale = 358,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Pandir
+ .categoryName = _("PUNKT-PANDA"),
+ .height = 11,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Pandir_1,
+ .descriptionPage2 = DexDescription_Pandir_2,
+ .pokemonScale = 321,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Knacklion
+ .categoryName = _("AMEISENLÖWE"),
+ .height = 7,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Knacklion_1,
+ .descriptionPage2 = DexDescription_Knacklion_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Vibrava
+ .categoryName = _("VIBRATION"),
+ .height = 11,
+ .weight = 153,
+ .descriptionPage1 = DexDescription_Vibrava_1,
+ .descriptionPage2 = DexDescription_Vibrava_2,
+ .pokemonScale = 370,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Libelldra
+ .categoryName = _("MYSTIK"),
+ .height = 20,
+ .weight = 820,
+ .descriptionPage1 = DexDescription_Libelldra_1,
+ .descriptionPage2 = DexDescription_Libelldra_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ {
+ // Tuska
+ .categoryName = _("KAKTUS"),
+ .height = 4,
+ .weight = 513,
+ .descriptionPage1 = DexDescription_Tuska_1,
+ .descriptionPage2 = DexDescription_Tuska_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Noktuska
+ .categoryName = _("VOGELSCHOCK"),
+ .height = 13,
+ .weight = 774,
+ .descriptionPage1 = DexDescription_Noktuska_1,
+ .descriptionPage2 = DexDescription_Noktuska_2,
+ .pokemonScale = 327,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Wablu
+ .categoryName = _("WOLLVOGEL"),
+ .height = 4,
+ .weight = 12,
+ .descriptionPage1 = DexDescription_Wablu_1,
+ .descriptionPage2 = DexDescription_Wablu_2,
+ .pokemonScale = 422,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Altaria
+ .categoryName = _("SUMMSEL"),
+ .height = 11,
+ .weight = 206,
+ .descriptionPage1 = DexDescription_Altaria_1,
+ .descriptionPage2 = DexDescription_Altaria_2,
+ .pokemonScale = 327,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sengo
+ .categoryName = _("FRETTKATZ"),
+ .height = 13,
+ .weight = 403,
+ .descriptionPage1 = DexDescription_Sengo_1,
+ .descriptionPage2 = DexDescription_Sengo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Vipitis
+ .categoryName = _("REISSZAHN"),
+ .height = 27,
+ .weight = 525,
+ .descriptionPage1 = DexDescription_Vipitis_1,
+ .descriptionPage2 = DexDescription_Vipitis_2,
+ .pokemonScale = 275,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lunastein
+ .categoryName = _("METEORIT"),
+ .height = 10,
+ .weight = 1680,
+ .descriptionPage1 = DexDescription_Lunastein_1,
+ .descriptionPage2 = DexDescription_Lunastein_2,
+ .pokemonScale = 300,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Sonnfel
+ .categoryName = _("METEORIT"),
+ .height = 12,
+ .weight = 1540,
+ .descriptionPage1 = DexDescription_Sonnfel_1,
+ .descriptionPage2 = DexDescription_Sonnfel_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schmerbe
+ .categoryName = _("BARTHAAR"),
+ .height = 4,
+ .weight = 19,
+ .descriptionPage1 = DexDescription_Schmerbe_1,
+ .descriptionPage2 = DexDescription_Schmerbe_2,
+ .pokemonScale = 581,
+ .pokemonOffset = 65533,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Welsar
+ .categoryName = _("BARTHAAR"),
+ .height = 9,
+ .weight = 236,
+ .descriptionPage1 = DexDescription_Welsar_1,
+ .descriptionPage2 = DexDescription_Welsar_2,
+ .pokemonScale = 317,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Krebscorps
+ .categoryName = _("GROBIAN"),
+ .height = 6,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Krebscorps_1,
+ .descriptionPage2 = DexDescription_Krebscorps_2,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Krebutack
+ .categoryName = _("SCHLINGEL"),
+ .height = 11,
+ .weight = 328,
+ .descriptionPage1 = DexDescription_Krebutack_1,
+ .descriptionPage2 = DexDescription_Krebutack_2,
+ .pokemonScale = 365,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Puppance
+ .categoryName = _("LEHMPUPPE"),
+ .height = 5,
+ .weight = 215,
+ .descriptionPage1 = DexDescription_Puppance_1,
+ .descriptionPage2 = DexDescription_Puppance_2,
+ .pokemonScale = 457,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Lepumentas
+ .categoryName = _("LEHMPUPPE"),
+ .height = 15,
+ .weight = 1080,
+ .descriptionPage1 = DexDescription_Lepumentas_1,
+ .descriptionPage2 = DexDescription_Lepumentas_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 280,
+ .trainerOffset = 1,
+ },
+ {
+ // Liliep
+ .categoryName = _("SEEANEMONE"),
+ .height = 10,
+ .weight = 238,
+ .descriptionPage1 = DexDescription_Liliep_1,
+ .descriptionPage2 = DexDescription_Liliep_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Wielie
+ .categoryName = _("RANKFÜSSER"),
+ .height = 15,
+ .weight = 604,
+ .descriptionPage1 = DexDescription_Wielie_1,
+ .descriptionPage2 = DexDescription_Wielie_2,
+ .pokemonScale = 267,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Anorith
+ .categoryName = _("KREBSSENIOR"),
+ .height = 7,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Anorith_1,
+ .descriptionPage2 = DexDescription_Anorith_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Armaldo
+ .categoryName = _("SCHILD"),
+ .height = 15,
+ .weight = 682,
+ .descriptionPage1 = DexDescription_Armaldo_1,
+ .descriptionPage2 = DexDescription_Armaldo_2,
+ .pokemonScale = 312,
+ .pokemonOffset = 3,
+ .trainerScale = 271,
+ .trainerOffset = 0,
+ },
+ {
+ // Barschwa
+ .categoryName = _("FISCH"),
+ .height = 6,
+ .weight = 74,
+ .descriptionPage1 = DexDescription_Barschwa_1,
+ .descriptionPage2 = DexDescription_Barschwa_2,
+ .pokemonScale = 423,
+ .pokemonOffset = 65532,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Milotic
+ .categoryName = _("ZARTHEIT"),
+ .height = 62,
+ .weight = 1620,
+ .descriptionPage1 = DexDescription_Milotic_1,
+ .descriptionPage2 = DexDescription_Milotic_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 360,
+ .trainerOffset = 7,
+ },
+ {
+ // Formeo
+ .categoryName = _("WETTER"),
+ .height = 3,
+ .weight = 8,
+ .descriptionPage1 = DexDescription_Formeo_1,
+ .descriptionPage2 = DexDescription_Formeo_2,
+ .pokemonScale = 435,
+ .pokemonOffset = 65531,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kecleon
+ .categoryName = _("FARBENSPIEL"),
+ .height = 10,
+ .weight = 220,
+ .descriptionPage1 = DexDescription_Kecleon_1,
+ .descriptionPage2 = DexDescription_Kecleon_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Shuppet
+ .categoryName = _("PUPPE"),
+ .height = 6,
+ .weight = 23,
+ .descriptionPage1 = DexDescription_Shuppet_1,
+ .descriptionPage2 = DexDescription_Shuppet_2,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Banette
+ .categoryName = _("MARIONETTE"),
+ .height = 11,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Banette_1,
+ .descriptionPage2 = DexDescription_Banette_2,
+ .pokemonScale = 262,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Zwirrlicht
+ .categoryName = _("REQUIEM"),
+ .height = 8,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Zwirrlicht_1,
+ .descriptionPage2 = DexDescription_Zwirrlicht_2,
+ .pokemonScale = 406,
+ .pokemonOffset = 65532,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Zwirrklop
+ .categoryName = _("WINK"),
+ .height = 16,
+ .weight = 306,
+ .descriptionPage1 = DexDescription_Zwirrklop_1,
+ .descriptionPage2 = DexDescription_Zwirrklop_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 299,
+ .trainerOffset = 1,
+ },
+ {
+ // Tropius
+ .categoryName = _("OBST"),
+ .height = 20,
+ .weight = 1000,
+ .descriptionPage1 = DexDescription_Tropius_1,
+ .descriptionPage2 = DexDescription_Tropius_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 344,
+ .trainerOffset = 7,
+ },
+ {
+ // Palimpalim
+ .categoryName = _("WINDSPIEL"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Palimpalim_1,
+ .descriptionPage2 = DexDescription_Palimpalim_2,
+ .pokemonScale = 505,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Absol
+ .categoryName = _("DESASTER"),
+ .height = 12,
+ .weight = 470,
+ .descriptionPage1 = DexDescription_Absol_1,
+ .descriptionPage2 = DexDescription_Absol_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Isso
+ .categoryName = _("STRAHLEKIND"),
+ .height = 6,
+ .weight = 140,
+ .descriptionPage1 = DexDescription_Isso_1,
+ .descriptionPage2 = DexDescription_Isso_2,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Schneppke
+ .categoryName = _("SCHNEEHUT"),
+ .height = 7,
+ .weight = 168,
+ .descriptionPage1 = DexDescription_Schneppke_1,
+ .descriptionPage2 = DexDescription_Schneppke_2,
+ .pokemonScale = 380,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Firnontor
+ .categoryName = _("ANTLITZ"),
+ .height = 15,
+ .weight = 2565,
+ .descriptionPage1 = DexDescription_Firnontor_1,
+ .descriptionPage2 = DexDescription_Firnontor_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 344,
+ .trainerOffset = 0,
+ },
+ {
+ // Seemops
+ .categoryName = _("APPLAUS"),
+ .height = 8,
+ .weight = 395,
+ .descriptionPage1 = DexDescription_Seemops_1,
+ .descriptionPage2 = DexDescription_Seemops_2,
+ .pokemonScale = 315,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Seejong
+ .categoryName = _("SPIELBALL"),
+ .height = 11,
+ .weight = 876,
+ .descriptionPage1 = DexDescription_Seejong_1,
+ .descriptionPage2 = DexDescription_Seejong_2,
+ .pokemonScale = 338,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Walraisa
+ .categoryName = _("EISBRECHER"),
+ .height = 14,
+ .weight = 1506,
+ .descriptionPage1 = DexDescription_Walraisa_1,
+ .descriptionPage2 = DexDescription_Walraisa_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Perlu
+ .categoryName = _("MUSCHEL"),
+ .height = 4,
+ .weight = 525,
+ .descriptionPage1 = DexDescription_Perlu_1,
+ .descriptionPage2 = DexDescription_Perlu_2,
+ .pokemonScale = 691,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Aalabyss
+ .categoryName = _("TIEFSEE"),
+ .height = 17,
+ .weight = 270,
+ .descriptionPage1 = DexDescription_Aalabyss_1,
+ .descriptionPage2 = DexDescription_Aalabyss_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Saganabyss
+ .categoryName = _("SÜDSEE"),
+ .height = 18,
+ .weight = 226,
+ .descriptionPage1 = DexDescription_Saganabyss_1,
+ .descriptionPage2 = DexDescription_Saganabyss_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Relicanth
+ .categoryName = _("BESTAND"),
+ .height = 10,
+ .weight = 234,
+ .descriptionPage1 = DexDescription_Relicanth_1,
+ .descriptionPage2 = DexDescription_Relicanth_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Liebiskus
+ .categoryName = _("RENDEZVOUS"),
+ .height = 6,
+ .weight = 87,
+ .descriptionPage1 = DexDescription_Liebiskus_1,
+ .descriptionPage2 = DexDescription_Liebiskus_2,
+ .pokemonScale = 371,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Kindwurm
+ .categoryName = _("STEINHAUPT"),
+ .height = 6,
+ .weight = 421,
+ .descriptionPage1 = DexDescription_Kindwurm_1,
+ .descriptionPage2 = DexDescription_Kindwurm_2,
+ .pokemonScale = 448,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Draschel
+ .categoryName = _("DURCHSTEHER"),
+ .height = 11,
+ .weight = 1105,
+ .descriptionPage1 = DexDescription_Draschel_1,
+ .descriptionPage2 = DexDescription_Draschel_2,
+ .pokemonScale = 311,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Brutalanda
+ .categoryName = _("DRACHE"),
+ .height = 15,
+ .weight = 1026,
+ .descriptionPage1 = DexDescription_Brutalanda_1,
+ .descriptionPage2 = DexDescription_Brutalanda_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Tanhel
+ .categoryName = _("EISENKUGEL"),
+ .height = 6,
+ .weight = 952,
+ .descriptionPage1 = DexDescription_Tanhel_1,
+ .descriptionPage2 = DexDescription_Tanhel_2,
+ .pokemonScale = 414,
+ .pokemonOffset = 65535,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Metang
+ .categoryName = _("EISENKLAUE"),
+ .height = 12,
+ .weight = 2025,
+ .descriptionPage1 = DexDescription_Metang_1,
+ .descriptionPage2 = DexDescription_Metang_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Metagross
+ .categoryName = _("EISENFUSS"),
+ .height = 16,
+ .weight = 5500,
+ .descriptionPage1 = DexDescription_Metagross_1,
+ .descriptionPage2 = DexDescription_Metagross_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 447,
+ .trainerOffset = 9,
+ },
+ {
+ // Regirock
+ .categoryName = _("STEINGIPFEL"),
+ .height = 17,
+ .weight = 2300,
+ .descriptionPage1 = DexDescription_Regirock_1,
+ .descriptionPage2 = DexDescription_Regirock_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 309,
+ .trainerOffset = 1,
+ },
+ {
+ // Regice
+ .categoryName = _("EISBERG"),
+ .height = 18,
+ .weight = 1750,
+ .descriptionPage1 = DexDescription_Regice_1,
+ .descriptionPage2 = DexDescription_Regice_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 2,
+ },
+ {
+ // Registeel
+ .categoryName = _("EISEN"),
+ .height = 19,
+ .weight = 2050,
+ .descriptionPage1 = DexDescription_Registeel_1,
+ .descriptionPage2 = DexDescription_Registeel_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 359,
+ .trainerOffset = 6,
+ },
+ {
+ // Latias
+ .categoryName = _("ÄON"),
+ .height = 14,
+ .weight = 400,
+ .descriptionPage1 = DexDescription_Latias_1,
+ .descriptionPage2 = DexDescription_Latias_2,
+ .pokemonScale = 304,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Latios
+ .categoryName = _("ÄON"),
+ .height = 20,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Latios_1,
+ .descriptionPage2 = DexDescription_Latios_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 294,
+ .trainerOffset = 3,
+ },
+ {
+ // Kyogre
+ .categoryName = _("SEEGRÜNDLER"),
+ .height = 45,
+ .weight = 3520,
+ .descriptionPage1 = DexDescription_Kyogre_1,
+ .descriptionPage2 = DexDescription_Kyogre_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 614,
+ .trainerOffset = 13,
+ },
+ {
+ // Groudon
+ .categoryName = _("KONTINENT"),
+ .height = 35,
+ .weight = 9500,
+ .descriptionPage1 = DexDescription_Groudon_1,
+ .descriptionPage2 = DexDescription_Groudon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ {
+ // Rayquaza
+ .categoryName = _("HIMMELHOCH"),
+ .height = 70,
+ .weight = 2065,
+ .descriptionPage1 = DexDescription_Rayquaza_1,
+ .descriptionPage2 = DexDescription_Rayquaza_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 448,
+ .trainerOffset = 12,
+ },
+ {
+ // Jirachi
+ .categoryName = _("WÜNSCHER"),
+ .height = 3,
+ .weight = 11,
+ .descriptionPage1 = DexDescription_Jirachi_1,
+ .descriptionPage2 = DexDescription_Jirachi_2,
+ .pokemonScale = 608,
+ .pokemonOffset = 65528,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ {
+ // Deoxys
+ .categoryName = _("DNS"),
+ .height = 17,
+ .weight = 608,
+ .descriptionPage1 = DexDescription_Deoxys_1,
+ .descriptionPage2 = DexDescription_Deoxys_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 290,
+ .trainerOffset = 2,
+ },
+};
diff --git a/src/data/pokedex_orders.h b/src/data/pokedex_orders.h
index 3577e6793..736c0df6a 100644
--- a/src/data/pokedex_orders.h
+++ b/src/data/pokedex_orders.h
@@ -1,3 +1,4 @@
+#if ENGLISH
static const u16 gPokedexOrder_Alphabetical[] =
{
387,
@@ -117,7 +118,7 @@ static const u16 gPokedexOrder_Alphabetical[] =
102, // Exeggcute
103, // Exeggutor
295, // Exploud
- 83, // Farfetchd
+ 83, // Farfetch'd
22, // Fearow
349, // Feebas
160, // Feraligatr
@@ -412,6 +413,422 @@ static const u16 gPokedexOrder_Alphabetical[] =
263, // Zigzagoon
41, // Zubat
};
+#elif GERMAN
+static const u16 gPokedexOrder_Alphabetical[] = {
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 367, // Aalabyss
+ 63, // Abra
+ 359, // Absol
+ 142, // Aerodactyl
+ 93, // Alpollo
+ 334, // Altaria
+ 138, // Amonitas
+ 139, // Amoroso
+ 181, // Ampharos
+ 347, // Anorith
+ 134, // Aquana
+ 24, // Arbok
+ 168, // Ariados
+ 59, // Arkani
+ 144, // Arktos
+ 348, // Armaldo
+ 91, // Austos
+ 184, // Azumarill
+ 298, // Azurill
+ 211, // Baldorfish
+ 354, // Banette
+ 349, // Barschwa
+ 15, // Bibor
+ 3, // Bisaflor
+ 2, // Bisaknosp
+ 1, // Bisasam
+ 274, // Blanas
+ 135, // Blitza
+ 182, // Blubella
+ 48, // Bluzuk
+ 225, // Botogel
+ 373, // Brutalanda
+ 287, // Bummelz
+ 322, // Camaub
+ 323, // Camerupt
+ 251, // Celebi
+ 113, // Chaneira
+ 222, // Corasonn
+ 234, // Damhirplex
+ 386, // Deoxys
+ 248, // Despotar
+ 50, // Digda
+ 51, // Digdri
+ 132, // Ditto
+ 85, // Dodri
+ 84, // Dodu
+ 232, // Donphan
+ 148, // Dragonir
+ 149, // Dragoran
+ 372, // Draschel
+ 147, // Dratini
+ 44, // Duflor
+ 206, // Dummisel
+ 239, // Elekid
+ 125, // Elektek
+ 152, // Endivie
+ 300, // Eneco
+ 301, // Enekoro
+ 244, // Entei
+ 54, // Enton
+ 55, // Entoron
+ 133, // Evoli
+ 235, // Farbeagle
+ 194, // Felino
+ 155, // Feurigel
+ 261, // Fiffyen
+ 362, // Firnontor
+ 136, // Flamara
+ 79, // Flegmon
+ 255, // Flemmli
+ 174, // Fluffeluff
+ 303, // Flunkifer
+ 293, // Flurmel
+ 351, // Formeo
+ 205, // Forstellka
+ 309, // Frizelbliz
+ 58, // Fukano
+ 78, // Gallopa
+ 130, // Garados
+ 252, // Geckarbor
+ 283, // Gehweiher
+ 94, // Gengar
+ 75, // Georok
+ 76, // Geowaz
+ 264, // Geradaks
+ 254, // Gewaldro
+ 45, // Giflor
+ 203, // Girafarig
+ 4, // Glumanda
+ 6, // Glurak
+ 5, // Glutexo
+ 42, // Golbat
+ 118, // Goldini
+ 119, // Golking
+ 210, // Granbull
+ 190, // Griffel
+ 326, // Groink
+ 383, // Groudon
+ 282, // Guardevoir
+ 21, // Habitak
+ 297, // Hariyama
+ 242, // Heiteira
+ 250, // Ho-oh
+ 163, // Hoothoot
+ 187, // Hoppspross
+ 13, // Hornliu
+ 188, // Hubelupf
+ 229, // Hundemon
+ 228, // Hunduster
+ 258, // Hydropi
+ 97, // Hypno
+ 22, // Ibitak
+ 201, // Icognito
+ 156, // Igelavar
+ 169, // Iksbat
+ 314, // Illumise
+ 160, // Impergator
+ 360, // Isso
+ 385, // Jirachi
+ 87, // Jugong
+ 256, // Jungglut
+ 86, // Jurob
+ 140, // Kabuto
+ 141, // Kabutops
+ 64, // Kadabra
+ 115, // Kangama
+ 318, // Kanivanha
+ 286, // Kapilz
+ 237, // Kapoera
+ 272, // Kappalores
+ 158, // Karnimani
+ 129, // Karpador
+ 352, // Kecleon
+ 221, // Keifel
+ 106, // Kicklee
+ 371, // Kindwurm
+ 99, // Kingler
+ 281, // Kirlia
+ 74, // Kleinstein
+ 328, // Knacklion
+ 285, // Knilz
+ 69, // Knofensa
+ 105, // Knogga
+ 40, // Knuddeluff
+ 103, // Kokowei
+ 14, // Kokuna
+ 98, // Krabby
+ 294, // Krakeelo
+ 198, // Kramurx
+ 295, // Krawumms
+ 341, // Krebscorps
+ 342, // Krebutack
+ 238, // Kussilla
+ 382, // Kyogre
+ 80, // Lahmus
+ 170, // Lampi
+ 171, // Lanturn
+ 131, // Lapras
+ 246, // Larvitar
+ 199, // Laschoking
+ 380, // Latias
+ 381, // Latios
+ 146, // Lavados
+ 166, // Ledian
+ 165, // Ledyba
+ 101, // Lektrobal
+ 344, // Lepumentas
+ 289, // Letarking
+ 330, // Libelldra
+ 370, // Liebiskus
+ 345, // Liliep
+ 257, // Lohgock
+ 271, // Lombrero
+ 153, // Lorblatt
+ 270, // Loturzel
+ 249, // Lugia
+ 337, // Lunastein
+ 66, // Machollo
+ 68, // Machomei
+ 240, // Magby
+ 219, // Magcargo
+ 126, // Magmar
+ 262, // Magnayen
+ 81, // Magnetilo
+ 82, // Magneton
+ 296, // Makuhita
+ 226, // Mantax
+ 183, // Marill
+ 67, // Maschock
+ 284, // Maskeregen
+ 52, // Mauzi
+ 308, // Meditalis
+ 307, // Meditie
+ 154, // Meganie
+ 56, // Menki
+ 376, // Metagross
+ 375, // Metang
+ 151, // Mew
+ 150, // Mewtu
+ 350, // Milotic
+ 241, // Miltank
+ 312, // Minun
+ 185, // Mogelbaum
+ 259, // Moorabbel
+ 195, // Morlord
+ 288, // Muntier
+ 90, // Muschas
+ 43, // Myrapla
+ 197, // Nachtara
+ 299, // Nasgnet
+ 177, // Natu
+ 92, // Nebulak
+ 34, // Nidoking
+ 31, // Nidoqueen
+ 29, // Nidoran♀
+ 32, // Nidoran♂
+ 30, // Nidorina
+ 33, // Nidorino
+ 290, // Nincada
+ 291, // Ninjask
+ 292, // Ninjatom
+ 107, // Nockchan
+ 164, // Noctuh
+ 332, // Noktuska
+ 224, // Octillery
+ 49, // Omot
+ 95, // Onix
+ 102, // Owei
+ 358, // Palimpalim
+ 327, // Pandir
+ 268, // Panekon
+ 122, // Pantimos
+ 227, // Panzaeron
+ 267, // Papinella
+ 189, // Papungha
+ 46, // Paras
+ 47, // Parasek
+ 279, // Pelipper
+ 366, // Perlu
+ 231, // Phanpy
+ 172, // Pichu
+ 35, // Piepi
+ 173, // Pii
+ 25, // Pikachu
+ 127, // Pinsir
+ 36, // Pixi
+ 311, // Plusle
+ 77, // Ponita
+ 83, // Porenta
+ 137, // Porygon
+ 233, // Porygon2
+ 213, // Pottrott
+ 196, // Psiana
+ 269, // Pudox
+ 39, // Pummeluff
+ 247, // Pupitar
+ 343, // Puppance
+ 62, // Quappo
+ 60, // Quapsel
+ 61, // Quaputzi
+ 186, // Quaxo
+ 220, // Quiekel
+ 324, // Qurtel
+ 236, // Rabauz
+ 26, // Raichu
+ 243, // Raikou
+ 57, // Rasaff
+ 19, // Rattfratz
+ 20, // Rattikarl
+ 10, // Raupy
+ 384, // Rayquaza
+ 378, // Regice
+ 377, // Regirock
+ 379, // Registeel
+ 143, // Relaxo
+ 369, // Relicanth
+ 223, // Remoraid
+ 253, // Reptain
+ 23, // Rettan
+ 111, // Rihorn
+ 112, // Rizeros
+ 315, // Roselia
+ 124, // Rossana
+ 11, // Safcon
+ 368, // Saganabyss
+ 273, // Samurzel
+ 28, // Sandamer
+ 27, // Sandan
+ 71, // Sarzenia
+ 266, // Schaloko
+ 212, // Scherox
+ 7, // Schiggy
+ 8, // Schillok
+ 317, // Schlukwech
+ 316, // Schluppuck
+ 108, // Schlurp
+ 339, // Schmerbe
+ 218, // Schneckmag
+ 361, // Schneppke
+ 276, // Schwalbini
+ 277, // Schwalboss
+ 230, // Seedraking
+ 364, // Seejong
+ 117, // Seemon
+ 363, // Seemops
+ 116, // Seeper
+ 335, // Sengo
+ 353, // Shuppet
+ 123, // Sichlor
+ 65, // Simsala
+ 214, // Skaraborn
+ 207, // Skorgla
+ 88, // Sleima
+ 89, // Sleimok
+ 12, // Smettbo
+ 110, // Smogmog
+ 109, // Smogon
+ 215, // Sniebel
+ 53, // Snobilikat
+ 209, // Snubbull
+ 338, // Sonnfel
+ 192, // Sonnflora
+ 191, // Sonnkern
+ 325, // Spoink
+ 208, // Stahlos
+ 121, // Starmie
+ 120, // Sterndu
+ 306, // Stolloss
+ 305, // Stollrak
+ 304, // Stollunior
+ 245, // Suicune
+ 260, // Sumpex
+ 114, // Tangela
+ 374, // Tanhel
+ 204, // Tannza
+ 17, // Tauboga
+ 18, // Tauboss
+ 16, // Taubsi
+ 128, // Tauros
+ 216, // Teddiursa
+ 275, // Tengulist
+ 72, // Tentacha
+ 73, // Tentoxa
+ 175, // Togepi
+ 176, // Togetic
+ 319, // Tohaido
+ 157, // Tornupto
+ 104, // Tragosso
+ 280, // Trasla
+ 96, // Traumato
+ 200, // Traunfugil
+ 357, // Tropius
+ 9, // Turtok
+ 331, // Tuska
+ 159, // Tyracroc
+ 70, // Ultrigaria
+ 217, // Ursaring
+ 329, // Vibrava
+ 336, // Vipitis
+ 313, // Volbeat
+ 310, // Voltenso
+ 179, // Voltilamm
+ 100, // Voltobal
+ 38, // Vulnona
+ 37, // Vulpix
+ 180, // Waaty
+ 333, // Wablu
+ 320, // Wailmer
+ 321, // Wailord
+ 365, // Walraisa
+ 265, // Waumpel
+ 167, // Webarak
+ 340, // Welsar
+ 346, // Wielie
+ 162, // Wiesenior
+ 161, // Wiesor
+ 278, // Wingull
+ 202, // Woingenau
+ 178, // Xatu
+ 193, // Yanma
+ 145, // Zapdos
+ 263, // Zigzachs
+ 302, // Zobiris
+ 41, // Zubat
+ 356, // Zwirrklop
+ 355, // Zwirrlicht
+};
+#endif
+
static const u16 gPokedexOrder_Weight[] =
{
92, // Gastly
@@ -542,7 +959,7 @@ static const u16 gPokedexOrder_Weight[] =
206, // Dunsparce
178, // Xatu
355, // Duskull
- 83, // Farfetchd
+ 83, // Farfetch'd
328, // Trapinch
118, // Goldeen
309, // Electrike
@@ -956,7 +1373,7 @@ static const u16 gPokedexOrder_Height[] =
363, // Spheal
54, // Psyduck
219, // Magcargo
- 83, // Farfetchd
+ 83, // Farfetch'd
41, // Zubat
137, // Porygon
161, // Sentret
diff --git a/src/data/text/font0_widths.h b/src/data/text/font0_widths.h
index ff102ecec..a461eea5b 100644
--- a/src/data/text/font0_widths.h
+++ b/src/data/text/font0_widths.h
@@ -1,3 +1,4 @@
+#if ENGLISH
#if REVISION >= 1
static const u8 sFont0Widths[] = {
3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
@@ -37,3 +38,23 @@ static const u8 sFont0Widths[] = {
3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
};
#endif
+#elif GERMAN
+static const u8 sFont0Widths[] = {
+ 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
+ 8, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 4, 8,
+ 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 8, 6, 6, 8,
+ 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 6, 7, 8, 7, 7, 8, 8, 4,
+ 7, 8, 8, 8, 8, 8, 7, 8, 7, 7, 7, 7, 7, 7, 8, 7,
+ 7, 7, 7, 7, 5, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 3, 5, 3,
+ 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6,
+ 3, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
+};
+#endif
diff --git a/src/data/text/font1_widths.h b/src/data/text/font1_widths.h
index 05b4da130..7086628cb 100644
--- a/src/data/text/font1_widths.h
+++ b/src/data/text/font1_widths.h
@@ -1,4 +1,4 @@
-#if REVISION >= 1
+#if REVISION >= 1 || GERMAN
static const u8 sFont1Widths[] = {
5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 5, 8, 8, 8, 8, 8, 4, 8, 8,
diff --git a/src/data/text/font3_widths.h b/src/data/text/font3_widths.h
index d84cbdf73..2d088f136 100644
--- a/src/data/text/font3_widths.h
+++ b/src/data/text/font3_widths.h
@@ -1,3 +1,4 @@
+#if ENGLISH
#if REVISION >= 1
static const u8 sFont3Widths[] = {
3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
@@ -37,3 +38,23 @@ static const u8 sFont3Widths[] = {
3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
};
#endif
+#elif GERMAN
+static const u8 sFont3Widths[] = {
+ 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
+ 8, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 4, 8,
+ 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 8, 6, 6, 8,
+ 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 6, 7, 8, 7, 7, 8, 8, 4,
+ 7, 8, 8, 8, 8, 8, 7, 8, 7, 7, 7, 7, 7, 7, 8, 7,
+ 7, 7, 7, 7, 5, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 3, 5, 3,
+ 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6,
+ 3, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
+};
+#endif
diff --git a/src/data/text/font4_widths.h b/src/data/text/font4_widths.h
index bfa30b8e1..4c8149b76 100644
--- a/src/data/text/font4_widths.h
+++ b/src/data/text/font4_widths.h
@@ -1,4 +1,4 @@
-#if REVISION >= 1
+#if REVISION >= 1 || GERMAN
static const u8 sFont4Widths[] = {
5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 5, 8, 8, 8, 8, 8, 4, 8, 8,
diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c
new file mode 100644
index 000000000..c618ebdb2
--- /dev/null
+++ b/src/de_rom_8040FE0.c
@@ -0,0 +1,272 @@
+#include "global.h"
+#include "battle.h"
+
+#if GERMAN
+
+enum {
+ TRAINER_CLASS_NAME_LEADER = 25,
+ TRAINER_CLASS_NAME_SCHOOL_KID = 26,
+ TRAINER_CLASS_NAME_EXPERT = 30,
+ TRAINER_CLASS_NAME_POKEMON_TRAINER_3 = 46,
+};
+
+enum {
+ TRAINER_CLASS_LEADER_F = 26,
+ TRAINER_CLASS_ELITE_FOUR_F = 25,
+ TRAINER_CLASS_SCHOOL_KID_F = 30,
+ TRAINER_CLASS_BIRD_KEEPER = 46,
+ TRAINER_CLASS_MAY_1 = 61,
+ TRAINER_CLASS_MAY_2 = 62,
+ TRAINER_CLASS_MAY_3 = 63,
+};
+
+extern struct SecretBaseRecord gSecretBaseRecord;
+
+extern u8 gTrainerClassNames[][13];
+extern struct Trainer gTrainers[];
+
+u8 *de_sub_8040FE0(u8 gender) {
+ if (gender)
+ {
+ gender++;
+
+ }
+
+ gender = TRAINER_CLASS_NAME_SCHOOL_KID;
+ return gTrainerClassNames[gender];
+}
+
+u8 *de_sub_8040FF4(u8 gender) {
+ if (gender) {
+ gender++;
+ }
+
+ gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3;
+ return gTrainerClassNames[gender];
+}
+
+u8 *de_sub_804100C(u8 gender) {
+ if (gender) {
+ gender++;
+ }
+
+ gender = TRAINER_CLASS_NAME_LEADER;
+ return gTrainerClassNames[gender];
+}
+
+#ifdef NONMATCHING
+
+u8 de_sub_81364AC(void);
+u8 get_trainer_class_name_index(void);
+u8 de_sub_81364F8(void);
+u8 sub_8135FD8(void);
+
+u8 *de_sub_8041024(s32 arg0, u32 arg1) {
+ u8 nameIndex, trainerClass, gender;
+ struct Trainer *trainer;
+ u8 local2;
+
+ switch (arg0)
+ {
+ case 0x400:
+ nameIndex = GetSecretBaseTrainerNameIndex();
+ gender = gSecretBaseRecord.gender;
+ if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID)
+ {
+ return de_sub_8040FE0(gender);
+ }
+
+ return gTrainerClassNames[nameIndex];
+
+ case 0x100:
+ trainerClass = de_sub_81364AC();
+ nameIndex = get_trainer_class_name_index();
+ if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F)
+ {
+ return de_sub_8040FE0(FEMALE);
+ }
+ if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3)
+ {
+ return de_sub_8040FF4(FEMALE);
+ }
+
+ return gTrainerClassNames[nameIndex];
+
+ case 0x800:
+ trainerClass = de_sub_81364F8();
+ nameIndex = sub_8135FD8();
+ if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F)
+ {
+ return de_sub_8040FE0(FEMALE);
+ }
+ if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3)
+ {
+ return de_sub_8040FF4(FEMALE);
+ }
+
+ return gTrainerClassNames[nameIndex];
+
+ default:
+ trainer = &gTrainers[arg1];
+ trainerClass = trainer->trainerClass;
+ local2 = sub_803FC58(arg1);
+
+ if (trainerClass == TRAINER_CLASS_LEADER_F)
+ {
+ return de_sub_8040FE0(local2);
+ }
+
+ if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE)
+ {
+ return de_sub_8040FF4(FEMALE);
+ }
+
+ if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F)
+ {
+ if (gTrainers[arg1].doubleBattle == TRUE)
+ {
+ return de_sub_804100C(FEMALE);
+ }
+ else
+ {
+ return de_sub_804100C(MALE);
+ }
+ }
+
+
+ return gTrainerClassNames[trainerClass];
+ }
+}
+#else
+
+__attribute__((naked))
+void de_sub_8041024(void) {
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ adds r2, r0, 0\n\
+ adds r6, r1, 0\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r2, r0\n\
+ beq _0804104A\n\
+ cmp r2, r0\n\
+ bgt _08041040\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ cmp r2, r0\n\
+ beq _08041064\n\
+ b _0804109C\n\
+_08041040:\n\
+ movs r0, 0x80\n\
+ lsls r0, 4\n\
+ cmp r2, r0\n\
+ beq _08041086\n\
+ b _0804109C\n\
+_0804104A:\n\
+ bl GetSecretBaseTrainerNameIndex\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r0, _08041060 @ =0x02017000\n\
+ ldrb r0, [r0, 0x1]\n\
+ lsls r0, 27\n\
+ lsrs r2, r0, 31\n\
+ cmp r5, 0x1A\n\
+ beq _080410B8\n\
+ b _080410F8\n\
+ .align 2, 0\n\
+_08041060: .4byte 0x02017000\n\
+_08041064:\n\
+ bl de_sub_81364AC\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ bl get_trainer_class_name_index\n\
+_08041070:\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r4, 0x1E\n\
+ beq _08041094\n\
+ adds r0, r4, 0\n\
+ subs r0, 0x3D\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bls _080410CC\n\
+ b _080410F8\n\
+_08041086:\n\
+ bl de_sub_81364F8\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ bl sub_8135FD8\n\
+ b _08041070\n\
+_08041094:\n\
+ movs r0, 0x1\n\
+ bl de_sub_8040FE0\n\
+ b _08041102\n\
+_0804109C:\n\
+ ldr r1, _080410C0 @ =gTrainers\n\
+ lsls r4, r6, 2\n\
+ adds r0, r4, r6\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrb r5, [r0, 0x1]\n\
+ lsls r0, r6, 16\n\
+ lsrs r0, 16\n\
+ bl sub_803FC58\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r5, 0x1A\n\
+ bne _080410C4\n\
+_080410B8:\n\
+ adds r0, r2, 0\n\
+ bl de_sub_8040FE0\n\
+ b _08041102\n\
+ .align 2, 0\n\
+_080410C0: .4byte gTrainers\n\
+_080410C4:\n\
+ cmp r5, 0x2E\n\
+ bne _080410D4\n\
+ cmp r2, 0x1\n\
+ bne _080410D4\n\
+_080410CC:\n\
+ movs r0, 0x1\n\
+ bl de_sub_8040FF4\n\
+ b _08041102\n\
+_080410D4:\n\
+ cmp r5, 0x19\n\
+ bne _080410F8\n\
+ ldr r0, _080410F4 @ =gTrainers\n\
+ adds r1, r4, r6\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x18]\n\
+ movs r2, 0\n\
+ cmp r0, 0x1\n\
+ bne _080410EA\n\
+ movs r2, 0x1\n\
+_080410EA:\n\
+ adds r0, r2, 0\n\
+ bl de_sub_804100C\n\
+ b _08041102\n\
+ .align 2, 0\n\
+_080410F4: .4byte gTrainers\n\
+_080410F8:\n\
+ movs r0, 0xD\n\
+ adds r1, r5, 0\n\
+ muls r1, r0\n\
+ ldr r0, _08041108 @ =gTrainerClassNames\n\
+ adds r0, r1, r0\n\
+_08041102:\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08041108: .4byte gTrainerClassNames\n\
+ .syntax divided\n");
+}
+#endif
+
+u32 de_sub_804110C(u32 arg0, u32 arg1) {
+ return arg1;
+}
+
+#endif
diff --git a/src/decoration.c b/src/decoration.c
index a60870ab8..9eba54ad7 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -19,6 +19,7 @@
#include "field_weather.h"
#include "decoration.h"
+#if ENGLISH
const u8 DecorDesc_SMALL_DESK[] = _(
"A small desk built\n"
"for one.");
@@ -596,6 +597,9 @@ const u8 DecorDesc_REGISTEEL_DOLL[] = _(
"A large doll.\n"
"Place it on a mat\n"
"or a desk.");
+#elif GERMAN
+#include "data/decoration/descriptions_de.h"
+#endif
const u16 DecorGfx_SMALL_DESK[] = {
0x87
@@ -1239,6 +1243,7 @@ const u16 DecorGfx_REGISTEEL_DOLL[] = {
MAP_OBJ_GFX_BIG_REGISTEEL_DOLL
};
+#if ENGLISH
const struct Decoration gDecorations[] = {
{DECOR_NONE, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 0, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK},
{DECOR_SMALL_DESK, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 3000, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK},
@@ -1362,6 +1367,9 @@ const struct Decoration gDecorations[] = {
{DECOR_REGICE_DOLL, _("REGICE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGICE_DOLL, DecorGfx_REGICE_DOLL},
{DECOR_REGISTEEL_DOLL, _("REGISTEEL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGISTEEL_DOLL, DecorGfx_REGISTEEL_DOLL}
};
+#elif GERMAN
+#include "data/decoration/decorations.h"
+#endif
const u8 *const gUnknown_083EC5E4[] = {
SecretBaseText_Desk,
@@ -1784,7 +1792,14 @@ void sub_80FE7EC(u8 taskId)
sub_80FEC94(taskId);
sub_80FECB8(gUnknown_020388F6);
+#if ENGLISH
MenuDrawTextWindow(15, 12, 29, 19);
+#elif GERMAN
+ if ((gUnknown_020388F2 + gUnknown_020388F4) != gUnknown_020388D5)
+ {
+ MenuDrawTextWindow(15, 12, 29, 19);
+ }
+#endif
sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4);
InitMenu(0, 1, 2, gUnknown_020388F3 + 1, gUnknown_020388F2, 13);
@@ -1941,10 +1956,56 @@ void sub_80FECB8(u8 decoCat)
sub_80FE470(decoCat, 16, 1, 0xff);
}
+#if ENGLISH
void sub_80FECE0(u8 decoCat)
{
sub_8072AB0(gDecorations[gUnknown_020388D0[decoCat]].description, 0x80, 0x68, 0x68, 0x30, 0x1);
}
+#elif GERMAN
+__attribute__((naked))
+void sub_80FECE0(u8 decoCat)
+{
+ asm(".syntax unified\n\
+ push {lr}\n\
+ sub sp, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r0, _080FED18 @ =gUnknown_020388D5\n\
+ ldrb r0, [r0]\n\
+ cmp r2, r0\n\
+ beq _080FED24\n\
+ ldr r1, _080FED1C @ =gDecorations\n\
+ ldr r0, _080FED20 @ =gUnknown_020388D0\n\
+ ldr r0, [r0]\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 5\n\
+ adds r1, 0x18\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x30\n\
+ str r1, [sp]\n\
+ movs r1, 0x1\n\
+ str r1, [sp, 0x4]\n\
+ movs r1, 0x80\n\
+ movs r2, 0x68\n\
+ movs r3, 0x68\n\
+ bl sub_8072AB0\n\
+ movs r0, 0x1\n\
+ b _080FED26\n\
+ .align 2, 0\n\
+_080FED18: .4byte gUnknown_020388D5\n\
+_080FED1C: .4byte gDecorations\n\
+_080FED20: .4byte gUnknown_020388D0\n\
+_080FED24:\n\
+ movs r0, 0\n\
+_080FED26:\n\
+ add sp, 0x8\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
void sub_80FED1C(void)
{
diff --git a/src/intro.c b/src/intro.c
index 396f5e5df..462a2134d 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -43,7 +43,11 @@ extern void *const gUnknown_0840B5A0[];
static const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal");
static const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal");
+#if ENGLISH
static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz");
+#elif GERMAN
+extern const u8 gIntroTiles[];
+#endif
static const u16 gIntro1BGPals[][16] =
{
INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"),
diff --git a/src/link.c b/src/link.c
index 5f6c32370..363a8b494 100644
--- a/src/link.c
+++ b/src/link.c
@@ -178,13 +178,13 @@ static const u8 sDebugMessages[7][12] =
static const u8 sColorCodes[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE2}");
-static const u32 sBlockRequestLookupTable[5 * 2] =
+const struct BlockRequest sBlockRequestLookupTable[5] =
{
- (u32)gBlockSendBuffer, 200,
- (u32)gBlockSendBuffer, 200,
- (u32)gBlockSendBuffer, 100,
- (u32)gBlockSendBuffer, 220,
- (u32)gBlockSendBuffer, 40,
+ {gBlockSendBuffer, 200},
+ {gBlockSendBuffer, 200},
+ {gBlockSendBuffer, 100},
+ {gBlockSendBuffer, 220},
+ {gBlockSendBuffer, 40},
};
static const u8 sTestString[] = _("テストな");
@@ -560,7 +560,7 @@ static void ProcessRecvCmds(u8 unusedParam)
break;
case 0xCCCC:
#if defined(ENGLISH)
- SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
+ SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size);
#elif defined(GERMAN)
if (deUnkValue2 == 1)
{
@@ -569,7 +569,7 @@ static void ProcessRecvCmds(u8 unusedParam)
}
else if (deUnkValue2 == 2 || deUnkValue2 == 3)
{
- SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
+ SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size);
if (deUnkValue2 == 2)
deUnkValue2 = 1;
@@ -578,7 +578,7 @@ static void ProcessRecvCmds(u8 unusedParam)
}
else
{
- SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
+ SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size);
}
#endif
break;
diff --git a/src/menu.c b/src/menu.c
index d84a4c3c5..45cfbbc2f 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -9,6 +9,7 @@
#include "strings.h"
#include "text.h"
#include "text_window.h"
+#include "string_util.h"
struct Menu
{
@@ -611,6 +612,7 @@ u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6)
return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6);
}
+#if ENGLISH
int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
{
u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6);
@@ -623,6 +625,90 @@ int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
if (newlineCount < height)
MenuFillWindowRectWithBlankTile(left, top + 2 * newlineCount, left + width - 1, height + top - 1);
}
+#elif GERMAN
+__attribute__((naked))
+int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x10\n\
+ mov r12, r0\n\
+ ldr r0, [sp, 0x24]\n\
+ ldr r4, [sp, 0x28]\n\
+ str r4, [sp, 0xC]\n\
+ lsls r1, 24\n\
+ lsrs r5, r1, 24\n\
+ lsls r2, 16\n\
+ lsrs r4, r2, 16\n\
+ lsls r3, 24\n\
+ lsrs r6, r3, 24\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r0, _08072AF8 @ =gMenuWindowPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08072AFC @ =gMenuTextTileOffset\n\
+ ldrh r3, [r1]\n\
+ str r5, [sp]\n\
+ str r4, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ movs r1, 0\n\
+ mov r2, r12\n\
+ bl sub_8004FD0\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r2, r1, 24\n\
+ movs r3, 0x7\n\
+ ands r3, r5\n\
+ cmp r3, 0\n\
+ bne _08072B00\n\
+ adds r1, r6, 0x7\n\
+ asrs r1, 3\n\
+ subs r1, 0x1\n\
+ b _08072B0C\n\
+ .align 2, 0\n\
+_08072AF8: .4byte gMenuWindowPtr\n\
+_08072AFC: .4byte gMenuTextTileOffset\n\
+_08072B00:\n\
+ adds r3, r6, r3\n\
+ subs r1, r3, 0x1\n\
+ cmp r1, 0\n\
+ bge _08072B0A\n\
+ adds r1, r3, 0x6\n\
+_08072B0A:\n\
+ asrs r1, 3\n\
+_08072B0C:\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r6, r1, 0\n\
+ lsrs r5, 3\n\
+ adds r1, r7, 0x7\n\
+ asrs r1, 3\n\
+ lsls r1, 24\n\
+ lsrs r7, r1, 24\n\
+ lsrs r4, 3\n\
+ cmp r2, r7\n\
+ bcs _08072B3E\n\
+ lsls r1, r2, 1\n\
+ adds r1, r4, r1\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r2, r5, r6\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r3, r7, r4\n\
+ subs r3, 0x1\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ adds r0, r5, 0\n\
+ bl MenuFillWindowRectWithBlankTile\n\
+_08072B3E:\n\
+ add sp, 0x10\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
void MenuPrint_RightAligned(u8 *str, u8 left, u8 top)
{
@@ -735,3 +821,51 @@ void HandleDestroyMenuCursors(void)
{
DestroyMenuCursor();
}
+
+#if GERMAN
+void de_sub_8073110(u8 * buffer, u8 * name) {
+ u8 * ptr, *ptr2, *ptr3;
+
+ ptr2 = buffer;
+ ptr = &gStringVar1[1 + StringLengthN(gStringVar1, 256)];
+ ptr3 = ptr;
+
+ for (;;)
+ {
+ if (*ptr2 == EOS)
+ break;
+
+ if (*ptr2 == 0xFD)
+ {
+
+ *ptr3 = EOS;
+ ptr2 += 2;
+
+ StringAppend(ptr, name);
+ StringAppend(ptr, ptr2);
+
+ buffer[0] = EOS;
+ StringAppend(buffer, ptr);
+ break;
+ }
+
+ *ptr3 = *ptr2;
+ ptr2 += 1;
+ ptr3 += 1;
+ }
+}
+
+u8 *de_sub_8073174(u8 *name, const u8 *format) {
+ u32 offset;
+ u8 *ptr;
+
+ offset = StringLengthN(gStringVar2, 0x100);
+ ptr = &gStringVar2[1 + offset];
+
+ StringCopy(ptr, format);
+
+ de_sub_8073110(ptr, name);
+
+ return StringCopy(name, ptr);
+}
+#endif
diff --git a/src/menu_cursor.c b/src/menu_cursor.c
index cfb38ca47..2dc36cf32 100644
--- a/src/menu_cursor.c
+++ b/src/menu_cursor.c
@@ -253,7 +253,7 @@ void sub_814A958(u8 a1)
SetSubspriteTables(&gSprites[gUnknown_0203A3D1], &gSubspriteTables_842F5C0[v8]);
return;
}
-#else
+#elif ENGLISH
__attribute__((naked))
void sub_814A958(u8 a1)
{
@@ -435,6 +435,189 @@ _0814AAB4: .4byte gSubspriteTables_842F5C0\n\
_0814AAB8: .4byte gUnknown_0203A3D1\n\
.syntax divided\n");
}
+#elif GERMAN
+__attribute__((naked))
+void sub_814A958(u8 a1)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ lsls r0, 24\n\
+ ldr r4, _0814A9C4 @ =gMenuCursorSubsprites\n\
+ ldr r2, _0814A9C8 @ =0x0000ffff\n\
+ lsrs r0, 24\n\
+ str r0, [sp]\n\
+ ldr r0, _0814A9CC @ =gUnknown_0842F780\n\
+ ldr r1, [r0, 0x4]\n\
+ ldr r0, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ strh r2, [r4]\n\
+ adds r4, 0x8\n\
+ movs r7, 0x1\n\
+ movs r2, 0x1\n\
+ ldr r1, [sp]\n\
+ subs r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x7\n\
+ ble _0814AA3E\n\
+ ldr r0, _0814A9D0 @ =gUnknown_0842F788\n\
+ mov r12, r0\n\
+ mov r8, r1\n\
+ movs r1, 0x8\n\
+ negs r1, r1\n\
+ mov r10, r1\n\
+ ldr r5, _0814A9D4 @ =gUnknown_0842F790\n\
+ mov r9, r5\n\
+_0814A99E:\n\
+ lsls r0, r3, 16\n\
+ asrs r3, r0, 16\n\
+ cmp r3, 0x1F\n\
+ ble _0814A9D8\n\
+ mov r6, r12\n\
+ ldr r0, [r6]\n\
+ ldr r1, [r6, 0x4]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ strh r2, [r4]\n\
+ lsls r0, r2, 16\n\
+ movs r1, 0x80\n\
+ lsls r1, 14\n\
+ adds r0, r1\n\
+ lsrs r2, r0, 16\n\
+ ldr r3, [sp]\n\
+ lsls r5, r3, 16\n\
+ b _0814AA24\n\
+ .align 2, 0\n\
+_0814A9C4: .4byte gMenuCursorSubsprites\n\
+_0814A9C8: .4byte 0x0000ffff\n\
+_0814A9CC: .4byte gUnknown_0842F780\n\
+_0814A9D0: .4byte gUnknown_0842F788\n\
+_0814A9D4: .4byte gUnknown_0842F790\n\
+_0814A9D8:\n\
+ ldr r6, [sp]\n\
+ lsls r5, r6, 16\n\
+ mov r0, r8\n\
+ cmp r0, 0x27\n\
+ ble _0814AA0E\n\
+ cmp r3, 0x8\n\
+ ble _0814AA0E\n\
+ mov r6, r12\n\
+ ldr r0, [r6]\n\
+ ldr r1, [r6, 0x4]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ lsls r1, r2, 16\n\
+ asrs r1, 16\n\
+ adds r2, r1, 0\n\
+ subs r2, 0x20\n\
+ adds r0, r3, 0\n\
+ mov r6, r10\n\
+ ands r0, r6\n\
+ adds r2, r0\n\
+ strh r2, [r4]\n\
+ movs r0, 0x18\n\
+ ands r0, r3\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r2, r1, 16\n\
+ b _0814AA24\n\
+_0814AA0E:\n\
+ mov r3, r9\n\
+ ldr r0, [r3]\n\
+ ldr r1, [r3, 0x4]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ strh r2, [r4]\n\
+ lsls r0, r2, 16\n\
+ movs r6, 0x80\n\
+ lsls r6, 12\n\
+ adds r0, r6\n\
+ lsrs r2, r0, 16\n\
+_0814AA24:\n\
+ adds r4, 0x8\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ asrs r1, r5, 16\n\
+ lsls r0, r2, 16\n\
+ asrs r0, 16\n\
+ subs r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r3, r1, 16\n\
+ asrs r1, 16\n\
+ cmp r1, 0x7\n\
+ bgt _0814A99E\n\
+_0814AA3E:\n\
+ ldr r5, _0814AAAC @ =0x0843d6d8\n\
+ ldr r0, [r5]\n\
+ ldr r1, [r5, 0x4]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ lsls r1, r2, 16\n\
+ asrs r1, 16\n\
+ subs r1, 0x7\n\
+ lsls r0, r3, 16\n\
+ asrs r0, 16\n\
+ adds r0, r1\n\
+ strh r0, [r4]\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r6, _0814AAB0 @ =gUnknown_0203A3D0\n\
+ ldrb r0, [r6]\n\
+ cmp r0, 0x40\n\
+ beq _0814AA7C\n\
+ adds r1, r0, 0\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, _0814AAB4 @ =gSprites\n\
+ adds r2, r0, r1\n\
+ lsls r1, r7, 3\n\
+ ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\
+ adds r1, r0\n\
+ adds r0, r2, 0\n\
+ bl SetSubspriteTables\n\
+_0814AA7C:\n\
+ ldr r1, _0814AABC @ =gUnknown_0203A3D1\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x40\n\
+ beq _0814AA9C\n\
+ adds r1, r0, 0\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, _0814AAB4 @ =gSprites\n\
+ adds r2, r0, r1\n\
+ lsls r1, r7, 3\n\
+ ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\
+ adds r1, r0\n\
+ adds r0, r2, 0\n\
+ bl SetSubspriteTables\n\
+_0814AA9C:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0814AAAC: .4byte 0x0843d6d8\n\
+_0814AAB0: .4byte gUnknown_0203A3D0\n\
+_0814AAB4: .4byte gSprites\n\
+_0814AAB8: .4byte gSubspriteTables_842F5C0\n\
+_0814AABC: .4byte gUnknown_0203A3D1\n\
+ .syntax divided\n");
+}
#endif
void sub_814AABC(void (*callback)(struct Sprite *))
@@ -542,7 +725,11 @@ u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5)
}
LoadSpriteSheetDeferred(&gUnknown_0842F1C0[a3 & 0xF]);
- gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 0xA0, a1);
+#if ENGLISH
+ gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 160, a1);
+#elif GERMAN
+ gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 161, a1);
+#endif
if (gUnknown_0203A3D2 != 0x40)
{
@@ -604,3 +791,9 @@ void sub_814ADF4(u8 a1)
SetSubspriteTables(&gSprites[gUnknown_0203A3D2], &gSubspriteTables_842F6C0[a1]);
return;
}
+
+#if GERMAN
+void nullsub_814B200(void)
+{
+}
+#endif
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
index e3d533d28..45ef719da 100644
--- a/src/mystery_event_script.c
+++ b/src/mystery_event_script.c
@@ -4,10 +4,16 @@
#include "string_util.h"
#include "text.h"
+#if ENGLISH
+#define UNK_MASK_1 0x2
+#elif GERMAN
+#define UNK_MASK_1 0x4
+#endif
+
#ifdef SAPPHIRE
-#define UNK_MASK 0x100
+#define UNK_MASK_2 0x100
#else
-#define UNK_MASK 0x80
+#define UNK_MASK_2 0x80
#endif
extern struct ScriptContext gUnknown_02039288;
@@ -19,16 +25,16 @@ extern u8 gOtherText_DataCannotUseVersion[];
bool32 sub_8126098(u16 a1, u32 a2, u16 a3, u32 a4)
{
- if (!(a1 & 0x2))
+ if (!(a1 & UNK_MASK_1))
return FALSE;
- if (!(a2 & 0x2))
+ if (!(a2 & UNK_MASK_1))
return FALSE;
if (!(a3 & 0x4))
return FALSE;
- if (!(a4 & UNK_MASK))
+ if (!(a4 & UNK_MASK_2))
return FALSE;
return TRUE;
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 88059e669..6c107f022 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -18,6 +18,12 @@
#include "trig.h"
#include "util.h"
+#ifdef ENGLISH
+#define COLUMN_COUNT 9
+#elif GERMAN
+#define COLUMN_COUNT 10
+#endif
+
extern u16 gKeyRepeatStartDelay;
extern u8 unk_2000000[];
@@ -467,8 +473,13 @@ static bool8 MainState_WaitPageSwap(struct Task *task)
sub_80B77F8();
SetInputState(INPUT_STATE_ENABLED);
GetCursorPos(&cursorX, &cursorY);
+#if ENGLISH
if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
cursorX = 5;
+#elif GERMAN
+ if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 7 || cursorX == 8))
+ cursorX = 6;
+#endif
SetCursorPos(cursorX, cursorY);
sub_80B6888(0);
}
@@ -745,29 +756,33 @@ static void HandleDpadMovement(struct Task *task)
//Wrap cursor position in the X direction
if (cursorX < 0)
- cursorX = 8;
- if (cursorX > 8)
+ cursorX = COLUMN_COUNT - 1;
+ if (cursorX > COLUMN_COUNT - 1)
cursorX = 0;
//Handle cursor movement in X direction
if (sDpadDeltaX[dpadDir] != 0)
{
//The "others" page only has 5 columns
+#if ENGLISH
if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
+#elif GERMAN
+ if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7 || cursorX == 8))
+#endif
{
if (sDpadDeltaX[dpadDir] > 0)
- cursorX = 8;
+ cursorX = COLUMN_COUNT - 1;
else
cursorX = 5;
}
- if (cursorX == 8)
+ if (cursorX == COLUMN_COUNT - 1)
{
//We are now on the last column
task->tKbFunctionKey = cursorY;
cursorY = s4RowTo3RowTableY[cursorY];
}
- else if (prevCursorX == 8)
+ else if (prevCursorX == COLUMN_COUNT - 1)
{
if (cursorY == 1)
cursorY = task->tKbFunctionKey;
@@ -776,7 +791,7 @@ static void HandleDpadMovement(struct Task *task)
}
}
- if (cursorX == 8)
+ if (cursorX == COLUMN_COUNT - 1)
{
//There are only 3 keys on the last column, unlike the others,
//so wrap Y accordingly
@@ -1003,11 +1018,16 @@ static void CursorInit(void)
SetCursorPos(0, 0);
}
-static const u8 sKeyboardSymbolPositions[][9] =
-{
+static const u8 sKeyboardSymbolPositions[][COLUMN_COUNT] = {
+#if ENGLISH
{1, 3, 5, 8, 10, 12, 14, 17, 19}, //Upper page
{1, 3, 5, 8, 10, 12, 14, 17, 19}, //Lower page
{1, 4, 7, 10, 13, 16, 16, 16, 19}, //Others page
+#elif GERMAN
+ {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Upper page
+ {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Lower page
+ {1, 4, 7, 10, 13, 16, 16, 16, 16, 19}, //Others page
+#endif
};
static u8 CursorColToKeyboardCol(s16 x)
@@ -1037,7 +1057,7 @@ static void GetCursorPos(s16 *x, s16 *y)
static void MoveCursorToOKButton(void)
{
- SetCursorPos(8, 2);
+ SetCursorPos(COLUMN_COUNT - 1, 2);
}
static void sub_80B6888(u8 a)
@@ -1070,7 +1090,7 @@ static u8 GetKeyRoleAtCursorPos(void)
s16 cursorY;
GetCursorPos(&cursorX, &cursorY);
- if (cursorX < 8)
+ if (cursorX < COLUMN_COUNT - 1)
return KEY_ROLE_CHAR;
else
return keyRoles[cursorY];
@@ -1081,7 +1101,7 @@ void sub_80B6998(struct Sprite *sprite)
if (sprite->animEnded)
StartSpriteAnim(sprite, 0);
sprite->invisible = (sprite->data4 & 0xFF);
- if (sprite->data0 == 8)
+ if (sprite->data0 == COLUMN_COUNT - 1)
sprite->invisible = TRUE;
if (sprite->invisible || (sprite->data4 & 0xFF00) == 0
|| sprite->data0 != sprite->data2 || sprite->data1 != sprite->data3)
@@ -1929,6 +1949,7 @@ static const struct NamingScreenTemplate *const sNamingScreenTemplates[] =
static const u8 sKeyboardCharacters[][4][20] =
{
+#if ENGLISH
{
_(" A B C D E F . "),
_(" G H I J K L , "),
@@ -1941,6 +1962,20 @@ static const u8 sKeyboardCharacters[][4][20] =
_(" m n o p q r s "),
_(" t u v w x y z "),
},
+#elif GERMAN
+ {
+ _(" ABCD EFGH . "),
+ _(" IJKL MNOP , "),
+ _(" QRST UVWX "),
+ _(" YZ ÄÖÜ "),
+ },
+ {
+ _(" abcd efgh . "),
+ _(" ijkl mnop , "),
+ _(" qrst uvwx "),
+ _(" yz äöü "),
+ },
+#endif
{
_(" 0 1 2 3 4 "),
_(" 5 6 7 8 9 "),
diff --git a/src/option_menu.c b/src/option_menu.c
index 878df16ba..2463b11c6 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -334,6 +334,17 @@ static u8 TextSpeed_ProcessInput(u8 selection)
return selection;
}
+#if ENGLISH
+#define TEXTSPEED_SLOW_LEFT (120)
+#define TEXTSPEED_MIX_LEFT (155)
+#define TEXTSPEED_FAST_LEFT (184)
+#endif
+#if GERMAN
+#define TEXTSPEED_SLOW_LEFT (120)
+#define TEXTSPEED_MIX_LEFT (161)
+#define TEXTSPEED_FAST_LEFT (202)
+#endif
+
static void TextSpeed_DrawChoices(u8 selection)
{
u8 styles[3];
@@ -343,9 +354,9 @@ static void TextSpeed_DrawChoices(u8 selection)
styles[2] = 0xF;
styles[selection] = 0x8;
- DrawOptionMenuChoice(gSystemText_Slow, 120, 40, styles[0]);
- DrawOptionMenuChoice(gSystemText_Mid, 155, 40, styles[1]);
- DrawOptionMenuChoice(gSystemText_Fast, 184, 40, styles[2]);
+ DrawOptionMenuChoice(gSystemText_Slow, TEXTSPEED_SLOW_LEFT, 40, styles[0]);
+ DrawOptionMenuChoice(gSystemText_Mid, TEXTSPEED_MIX_LEFT, 40, styles[1]);
+ DrawOptionMenuChoice(gSystemText_Fast, TEXTSPEED_FAST_LEFT, 40, styles[2]);
}
static u8 BattleScene_ProcessInput(u8 selection)
@@ -374,6 +385,14 @@ static u8 BattleStyle_ProcessInput(u8 selection)
return selection;
}
+#if ENGLISH
+#define BATTLESTYLE_SHIFT (120)
+#define BATTLESTYLE_SET (190)
+#elif GERMAN
+#define BATTLESTYLE_SHIFT (120)
+#define BATTLESTYLE_SET (178)
+#endif
+
static void BattleStyle_DrawChoices(u8 selection)
{
u8 styles[2];
@@ -382,8 +401,8 @@ static void BattleStyle_DrawChoices(u8 selection)
styles[1] = 0xF;
styles[selection] = 0x8;
- DrawOptionMenuChoice(gSystemText_Shift, 120, 72, styles[0]);
- DrawOptionMenuChoice(gSystemText_Set, 190, 72, styles[1]);
+ DrawOptionMenuChoice(gSystemText_Shift, BATTLESTYLE_SHIFT, 72, styles[0]);
+ DrawOptionMenuChoice(gSystemText_Set, BATTLESTYLE_SET, 72, styles[1]);
}
static u8 Sound_ProcessInput(u8 selection)
@@ -431,6 +450,7 @@ static u8 FrameType_ProcessInput(u8 selection)
#define CHAR_0 0xA1 //Character code of '0' character
+#if ENGLISH
static void FrameType_DrawChoices(u8 selection)
{
u8 text[8];
@@ -460,6 +480,69 @@ static void FrameType_DrawChoices(u8 selection)
MenuPrint(gSystemText_Type, 15, 15);
MenuPrint(text, 18, 15);
}
+#elif GERMAN
+__attribute__((naked))
+static void FrameType_DrawChoices(u8 selection)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ adds r0, r1\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, _0808C368 @ =gSystemText_Type\n\
+ mov r0, sp\n\
+ bl StringCopy\n\
+ ldr r1, _0808C36C @ =gSystemText_Terminator\n\
+ mov r0, sp\n\
+ bl StringAppend\n\
+ adds r4, r0, 0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __udivsi3\n\
+ adds r1, r0, 0\n\
+ lsls r0, r1, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0\n\
+ beq _0808C370\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ adds r4, 0x1\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ b _0808C380\n\
+ .align 2, 0\n\
+_0808C368: .4byte gSystemText_Type\n\
+_0808C36C: .4byte gSystemText_Terminator\n\
+_0808C370:\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ adds r4, 0x1\n\
+ strb r6, [r4]\n\
+_0808C380:\n\
+ adds r4, 0x1\n\
+ movs r0, 0xFF\n\
+ strb r0, [r4]\n\
+ mov r0, sp\n\
+ movs r1, 0xF\n\
+ movs r2, 0xF\n\
+ bl MenuPrint\n\
+ add sp, 0x10\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
static u8 ButtonMode_ProcessInput(u8 selection)
{
diff --git a/src/party_menu.c b/src/party_menu.c
index be0db4dc4..99bbb5f83 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -23,6 +23,14 @@
#include "string_util.h"
#include "strings.h"
#include "task.h"
+#include "sprite.h"
+#include "palette.h"
+#include "event_data.h"
+#include "main.h"
+#include "item.h"
+#include "battle_interface.h"
+#include "species.h"
+#include "party_menu.h"
#define DATA_COUNT (6)
@@ -33,19 +41,6 @@ struct Unk2001000
u8 unk2;
};
-struct Unk201B000
-{
- u8 filler0[0x260];
- u8 unk260;
- u8 unk261;
- u8 filler262[2];
- s16 unk264[DATA_COUNT * 2]; // This may be a union
- u8 filler27C[2];
- s16 unk27E;
- s16 unk280;
- s16 unk282;
-};
-
struct Unk201C000
{
/*0x00*/ struct Pokemon *pokemon;
@@ -74,7 +69,6 @@ struct UnknownStruct5
extern u8 ewram[];
#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000))
-#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000))
#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000))
@@ -115,14 +109,22 @@ void sub_806AEDC(void)
}
*/
+#if ENGLISH
+#define WINDOW_LEFT (3)
+#define WINDOW_RIGHT (26)
+#elif GERMAN
+#define WINDOW_LEFT (0)
+#define WINDOW_RIGHT (29)
+#endif
+
u8 sub_806E834(const u8 *message, u8 arg1)
{
u8 taskId;
gUnknown_0202E8F6 = 1;
- MenuDrawTextWindow(3, 14, 26, 19);
- MenuPrintMessage(message, 4, 15);
+ MenuDrawTextWindow(WINDOW_LEFT, 14, WINDOW_RIGHT, 19);
+ MenuPrintMessage(message, WINDOW_LEFT + 1, 15);
taskId = CreateTask(sub_806E884, 1);
gTasks[taskId].data[0] = arg1;
@@ -136,7 +138,7 @@ static void sub_806E884(u8 taskId)
{
gUnknown_0202E8F6 = 0;
if (gTasks[taskId].data[0] == 0)
- MenuZeroFillWindowRect(3, 14, 26, 19);
+ MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19);
DestroyTask(taskId);
}
}
@@ -1106,7 +1108,7 @@ void sub_8070088(u8 taskId)
else
{
gUnknown_0202E8F4 = 1;
- MenuZeroFillWindowRect(3, 14, 26, 19);
+ MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19);
PlaySE(SE_KAIFUKU);
PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5);
task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9);
@@ -1344,6 +1346,7 @@ void Task_RareCandy2(u8 taskId)
}
}
+#if ENGLISH
void sub_8070848(u8 taskId)
{
u8 i;
@@ -1380,3 +1383,123 @@ void sub_8070848(u8 taskId)
MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0);
}
}
+#elif GERMAN
+__attribute__((naked))
+void sub_8070848(u8 taskId) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ movs r0, 0xB\n\
+ movs r1, 0\n\
+ movs r2, 0x1D\n\
+ movs r3, 0x7\n\
+ bl MenuDrawTextWindow\n\
+ movs r7, 0\n\
+ ldr r0, _0807092C @ =gStringVar1\n\
+ mov r10, r0\n\
+ movs r1, 0xFC\n\
+ mov r9, r1\n\
+ movs r2, 0x13\n\
+ mov r8, r2\n\
+_0807086C:\n\
+ ldr r1, _08070930 @ =0x0201c000\n\
+ ldr r0, [r1]\n\
+ ldr r1, _08070934 @ =gUnknown_08376D1C\n\
+ adds r1, r7, r1\n\
+ ldrb r1, [r1]\n\
+ bl GetMonData\n\
+ adds r1, r7, 0x6\n\
+ lsls r1, 1\n\
+ ldr r2, _08070938 @ =0x0201b264\n\
+ adds r1, r2, r1\n\
+ strh r0, [r1]\n\
+ lsls r6, r7, 1\n\
+ adds r6, r2, r6\n\
+ ldrh r1, [r6]\n\
+ subs r0, r1\n\
+ strh r0, [r6]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x3\n\
+ bl __udivsi3\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 3\n\
+ adds r4, r0\n\
+ adds r4, 0xB\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ adds r5, r0, 0\n\
+ lsls r5, 1\n\
+ adds r5, 0x1\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ ldr r1, _0807093C @ =gUnknown_08376D04\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ mov r0, r10\n\
+ bl StringCopy\n\
+ adds r2, r0, 0\n\
+ mov r0, r9\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ mov r1, r8\n\
+ strb r1, [r2]\n\
+ adds r2, 0x1\n\
+ movs r0, 0x2E\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ adds r0, r2, 0\n\
+ ldr r1, _08070940 @ =gOtherText_TallPlusAndRightArrow\n\
+ bl StringCopy\n\
+ adds r2, r0, 0\n\
+ mov r0, r9\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ mov r1, r8\n\
+ strb r1, [r2]\n\
+ adds r2, 0x1\n\
+ movs r0, 0x34\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ movs r0, 0\n\
+ ldrsh r1, [r6, r0]\n\
+ adds r0, r2, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ adds r4, 0x1\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r0, r10\n\
+ adds r1, r4, 0\n\
+ adds r2, r5, 0\n\
+ bl MenuPrint\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ cmp r7, 0x5\n\
+ bls _0807086C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0807092C: .4byte gStringVar1\n\
+_08070930: .4byte 0x0201c000\n\
+_08070934: .4byte gUnknown_08376D1C\n\
+_08070938: .4byte 0x0201b264\n\
+_0807093C: .4byte gUnknown_08376D04\n\
+_08070940: .4byte gOtherText_TallPlusAndRightArrow\n\
+ .syntax divided\n");
+}
+#endif
diff --git a/src/pokedex.c b/src/pokedex.c
index 17ae9a597..2ef91e472 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -178,7 +178,12 @@ static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/nation
const u8 gEmptySpacce_839F7FC[0xA4] = {0};
static const u8 gUnknown_0839F8A0[] = INCBIN_U8("graphics/pokedex/pokedex_cry_layout.bin.lz");
static const u8 gUnknown_0839F988[] = INCBIN_U8("graphics/pokedex/pokedex_size_layout.bin.lz");
+#if ENGLISH
static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz");
+#elif GERMAN
+extern const u8 gUnknown_0839FA7C[];
+#endif
+
#include "data/pokedex_orders.h"
static const struct OamData gOamData_83A0404 =
{
@@ -507,8 +512,11 @@ static const u8 gUnknown_083A05EC[] = {2, 4, 8, 16, 32};
static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1};
const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe?
static const u8 gUnknown_083A05F8[] = _("");
-// TODO: include German entries
+#if ENGLISH
#include "data/pokedex_entries_en.h"
+#elif GERMAN
+#include "data/pokedex_entries_de.h"
+#endif
static const u16 gUnknown_083B4EC4[16] = {0};
static const u8 *const sMonFootprintTable[] =
{
@@ -2900,6 +2908,12 @@ static u8 sub_808F284(struct PokedexListItem *item, u8 b)
return b;
}
+#if ENGLISH
+#define CATEGORY_LEFT (11)
+#elif GERMAN
+#define CATEGORY_LEFT (16)
+#endif
+
static void Task_InitPageScreenMultistep(u8 taskId)
{
switch (gMain.state)
@@ -2946,12 +2960,12 @@ static void Task_InitPageScreenMultistep(u8 taskId)
else
sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3);
sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3);
- MenuPrint(gDexText_UnknownPoke, 11, 5);
+ MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
MenuPrint(gDexText_UnknownHeight, 16, 7);
MenuPrint(gDexText_UnknownWeight, 16, 9);
if (gUnknown_0202FFBC->owned)
{
- sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, 11, 5);
+ sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5);
sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7);
sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9);
MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
@@ -3838,10 +3852,10 @@ static void sub_8090750(u8 taskId)
else
sub_8091154(dexNum, 13, 3);
sub_80911C8(dexNum, 16, 3);
- MenuPrint(gDexText_UnknownPoke, 11, 5);
+ MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
MenuPrint(gDexText_UnknownHeight, 16, 7);
MenuPrint(gDexText_UnknownWeight, 16, 9);
- sub_8091304(gPokedexEntries[dexNum].categoryName, 11, 5);
+ sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5);
sub_8091458(gPokedexEntries[dexNum].height, 16, 7);
sub_8091564(gPokedexEntries[dexNum].weight, 16, 9);
MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13);
@@ -4247,6 +4261,7 @@ static void sub_8091304(const u8 *name, u8 left, u8 top)
sub_8072B80(str, left, top, gDexText_UnknownPoke);
}
+#if ENGLISH
void unref_sub_80913A4(u16 a, u8 left, u8 top)
{
u8 str[6];
@@ -4283,6 +4298,51 @@ void unref_sub_80913A4(u16 a, u8 left, u8 top)
str[5] = EOS;
MenuPrint(str, left, top);
}
+#elif GERMAN
+void unref_sub_80913A4(u16 arg0, u8 left, u8 top) {
+ u8 buffer[8];
+ int offset;
+ u8 result;
+
+ u8 r6 = 0;
+ offset = 0;
+
+
+ buffer[r6++] = 0xFC;
+ buffer[r6++] = 0x13;
+ r6++;
+
+ result = (arg0 / 1000);
+ if (result == 0)
+ {
+ offset = 6;
+ }
+ else
+ {
+ buffer[r6++] = result + CHAR_0;
+ }
+
+
+ result = (arg0 % 1000) / 100;
+
+ if (result == 0 && offset != 0)
+ {
+ offset += 6;
+ }
+ else
+ {
+ buffer[r6++] = result + CHAR_0;
+ }
+
+ buffer[r6++] = (((arg0 % 1000) % 100) / 10) + CHAR_0;
+ buffer[r6++] = CHAR_COMMA;
+ buffer[r6++] = (((arg0 % 1000) % 100) % 10) + CHAR_0;
+
+ buffer[r6++] = EOS;
+ buffer[2] = offset;
+ MenuPrint(buffer, left, top);
+}
+#endif
#ifdef UNITS_IMPERIAL
#define CHAR_PRIME (0xB4)
@@ -4664,9 +4724,15 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2)
return resultsCount;
}
+#if ENGLISH
+#define SUB_8091E20_WIDTH (208)
+#elif GERMAN
+#define SUB_8091E20_WIDTH (216)
+#endif
+
void sub_8091E20(const u8 *str)
{
- sub_8072AB0(str, 9, 120, 208, 32, 1);
+ sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1);
}
u8 sub_8091E3C(void)
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
index f293190e8..f2222bd3b 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon_size_record.c
@@ -86,10 +86,17 @@ static u32 GetMonSize(u16 species, u16 b)
static void FormatMonSizeRecord(u8 *string, u32 size)
{
+#if ENGLISH
u8 decimalPoint[] = _(".");
+#elif GERMAN
+ u8 decimalPoint[] = _(",");
+#endif
+#ifdef UNITS_IMPERIAL
//Convert size from centimeters to inches
size = (double)(size * 10) / (CM_PER_INCH * 10);
+#endif
+
string = ConvertIntToDecimalStringN(string, size / 10, 0, 8);
string = StringAppend(string, decimalPoint);
ConvertIntToDecimalStringN(string, size % 10, 0, 1);
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index fb837f1f6..0cab07fc1 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -42,10 +42,13 @@ void sub_8098898(u8 index) {
break;
case 4:
- // TODO: fix for German
// {var} + " was released."
ptr = StringCopy(gUnk2002694, gUnk20026e4);
+#if ENGLISH
ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text);
+#elif GERMAN
+ ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text);
+#endif
break;
case 3:
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 61ae11438..00a0bea29 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -81,6 +81,7 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8
u8 *ptr = gStringVar4;
u8 nature = GetNature(pokemon);
+#if ENGLISH
ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
if (nature != NATURE_BOLD && nature != NATURE_GENTLE)
@@ -89,6 +90,11 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8
}
ptr = StringCopy(ptr, gOtherText_Nature);
+#elif GERMAN
+ ptr = StringCopy(gStringVar4, gOtherText_Nature);
+ ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
+ ptr = StringCopy(ptr, gOtherText_Terminator4);
+#endif
if (PokemonSummaryScreen_CheckOT(pokemon) == TRUE)
{
diff --git a/src/pokenav.c b/src/pokenav.c
index 24253e878..3a386d865 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -2,18 +2,28 @@
#include "pokenav.h"
#include "battle.h"
#include "data2.h"
+#include "de_rom_8040FE0.h"
#include "string_util.h"
void sub_80F700C(u8 *arg0, u16 arg1) {
struct Trainer *trainer;
u8 *ptr;
+#if ENGLISH
trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0];
+#elif GERMAN
+ const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0;
+ trainer = (struct Trainer *) &gTrainers[trainerIndex];
+#endif
ptr = arg0;
if (arg1 < gUnknown_083DFEC4->unkD158)
{
+#if ENGLISH
ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]);
+#elif GERMAN
+ ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex));
+#endif
ptr[0] = 0xFC;
ptr[1] = 0x13;
diff --git a/src/script_menu.c b/src/script_menu.c
index 23e8bf2d9..e1ad3f467 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -863,6 +863,7 @@ bool8 TryCreatePCMenu(void)
}
}
+#if ENGLISH
void CreatePCMenu(void)
{
u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC);
@@ -897,6 +898,170 @@ void CreatePCMenu(void)
InitMenu(0, 1, 1, numChoices, 0, width + 1);
sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices);
}
+#elif GERMAN
+__attribute__((naked))
+void CreatePCMenu(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x18\n\
+ ldr r0, _080B5748 @ =0x0000084b\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5750\n\
+ ldr r0, _080B574C @ =gPCText_LanettesPC\n\
+ b _080B5752\n\
+ .align 2, 0\n\
+_080B5748: .4byte 0x0000084b\n\
+_080B574C: .4byte gPCText_LanettesPC\n\
+_080B5750:\n\
+ ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\
+_080B5752:\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ movs r4, 0x1\n\
+ ldr r0, _080B57EC @ =gPCText_PlayersPC\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r1, r4, 2\n\
+ add r1, sp\n\
+ adds r1, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [r1]\n\
+ ldr r0, _080B57F0 @ =gPCText_LogOff\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x10]\n\
+ movs r4, 0x3\n\
+ ldr r0, _080B57F4 @ =0x00000804\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5798\n\
+ ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x14]\n\
+ movs r4, 0x4\n\
+_080B5798:\n\
+ movs r5, 0\n\
+ cmp r5, r4\n\
+ bge _080B57B4\n\
+ add r2, sp, 0x8\n\
+ adds r1, r4, 0\n\
+_080B57A2:\n\
+ ldr r0, [r2]\n\
+ cmp r5, r0\n\
+ bge _080B57AC\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+_080B57AC:\n\
+ adds r2, 0x4\n\
+ subs r1, 0x1\n\
+ cmp r1, 0\n\
+ bne _080B57A2\n\
+_080B57B4:\n\
+ ldr r0, _080B57F4 @ =0x00000804\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B57FC\n\
+ movs r7, 0x4\n\
+ adds r4, r5, 0x2\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ movs r3, 0x9\n\
+ bl MenuDrawTextWindow\n\
+ ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
+ movs r1, 0x1\n\
+ movs r2, 0x5\n\
+ bl MenuPrint\n\
+ ldr r0, _080B57F0 @ =gPCText_LogOff\n\
+ movs r1, 0x1\n\
+ movs r2, 0x7\n\
+ bl MenuPrint\n\
+ b _080B5818\n\
+ .align 2, 0\n\
+_080B57E8: .4byte gPCText_SomeonesPC\n\
+_080B57EC: .4byte gPCText_PlayersPC\n\
+_080B57F0: .4byte gPCText_LogOff\n\
+_080B57F4: .4byte 0x00000804\n\
+_080B57F8: .4byte gPCText_HallOfFame\n\
+_080B57FC:\n\
+ movs r7, 0x3\n\
+ adds r4, r5, 0x2\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ movs r3, 0x7\n\
+ bl MenuDrawTextWindow\n\
+ ldr r0, _080B5834 @ =gPCText_LogOff\n\
+ movs r1, 0x1\n\
+ movs r2, 0x5\n\
+ bl MenuPrint\n\
+_080B5818:\n\
+ adds r6, r4, 0\n\
+ ldr r0, _080B5838 @ =0x0000084b\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5840\n\
+ ldr r0, _080B583C @ =gPCText_LanettesPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ bl MenuPrint\n\
+ b _080B584A\n\
+ .align 2, 0\n\
+_080B5834: .4byte gPCText_LogOff\n\
+_080B5838: .4byte 0x0000084b\n\
+_080B583C: .4byte gPCText_LanettesPC\n\
+_080B5840:\n\
+ ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ bl MenuPrint\n\
+_080B584A:\n\
+ ldr r0, _080B588C @ =gPCText_PlayersPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x3\n\
+ bl MenuPrint\n\
+ movs r4, 0\n\
+ str r4, [sp]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ adds r3, r7, 0\n\
+ bl InitMenu\n\
+ lsls r2, r6, 24\n\
+ lsrs r2, 24\n\
+ lsls r3, r7, 1\n\
+ adds r3, 0x1\n\
+ str r4, [sp]\n\
+ str r7, [sp, 0x4]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl sub_80B5230\n\
+ add sp, 0x18\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B5888: .4byte gPCText_SomeonesPC\n\
+_080B588C: .4byte gPCText_PlayersPC\n\
+ .syntax divided\n");
+}
+#endif
void sub_80B5838(void)
{
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index ecfd8111b..cbca07011 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -31,7 +31,7 @@ extern struct SpriteTemplate gUnknown_02024E8C;
extern u8 gContestPlayerMonIndex;
extern u8 gIsLinkContest;
extern u8 gPlayerPartyCount;
-extern u8 gBufferedMoves[];
+extern u8 gSelectedOrderFromParty[];
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
@@ -653,7 +653,7 @@ void sub_80C5568(void)
void sub_80C5580(void)
{
- u8 var = gBufferedMoves[0];
+ u8 var = gSelectedOrderFromParty[0];
switch(var)
{
@@ -676,7 +676,7 @@ void ChooseBattleTowerPlayerParty(void)
void SetBattleTowerPlayerParty(void)
{
- u8 var = gBufferedMoves[0];
+ u8 var = gSelectedOrderFromParty[0];
switch(var)
{
@@ -702,8 +702,8 @@ void ReducePlayerPartyToThree(void)
// copy the selected pokemon according to the order.
for(i = 0; i < 3; i++)
- if(gBufferedMoves[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
- party[i] = gPlayerParty[gBufferedMoves[i] - 1]; // index is 0 based, not literal
+ if(gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
+ party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
// delete the last 3 pokemon
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c
index 606cd9dd4..2b48cc0d8 100644
--- a/src/script_pokemon_util_80F99CC.c
+++ b/src/script_pokemon_util_80F99CC.c
@@ -3,6 +3,7 @@
#include "choose_party.h"
#include "contest.h"
#include "data2.h"
+#include "party_menu.h"
#include "field_fadetransition.h"
#include "palette.h"
#include "party_menu.h"
@@ -16,6 +17,8 @@
#include "task.h"
#include "text.h"
+
+
extern u8 gPlayerPartyCount;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
diff --git a/src/secret_base.c b/src/secret_base.c
index 6291051a6..d88d2c66a 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -10,6 +10,7 @@
#include "main.h"
#include "map_constants.h"
#include "map_name_popup.h"
+#include "menu.h"
#include "metatile_behavior.h"
#include "palette.h"
#include "pokemon.h"
@@ -835,7 +836,11 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190
str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1);
str[0] = EOS;
+#if ENGLISH
return StringAppend(dest, gOtherText_PlayersBase);
+#elif GERMAN
+ return de_sub_8073174(dest, gOtherText_PlayersBase);
+#endif
}
u8 *GetSecretBaseMapName(u8 *dest) {
diff --git a/src/starter_choose.c b/src/starter_choose.c
index c838f2dc0..2b28df4f0 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -465,7 +465,7 @@ static void Task_StarterChoose6(u8 taskId)
gTasks[taskId].func = Task_StarterChoose1;
}
-static void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadowColor)
+void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadowColor)
{
*(string++) = EXT_CTRL_CODE_BEGIN;
*(string++) = 4;
@@ -480,6 +480,8 @@ static void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadow
*p = c; \
}
+
+#if ENGLISH
static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection)
{
u8 labelText[72];
@@ -545,6 +547,161 @@ static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection)
REG_WIN0H = WIN_RANGE(labelLeft, labelRight);
REG_WIN0V = WIN_RANGE(labelTop, labelBottom);
}
+#elif GERMAN
+__attribute__((naked))
+static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x48\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r5, r1, 24\n\
+ cmp r0, 0xFF\n\
+ beq _0810A872\n\
+ ldr r1, _0810A960 @ =gStarterChoose_LabelCoords\n\
+ lsls r2, r0, 1\n\
+ adds r0, r2, r1\n\
+ ldrb r0, [r0]\n\
+ adds r1, 0x1\n\
+ adds r2, r1\n\
+ ldrb r1, [r2]\n\
+ adds r2, r0, 0\n\
+ adds r2, 0xD\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r3, r1, 0x3\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ bl MenuZeroFillWindowRect\n\
+ ldr r0, _0810A964 @ =0x04000040\n\
+ movs r1, 0\n\
+ strh r1, [r0]\n\
+ adds r0, 0x4\n\
+ strh r1, [r0]\n\
+_0810A872:\n\
+ adds r0, r5, 0\n\
+ bl GetStarterPokemon\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ adds r0, r6, 0\n\
+ bl SpeciesToNationalPokedexNum\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl GetPokemonCategory\n\
+ adds r4, r0, 0\n\
+ mov r0, sp\n\
+ movs r1, 0\n\
+ movs r2, 0xF\n\
+ movs r3, 0x8\n\
+ bl AddTextColorCtrlCode\n\
+ movs r2, 0x8\n\
+ movs r3, 0\n\
+ ldrb r0, [r4]\n\
+ lsls r5, 1\n\
+ mov r7, sp\n\
+ adds r7, 0x5\n\
+ cmp r0, 0xFF\n\
+ beq _0810A8CA\n\
+_0810A8A8:\n\
+ mov r0, sp\n\
+ adds r1, r0, r2\n\
+ adds r0, r4, r3\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ adds r0, r4, r3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xFF\n\
+ beq _0810A8CA\n\
+ cmp r3, 0xA\n\
+ bls _0810A8A8\n\
+_0810A8CA:\n\
+ mov r0, sp\n\
+ adds r1, r0, r2\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1]\n\
+ mov r1, sp\n\
+ movs r0, 0xFC\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0x11\n\
+ strb r0, [r1, 0x6]\n\
+ mov r2, sp\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 1\n\
+ movs r0, 0x70\n\
+ subs r0, r1\n\
+ asrs r0, 1\n\
+ strb r0, [r2, 0x7]\n\
+ ldr r0, _0810A960 @ =gStarterChoose_LabelCoords\n\
+ adds r1, r5, r0\n\
+ ldrb r4, [r1]\n\
+ adds r0, 0x1\n\
+ adds r0, r5, r0\n\
+ ldrb r5, [r0]\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ adds r2, r5, 0\n\
+ bl MenuPrint\n\
+ mov r0, sp\n\
+ movs r1, 0\n\
+ movs r2, 0xF\n\
+ movs r3, 0x8\n\
+ bl AddTextColorCtrlCode\n\
+ movs r0, 0xB\n\
+ adds r1, r6, 0\n\
+ muls r1, r0\n\
+ ldr r0, _0810A968 @ =gSpeciesNames\n\
+ adds r1, r0\n\
+ adds r0, r7, 0\n\
+ movs r2, 0x70\n\
+ movs r3, 0x2\n\
+ bl sub_8072C74\n\
+ adds r2, r5, 0x2\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ bl MenuPrint\n\
+ lsls r0, r4, 3\n\
+ adds r0, 0x4\n\
+ lsls r0, 24\n\
+ adds r4, 0xD\n\
+ lsls r4, 3\n\
+ adds r4, 0x4\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ lsls r1, r5, 27\n\
+ adds r5, 0x4\n\
+ lsls r5, 27\n\
+ lsrs r5, 24\n\
+ ldr r2, _0810A964 @ =0x04000040\n\
+ lsrs r0, 16\n\
+ orrs r0, r4\n\
+ strh r0, [r2]\n\
+ ldr r0, _0810A96C @ =0x04000044\n\
+ lsrs r1, 16\n\
+ orrs r1, r5\n\
+ strh r1, [r0]\n\
+ add sp, 0x48\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0810A960: .4byte gStarterChoose_LabelCoords\n\
+_0810A964: .4byte 0x04000040\n\
+_0810A968: .4byte gSpeciesNames\n\
+_0810A96C: .4byte 0x04000044\n\
+ .syntax divided\n");
+}
+#endif
static void nullsub_72(struct Sprite *sprite)
{
diff --git a/src/title_screen.c b/src/title_screen.c
index dd06956c3..664e07978 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -15,6 +15,26 @@
#include "task.h"
#include "unknown_task.h"
+#if ENGLISH
+#define VERSION_BANNER_SHAPE 1
+#define VERSION_BANNER_RIGHT_TILEOFFSET 64
+#define VERSION_BANNER_BYTES 0x1000
+#define VERSION_BANNER_LEFT_X 98
+#define VERSION_BANNER_RIGHT_X 162
+#define VERSION_BANNER_Y 26
+#define VERSION_BANNER_Y_GOAL 66
+#define START_BANNER_X DISPLAY_WIDTH / 2
+#elif GERMAN
+#define VERSION_BANNER_SHAPE 0
+#define VERSION_BANNER_RIGHT_TILEOFFSET 128
+#define VERSION_BANNER_BYTES 0x2000
+#define VERSION_BANNER_LEFT_X 108
+#define VERSION_BANNER_RIGHT_X 172
+#define VERSION_BANNER_Y 44
+#define VERSION_BANNER_Y_GOAL 84
+#define START_BANNER_X DISPLAY_WIDTH / 2 - 2
+#endif
+
extern u8 gReservedSpritePaletteCount;
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gUnknown_0202F7E4;
@@ -89,7 +109,7 @@ static const struct OamData sVersionBannerLeftOamData =
.objMode = 0,
.mosaic = 0,
.bpp = 1,
- .shape = 1,
+ .shape = VERSION_BANNER_SHAPE,
.x = 0,
.matrixNum = 0,
.size = 3,
@@ -105,7 +125,7 @@ static const struct OamData sVersionBannerRightOamData =
.objMode = 0,
.mosaic = 0,
.bpp = 1,
- .shape = 1,
+ .shape = VERSION_BANNER_SHAPE,
.x = 0,
.matrixNum = 0,
.size = 3,
@@ -121,7 +141,7 @@ static const union AnimCmd sVersionBannerLeftAnimSequence[] =
};
static const union AnimCmd sVersionBannerRightAnimSequence[] =
{
- ANIMCMD_FRAME(64, 30),
+ ANIMCMD_FRAME(VERSION_BANNER_RIGHT_TILEOFFSET, 30),
ANIMCMD_END,
};
static const union AnimCmd *const sVersionBannerLeftAnimTable[] =
@@ -154,7 +174,7 @@ static const struct SpriteTemplate sVersionBannerRightSpriteTemplate =
};
static const struct CompressedSpriteSheet gUnknown_08393EFC[] =
{
- {gVersionTiles, 0x1000, 1000},
+ {gVersionTiles, VERSION_BANNER_BYTES, 1000},
{NULL},
};
static const struct OamData gOamData_8393F0C =
@@ -213,6 +233,18 @@ static const union AnimCmd gSpriteAnim_8393F4C[] =
ANIMCMD_FRAME(28, 4),
ANIMCMD_END,
};
+#if GERMAN
+static const union AnimCmd gSpriteAnim_839F73C[] =
+{
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_839F744[] =
+{
+ ANIMCMD_FRAME(36, 4),
+ ANIMCMD_END,
+};
+#endif
static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
{
gSpriteAnim_8393F14,
@@ -223,6 +255,10 @@ static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
gSpriteAnim_8393F3C,
gSpriteAnim_8393F44,
gSpriteAnim_8393F4C,
+#if GERMAN
+ gSpriteAnim_839F73C,
+ gSpriteAnim_839F744,
+#endif
};
static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
{
@@ -322,7 +358,7 @@ void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
if (task->data[1] != 0)
{
sprite->oam.objMode = 0;
- sprite->pos1.y = 66;
+ sprite->pos1.y = VERSION_BANNER_Y_GOAL;
sprite->invisible = FALSE;
}
else
@@ -332,7 +368,7 @@ void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
if (task->data[5] < 64)
{
sprite->invisible = FALSE;
- if (sprite->pos1.y != 66)
+ if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
sprite->pos1.y++;
REG_BLDALPHA = gUnknown_08393E64[task->data[5] / 2];
}
@@ -346,7 +382,7 @@ void SpriteCallback_VersionBannerRight(struct Sprite *sprite)
if (task->data[1] != 0)
{
sprite->oam.objMode = 0;
- sprite->pos1.y = 66;
+ sprite->pos1.y = VERSION_BANNER_Y_GOAL;
sprite->invisible = FALSE;
}
else
@@ -354,7 +390,7 @@ void SpriteCallback_VersionBannerRight(struct Sprite *sprite)
if (task->data[5] < 64)
{
sprite->invisible = FALSE;
- if (sprite->pos1.y != 66)
+ if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
sprite->pos1.y++;
}
}
@@ -375,6 +411,7 @@ void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite)
sprite->invisible = FALSE;
}
+#if ENGLISH
static void CreatePressStartBanner(s16 x, s16 y)
{
u8 i;
@@ -388,6 +425,110 @@ static void CreatePressStartBanner(s16 x, s16 y)
gSprites[spriteId].data0 = 1;
}
}
+#elif GERMAN
+__attribute__((naked))
+static void CreatePressStartBanner(s16 x, s16 y)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ lsls r0, 16\n\
+ ldr r2, _0807C3AC @ =0xffe00000\n\
+ adds r0, r2\n\
+ lsrs r0, 16\n\
+ movs r6, 0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+ mov r8, r10\n\
+_0807C302:\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ adds r1, r5, 0\n\
+ mov r3, r8\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ ldr r0, _0807C3B4 @ =gSprites\n\
+ mov r9, r0\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl StartSpriteAnim\n\
+ movs r7, 0x1\n\
+ strh r7, [r4, 0x2E]\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r5, 0x20\n\
+ lsls r5, 16\n\
+ lsrs r0, r5, 16\n\
+ cmp r6, 0x2\n\
+ bls _0807C302\n\
+ ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ mov r8, r1\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ mov r2, r10\n\
+ asrs r6, r2, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x8\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\n\
+ subs r5, 0x60\n\
+ lsls r5, 16\n\
+ asrs r5, 16\n\
+ subs r6, 0x8\n\
+ lsls r6, 16\n\
+ asrs r6, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x9\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0807C3AC: .4byte 0xffe00000\n\
+_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\
+_0807C3B4: .4byte gSprites\n\
+ .syntax divided\n");
+}
+#endif
static void CreateCopyrightBanner(s16 x, s16 y)
{
@@ -608,12 +749,12 @@ static void Task_TitleScreenPhase1(u8 taskId)
REG_BLDY = 0;
//Create left side of version banner
- spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, 0x62, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
//Create right side of version banner
- spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, 0xA2, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
@@ -644,7 +785,7 @@ static void Task_TitleScreenPhase2(u8 taskId)
| DISPCNT_BG1_ON
| DISPCNT_BG2_ON
| DISPCNT_OBJ_ON;
- CreatePressStartBanner(DISPLAY_WIDTH / 2, 108);
+ CreatePressStartBanner(START_BANNER_X, 108);
CreateCopyrightBanner(DISPLAY_WIDTH / 2, 148);
gTasks[taskId].data[4] = 0;
gTasks[taskId].func = Task_TitleScreenPhase3;
diff --git a/src/trade.c b/src/trade.c
new file mode 100644
index 000000000..cb190d194
--- /dev/null
+++ b/src/trade.c
@@ -0,0 +1,88 @@
+#include "global.h"
+#include "name_string_util.h"
+#include "string_util.h"
+#include "text.h"
+
+struct InGameTrade {
+ /*0x00*/ u8 name[11];
+ /*0x0C*/ u16 species;
+ /*0x0E*/ u8 ivs[6];
+ /*0x14*/ bool8 secondAbility;
+ /*0x18*/ u32 otId;
+ /*0x1C*/ u8 stats[5];
+ /*0x24*/ u32 personality;
+ /*0x28*/ u16 heldItem;
+ /*0x2A*/ u8 mailNum;
+ /*0x2B*/ u8 otName[11];
+ /*0x36*/ u8 otGender;
+ /*0x37*/ u8 sheen;
+ /*0x38*/ u16 playerSpecies;
+};
+
+struct UnkStructC {
+ /*0x00*/ u16 words[9];
+ /*0x10*/ u8 string[8];
+ /*0x1A*/ u8 otId[4];
+ /*0x1E*/ u16 species;
+ /*0x20*/ u16 heldItem;
+};
+
+struct UnkStructD {
+ /*0x00*/ u8 pad00[0x10];
+ /*0x10*/ u8 var10;
+ /*0x11*/ u8 pad11[1];
+ /*0x12*/ u16 var12[1];
+};
+
+extern const struct InGameTrade gIngameTrades[];
+extern const u16 gIngameTradeMail[][10];
+
+
+void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {
+ int y, x;
+
+ for (y = 0; y < height; y++)
+ {
+
+ for (x = 0; x < width; x++)
+ {
+ arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8;
+ }
+ }
+
+#if ENGLISH
+ arg0->var10 = 1;
+#endif
+}
+
+#if GERMAN
+void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {
+ sub_804A96C(arg0, left, top, tilemap, width, height, sp8);
+
+ arg0->var10 = 1;
+}
+#endif
+
+asm(".section .text.sub_804DAD4");
+
+void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) {
+ s32 i;
+
+ for (i = 0; i < 9; i++)
+ {
+ arg0->words[i] = gIngameTradeMail[trade->mailNum][i];
+ }
+
+ StringCopy(arg0->string, trade->otName);
+
+#if GERMAN
+ PadNameString(arg0->string, CHAR_SPACE);
+#endif
+
+ arg0->otId[0] = trade->otId >> 24;
+ arg0->otId[1] = trade->otId >> 16;
+ arg0->otId[2] = trade->otId >> 8;
+ arg0->otId[3] = trade->otId;
+ arg0->species = trade->species;
+ arg0->heldItem = trade->heldItem;
+}
diff --git a/src/trainer_card.c b/src/trainer_card.c
index b2a1ad71b..876a3b426 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -1667,7 +1667,11 @@ static void TrainerCard_Back_PrintName(void)
StringCopy(str, ewram0.var_64.playerName);
ConvertInternationalString(str, ewram0.language);
+#if ENGLISH
StringAppend(str, gOtherText_TrainersTrainerCard);
+#elif GERMAN
+ de_sub_8073174(str, gOtherText_TrainersTrainerCard);
+#endif
MenuPrint_RightAligned(gStringVar1, 28, 2);
}
diff --git a/src/tv.c b/src/tv.c
index 14e7cf143..4bd11a9b9 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -779,9 +779,13 @@ _080BE0A2:\n\
ldr r1, _080BE134 @ =gSaveBlock2\n\
bl StringCopy\n\
adds r0, r4, 0\n\
- bl sub_80BE138\n\
- movs r0, 2 @ GAME_LANGUAGE\n\
- strb r0, [r4, 0x2]\n\
+ bl sub_80BE138\n");
+#if ENGLISH
+ asm("movs r0, 2 @ GAME_LANGUAGE\n");
+#elif GERMAN
+ asm("movs r0, 5 @ GAME_LANGUAGE\n");
+#endif
+ asm("strb r0, [r4, 0x2]\n\
_080BE112:\n\
pop {r4-r7}\n\
pop {r0}\n\
@@ -1716,6 +1720,7 @@ void sub_80BF4BC(void)
}
}
+#if ENGLISH
u8 sub_80BF4F4(u8 arg0)
{
u32 species;
@@ -1731,6 +1736,31 @@ u8 sub_80BF4F4(u8 arg0)
return TRUE;
}
+#elif GERMAN
+u8 sub_80BF4F4(u8 arg0)
+{
+ u8 langData[4];
+ u32 species;
+
+ u8 *tmp;
+
+ GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1);
+
+ tmp = langData;
+ tmp[0] = GetMonData(&gPlayerParty[arg0], MON_DATA_LANGUAGE, &langData);
+ if (tmp[0] != GAME_LANGUAGE) {
+ return TRUE;
+ }
+
+ species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL);
+
+ if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+#endif
u8 sub_80BF544(void)
{
diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c
new file mode 100644
index 000000000..93b569058
--- /dev/null
+++ b/src/unused_8124F94.c
@@ -0,0 +1,126 @@
+#include "global.h"
+#include "decompress.h"
+#include "palette.h"
+
+struct UnknownStruct2
+{
+ void *src;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u16 unk8;
+};
+
+struct UnknownStruct3
+{
+ u16 *paletteSrc;
+ u8 unk4;
+ u8 paletteCount;
+};
+
+struct UnknownStruct1
+{
+ u8 paletteNum;
+ u8 unk1;
+ u16 unk2;
+ u8 *dest;
+ struct UnknownStruct3 unk8[16];
+ struct UnknownStruct2 unk88[32];
+};
+
+void unref_sub_8124F94(struct UnknownStruct1 *a)
+{
+ a->unk1 = 0;
+ a->paletteNum = 0;
+ a->unk2 = 0;
+ a->dest = (void *)VRAM;
+ DmaFill16(3, 0, a->unk8, sizeof(a->unk8));
+ DmaFill16(3, 0, a->unk88, sizeof(a->unk88));
+}
+
+u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b)
+{
+ while (1)
+ {
+ s32 r6;
+ s32 temp;
+
+ // Couldn't get it to match any other way
+ if (a->unk1 < 32 && b->src == NULL)
+ return 0;
+ if (a->unk1 >= 32)
+ break;
+
+ a->unk88[a->unk1].src = b->src;
+ a->unk88[a->unk1].unk6 = b->unk6;
+ a->unk88[a->unk1].unk4 = b->unk4;
+ a->unk88[a->unk1].unk5 = b->unk5;
+ r6 = b->unk4 * b->unk5;
+ if (a->unk2 + r6 > 0x400)
+ return 2;
+ if (b->unk8 == 0)
+ {
+ DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32);
+ }
+ else
+ {
+ sub_800D238(b->src, a->dest + a->unk2 * 64);
+ }
+ a->unk88[a->unk1].unk8 = a->unk2;
+ temp = r6 + a->unk2;
+ a->unk2 = temp;
+ a->unk1++;
+ b++;
+ }
+ return 1;
+}
+
+u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
+{
+ while (1)
+ {
+ // Couldn't get it to match any other way
+ if (a->paletteNum < 16 && b->paletteSrc == NULL)
+ return 0;
+ if (a->paletteNum >= 16)
+ break;
+
+ a->unk8[a->paletteNum].paletteSrc = b->paletteSrc;
+ a->unk8[a->paletteNum].unk4 = b->unk4;
+ if (b->paletteCount == 0)
+ {
+ LoadPalette(b->paletteSrc, a->paletteNum * 16, 32);
+ }
+ else
+ {
+ u16 palette[16];
+
+ sub_800D238(b->paletteSrc, palette);
+ LoadPalette(palette, a->paletteNum * 16, 32);
+ }
+ a->unk8[a->paletteNum].paletteCount = a->paletteNum;
+ a->paletteNum = a->paletteNum + 1;
+ b++;
+ }
+ return 1;
+}
+
+u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
+{
+ u16 palettes[16][16] = {0};
+ u8 r7 = b->paletteCount;
+ u8 i;
+
+ sub_800D238(b->paletteSrc, palettes);
+ for (i = a->paletteNum; i < r7; i++)
+ {
+ if (a->paletteNum + i >= 16)
+ return 1;
+ a->unk8[i].paletteSrc = b->paletteSrc;
+ a->unk8[i].unk4 = b->unk4 + i;
+ a->unk8[i].paletteCount = a->paletteNum;
+ LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i]));
+ a->paletteNum++;
+ }
+ return 0;
+}