diff --git a/asm/macros.inc b/asm/macros.inc index 0e53dc2a2..ac7f5681f 100644 --- a/asm/macros.inc +++ b/asm/macros.inc @@ -1,7 +1,6 @@ .include "asm/macros/asm.inc" .include "asm/macros/function.inc" .include "asm/macros/movement.inc" - .include "asm/macros/pokemon_data.inc" .include "asm/macros/ec.inc" .include "asm/macros/map.inc" .include "asm/macros/m4a.inc" diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 612d45efa..0135bc26d 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1576,15 +1576,15 @@ .4byte \value .endm - @ Sets the eventLegal bit for the Pokemon in the specified slot of the player's party. - .macro setmoneventlegal slot:req + @ Sets the modernFatefulEncounter bit for the Pokemon in the specified slot of the player's party. + .macro setmonmodernfatefulencounter slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the eventLegal bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, + @ Checks if the modernFatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkmoneventlegal slot:req + .macro checkmonmodernfatefulencounter slot:req .byte 0xce .2byte \slot .endm @@ -1849,10 +1849,10 @@ call EventScript_BrailleCursorWaitButton .endm - @ Creates an "event legal" Pokémon for an encounter + @ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter .macro seteventmon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateEventLegalEnemyMon + special CreateEnemyEventMon .endm diff --git a/asm/macros/pokemon_data.inc b/asm/macros/pokemon_data.inc deleted file mode 100644 index b0a5f22e3..000000000 --- a/asm/macros/pokemon_data.inc +++ /dev/null @@ -1,57 +0,0 @@ - .macro pokedex_entry pokemon_name, height, weight, pokemon_scale, pokemon_offset, trainer_scale, trainer_offset - .2byte \height @ in decimeters - .2byte \weight @ in hectograms - .4byte DexDescription_\pokemon_name\()_1 - .4byte DexDescription_\pokemon_name\()_2 - .2byte 0 @ unused - .2byte \pokemon_scale - .2byte \pokemon_offset - .2byte \trainer_scale - .2byte \trainer_offset - .2byte 0 @ padding - .endm - - .macro base_stats hp, attack, defense, speed, sp_attack, sp_defense - .byte \hp - .byte \attack - .byte \defense - .byte \speed - .byte \sp_attack - .byte \sp_defense - .endm - - .macro ev_yield hp, attack, defense, speed, sp_attack, sp_defense - .2byte (\sp_defense << 10) | (\sp_attack << 8) | (\speed << 6) | (\defense << 4) | (\attack << 2) | \hp - .endm - - .macro level_up_move level, move - .2byte (\level << 9) | \move - .endm - - .macro evo_entry method, parameter, target_species - .2byte \method - .2byte \parameter - .2byte \target_species - .2byte 0 @ padding - .endm - - .macro empty_evo_entries count - .fill 8 * \count, 1, 0 - .endm - - .macro egg_moves_begin species - .2byte 20000 + \species - .endm - -@ If the min level equals the max level, only one level argument is needed. - .macro wild_mon species, min_level, max_level - .byte \min_level - - .ifb \max_level - .byte \min_level - .else - .byte \max_level - .endif - - .2byte SPECIES_\species - .endm diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s index d4fe7faf2..535c530f1 100644 --- a/data/mystery_event_msg.s +++ b/data/mystery_event_msg.s @@ -7,6 +7,7 @@ #include "constants/species.h" #include "constants/vars.h" #include "constants/items.h" +#include "constants/region_map_sections.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" @@ -67,8 +68,8 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setmoneventlegal VAR_EVENT_PICHU_SLOT - setmonmetlocation VAR_EVENT_PICHU_SLOT, 0xff + setmonmodernfatefulencounter VAR_EVENT_PICHU_SLOT + setmonmetlocation VAR_EVENT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER vgoto_if_eq VAR_EVENT_PICHU_SLOT, 1, SurfPichu_Slot1 vgoto_if_eq VAR_EVENT_PICHU_SLOT, 2, SurfPichu_Slot2 vgoto_if_eq VAR_EVENT_PICHU_SLOT, 3, SurfPichu_Slot3 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index c73c0bb87..6cb2bed8f 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,219 +1,219 @@ .align 2 gScriptCmdTable:: - .4byte ScrCmd_nop @ 0x00 - .4byte ScrCmd_nop1 @ 0x01 - .4byte ScrCmd_end @ 0x02 - .4byte ScrCmd_return @ 0x03 - .4byte ScrCmd_call @ 0x04 - .4byte ScrCmd_goto @ 0x05 - .4byte ScrCmd_goto_if @ 0x06 - .4byte ScrCmd_call_if @ 0x07 - .4byte ScrCmd_gotostd @ 0x08 - .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_gotostd_if @ 0x0a - .4byte ScrCmd_callstd_if @ 0x0b - .4byte ScrCmd_returnram @ 0x0c - .4byte ScrCmd_endram @ 0x0d - .4byte ScrCmd_setmysteryeventstatus @ 0x0e - .4byte ScrCmd_loadword @ 0x0f - .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_setptr @ 0x11 - .4byte ScrCmd_loadbytefromptr @ 0x12 - .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copylocal @ 0x14 - .4byte ScrCmd_copybyte @ 0x15 - .4byte ScrCmd_setvar @ 0x16 - .4byte ScrCmd_addvar @ 0x17 - .4byte ScrCmd_subvar @ 0x18 - .4byte ScrCmd_copyvar @ 0x19 - .4byte ScrCmd_setorcopyvar @ 0x1a - .4byte ScrCmd_compare_local_to_local @ 0x1b - .4byte ScrCmd_compare_local_to_value @ 0x1c - .4byte ScrCmd_compare_local_to_ptr @ 0x1d - .4byte ScrCmd_compare_ptr_to_local @ 0x1e - .4byte ScrCmd_compare_ptr_to_value @ 0x1f - .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 - .4byte ScrCmd_compare_var_to_value @ 0x21 - .4byte ScrCmd_compare_var_to_var @ 0x22 - .4byte ScrCmd_callnative @ 0x23 - .4byte ScrCmd_gotonative @ 0x24 - .4byte ScrCmd_special @ 0x25 - .4byte ScrCmd_specialvar @ 0x26 - .4byte ScrCmd_waitstate @ 0x27 - .4byte ScrCmd_delay @ 0x28 - .4byte ScrCmd_setflag @ 0x29 - .4byte ScrCmd_clearflag @ 0x2a - .4byte ScrCmd_checkflag @ 0x2b - .4byte ScrCmd_initclock @ 0x2c - .4byte ScrCmd_dotimebasedevents @ 0x2d - .4byte ScrCmd_gettime @ 0x2e - .4byte ScrCmd_playse @ 0x2f - .4byte ScrCmd_waitse @ 0x30 - .4byte ScrCmd_playfanfare @ 0x31 - .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playbgm @ 0x33 - .4byte ScrCmd_savebgm @ 0x34 - .4byte ScrCmd_fadedefaultbgm @ 0x35 - .4byte ScrCmd_fadenewbgm @ 0x36 - .4byte ScrCmd_fadeoutbgm @ 0x37 - .4byte ScrCmd_fadeinbgm @ 0x38 - .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpsilent @ 0x3a - .4byte ScrCmd_warpdoor @ 0x3b - .4byte ScrCmd_warphole @ 0x3c - .4byte ScrCmd_warpteleport @ 0x3d - .4byte ScrCmd_setwarp @ 0x3e - .4byte ScrCmd_setdynamicwarp @ 0x3f - .4byte ScrCmd_setdivewarp @ 0x40 - .4byte ScrCmd_setholewarp @ 0x41 - .4byte ScrCmd_getplayerxy @ 0x42 - .4byte ScrCmd_getpartysize @ 0x43 - .4byte ScrCmd_additem @ 0x44 - .4byte ScrCmd_removeitem @ 0x45 - .4byte ScrCmd_checkitemspace @ 0x46 - .4byte ScrCmd_checkitem @ 0x47 - .4byte ScrCmd_checkitemtype @ 0x48 - .4byte ScrCmd_addpcitem @ 0x49 - .4byte ScrCmd_checkpcitem @ 0x4a - .4byte ScrCmd_adddecoration @ 0x4b - .4byte ScrCmd_removedecoration @ 0x4c - .4byte ScrCmd_checkdecor @ 0x4d - .4byte ScrCmd_checkdecorspace @ 0x4e - .4byte ScrCmd_applymovement @ 0x4f - .4byte ScrCmd_applymovementat @ 0x50 - .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovementat @ 0x52 - .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobjectat @ 0x54 - .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobjectat @ 0x56 - .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobjectat @ 0x58 - .4byte ScrCmd_hideobjectat @ 0x59 - .4byte ScrCmd_faceplayer @ 0x5a - .4byte ScrCmd_turnobject @ 0x5b - .4byte ScrCmd_trainerbattle @ 0x5c - .4byte ScrCmd_dotrainerbattle @ 0x5d - .4byte ScrCmd_gotopostbattlescript @ 0x5e - .4byte ScrCmd_gotobeatenscript @ 0x5f - .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_settrainerflag @ 0x61 - .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_setobjectxyperm @ 0x63 - .4byte ScrCmd_copyobjectxytoperm @ 0x64 - .4byte ScrCmd_setobjectmovementtype @ 0x65 - .4byte ScrCmd_waitmessage @ 0x66 - .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closemessage @ 0x68 - .4byte ScrCmd_lockall @ 0x69 - .4byte ScrCmd_lock @ 0x6a - .4byte ScrCmd_releaseall @ 0x6b - .4byte ScrCmd_release @ 0x6c - .4byte ScrCmd_waitbuttonpress @ 0x6d - .4byte ScrCmd_yesnobox @ 0x6e - .4byte ScrCmd_multichoice @ 0x6f - .4byte ScrCmd_multichoicedefault @ 0x70 - .4byte ScrCmd_multichoicegrid @ 0x71 - .4byte ScrCmd_drawbox @ 0x72 - .4byte ScrCmd_erasebox @ 0x73 - .4byte ScrCmd_drawboxtext @ 0x74 - .4byte ScrCmd_showmonpic @ 0x75 - .4byte ScrCmd_hidemonpic @ 0x76 - .4byte ScrCmd_showcontestpainting @ 0x77 - .4byte ScrCmd_braillemessage @ 0x78 - .4byte ScrCmd_givemon @ 0x79 - .4byte ScrCmd_giveegg @ 0x7a - .4byte ScrCmd_setmonmove @ 0x7b - .4byte ScrCmd_checkpartymove @ 0x7c - .4byte ScrCmd_bufferspeciesname @ 0x7d - .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e - .4byte ScrCmd_bufferpartymonnick @ 0x7f - .4byte ScrCmd_bufferitemname @ 0x80 - .4byte ScrCmd_bufferdecorationname @ 0x81 - .4byte ScrCmd_buffermovename @ 0x82 - .4byte ScrCmd_buffernumberstring @ 0x83 - .4byte ScrCmd_bufferstdstring @ 0x84 - .4byte ScrCmd_bufferstring @ 0x85 - .4byte ScrCmd_pokemart @ 0x86 - .4byte ScrCmd_pokemartdecoration @ 0x87 - .4byte ScrCmd_pokemartdecoration2 @ 0x88 - .4byte ScrCmd_playslotmachine @ 0x8 - .4byte ScrCmd_setberrytree @ 0x8a - .4byte ScrCmd_choosecontestmon @ 0x8b - .4byte ScrCmd_startcontest @ 0x8c - .4byte ScrCmd_showcontestresults @ 0x8d - .4byte ScrCmd_contestlinktransfer @ 0x8e - .4byte ScrCmd_random @ 0x8f - .4byte ScrCmd_addmoney @ 0x90 - .4byte ScrCmd_removemoney @ 0x91 - .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoneybox @ 0x93 - .4byte ScrCmd_hidemoneybox @ 0x94 - .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpokenewsactive @ 0x96 - .4byte ScrCmd_fadescreen @ 0x97 - .4byte ScrCmd_fadescreenspeed @ 0x98 - .4byte ScrCmd_setflashlevel @ 0x99 - .4byte ScrCmd_animateflash @ 0x9a - .4byte ScrCmd_messageautoscroll @ 0x9b - .4byte ScrCmd_dofieldeffect @ 0x9c - .4byte ScrCmd_setfieldeffectargument @ 0x9d - .4byte ScrCmd_waitfieldeffect @ 0x9e - .4byte ScrCmd_setrespawn @ 0x9f - .4byte ScrCmd_checkplayergender @ 0xa0 - .4byte ScrCmd_playmoncry @ 0xa1 - .4byte ScrCmd_setmetatile @ 0xa2 - .4byte ScrCmd_resetweather @ 0xa3 - .4byte ScrCmd_setweather @ 0xa4 - .4byte ScrCmd_doweather @ 0xa5 - .4byte ScrCmd_setstepcallback @ 0xa6 - .4byte ScrCmd_setmaplayoutindex @ 0xa7 - .4byte ScrCmd_setobjectsubpriority @ 0xa8 - .4byte ScrCmd_resetobjectsubpriority @ 0xa9 - .4byte ScrCmd_createvobject @ 0xaa - .4byte ScrCmd_turnvobject @ 0xab - .4byte ScrCmd_opendoor @ 0xac - .4byte ScrCmd_closedoor @ 0xad - .4byte ScrCmd_waitdooranim @ 0xae - .4byte ScrCmd_setdooropen @ 0xaf - .4byte ScrCmd_setdoorclosed @ 0xb0 - .4byte ScrCmd_addelevmenuitem @ 0xb1 - .4byte ScrCmd_showelevmenu @ 0xb2 - .4byte ScrCmd_checkcoins @ 0xb3 - .4byte ScrCmd_addcoins @ 0xb4 - .4byte ScrCmd_removecoins @ 0xb5 - .4byte ScrCmd_setwildbattle @ 0xb6 - .4byte ScrCmd_dowildbattle @ 0xb7 - .4byte ScrCmd_setvaddress @ 0xb8 - .4byte ScrCmd_vgoto @ 0xb9 - .4byte ScrCmd_vcall @ 0xba - .4byte ScrCmd_vgoto_if @ 0xbb - .4byte ScrCmd_vcall_if @ 0xbc - .4byte ScrCmd_vmessage @ 0xbd - .4byte ScrCmd_vbuffermessage @ 0xbe - .4byte ScrCmd_vbufferstring @ 0xbf - .4byte ScrCmd_showcoinsbox @ 0xc0 - .4byte ScrCmd_hidecoinsbox @ 0xc1 - .4byte ScrCmd_updatecoinsbox @ 0xc2 - .4byte ScrCmd_incrementgamestat @ 0xc3 - .4byte ScrCmd_setescapewarp @ 0xc4 - .4byte ScrCmd_waitmoncry @ 0xc5 - .4byte ScrCmd_bufferboxname @ 0xc6 - .4byte ScrCmd_textcolor @ 0xc7 - .4byte ScrCmd_loadhelp @ 0xc8 - .4byte ScrCmd_unloadhelp @ 0xc9 - .4byte ScrCmd_signmsg @ 0xca - .4byte ScrCmd_normalmsg @ 0xcb - .4byte ScrCmd_comparestat @ 0xcc - .4byte ScrCmd_setmoneventlegal @ 0xcd - .4byte ScrCmd_checkmoneventlegal @ 0xce - .4byte ScrCmd_trywondercardscript @ 0xcf - .4byte ScrCmd_setworldmapflag @ 0xd0 - .4byte ScrCmd_warpspinenter @ 0xd1 - .4byte ScrCmd_setmonmetlocation @ 0xd2 - .4byte ScrCmd_getbraillestringwidth @ 0xd3 - .4byte ScrCmd_bufferitemnameplural @ 0xd4 + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_endram @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_setptr @ 0x11 + .4byte ScrCmd_loadbytefromptr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_ptr @ 0x1d + .4byte ScrCmd_compare_ptr_to_local @ 0x1e + .4byte ScrCmd_compare_ptr_to_value @ 0x1f + .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovementat @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovementat @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobjectat @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobjectat @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobjectat @ 0x58 + .4byte ScrCmd_hideobjectat @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestpainting @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x8 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpokenewsactive @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashlevel @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectargument @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectsubpriority @ 0xa8 + .4byte ScrCmd_resetobjectsubpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vbuffermessage @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_textcolor @ 0xc7 + .4byte ScrCmd_loadhelp @ 0xc8 + .4byte ScrCmd_unloadhelp @ 0xc9 + .4byte ScrCmd_signmsg @ 0xca + .4byte ScrCmd_normalmsg @ 0xcb + .4byte ScrCmd_comparestat @ 0xcc + .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce + .4byte ScrCmd_trywondercardscript @ 0xcf + .4byte ScrCmd_setworldmapflag @ 0xd0 + .4byte ScrCmd_warpspinenter @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_getbraillestringwidth @ 0xd3 + .4byte ScrCmd_bufferitemnameplural @ 0xd4 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/specials.inc b/data/specials.inc index be6e3d575..059f29015 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -451,5 +451,5 @@ gSpecials:: def_special InitElevatorFloorSelectMenuPos def_special UpdateLoreleiDollCollection def_special LoopWingFlapSound - def_special CreateEventLegalEnemyMon + def_special CreateEnemyEventMon gSpecialsEnd:: diff --git a/include/battle.h b/include/battle.h index 1086fa3ec..0c86b66b4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -518,7 +518,7 @@ struct BattleScripting u8 pursuitDoublesAttacker; u8 reshowMainState; u8 reshowHelperState; - u8 field_23; + u8 levelUpHP; }; struct BattleSpriteInfo diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index b653f5a92..5853f1708 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -28,7 +28,7 @@ #define HOLD_EFFECT_MACHO_BRACE 24 #define HOLD_EFFECT_EXP_SHARE 25 #define HOLD_EFFECT_QUICK_CLAW 26 -#define HOLD_EFFECT_HAPPINESS_UP 27 +#define HOLD_EFFECT_FRIENDSHIP_UP 27 #define HOLD_EFFECT_CURE_ATTRACT 28 #define HOLD_EFFECT_CHOICE_BAND 29 #define HOLD_EFFECT_FLINCH 30 diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index a5bb77035..888cb6853 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -3,7 +3,7 @@ // field 0 masks #define ITEM0_X_ATTACK 0x0F -#define ITEM0_HIGH_CRIT 0x30 // For Dire Hit, works the same way as move Focus Energy. +#define ITEM0_DIRE_HIT 0x30 // Works the same way as move Focus Energy. #define ITEM0_SACRED_ASH 0x40 #define ITEM0_INFATUATION 0x80 @@ -23,7 +23,7 @@ #define ITEM3_POISON 0x10 #define ITEM3_SLEEP 0x20 #define ITEM3_LEVEL_UP 0x40 -#define ITEM3_MIST 0x80 // For Guard Specs, works the same way as move Mist. +#define ITEM3_GUARD_SPEC 0x80 // Works the same way as the move Mist. #define ITEM3_STATUS_ALL (ITEM3_CONFUSION | ITEM3_PARALYSIS | ITEM3_FREEZE | ITEM3_BURN | ITEM3_POISON | ITEM3_SLEEP) @@ -50,6 +50,19 @@ #define ITEM5_FRIENDSHIP_ALL (ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID | ITEM5_FRIENDSHIP_HIGH) // fields 6 and onwards are item-specific arguments +#define ITEM_EFFECT_ARG_START 6 + +// Special HP recovery amounts for ITEM4_HEAL_HP +#define ITEM6_HEAL_HP_FULL ((u8) -1) +#define ITEM6_HEAL_HP_HALF ((u8) -2) +#define ITEM6_HEAL_HP_LVL_UP ((u8) -3) + +// Special PP recovery amounts for ITEM4_HEAL_PP +#define ITEM6_HEAL_PP_FULL 0x7F + +// Amount of EV modified by ITEM4_EV_HP, ITEM4_EV_ATK, ITEM5_EV_DEF, ITEM5_EV_SPEED, ITEM5_EV_SPDEF and ITEM5_EV_SPATK +#define ITEM6_ADD_EV 10 +#define ITEM6_SUBTRACT_EV -10 // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 83d7ecb2d..21c678744 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -2,95 +2,95 @@ #define GUARD_CONSTANTS_POKEMON_H // For (Set|Get)(Box)?MonData -#define MON_DATA_PERSONALITY 0 -#define MON_DATA_OT_ID 1 -#define MON_DATA_NICKNAME 2 -#define MON_DATA_LANGUAGE 3 -#define MON_DATA_SANITY_IS_BAD_EGG 4 -#define MON_DATA_SANITY_HAS_SPECIES 5 -#define MON_DATA_SANITY_IS_EGG 6 -#define MON_DATA_OT_NAME 7 -#define MON_DATA_MARKINGS 8 -#define MON_DATA_CHECKSUM 9 -#define MON_DATA_ENCRYPT_SEPARATOR 10 -#define MON_DATA_SPECIES 11 -#define MON_DATA_HELD_ITEM 12 -#define MON_DATA_MOVE1 13 -#define MON_DATA_MOVE2 14 -#define MON_DATA_MOVE3 15 -#define MON_DATA_MOVE4 16 -#define MON_DATA_PP1 17 -#define MON_DATA_PP2 18 -#define MON_DATA_PP3 19 -#define MON_DATA_PP4 20 -#define MON_DATA_PP_BONUSES 21 -#define MON_DATA_COOL 22 -#define MON_DATA_BEAUTY 23 -#define MON_DATA_CUTE 24 -#define MON_DATA_EXP 25 -#define MON_DATA_HP_EV 26 -#define MON_DATA_ATK_EV 27 -#define MON_DATA_DEF_EV 28 -#define MON_DATA_SPEED_EV 29 -#define MON_DATA_SPATK_EV 30 -#define MON_DATA_SPDEF_EV 31 -#define MON_DATA_FRIENDSHIP 32 -#define MON_DATA_SMART 33 -#define MON_DATA_POKERUS 34 -#define MON_DATA_MET_LOCATION 35 -#define MON_DATA_MET_LEVEL 36 -#define MON_DATA_MET_GAME 37 -#define MON_DATA_POKEBALL 38 -#define MON_DATA_HP_IV 39 -#define MON_DATA_ATK_IV 40 -#define MON_DATA_DEF_IV 41 -#define MON_DATA_SPEED_IV 42 -#define MON_DATA_SPATK_IV 43 -#define MON_DATA_SPDEF_IV 44 -#define MON_DATA_IS_EGG 45 -#define MON_DATA_ABILITY_NUM 46 -#define MON_DATA_TOUGH 47 -#define MON_DATA_SHEEN 48 -#define MON_DATA_OT_GENDER 49 -#define MON_DATA_COOL_RIBBON 50 -#define MON_DATA_BEAUTY_RIBBON 51 -#define MON_DATA_CUTE_RIBBON 52 -#define MON_DATA_SMART_RIBBON 53 -#define MON_DATA_TOUGH_RIBBON 54 -#define MON_DATA_STATUS 55 -#define MON_DATA_LEVEL 56 -#define MON_DATA_HP 57 -#define MON_DATA_MAX_HP 58 -#define MON_DATA_ATK 59 -#define MON_DATA_DEF 60 -#define MON_DATA_SPEED 61 -#define MON_DATA_SPATK 62 -#define MON_DATA_SPDEF 63 -#define MON_DATA_MAIL 64 -#define MON_DATA_SPECIES2 65 -#define MON_DATA_IVS 66 -#define MON_DATA_CHAMPION_RIBBON 67 -#define MON_DATA_WINNING_RIBBON 68 -#define MON_DATA_VICTORY_RIBBON 69 -#define MON_DATA_ARTIST_RIBBON 70 -#define MON_DATA_EFFORT_RIBBON 71 -#define MON_DATA_MARINE_RIBBON 72 -#define MON_DATA_LAND_RIBBON 73 -#define MON_DATA_SKY_RIBBON 74 -#define MON_DATA_COUNTRY_RIBBON 75 -#define MON_DATA_NATIONAL_RIBBON 76 -#define MON_DATA_EARTH_RIBBON 77 -#define MON_DATA_WORLD_RIBBON 78 -#define MON_DATA_UNUSED_RIBBONS 79 -#define MON_DATA_EVENT_LEGAL 80 -#define MON_DATA_KNOWN_MOVES 81 -#define MON_DATA_RIBBON_COUNT 82 -#define MON_DATA_RIBBONS 83 -#define MON_DATA_ATK2 84 -#define MON_DATA_DEF2 85 -#define MON_DATA_SPEED2 86 -#define MON_DATA_SPATK2 87 -#define MON_DATA_SPDEF2 88 +#define MON_DATA_PERSONALITY 0 +#define MON_DATA_OT_ID 1 +#define MON_DATA_NICKNAME 2 +#define MON_DATA_LANGUAGE 3 +#define MON_DATA_SANITY_IS_BAD_EGG 4 +#define MON_DATA_SANITY_HAS_SPECIES 5 +#define MON_DATA_SANITY_IS_EGG 6 +#define MON_DATA_OT_NAME 7 +#define MON_DATA_MARKINGS 8 +#define MON_DATA_CHECKSUM 9 +#define MON_DATA_ENCRYPT_SEPARATOR 10 +#define MON_DATA_SPECIES 11 +#define MON_DATA_HELD_ITEM 12 +#define MON_DATA_MOVE1 13 +#define MON_DATA_MOVE2 14 +#define MON_DATA_MOVE3 15 +#define MON_DATA_MOVE4 16 +#define MON_DATA_PP1 17 +#define MON_DATA_PP2 18 +#define MON_DATA_PP3 19 +#define MON_DATA_PP4 20 +#define MON_DATA_PP_BONUSES 21 +#define MON_DATA_COOL 22 +#define MON_DATA_BEAUTY 23 +#define MON_DATA_CUTE 24 +#define MON_DATA_EXP 25 +#define MON_DATA_HP_EV 26 +#define MON_DATA_ATK_EV 27 +#define MON_DATA_DEF_EV 28 +#define MON_DATA_SPEED_EV 29 +#define MON_DATA_SPATK_EV 30 +#define MON_DATA_SPDEF_EV 31 +#define MON_DATA_FRIENDSHIP 32 +#define MON_DATA_SMART 33 +#define MON_DATA_POKERUS 34 +#define MON_DATA_MET_LOCATION 35 +#define MON_DATA_MET_LEVEL 36 +#define MON_DATA_MET_GAME 37 +#define MON_DATA_POKEBALL 38 +#define MON_DATA_HP_IV 39 +#define MON_DATA_ATK_IV 40 +#define MON_DATA_DEF_IV 41 +#define MON_DATA_SPEED_IV 42 +#define MON_DATA_SPATK_IV 43 +#define MON_DATA_SPDEF_IV 44 +#define MON_DATA_IS_EGG 45 +#define MON_DATA_ABILITY_NUM 46 +#define MON_DATA_TOUGH 47 +#define MON_DATA_SHEEN 48 +#define MON_DATA_OT_GENDER 49 +#define MON_DATA_COOL_RIBBON 50 +#define MON_DATA_BEAUTY_RIBBON 51 +#define MON_DATA_CUTE_RIBBON 52 +#define MON_DATA_SMART_RIBBON 53 +#define MON_DATA_TOUGH_RIBBON 54 +#define MON_DATA_STATUS 55 +#define MON_DATA_LEVEL 56 +#define MON_DATA_HP 57 +#define MON_DATA_MAX_HP 58 +#define MON_DATA_ATK 59 +#define MON_DATA_DEF 60 +#define MON_DATA_SPEED 61 +#define MON_DATA_SPATK 62 +#define MON_DATA_SPDEF 63 +#define MON_DATA_MAIL 64 +#define MON_DATA_SPECIES_OR_EGG 65 +#define MON_DATA_IVS 66 +#define MON_DATA_CHAMPION_RIBBON 67 +#define MON_DATA_WINNING_RIBBON 68 +#define MON_DATA_VICTORY_RIBBON 69 +#define MON_DATA_ARTIST_RIBBON 70 +#define MON_DATA_EFFORT_RIBBON 71 +#define MON_DATA_MARINE_RIBBON 72 +#define MON_DATA_LAND_RIBBON 73 +#define MON_DATA_SKY_RIBBON 74 +#define MON_DATA_COUNTRY_RIBBON 75 +#define MON_DATA_NATIONAL_RIBBON 76 +#define MON_DATA_EARTH_RIBBON 77 +#define MON_DATA_WORLD_RIBBON 78 +#define MON_DATA_UNUSED_RIBBONS 79 +#define MON_DATA_MODERN_FATEFUL_ENCOUNTER 80 +#define MON_DATA_KNOWN_MOVES 81 +#define MON_DATA_RIBBON_COUNT 82 +#define MON_DATA_RIBBONS 83 +#define MON_DATA_ATK2 84 +#define MON_DATA_DEF2 85 +#define MON_DATA_SPEED2 86 +#define MON_DATA_SPATK2 87 +#define MON_DATA_SPDEF2 88 // Pokemon types #define TYPE_NONE 255 @@ -115,21 +115,21 @@ #define NUMBER_OF_MON_TYPES 18 // Pokemon egg groups -#define EGG_GROUP_NONE 0 -#define EGG_GROUP_MONSTER 1 -#define EGG_GROUP_WATER_1 2 -#define EGG_GROUP_BUG 3 -#define EGG_GROUP_FLYING 4 -#define EGG_GROUP_FIELD 5 -#define EGG_GROUP_FAIRY 6 -#define EGG_GROUP_GRASS 7 -#define EGG_GROUP_HUMAN_LIKE 8 -#define EGG_GROUP_WATER_3 9 -#define EGG_GROUP_MINERAL 10 -#define EGG_GROUP_AMORPHOUS 11 -#define EGG_GROUP_WATER_2 12 -#define EGG_GROUP_DITTO 13 -#define EGG_GROUP_DRAGON 14 +#define EGG_GROUP_NONE 0 +#define EGG_GROUP_MONSTER 1 +#define EGG_GROUP_WATER_1 2 +#define EGG_GROUP_BUG 3 +#define EGG_GROUP_FLYING 4 +#define EGG_GROUP_FIELD 5 +#define EGG_GROUP_FAIRY 6 +#define EGG_GROUP_GRASS 7 +#define EGG_GROUP_HUMAN_LIKE 8 +#define EGG_GROUP_WATER_3 9 +#define EGG_GROUP_MINERAL 10 +#define EGG_GROUP_AMORPHOUS 11 +#define EGG_GROUP_WATER_2 12 +#define EGG_GROUP_DITTO 13 +#define EGG_GROUP_DRAGON 14 #define EGG_GROUP_UNDISCOVERED 15 #define EGG_GROUPS_PER_MON 2 @@ -184,23 +184,29 @@ // Shiny odds #define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 +#define MAX_LEVEL 100 + +#define OT_ID_PLAYER_ID 0 +#define OT_ID_PRESET 1 +#define OT_ID_RANDOM_NO_SHINY 2 + +#define MON_GIVEN_TO_PARTY 0 +#define MON_GIVEN_TO_PC 1 +#define MON_CANT_GIVE 2 + +#define PLAYER_HAS_TWO_USABLE_MONS 0 +#define PLAYER_HAS_ONE_MON 1 +#define PLAYER_HAS_ONE_USABLE_MON 2 + // Learning moves #define MON_ALREADY_KNOWS_MOVE 0xFFFE #define MON_HAS_MAX_MOVES 0xFFFF -#define PLAYER_HAS_TWO_USABLE_MONS 0x0 -#define PLAYER_HAS_ONE_MON 0x1 -#define PLAYER_HAS_ONE_USABLE_MON 0x2 +#define LEVEL_UP_MOVE_ID 0x01FF +#define LEVEL_UP_MOVE_LV 0xFE00 +#define LEVEL_UP_END 0xFFFF -#define MAX_LEVEL 100 - -#define OT_ID_RANDOM_NO_SHINY 2 -#define OT_ID_PRESET 1 -#define OT_ID_PLAYER_ID 0 - -#define MON_GIVEN_TO_PARTY 0x0 -#define MON_GIVEN_TO_PC 0x1 -#define MON_CANT_GIVE 0x2 +#define MAX_LEVEL_UP_MOVES 20 #define MON_MALE 0x00 #define MON_FEMALE 0xFE @@ -217,6 +223,10 @@ #define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 8 #define FRIENDSHIP_EVENT_FAINT_LARGE 9 +#define MAX_FRIENDSHIP 255 +#define MAX_SHEEN 255 +#define MAX_CONDITION 255 + #define MAX_PER_STAT_IVS 31 #define MAX_IV_MASK 31 #define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) @@ -224,8 +234,52 @@ #define MAX_TOTAL_EVS 510 #define EV_ITEM_RAISE_LIMIT 100 -#define PARTY_SIZE 6 -#define BOX_NAME_LENGTH 8 +// Battle move flags +#define FLAG_MAKES_CONTACT (1 << 0) +#define FLAG_PROTECT_AFFECTED (1 << 1) +#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) +#define FLAG_SNATCH_AFFECTED (1 << 3) +#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) +#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) + +// Growth rates +#define GROWTH_MEDIUM_FAST 0 +#define GROWTH_ERRATIC 1 +#define GROWTH_FLUCTUATING 2 +#define GROWTH_MEDIUM_SLOW 3 +#define GROWTH_FAST 4 +#define GROWTH_SLOW 5 + +// Body colors for pokedex search +#define BODY_COLOR_RED 0 +#define BODY_COLOR_BLUE 1 +#define BODY_COLOR_YELLOW 2 +#define BODY_COLOR_GREEN 3 +#define BODY_COLOR_BLACK 4 +#define BODY_COLOR_BROWN 5 +#define BODY_COLOR_PURPLE 6 +#define BODY_COLOR_GRAY 7 +#define BODY_COLOR_WHITE 8 +#define BODY_COLOR_PINK 9 + +// Evolution types +#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 +#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 +#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 +#define EVO_LEVEL 4 // Pokémon reaches the specified level +#define EVO_TRADE 5 // Pokémon is traded +#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item +#define EVO_ITEM 7 // specified item is used on Pokémon +#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense +#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense +#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense +#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value +#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value +#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) +#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) +#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value + +#define EVOS_PER_MON 5 #define EVO_MODE_NORMAL 0 #define EVO_MODE_TRADE 1 @@ -236,6 +290,11 @@ #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) +// Most pokemon have 1 frame. There are 2 exceptions: +// - Castform has 4 frames, 1 for each form +// - Deoxys has 2 frames, 1 for each form +#define MAX_MON_PIC_FRAMES 4 + // used by ShouldIgnoreDeoxysForm #define DEOXYS_CHECK_BATTLE_SPRITE 1 #define DEOXYS_CHECK_TRADE_MAIN 3 diff --git a/include/malloc.h b/include/malloc.h index ae66aecb1..bf89badc5 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -14,6 +14,8 @@ ptr = NULL; \ } +#define TRY_FREE_AND_SET_NULL(ptr) if (ptr != NULL) FREE_AND_SET_NULL(ptr) + extern u8 gHeap[]; void *Alloc(u32 size); void *AllocZeroed(u32 size); diff --git a/include/pokemon.h b/include/pokemon.h index 825683fd5..897abe383 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -4,7 +4,6 @@ #include "global.h" #include "sprite.h" #include "constants/pokemon.h" -#include "pokemon_storage_system.h" struct PokemonSubstruct0 { @@ -13,12 +12,13 @@ struct PokemonSubstruct0 u32 experience; u8 ppBonuses; u8 friendship; + u16 filler; }; struct PokemonSubstruct1 { - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; }; struct PokemonSubstruct2 @@ -56,34 +56,50 @@ struct PokemonSubstruct3 /* 0x07 */ u32 isEgg:1; /* 0x07 */ u32 abilityNum:1; - /* 0x08 */ u32 coolRibbon:3; - /* 0x08 */ u32 beautyRibbon:3; - /* 0x08 */ u32 cuteRibbon:3; - /* 0x09 */ u32 smartRibbon:3; - /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; - /* 0x0A */ u32 winningRibbon:1; - /* 0x0A */ u32 victoryRibbon:1; - /* 0x0A */ u32 artistRibbon:1; - /* 0x0A */ u32 effortRibbon:1; - /* 0x0A */ u32 marineRibbon:1; // never distributed - /* 0x0A */ u32 landRibbon:1; // never distributed - /* 0x0A */ u32 skyRibbon:1; // never distributed - /* 0x0A */ u32 countryRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners - /* 0x0B */ u32 nationalRibbon:1; - /* 0x0B */ u32 earthRibbon:1; - /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners - /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4 - /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in FRLG & Gen 4+ summary screens; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. + /* 0x08 */ u32 coolRibbon:3; // Stores the highest contest rank achieved in the Cool category. + /* 0x08 */ u32 beautyRibbon:3; // Stores the highest contest rank achieved in the Beauty category. + /* 0x08 */ u32 cuteRibbon:3; // Stores the highest contest rank achieved in the Cute category. + /* 0x09 */ u32 smartRibbon:3; // Stores the highest contest rank achieved in the Smart category. + /* 0x09 */ u32 toughRibbon:3; // Stores the highest contest rank achieved in the Tough category. + /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion. Because both RSE and FRLG use it, later generations don't specify from which region it comes from. + /* 0x0A */ u32 winningRibbon:1; // Given at the Battle Tower's Level 50 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 victoryRibbon:1; // Given at the Battle Tower's Level 100 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 artistRibbon:1; // Given at the Contest Hall by winning a Master Rank contest with at least 800 points, and agreeing to have the Pokémon's portrait placed in the museum after being offered. + /* 0x0A */ u32 effortRibbon:1; // Given at Slateport's market to Pokémon with maximum EVs. + /* 0x0A */ u32 marineRibbon:1; // Never distributed. + /* 0x0A */ u32 landRibbon:1; // Never distributed. + /* 0x0A */ u32 skyRibbon:1; // Never distributed. + /* 0x0A */ u32 countryRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. + /* 0x0B */ u32 nationalRibbon:1; // Given to purified Shadow Pokémon in Colosseum/XD. + /* 0x0B */ u32 earthRibbon:1; // Given to teams that have beaten Mt. Battle's 100-battle challenge in Colosseum/XD. + /* 0x0B */ u32 worldRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. + /* 0x0B */ u32 unusedRibbons:4; // Discarded in Gen 4. + + // The functionality of this bit changed in FRLG: + // In RS, this bit does nothing, is never set, & is accidentally unset when hatching Eggs. + // In FRLG & Emerald, this controls Mew & Deoxys obedience and whether they can be traded. + // If set, a Pokémon is a fateful encounter in FRLG's summary screen if hatched & for all Pokémon in Gen 4+ summary screens. + // Set for in-game event island legendaries, events distributed after a certain date, & Pokémon from XD: Gale of Darkness. + // Not to be confused with METLOC_FATEFUL_ENCOUNTER. + /* 0x0B */ u32 modernFatefulEncounter:1; }; +// Number of bytes in the largest Pokémon substruct. +// They are assumed to be the same size, and will be padded to +// the largest size by the union. +// By default they are all 12 bytes. +#define NUM_SUBSTRUCT_BYTES (max(sizeof(struct PokemonSubstruct0), \ + max(sizeof(struct PokemonSubstruct1), \ + max(sizeof(struct PokemonSubstruct2), \ + sizeof(struct PokemonSubstruct3))))) + union PokemonSubstruct { struct PokemonSubstruct0 type0; struct PokemonSubstruct1 type1; struct PokemonSubstruct2 type2; struct PokemonSubstruct3 type3; - u16 raw[6]; + u16 raw[NUM_SUBSTRUCT_BYTES / 2]; // /2 because it's u16, not u8 }; struct BoxPokemon @@ -103,7 +119,7 @@ struct BoxPokemon union { - u32 raw[12]; + u32 raw[(NUM_SUBSTRUCT_BYTES * 4) / 4]; // *4 because there are 4 substructs, /4 because it's u32, not u8 union PokemonSubstruct substructs[4]; } secure; }; @@ -123,19 +139,11 @@ struct Pokemon u16 spDefense; }; -struct PokemonStorage -{ - /*0x0000*/ u8 currentBox; - /*0x0001*/ struct BoxPokemon boxes[TOTAL_BOXES_COUNT][IN_BOX_COUNT]; - /*0x8344*/ u8 boxNames[TOTAL_BOXES_COUNT][BOX_NAME_LENGTH + 1]; - /*0x83C2*/ u8 boxWallpapers[TOTAL_BOXES_COUNT]; -}; - struct BattleTowerPokemon { /*0x00*/ u16 species; /*0x02*/ u16 heldItem; - /*0x04*/ u16 moves[4]; + /*0x04*/ u16 moves[MAX_MON_MOVES]; /*0x0C*/ u8 level; /*0x0D*/ u8 ppBonuses; /*0x0E*/ u8 hpEV; @@ -154,12 +162,10 @@ struct BattleTowerPokemon u32 gap:1; u32 abilityNum:1; /*0x1C*/ u32 personality; - /*0x20*/ u8 nickname[11]; + /*0x20*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x2B*/ u8 friendship; }; -#define BATTLE_STATS_NO 8 - struct BattlePokemon { /*0x00*/ u16 species; @@ -168,7 +174,7 @@ struct BattlePokemon /*0x06*/ u16 speed; /*0x08*/ u16 spAttack; /*0x0A*/ u16 spDefense; - /*0x0C*/ u16 moves[4]; + /*0x0C*/ u16 moves[MAX_MON_MOVES]; /*0x14*/ u32 hpIV:5; /*0x14*/ u32 attackIV:5; /*0x15*/ u32 defenseIV:5; @@ -177,12 +183,12 @@ struct BattlePokemon /*0x17*/ u32 spDefenseIV:5; /*0x17*/ u32 isEgg:1; /*0x17*/ u32 abilityNum:1; - /*0x18*/ s8 statStages[BATTLE_STATS_NO]; + /*0x18*/ s8 statStages[NUM_BATTLE_STATS]; /*0x20*/ u8 ability; /*0x21*/ u8 type1; /*0x22*/ u8 type2; /*0x23*/ u8 unknown; - /*0x24*/ u8 pp[4]; + /*0x24*/ u8 pp[MAX_MON_MOVES]; /*0x28*/ u16 hp; /*0x2A*/ u8 level; /*0x2B*/ u8 friendship; @@ -190,7 +196,7 @@ struct BattlePokemon /*0x2E*/ u16 item; /*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x3B*/ u8 ppBonuses; - /*0x3C*/ u8 otName[8]; + /*0x3C*/ u8 otName[PLAYER_NAME_LENGTH + 1]; /*0x44*/ u32 experience; /*0x48*/ u32 personality; /*0x4C*/ u32 status1; @@ -198,7 +204,7 @@ struct BattlePokemon /*0x54*/ u32 otId; }; -struct BaseStats +struct SpeciesInfo { /* 0x00 */ u8 baseHP; /* 0x01 */ u8 baseAttack; @@ -206,8 +212,7 @@ struct BaseStats /* 0x03 */ u8 baseSpeed; /* 0x04 */ u8 baseSpAttack; /* 0x05 */ u8 baseSpDefense; - /* 0x06 */ u8 type1; - /* 0x07 */ u8 type2; + /* 0x06 */ u8 types[2]; /* 0x08 */ u8 catchRate; /* 0x09 */ u8 expYield; /* 0x0A */ u16 evYield_HP:2; @@ -216,14 +221,13 @@ struct BaseStats /* 0x0A */ u16 evYield_Speed:2; /* 0x0B */ u16 evYield_SpAttack:2; /* 0x0B */ u16 evYield_SpDefense:2; - /* 0x0C */ u16 item1; - /* 0x0E */ u16 item2; + /* 0x0C */ u16 itemCommon; + /* 0x0E */ u16 itemRare; /* 0x10 */ u8 genderRatio; /* 0x11 */ u8 eggCycles; /* 0x12 */ u8 friendship; /* 0x13 */ u8 growthRate; - /* 0x14 */ u8 eggGroup1; - /* 0x15 */ u8 eggGroup2; + /* 0x14 */ u8 eggGroups[2]; /* 0x16 */ u8 abilities[2]; /* 0x18 */ u8 safariZoneFleeRate; /* 0x19 */ u8 bodyColor : 7; @@ -243,20 +247,13 @@ struct BattleMove u8 flags; }; -extern const struct BattleMove gBattleMoves[]; - -// Battle move flags -#define FLAG_MAKES_CONTACT (1 << 0) -#define FLAG_PROTECT_AFFECTED (1 << 1) -#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) -#define FLAG_SNATCH_AFFECTED (1 << 3) -#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) -#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) +#define SPINDA_SPOT_WIDTH 16 +#define SPINDA_SPOT_HEIGHT 16 struct SpindaSpot { u8 x, y; - u16 image[16]; + u16 image[SPINDA_SPOT_HEIGHT]; }; struct __attribute__((packed)) LevelUpMove @@ -265,46 +262,6 @@ struct __attribute__((packed)) LevelUpMove u16 level:7; }; -enum -{ - GROWTH_MEDIUM_FAST, - GROWTH_ERRATIC, - GROWTH_FLUCTUATING, - GROWTH_MEDIUM_SLOW, - GROWTH_FAST, - GROWTH_SLOW -}; - -enum -{ - BODY_COLOR_RED, - BODY_COLOR_BLUE, - BODY_COLOR_YELLOW, - BODY_COLOR_GREEN, - BODY_COLOR_BLACK, - BODY_COLOR_BROWN, - BODY_COLOR_PURPLE, - BODY_COLOR_GRAY, - BODY_COLOR_WHITE, - BODY_COLOR_PINK -}; - -#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level -#define EVO_TRADE 0x0005 // Pokémon is traded -#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 0x0007 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value - struct Evolution { u16 method; @@ -312,8 +269,6 @@ struct Evolution u16 targetSpecies; }; -#define EVOS_PER_MON 5 - #define NUM_UNOWN_FORMS 28 #define GET_UNOWN_LETTER(personality) (( \ @@ -323,11 +278,14 @@ struct Evolution | (((personality) & 0x00000003) >> 0) \ ) % NUM_UNOWN_FORMS) +#define GET_SHINY_VALUE(otId, personality) (HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality)) + +extern const struct BattleMove gBattleMoves[]; extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[PARTY_SIZE]; extern u8 gEnemyPartyCount; extern struct Pokemon gEnemyParty[PARTY_SIZE]; -extern const struct BaseStats gBaseStats[]; +extern const struct SpeciesInfo gSpeciesInfo[]; extern const u8 *const gItemEffectTable[]; extern const u8 gStatStageRatios[][2]; extern struct SpriteTemplate gMultiuseSpriteTemplate; @@ -459,11 +417,11 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateEventLegalEnemyMon(void); +void CreateEnemyEventMon(void); void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality); bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 bank); -struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable); -void OakSpeechNidoranFFreeResources(void); -void *OakSpeechNidoranFGetBuffer(u8 bufferId); +struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 battlePosition, u8 mode); +void DestroyMonSpritesGfxManager(void); +u8 *MonSpritesGfxManager_GetSpritePtr(u8 bufferId); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 388d3dba5..745e9d8b7 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -2,11 +2,13 @@ #define GUARD_POKEMON_STORAGE_SYSTEM_H #include "global.h" +#include "pokemon.h" #define TOTAL_BOXES_COUNT 14 #define IN_BOX_ROWS 5 // Number of rows, 6 Pokémon per row #define IN_BOX_COLUMNS 6 // Number of columns, 5 Pokémon per column #define IN_BOX_COUNT (IN_BOX_ROWS * IN_BOX_COLUMNS) +#define BOX_NAME_LENGTH 8 /* COLUMNS @@ -39,6 +41,14 @@ enum }; #define MAX_DEFAULT_WALLPAPER WALLPAPER_SAVANNA +struct PokemonStorage +{ + /*0x0000*/ u8 currentBox; + /*0x0001*/ struct BoxPokemon boxes[TOTAL_BOXES_COUNT][IN_BOX_COUNT]; + /*0x8344*/ u8 boxNames[TOTAL_BOXES_COUNT][BOX_NAME_LENGTH + 1]; + /*0x83C2*/ u8 boxWallpapers[TOTAL_BOXES_COUNT]; +}; + u8 *GetBoxNamePtr(u8 boxNumber); struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition); void SetBoxMonNickAt(u8 boxId, u8 monPosition, const u8 *newNick); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 253f03c02..4df9977bc 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1113,8 +1113,8 @@ static void Cmd_count_alive_pokemon(void) { if (i != battlerOnField1 && i != battlerOnField2 && GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) { AI_THINKING_STRUCT->funcResult++; } @@ -1165,25 +1165,25 @@ static void Cmd_get_ability(void) return; } - if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) + if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) { - if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) + if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) { // AI has no knowledge of opponent, so it guesses which ability. if (Random() % 2) - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; + AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; else - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; + AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; } else { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; + AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; } } else { // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; + AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; } } else diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f459a9eb1..73c013cfa 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -54,8 +54,8 @@ static bool8 ShouldSwitchIfWonderGuard(void) for (i = 0; i < PARTY_SIZE; ++i) { if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0 - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG || i == gBattlerPartyIndexes[gActiveBattler]) continue; GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value. @@ -120,8 +120,8 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) u8 monAbility; if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) || (i == gBattlerPartyIndexes[battlerIn1]) || (i == gBattlerPartyIndexes[battlerIn2]) || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1)) @@ -129,9 +129,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); if (GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE) - monAbility = gBaseStats[species].abilities[1]; + monAbility = gSpeciesInfo[species].abilities[1]; else - monAbility = gBaseStats[species].abilities[0]; + monAbility = gSpeciesInfo[species].abilities[0]; if (absorbingTypeAbility == monAbility && Random() & 1) { // we found a mon @@ -265,8 +265,8 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) u8 monAbility; if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) || (i == gBattlerPartyIndexes[battlerIn1]) || (i == gBattlerPartyIndexes[battlerIn2]) || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1)) @@ -274,9 +274,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) continue; species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); if (GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE) - monAbility = gBaseStats[species].abilities[1]; + monAbility = gSpeciesInfo[species].abilities[1]; else - monAbility = gBaseStats[species].abilities[0]; + monAbility = gSpeciesInfo[species].abilities[0]; moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility); if (moveFlags & flags) { @@ -330,8 +330,8 @@ static bool8 ShouldSwitch(void) for (i = 0; i < PARTY_SIZE; ++i) { if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE) - || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) || (i == gBattlerPartyIndexes[battlerIn1]) || (i == gBattlerPartyIndexes[battlerIn2]) || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1)) @@ -472,8 +472,8 @@ u8 GetMostSuitableMonToSwitchInto(void) && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1) && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2)) { - u8 type1 = gBaseStats[species].type1; - u8 type2 = gBaseStats[species].type2; + u8 type1 = gSpeciesInfo[species].types[0]; + u8 type2 = gSpeciesInfo[species].types[1]; u8 typeDmg = 10; ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg); ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg); @@ -551,9 +551,9 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u return AI_ITEM_HEAL_HP; else if (itemEffect[3] & ITEM3_STATUS_ALL) return AI_ITEM_CURE_CONDITION; - else if (itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0) + else if (itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0) return AI_ITEM_X_STAT; - else if (itemEffect[3] & ITEM3_MIST) + else if (itemEffect[3] & ITEM3_GUARD_SPEC) return AI_ITEM_GUARD_SPECS; else return AI_ITEM_NOT_RECOGNIZABLE; @@ -567,8 +567,8 @@ static bool8 ShouldUseItem(void) for (i = 0; i < PARTY_SIZE; ++i) if (GetMonData(&gEnemyParty[i], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) ++validMons; for (i = 0; i < MAX_TRAINER_ITEMS; ++i) { @@ -650,7 +650,7 @@ static bool8 ShouldUseItem(void) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x8; if (itemEffects[2] & ITEM2_X_ACCURACY) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x20; - if (itemEffects[0] & ITEM0_HIGH_CRIT) + if (itemEffects[0] & ITEM0_DIRE_HIT) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x80; shouldUse = TRUE; break; diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index cf9ef722a..0e0fd8784 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -470,7 +470,7 @@ static void Task_GiveExpToMon(u8 taskId) u16 species = GetMonData(mon, MON_DATA_SPECIES); u8 level = GetMonData(mon, MON_DATA_LEVEL); u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= nextLvlExp) { @@ -512,11 +512,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; u32 expToNextLvl; exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = Task_GiveExpWithExpBar; @@ -548,7 +548,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= expOnNextLvl) { u8 savedActiveBattler; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 64a47823f..c9afab61f 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1031,7 +1031,7 @@ static void Task_GiveExpToMon(u8 taskId) u16 species = GetMonData(mon, MON_DATA_SPECIES); u8 level = GetMonData(mon, MON_DATA_LEVEL); u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= nextLvlExp) { @@ -1073,11 +1073,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; u32 expToNextLvl; exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = Task_GiveExpWithExpBar; @@ -1109,7 +1109,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= expOnNextLvl) { u8 savedActiveBattler; diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index 3b1084aa4..ca052a025 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -451,7 +451,7 @@ static void Task_GiveExpToMon(u8 taskId) u16 species = GetMonData(mon, MON_DATA_SPECIES); u8 level = GetMonData(mon, MON_DATA_LEVEL); u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= nextLvlExp) { @@ -493,11 +493,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; u32 expToNextLvl; exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = Task_GiveExpWithExpBar; @@ -529,7 +529,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= expOnNextLvl) { u8 savedActiveBattler; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index e877a1c08..a2662c39a 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -302,8 +302,8 @@ static void SetBattlePartyIds(void) if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -313,8 +313,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -328,7 +328,7 @@ static void SetBattlePartyIds(void) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2. - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { @@ -339,8 +339,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { diff --git a/src/battle_interface.c b/src/battle_interface.c index 22dc43acb..feb590f5b 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1811,9 +1811,9 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem species = GetMonData(mon, MON_DATA_SPECIES); level = GetMonData(mon, MON_DATA_LEVEL); exp = GetMonData(mon, MON_DATA_EXP); - currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + currLevelExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; currExpBarValue = exp - currLevelExp; - maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + maxExpBarValue = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLevelExp; SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0); } diff --git a/src/battle_main.c b/src/battle_main.c index 40a797e2a..bb34635b4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -715,33 +715,33 @@ static void CB2_InitBattleInternal(void) gBattleCommunication[MULTIUSE_STATE] = 0; } -#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ - for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ - { \ - u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \ - u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ - u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ - \ - if (species == SPECIES_NONE) \ - continue; \ - \ - /* Is healthy mon? */ \ - if (species != SPECIES_EGG && hp != 0 && status == 0) \ - (flags) |= 1 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is Egg or statused? */ \ - if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ - (flags) |= 2 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is fainted? */ \ - if (species != SPECIES_EGG && hp == 0) \ - (flags) |= 3 << (i) * 2; \ +#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ + for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ + { \ + u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES_OR_EGG); \ + u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ + u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ + \ + if (species == SPECIES_NONE) \ + continue; \ + \ + /* Is healthy mon? */ \ + if (species != SPECIES_EGG && hp != 0 && status == 0) \ + (flags) |= 1 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is Egg or statused? */ \ + if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ + (flags) |= 2 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is fainted? */ \ + if (species != SPECIES_EGG && hp == 0) \ + (flags) |= 3 << (i) * 2; \ } // For Vs Screen at link battle start @@ -2277,8 +2277,8 @@ static void BattleStartClearSetData(void) gBattleStruct->runTries = 0; gBattleStruct->safariRockThrowCounter = 0; gBattleStruct->safariBaitThrowCounter = 0; - *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; - *(&gBattleStruct->safariEscapeFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].safariZoneFleeRate * 100 / 1275; + *(&gBattleStruct->safariCatchFactor) = gSpeciesInfo[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + *(&gBattleStruct->safariEscapeFactor) = gSpeciesInfo[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].safariZoneFleeRate * 100 / 1275; if (gBattleStruct->safariEscapeFactor <= 1) gBattleStruct->safariEscapeFactor = 2; gBattleStruct->wildVictorySong = 0; @@ -2508,8 +2508,8 @@ void FaintClearSetData(void) *(i * 8 + gActiveBattler * 2 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; } gBattleResources->flags->flags[gActiveBattler] = 0; - gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; - gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; } static void BattleIntroGetMonsData(void) @@ -2573,8 +2573,8 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) for (i = 0; i < sizeof(struct BattlePokemon); i++) ptr[i] = gBattleBufferB[gActiveBattler][4 + i]; - gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; - gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; *hpOnSwitchout = gBattleMons[gActiveBattler].hp; @@ -2651,8 +2651,8 @@ static void BattleIntroDrawPartySummaryScreens(void) { for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -2669,8 +2669,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -2695,8 +2695,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -4337,7 +4337,7 @@ static void HandleAction_WatchesCarefully(void) --gBattleStruct->safariRockThrowCounter; if (gBattleStruct->safariRockThrowCounter == 0) { - *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(gEnemyParty, MON_DATA_SPECIES)].catchRate * 100 / 1275; + *(&gBattleStruct->safariCatchFactor) = gSpeciesInfo[GetMonData(gEnemyParty, MON_DATA_SPECIES)].catchRate * 100 / 1275; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING; } else diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d9a2ee160..6450a952e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1514,7 +1514,7 @@ u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility) { s32 i = 0; u8 flags = 0; - u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2; + u8 type1 = gSpeciesInfo[targetSpecies].types[0], type2 = gSpeciesInfo[targetSpecies].types[1]; u8 moveType; if (move == MOVE_STRUGGLE) @@ -3163,7 +3163,7 @@ static void Cmd_getexp(void) viaExpShare++; } - calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; + calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; if (viaExpShare) // at least one mon is getting exp via exp share { @@ -4480,8 +4480,8 @@ static void Cmd_switchindataupdate(void) for (i = 0; i < sizeof(struct BattlePokemon); i++) monData[i] = gBattleBufferB[gActiveBattler][4 + i]; - gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; - gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); // check knocked off item @@ -5453,8 +5453,8 @@ static void Cmd_drawpartystatussummary(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatuses[i].hp = 0xFFFF; hpStatuses[i].status = 0; @@ -6168,7 +6168,7 @@ static void Cmd_various(void) } for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); abilityNum = GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM); status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); if (species != SPECIES_NONE @@ -6188,7 +6188,7 @@ static void Cmd_various(void) monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG); abilityNum = GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM); status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); @@ -8041,7 +8041,7 @@ static void Cmd_healpartystatus(void) for (i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); if (species != SPECIES_NONE && species != SPECIES_EGG) @@ -8587,8 +8587,8 @@ static void Cmd_trydobeatup(void) for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++) { if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) break; } @@ -8598,10 +8598,10 @@ static void Cmd_trydobeatup(void) gBattlescriptCurrInstr += 9; - gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; + gBattleMoveDamage = gSpeciesInfo[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); - gBattleMoveDamage /= gBaseStats[gBattleMons[gBattlerTarget].species].baseDefense; + gBattleMoveDamage /= gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseDefense; gBattleMoveDamage = (gBattleMoveDamage / 50) + 2; if (gProtectStructs[gBattlerAttacker].helpingHand) gBattleMoveDamage = gBattleMoveDamage * 15 / 10; @@ -9104,9 +9104,9 @@ static void Cmd_assistattackselect(void) { if (monId == gBattlerPartyIndexes[gBattlerAttacker]) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) @@ -9267,12 +9267,12 @@ static void Cmd_pickup(void) for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE) - ability = gBaseStats[species].abilities[1]; + ability = gSpeciesInfo[species].abilities[1]; else - ability = gBaseStats[species].abilities[0]; + ability = gSpeciesInfo[species].abilities[0]; if (ability == ABILITY_PICKUP && species != SPECIES_NONE && species != SPECIES_EGG && heldItem == ITEM_NONE && !(Random() % 10)) { s32 random = Random() % 100; @@ -9496,7 +9496,7 @@ static void Cmd_handleballthrow(void) if (gLastUsedItem == ITEM_SAFARI_BALL) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else - catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; + catchRate = gSpeciesInfo[gBattleMons[gBattlerTarget].species].catchRate; if (gLastUsedItem > ITEM_SAFARI_BALL) { diff --git a/src/battle_setup.c b/src/battle_setup.c index 36c9eac1b..3ad8f180d 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -545,7 +545,7 @@ static u16 GetSumOfPlayerPartyLevel(u8 numMons) for (i = 0; i < PARTY_SIZE; ++i) { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) { diff --git a/src/battle_tower.c b/src/battle_tower.c index 9586b2dee..e6e4f2472 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -796,7 +796,7 @@ void CheckPartyBattleTowerBanlist(void) for (i = 0; i < PARTY_SIZE; i++) { - species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); diff --git a/src/battle_util.c b/src/battle_util.c index be2422ff7..f28afe05f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1560,8 +1560,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); @@ -1589,8 +1589,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; @@ -3130,14 +3130,14 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsMonEventLegal(u8 battlerId) +static bool32 IsBattlerModernFatefulEncounter(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_EVENT_LEGAL, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); } u8 IsMonDisobedient(void) @@ -3151,7 +3151,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (IsMonEventLegal(gBattlerAttacker)) // only false if illegal Mew or Deoxys + if (IsBattlerModernFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) return 0; diff --git a/src/data/items.json b/src/data/items.json index 25c9056ff..0a87abbe8 100644 --- a/src/data/items.json +++ b/src/data/items.json @@ -2948,7 +2948,7 @@ "english": "SOOTHE BELL", "itemId": "ITEM_SOOTHE_BELL", "price": 100, - "holdEffect": "HOLD_EFFECT_HAPPINESS_UP", + "holdEffect": "HOLD_EFFECT_FRIENDSHIP_UP", "holdEffectParam": 0, "description_english": "An item to be held by a POKéMON.\\nA bell with a comforting chime that\\nmakes the holder calm and friendly.", "importance": 0, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 31a78a748..db57298b6 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -1,6 +1,6 @@ static const u8 sItemEffect_Potion[7] = { [4] = ITEM4_HEAL_HP, - [6] = 20, + [6] = 20, // Amount of HP to recover }; static const u8 sItemEffect_Antidote[6] = { @@ -26,22 +26,22 @@ static const u8 sItemEffect_ParalyzeHeal[6] = { static const u8 sItemEffect_FullRestore[7] = { [3] = ITEM3_STATUS_ALL, [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_HP_FULL, }; static const u8 sItemEffect_MaxPotion[7] = { [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_HP_FULL, }; static const u8 sItemEffect_HyperPotion[7] = { [4] = ITEM4_HEAL_HP, - [6] = 200, + [6] = 200, // Amount of HP to recover }; static const u8 sItemEffect_SuperPotion[7] = { [4] = ITEM4_HEAL_HP, - [6] = 50, + [6] = 50, // Amount of HP to recover }; static const u8 sItemEffect_FullHeal[6] = { @@ -50,87 +50,87 @@ static const u8 sItemEffect_FullHeal[6] = { static const u8 sItemEffect_Revive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -2, + [6] = ITEM6_HEAL_HP_HALF, }; static const u8 sItemEffect_MaxRevive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_HP_FULL, }; static const u8 sItemEffect_FreshWater[7] = { [4] = ITEM4_HEAL_HP, - [6] = 50, + [6] = 50, // Amount of HP to recover }; static const u8 sItemEffect_SodaPop[7] = { [4] = ITEM4_HEAL_HP, - [6] = 60, + [6] = 60, // Amount of HP to recover }; static const u8 sItemEffect_Lemonade[7] = { [4] = ITEM4_HEAL_HP, - [6] = 80, + [6] = 80, // Amount of HP to recover }; static const u8 sItemEffect_MoomooMilk[7] = { [4] = ITEM4_HEAL_HP, - [6] = 100, + [6] = 100, // Amount of HP to recover }; static const u8 sItemEffect_EnergyPowder[10] = { [4] = ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 50, - [7] = -5, - [8] = -5, - [9] = -10, + [6] = 50, // Amount of HP to recover + [7] = -5, // Friendship change, low + [8] = -5, // Friendship change, mid + [9] = -10, // Friendship change, high }; static const u8 sItemEffect_EnergyRoot[10] = { [4] = ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 200, - [7] = -10, - [8] = -10, - [9] = -15, + [6] = 200, // Amount of HP to recover + [7] = -10, // Friendship change, low + [8] = -10, // Friendship change, mid + [9] = -15, // Friendship change, high }; static const u8 sItemEffect_HealPowder[9] = { [3] = ITEM3_STATUS_ALL, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = -5, - [7] = -5, - [8] = -10, + [6] = -5, // Friendship change, low + [7] = -5, // Friendship change, mid + [8] = -10, // Friendship change, high }; static const u8 sItemEffect_RevivalHerb[10] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = -1, - [7] = -15, - [8] = -15, - [9] = -20, + [6] = ITEM6_HEAL_HP_FULL, + [7] = -15, // Friendship change, low + [8] = -15, // Friendship change, mid + [9] = -20, // Friendship change, high }; static const u8 sItemEffect_Ether[7] = { [4] = ITEM4_HEAL_PP_ONE | ITEM4_HEAL_PP_ALL, - [6] = 10, + [6] = 10, // Amount of PP to recover }; static const u8 sItemEffect_MaxEther[7] = { [4] = ITEM4_HEAL_PP_ONE | ITEM4_HEAL_PP_ALL, - [6] = 0x7F, + [6] = ITEM6_HEAL_PP_FULL, }; static const u8 sItemEffect_Elixir[7] = { [4] = ITEM4_HEAL_PP_ALL, - [6] = 10, + [6] = 10, // Amount of PP to recover }; static const u8 sItemEffect_MaxElixir[7] = { [4] = ITEM4_HEAL_PP_ALL, - [6] = 0x7F, + [6] = ITEM6_HEAL_PP_FULL, }; static const u8 sItemEffect_LavaCookie[6] = { @@ -151,137 +151,121 @@ static const u8 sItemEffect_RedFlute[6] = { static const u8 sItemEffect_BerryJuice[7] = { [4] = ITEM4_HEAL_HP, - [6] = 20, + [6] = 20, // Amount of HP to recover }; static const u8 sItemEffect_SacredAsh[7] = { [0] = ITEM0_SACRED_ASH, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_HP_FULL, }; +#define VITAMIN_FRIENDSHIP_CHANGE(i) \ + [(i) + 0] = 5, /* Friendship change, low */ \ + [(i) + 1] = 3, /* Friendship change, mid */ \ + [(i) + 2] = 2 /* Friendship change, high */ + static const u8 sItemEffect_HPUp[10] = { [4] = ITEM4_EV_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_Protein[10] = { [4] = ITEM4_EV_ATK, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_Iron[10] = { [5] = ITEM5_EV_DEF | ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_Carbos[10] = { [5] = ITEM5_EV_SPEED | ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_Calcium[10] = { [5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_RareCandy[10] = { [3] = ITEM3_LEVEL_UP, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 0xFD, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_HEAL_HP_LVL_UP, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_PPUp[9] = { [4] = ITEM4_PP_UP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 5, - [7] = 3, - [8] = 2, + VITAMIN_FRIENDSHIP_CHANGE(6), }; static const u8 sItemEffect_Zinc[10] = { [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL, - [6] = 10, - [7] = 5, - [8] = 3, - [9] = 2, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), }; static const u8 sItemEffect_PPMax[9] = { [5] = ITEM5_PP_MAX | ITEM5_FRIENDSHIP_ALL, - [6] = 5, - [7] = 3, - [8] = 2, + VITAMIN_FRIENDSHIP_CHANGE(6), }; +#define STAT_BOOST_FRIENDSHIP_CHANGE \ + [6] = 1, /* Friendship change, low */ \ + [7] = 1 /* Friendship change, mid */ + static const u8 sItemEffect_GuardSpec[8] = { - [3] = ITEM3_MIST, + [3] = ITEM3_GUARD_SPEC, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE }; static const u8 sItemEffect_DireHit[8] = { - [0] = 2 << 4, + [0] = 2 << 4, // ITEM0_DIRE_HIT [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE }; static const u8 sItemEffect_XAttack[8] = { - [0] = 1, + [0] = 1, // ITEM0_X_ATTACK [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE }; static const u8 sItemEffect_XDefend[8] = { - [1] = 1 << 4, + [1] = 1 << 4, /// ITEM1_X_DEFEND [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE, }; static const u8 sItemEffect_XSpeed[8] = { - [1] = 1, + [1] = 1, // ITEM1_X_SPEED [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE, }; static const u8 sItemEffect_XAccuracy[8] = { - [2] = 1 << 4, + [2] = 1 << 4, // ITEM2_X_ACCURACY [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE, }; static const u8 sItemEffect_XSpecial[8] = { - [2] = 1, + [2] = 1, // ITEM2_X_SPATK [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - [6] = 1, - [7] = 1, + STAT_BOOST_FRIENDSHIP_CHANGE, }; static const u8 sItemEffect_SunStone[6] = { @@ -330,12 +314,12 @@ static const u8 sItemEffect_AspearBerry[6] = { static const u8 sItemEffect_LeppaBerry[7] = { [4] = ITEM4_HEAL_PP_ONE | ITEM4_HEAL_PP_ALL, - [6] = 10, + [6] = 10, // Amount of PP to recover }; static const u8 sItemEffect_OranBerry[7] = { [4] = ITEM4_HEAL_HP, - [6] = 10, + [6] = 10, // Amount of HP to recover }; static const u8 sItemEffect_PersimBerry[6] = { @@ -348,73 +332,73 @@ static const u8 sItemEffect_LumBerry[6] = { static const u8 sItemEffect_SitrusBerry[7] = { [4] = ITEM4_HEAL_HP, - [6] = 30, + [6] = 30, // Amount of HP to recover }; const u8 *const gItemEffectTable[] = { - [ITEM_POTION - ITEM_POTION] = sItemEffect_Potion, - [ITEM_ANTIDOTE - ITEM_POTION] = sItemEffect_Antidote, - [ITEM_BURN_HEAL - ITEM_POTION] = sItemEffect_BurnHeal, - [ITEM_ICE_HEAL - ITEM_POTION] = sItemEffect_IceHeal, - [ITEM_AWAKENING - ITEM_POTION] = sItemEffect_Awakening, + [ITEM_POTION - ITEM_POTION] = sItemEffect_Potion, + [ITEM_ANTIDOTE - ITEM_POTION] = sItemEffect_Antidote, + [ITEM_BURN_HEAL - ITEM_POTION] = sItemEffect_BurnHeal, + [ITEM_ICE_HEAL - ITEM_POTION] = sItemEffect_IceHeal, + [ITEM_AWAKENING - ITEM_POTION] = sItemEffect_Awakening, [ITEM_PARALYZE_HEAL - ITEM_POTION] = sItemEffect_ParalyzeHeal, - [ITEM_FULL_RESTORE - ITEM_POTION] = sItemEffect_FullRestore, - [ITEM_MAX_POTION - ITEM_POTION] = sItemEffect_MaxPotion, - [ITEM_HYPER_POTION - ITEM_POTION] = sItemEffect_HyperPotion, - [ITEM_SUPER_POTION - ITEM_POTION] = sItemEffect_SuperPotion, - [ITEM_FULL_HEAL - ITEM_POTION] = sItemEffect_FullHeal, - [ITEM_REVIVE - ITEM_POTION] = sItemEffect_Revive, - [ITEM_MAX_REVIVE - ITEM_POTION] = sItemEffect_MaxRevive, - [ITEM_FRESH_WATER - ITEM_POTION] = sItemEffect_FreshWater, - [ITEM_SODA_POP - ITEM_POTION] = sItemEffect_SodaPop, - [ITEM_LEMONADE - ITEM_POTION] = sItemEffect_Lemonade, - [ITEM_MOOMOO_MILK - ITEM_POTION] = sItemEffect_MoomooMilk, + [ITEM_FULL_RESTORE - ITEM_POTION] = sItemEffect_FullRestore, + [ITEM_MAX_POTION - ITEM_POTION] = sItemEffect_MaxPotion, + [ITEM_HYPER_POTION - ITEM_POTION] = sItemEffect_HyperPotion, + [ITEM_SUPER_POTION - ITEM_POTION] = sItemEffect_SuperPotion, + [ITEM_FULL_HEAL - ITEM_POTION] = sItemEffect_FullHeal, + [ITEM_REVIVE - ITEM_POTION] = sItemEffect_Revive, + [ITEM_MAX_REVIVE - ITEM_POTION] = sItemEffect_MaxRevive, + [ITEM_FRESH_WATER - ITEM_POTION] = sItemEffect_FreshWater, + [ITEM_SODA_POP - ITEM_POTION] = sItemEffect_SodaPop, + [ITEM_LEMONADE - ITEM_POTION] = sItemEffect_Lemonade, + [ITEM_MOOMOO_MILK - ITEM_POTION] = sItemEffect_MoomooMilk, [ITEM_ENERGY_POWDER - ITEM_POTION] = sItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT - ITEM_POTION] = sItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER - ITEM_POTION] = sItemEffect_HealPowder, - [ITEM_REVIVAL_HERB - ITEM_POTION] = sItemEffect_RevivalHerb, - [ITEM_ETHER - ITEM_POTION] = sItemEffect_Ether, - [ITEM_MAX_ETHER - ITEM_POTION] = sItemEffect_MaxEther, - [ITEM_ELIXIR - ITEM_POTION] = sItemEffect_Elixir, - [ITEM_MAX_ELIXIR - ITEM_POTION] = sItemEffect_MaxElixir, - [ITEM_LAVA_COOKIE - ITEM_POTION] = sItemEffect_LavaCookie, - [ITEM_BLUE_FLUTE - ITEM_POTION] = sItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE - ITEM_POTION] = sItemEffect_YellowFlute, - [ITEM_RED_FLUTE - ITEM_POTION] = sItemEffect_RedFlute, - [ITEM_BERRY_JUICE - ITEM_POTION] = sItemEffect_BerryJuice, - [ITEM_SACRED_ASH - ITEM_POTION] = sItemEffect_SacredAsh, - [ITEM_HP_UP - ITEM_POTION] = sItemEffect_HPUp, - [ITEM_PROTEIN - ITEM_POTION] = sItemEffect_Protein, - [ITEM_IRON - ITEM_POTION] = sItemEffect_Iron, - [ITEM_CARBOS - ITEM_POTION] = sItemEffect_Carbos, - [ITEM_CALCIUM - ITEM_POTION] = sItemEffect_Calcium, - [ITEM_RARE_CANDY - ITEM_POTION] = sItemEffect_RareCandy, - [ITEM_PP_UP - ITEM_POTION] = sItemEffect_PPUp, - [ITEM_ZINC - ITEM_POTION] = sItemEffect_Zinc, - [ITEM_PP_MAX - ITEM_POTION] = sItemEffect_PPMax, - [ITEM_GUARD_SPEC - ITEM_POTION] = sItemEffect_GuardSpec, - [ITEM_DIRE_HIT - ITEM_POTION] = sItemEffect_DireHit, - [ITEM_X_ATTACK - ITEM_POTION] = sItemEffect_XAttack, - [ITEM_X_DEFEND - ITEM_POTION] = sItemEffect_XDefend, - [ITEM_X_SPEED - ITEM_POTION] = sItemEffect_XSpeed, - [ITEM_X_ACCURACY - ITEM_POTION] = sItemEffect_XAccuracy, - [ITEM_X_SPECIAL - ITEM_POTION] = sItemEffect_XSpecial, - [ITEM_SUN_STONE - ITEM_POTION] = sItemEffect_SunStone, - [ITEM_MOON_STONE - ITEM_POTION] = sItemEffect_MoonStone, - [ITEM_FIRE_STONE - ITEM_POTION] = sItemEffect_FireStone, + [ITEM_ENERGY_ROOT - ITEM_POTION] = sItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER - ITEM_POTION] = sItemEffect_HealPowder, + [ITEM_REVIVAL_HERB - ITEM_POTION] = sItemEffect_RevivalHerb, + [ITEM_ETHER - ITEM_POTION] = sItemEffect_Ether, + [ITEM_MAX_ETHER - ITEM_POTION] = sItemEffect_MaxEther, + [ITEM_ELIXIR - ITEM_POTION] = sItemEffect_Elixir, + [ITEM_MAX_ELIXIR - ITEM_POTION] = sItemEffect_MaxElixir, + [ITEM_LAVA_COOKIE - ITEM_POTION] = sItemEffect_LavaCookie, + [ITEM_BLUE_FLUTE - ITEM_POTION] = sItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE - ITEM_POTION] = sItemEffect_YellowFlute, + [ITEM_RED_FLUTE - ITEM_POTION] = sItemEffect_RedFlute, + [ITEM_BERRY_JUICE - ITEM_POTION] = sItemEffect_BerryJuice, + [ITEM_SACRED_ASH - ITEM_POTION] = sItemEffect_SacredAsh, + [ITEM_HP_UP - ITEM_POTION] = sItemEffect_HPUp, + [ITEM_PROTEIN - ITEM_POTION] = sItemEffect_Protein, + [ITEM_IRON - ITEM_POTION] = sItemEffect_Iron, + [ITEM_CARBOS - ITEM_POTION] = sItemEffect_Carbos, + [ITEM_CALCIUM - ITEM_POTION] = sItemEffect_Calcium, + [ITEM_RARE_CANDY - ITEM_POTION] = sItemEffect_RareCandy, + [ITEM_PP_UP - ITEM_POTION] = sItemEffect_PPUp, + [ITEM_ZINC - ITEM_POTION] = sItemEffect_Zinc, + [ITEM_PP_MAX - ITEM_POTION] = sItemEffect_PPMax, + [ITEM_GUARD_SPEC - ITEM_POTION] = sItemEffect_GuardSpec, + [ITEM_DIRE_HIT - ITEM_POTION] = sItemEffect_DireHit, + [ITEM_X_ATTACK - ITEM_POTION] = sItemEffect_XAttack, + [ITEM_X_DEFEND - ITEM_POTION] = sItemEffect_XDefend, + [ITEM_X_SPEED - ITEM_POTION] = sItemEffect_XSpeed, + [ITEM_X_ACCURACY - ITEM_POTION] = sItemEffect_XAccuracy, + [ITEM_X_SPECIAL - ITEM_POTION] = sItemEffect_XSpecial, + [ITEM_SUN_STONE - ITEM_POTION] = sItemEffect_SunStone, + [ITEM_MOON_STONE - ITEM_POTION] = sItemEffect_MoonStone, + [ITEM_FIRE_STONE - ITEM_POTION] = sItemEffect_FireStone, [ITEM_THUNDER_STONE - ITEM_POTION] = sItemEffect_ThunderStone, - [ITEM_WATER_STONE - ITEM_POTION] = sItemEffect_WaterStone, - [ITEM_LEAF_STONE - ITEM_POTION] = sItemEffect_LeafStone, - [ITEM_CHERI_BERRY - ITEM_POTION] = sItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY - ITEM_POTION] = sItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY - ITEM_POTION] = sItemEffect_PechaBerry, - [ITEM_RAWST_BERRY - ITEM_POTION] = sItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY - ITEM_POTION] = sItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY - ITEM_POTION] = sItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY - ITEM_POTION] = sItemEffect_OranBerry, - [ITEM_PERSIM_BERRY - ITEM_POTION] = sItemEffect_PersimBerry, - [ITEM_LUM_BERRY - ITEM_POTION] = sItemEffect_LumBerry, - [ITEM_SITRUS_BERRY - ITEM_POTION] = sItemEffect_SitrusBerry, - [LAST_BERRY_INDEX - ITEM_POTION] = NULL, + [ITEM_WATER_STONE - ITEM_POTION] = sItemEffect_WaterStone, + [ITEM_LEAF_STONE - ITEM_POTION] = sItemEffect_LeafStone, + [ITEM_CHERI_BERRY - ITEM_POTION] = sItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY - ITEM_POTION] = sItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY - ITEM_POTION] = sItemEffect_PechaBerry, + [ITEM_RAWST_BERRY - ITEM_POTION] = sItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY - ITEM_POTION] = sItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY - ITEM_POTION] = sItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY - ITEM_POTION] = sItemEffect_OranBerry, + [ITEM_PERSIM_BERRY - ITEM_POTION] = sItemEffect_PersimBerry, + [ITEM_LUM_BERRY - ITEM_POTION] = sItemEffect_LumBerry, + [ITEM_SITRUS_BERRY - ITEM_POTION] = sItemEffect_SitrusBerry, + [LAST_BERRY_INDEX - ITEM_POTION] = NULL, }; diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/species_info.h similarity index 71% rename from src/data/pokemon/base_stats.h rename to src/data/pokemon/species_info.h index 2dbde1483..3e36c08ce 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/species_info.h @@ -2,39 +2,37 @@ // 255 (MON_GENDERLESS) is reserved for genderless Pokémon. #define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100)) -#define OLD_UNOWN_BASE_STATS \ - { \ - .baseHP = 50, \ - .baseAttack = 150, \ - .baseDefense = 50, \ - .baseSpAttack = 150, \ - .baseSpDefense = 50, \ - .baseSpeed = 150, \ - .type1 = TYPE_NORMAL, \ - .type2 = TYPE_NORMAL, \ - .catchRate = 3, \ - .expYield = 1, \ - .evYield_HP = 2, \ - .evYield_Attack = 2, \ - .evYield_Defense = 2, \ - .evYield_Speed = 2, \ - .evYield_SpAttack = 2, \ - .evYield_SpDefense = 2, \ - .item1 = ITEM_NONE, \ - .item2 = ITEM_NONE, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED,\ - .eggGroup2 = EGG_GROUP_UNDISCOVERED,\ - .abilities = {0, 0}, \ - .safariZoneFleeRate = 0, \ - .bodyColor = BODY_COLOR_BLACK, \ - .noFlip = FALSE, \ +#define OLD_UNOWN_SPECIES_INFO \ + { \ + .baseHP = 50, \ + .baseAttack = 150, \ + .baseDefense = 50, \ + .baseSpAttack = 150, \ + .baseSpDefense = 50, \ + .baseSpeed = 150, \ + .types = {TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 3, \ + .expYield = 1, \ + .evYield_HP = 2, \ + .evYield_Attack = 2, \ + .evYield_Defense = 2, \ + .evYield_Speed = 2, \ + .evYield_SpAttack = 2, \ + .evYield_SpDefense = 2, \ + .itemCommon = ITEM_NONE, \ + .itemRare = ITEM_NONE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_NONE, ABILITY_NONE}, \ + .safariZoneFleeRate = 0, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE, \ } -const struct BaseStats gBaseStats[] = +const struct SpeciesInfo gSpeciesInfo[] = { [SPECIES_NONE] = {0}, [SPECIES_BULBASAUR] = @@ -45,8 +43,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 64, .evYield_HP = 0, @@ -55,15 +52,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -76,8 +72,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 141, .evYield_HP = 0, @@ -86,15 +81,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -107,8 +101,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 208, .evYield_HP = 0, @@ -117,15 +110,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -138,8 +130,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 65, .evYield_HP = 0, @@ -148,15 +139,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -169,8 +159,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 142, .evYield_HP = 0, @@ -179,15 +168,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -200,8 +188,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 109, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = {TYPE_FIRE, TYPE_FLYING}, .catchRate = 45, .expYield = 209, .evYield_HP = 0, @@ -210,15 +197,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -231,8 +217,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 50, .baseSpDefense = 64, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 66, .evYield_HP = 0, @@ -241,15 +226,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -262,8 +246,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 65, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 143, .evYield_HP = 0, @@ -272,15 +255,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -293,8 +275,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 85, .baseSpDefense = 105, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 210, .evYield_HP = 0, @@ -303,15 +284,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -324,8 +304,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 20, .baseSpDefense = 20, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 53, .evYield_HP = 1, @@ -334,15 +313,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -355,8 +333,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 120, .expYield = 72, .evYield_HP = 0, @@ -365,15 +342,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -386,8 +362,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 160, .evYield_HP = 0, @@ -396,15 +371,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_COMPOUND_EYES, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -417,8 +391,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 20, .baseSpDefense = 20, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 255, .expYield = 52, .evYield_HP = 0, @@ -427,15 +400,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -448,8 +420,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 120, .expYield = 71, .evYield_HP = 0, @@ -458,15 +429,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -479,8 +449,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 45, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 159, .evYield_HP = 0, @@ -489,15 +458,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_POISON_BARB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -510,8 +478,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 55, .evYield_HP = 0, @@ -520,15 +487,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -541,8 +507,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 120, .expYield = 113, .evYield_HP = 0, @@ -551,15 +516,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -572,8 +536,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 172, .evYield_HP = 0, @@ -582,15 +545,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -603,8 +565,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 25, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 57, .evYield_HP = 0, @@ -613,15 +574,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_GUTS }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -634,8 +594,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 50, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 127, .expYield = 116, .evYield_HP = 0, @@ -644,15 +603,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_GUTS }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -665,8 +623,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 31, .baseSpDefense = 31, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 58, .evYield_HP = 0, @@ -675,15 +632,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -696,8 +652,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 61, .baseSpDefense = 61, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 90, .expYield = 162, .evYield_HP = 0, @@ -706,15 +661,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SHARP_BEAK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -727,8 +681,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 54, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 255, .expYield = 62, .evYield_HP = 0, @@ -737,15 +690,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_INTIMIDATE, ABILITY_SHED_SKIN }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -758,8 +710,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 65, .baseSpDefense = 79, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 147, .evYield_HP = 0, @@ -768,15 +719,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_POISON_BARB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_INTIMIDATE, ABILITY_SHED_SKIN }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -789,8 +739,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 50, .baseSpDefense = 40, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 82, .evYield_HP = 0, @@ -799,15 +748,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -820,8 +768,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 90, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 122, .evYield_HP = 0, @@ -830,15 +777,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -851,8 +797,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, .expYield = 93, .evYield_HP = 0, @@ -861,15 +806,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SAND_VEIL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -882,8 +826,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 90, .expYield = 163, .evYield_HP = 0, @@ -892,15 +835,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SOFT_SAND, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SAND_VEIL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -913,8 +855,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 41, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 235, .expYield = 59, .evYield_HP = 1, @@ -923,15 +864,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -944,8 +884,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 120, .expYield = 117, .evYield_HP = 2, @@ -954,15 +893,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -975,8 +913,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 76, .baseSpAttack = 75, .baseSpDefense = 85, - .type1 = TYPE_POISON, - .type2 = TYPE_GROUND, + .types = {TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 194, .evYield_HP = 3, @@ -985,15 +922,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1006,8 +942,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 235, .expYield = 60, .evYield_HP = 0, @@ -1016,15 +951,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1037,8 +971,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 120, .expYield = 118, .evYield_HP = 0, @@ -1047,15 +980,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1068,8 +1000,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_POISON, - .type2 = TYPE_GROUND, + .types = {TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 195, .evYield_HP = 0, @@ -1078,15 +1009,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1099,8 +1029,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 60, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 150, .expYield = 68, .evYield_HP = 2, @@ -1109,15 +1038,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_MOON_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1130,8 +1058,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 25, .expYield = 129, .evYield_HP = 3, @@ -1140,15 +1067,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_MOON_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1161,8 +1087,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, .expYield = 63, .evYield_HP = 0, @@ -1171,15 +1096,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_FLASH_FIRE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1192,8 +1116,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 81, .baseSpDefense = 100, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 75, .expYield = 178, .evYield_HP = 0, @@ -1202,15 +1125,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_FLASH_FIRE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1223,8 +1145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 45, .baseSpDefense = 25, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 170, .expYield = 76, .evYield_HP = 2, @@ -1233,15 +1154,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1254,8 +1174,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 75, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 50, .expYield = 109, .evYield_HP = 3, @@ -1264,15 +1183,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1285,8 +1203,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 30, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 255, .expYield = 54, .evYield_HP = 0, @@ -1295,15 +1212,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1316,8 +1232,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 65, .baseSpDefense = 75, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 90, .expYield = 171, .evYield_HP = 0, @@ -1326,15 +1241,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1347,8 +1261,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 75, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 255, .expYield = 78, .evYield_HP = 0, @@ -1357,15 +1270,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1378,8 +1290,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 120, .expYield = 132, .evYield_HP = 0, @@ -1388,15 +1299,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1409,8 +1319,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 100, .baseSpDefense = 90, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 184, .evYield_HP = 0, @@ -1419,15 +1328,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1440,8 +1348,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = {TYPE_BUG, TYPE_GRASS}, .catchRate = 190, .expYield = 70, .evYield_HP = 0, @@ -1450,15 +1357,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1471,8 +1377,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 60, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = {TYPE_BUG, TYPE_GRASS}, .catchRate = 75, .expYield = 128, .evYield_HP = 0, @@ -1481,15 +1386,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1502,8 +1406,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 190, .expYield = 75, .evYield_HP = 0, @@ -1512,15 +1415,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_COMPOUND_EYES, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1533,8 +1435,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 90, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 75, .expYield = 138, .evYield_HP = 0, @@ -1543,15 +1444,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1564,8 +1464,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, .expYield = 81, .evYield_HP = 0, @@ -1574,15 +1473,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1595,8 +1493,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 50, .baseSpDefense = 70, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 50, .expYield = 153, .evYield_HP = 0, @@ -1605,15 +1502,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1626,8 +1522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 69, .evYield_HP = 0, @@ -1636,15 +1531,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NUGGET, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PICKUP, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1657,8 +1551,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 148, .evYield_HP = 0, @@ -1667,15 +1560,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_LIMBER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1688,8 +1580,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 80, .evYield_HP = 0, @@ -1698,15 +1589,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_DAMP, ABILITY_CLOUD_NINE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1719,8 +1609,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 174, .evYield_HP = 0, @@ -1729,15 +1618,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_DAMP, ABILITY_CLOUD_NINE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1750,8 +1638,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 190, .expYield = 74, .evYield_HP = 0, @@ -1760,15 +1647,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1781,8 +1667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 75, .expYield = 149, .evYield_HP = 0, @@ -1791,15 +1676,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1812,8 +1696,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, .expYield = 91, .evYield_HP = 0, @@ -1822,15 +1705,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1843,8 +1725,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 75, .expYield = 213, .evYield_HP = 0, @@ -1853,15 +1734,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1874,8 +1754,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 77, .evYield_HP = 0, @@ -1884,15 +1763,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_DAMP }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -1905,8 +1783,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 120, .expYield = 131, .evYield_HP = 0, @@ -1915,15 +1792,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_DAMP }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -1936,8 +1812,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_FIGHTING, + .types = {TYPE_WATER, TYPE_FIGHTING}, .catchRate = 45, .expYield = 185, .evYield_HP = 0, @@ -1946,15 +1821,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_DAMP }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -1967,8 +1841,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 105, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 200, .expYield = 73, .evYield_HP = 0, @@ -1977,15 +1850,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_TWISTED_SPOON, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1998,8 +1870,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 120, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 100, .expYield = 145, .evYield_HP = 0, @@ -2008,15 +1879,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_TWISTED_SPOON, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2029,8 +1899,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 135, .baseSpDefense = 85, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 186, .evYield_HP = 0, @@ -2039,15 +1908,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_TWISTED_SPOON, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2060,8 +1928,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 88, .evYield_HP = 0, @@ -2070,15 +1937,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2091,8 +1957,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 90, .expYield = 146, .evYield_HP = 0, @@ -2101,15 +1966,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_FOCUS_BAND, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_FOCUS_BAND, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2122,8 +1986,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 65, .baseSpDefense = 85, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 193, .evYield_HP = 0, @@ -2132,15 +1995,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_FOCUS_BAND, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_FOCUS_BAND, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2153,8 +2015,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 70, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 255, .expYield = 84, .evYield_HP = 0, @@ -2163,15 +2024,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2184,8 +2044,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 85, .baseSpDefense = 45, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 120, .expYield = 151, .evYield_HP = 0, @@ -2194,15 +2053,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2215,8 +2073,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 100, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 191, .evYield_HP = 0, @@ -2225,15 +2082,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2246,8 +2102,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 50, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = {TYPE_WATER, TYPE_POISON}, .catchRate = 190, .expYield = 105, .evYield_HP = 0, @@ -2256,15 +2111,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2277,8 +2131,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = {TYPE_WATER, TYPE_POISON}, .catchRate = 60, .expYield = 205, .evYield_HP = 0, @@ -2287,15 +2140,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2308,8 +2160,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 255, .expYield = 86, .evYield_HP = 0, @@ -2318,15 +2169,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2339,8 +2189,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 120, .expYield = 134, .evYield_HP = 0, @@ -2349,15 +2198,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2370,8 +2218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 177, .evYield_HP = 0, @@ -2380,15 +2227,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2401,8 +2247,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, .expYield = 152, .evYield_HP = 0, @@ -2411,15 +2256,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2432,8 +2276,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 60, .expYield = 192, .evYield_HP = 0, @@ -2442,15 +2285,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2463,8 +2305,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 99, .evYield_HP = 1, @@ -2473,15 +2314,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2494,8 +2334,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 164, .evYield_HP = 0, @@ -2504,15 +2343,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2525,8 +2363,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 95, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = {TYPE_ELECTRIC, TYPE_STEEL}, .catchRate = 190, .expYield = 89, .evYield_HP = 0, @@ -2535,15 +2372,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_MAGNET_PULL, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2556,8 +2392,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 120, .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = {TYPE_ELECTRIC, TYPE_STEEL}, .catchRate = 60, .expYield = 161, .evYield_HP = 0, @@ -2566,15 +2401,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_MAGNET, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_MAGNET, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_MAGNET_PULL, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2587,8 +2421,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 58, .baseSpDefense = 62, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 94, .evYield_HP = 0, @@ -2597,15 +2430,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_STICK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_STICK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FIELD}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2618,8 +2450,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 190, .expYield = 96, .evYield_HP = 0, @@ -2628,15 +2459,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2649,8 +2479,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 158, .evYield_HP = 0, @@ -2659,15 +2488,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SHARP_BEAK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2680,8 +2508,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 45, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 100, .evYield_HP = 0, @@ -2690,15 +2517,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_ASPEAR_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_ASPEAR_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -2711,8 +2537,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 75, .expYield = 176, .evYield_HP = 0, @@ -2721,15 +2546,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_ASPEAR_BERRY, - .item2 = ITEM_NEVER_MELT_ICE, + .itemCommon = ITEM_ASPEAR_BERRY, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -2742,8 +2566,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 190, .expYield = 90, .evYield_HP = 1, @@ -2752,15 +2575,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_STENCH, ABILITY_STICKY_HOLD }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2773,8 +2595,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 100, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 75, .expYield = 157, .evYield_HP = 1, @@ -2783,15 +2604,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_STENCH, ABILITY_STICKY_HOLD }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2804,8 +2624,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 97, .evYield_HP = 0, @@ -2814,15 +2633,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_PEARL, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_PEARL, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2835,8 +2653,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 85, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 60, .expYield = 203, .evYield_HP = 0, @@ -2845,15 +2662,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_PEARL, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_PEARL, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2866,8 +2682,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 35, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 190, .expYield = 95, .evYield_HP = 0, @@ -2876,15 +2691,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2897,8 +2711,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 115, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 90, .expYield = 126, .evYield_HP = 0, @@ -2907,15 +2720,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2928,8 +2740,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 45, .expYield = 190, .evYield_HP = 0, @@ -2938,15 +2749,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2959,8 +2769,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 30, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 108, .evYield_HP = 0, @@ -2969,15 +2778,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2990,8 +2798,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 43, .baseSpDefense = 90, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 102, .evYield_HP = 0, @@ -3000,15 +2807,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_INSOMNIA, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3021,8 +2827,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 73, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 165, .evYield_HP = 0, @@ -3031,15 +2836,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_INSOMNIA, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3052,8 +2856,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 115, .evYield_HP = 0, @@ -3062,15 +2865,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3083,8 +2885,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 206, .evYield_HP = 0, @@ -3093,15 +2894,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -3114,8 +2914,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 103, .evYield_HP = 0, @@ -3124,15 +2923,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_STATIC }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3145,8 +2943,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 140, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 60, .expYield = 150, .evYield_HP = 0, @@ -3155,15 +2952,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_STATIC }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3176,8 +2972,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 45, - .type1 = TYPE_GRASS, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_GRASS, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 98, .evYield_HP = 0, @@ -3186,15 +2981,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3207,8 +3001,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 125, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_GRASS, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 212, .evYield_HP = 0, @@ -3217,15 +3010,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3238,8 +3030,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 190, .expYield = 87, .evYield_HP = 0, @@ -3248,15 +3039,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_THICK_CLUB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3269,8 +3059,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 75, .expYield = 124, .evYield_HP = 0, @@ -3279,15 +3068,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_THICK_CLUB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3300,8 +3088,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 87, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 139, .evYield_HP = 0, @@ -3310,15 +3097,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_LIMBER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3331,8 +3117,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 76, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 140, .evYield_HP = 0, @@ -3341,15 +3126,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3362,8 +3146,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 127, .evYield_HP = 2, @@ -3372,15 +3155,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3393,8 +3175,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 60, .baseSpDefense = 45, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 190, .expYield = 114, .evYield_HP = 0, @@ -3403,15 +3184,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3424,8 +3204,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 60, .expYield = 173, .evYield_HP = 0, @@ -3434,15 +3213,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3455,8 +3233,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GROUND, - .type2 = TYPE_ROCK, + .types = {TYPE_GROUND, TYPE_ROCK}, .catchRate = 120, .expYield = 135, .evYield_HP = 0, @@ -3465,15 +3242,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3486,8 +3262,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_ROCK, + .types = {TYPE_GROUND, TYPE_ROCK}, .catchRate = 60, .expYield = 204, .evYield_HP = 0, @@ -3496,15 +3271,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3517,8 +3291,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 105, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, .expYield = 255, .evYield_HP = 2, @@ -3527,15 +3300,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_LUCKY_EGG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_LUCKY_EGG, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3548,8 +3320,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 100, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 166, .evYield_HP = 0, @@ -3558,15 +3329,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3579,8 +3349,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 175, .evYield_HP = 2, @@ -3589,15 +3358,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_EARLY_BIRD, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3610,8 +3378,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 83, .evYield_HP = 0, @@ -3620,15 +3387,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3641,8 +3407,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 155, .evYield_HP = 0, @@ -3651,15 +3416,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_POISON_POINT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3672,8 +3436,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 63, .baseSpAttack = 35, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 111, .evYield_HP = 0, @@ -3682,15 +3445,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, .safariZoneFleeRate = 50, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3703,8 +3465,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 65, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 170, .evYield_HP = 0, @@ -3713,15 +3474,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, .safariZoneFleeRate = 75, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3734,8 +3494,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 70, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 106, .evYield_HP = 0, @@ -3744,15 +3503,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_STARDUST, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3765,8 +3523,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 100, .baseSpDefense = 85, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 207, .evYield_HP = 0, @@ -3775,15 +3532,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_STARDUST, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3796,8 +3552,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 120, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 136, .evYield_HP = 0, @@ -3806,15 +3561,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3827,8 +3581,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 187, .evYield_HP = 0, @@ -3837,15 +3590,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -3858,8 +3610,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 115, .baseSpDefense = 95, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 137, .evYield_HP = 0, @@ -3868,15 +3619,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3889,8 +3639,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 95, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 156, .evYield_HP = 0, @@ -3899,15 +3648,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -3920,8 +3668,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 93, .baseSpAttack = 100, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 167, .evYield_HP = 0, @@ -3930,15 +3677,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_FLAME_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3951,8 +3697,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 70, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 45, .expYield = 200, .evYield_HP = 0, @@ -3961,15 +3706,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3982,8 +3726,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 211, .evYield_HP = 0, @@ -3992,15 +3735,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4013,8 +3755,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 15, .baseSpDefense = 20, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 20, .evYield_HP = 0, @@ -4023,15 +3764,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 25, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4044,8 +3784,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 60, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = {TYPE_WATER, TYPE_FLYING}, .catchRate = 45, .expYield = 214, .evYield_HP = 0, @@ -4054,15 +3793,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4075,8 +3813,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 45, .expYield = 219, .evYield_HP = 2, @@ -4085,15 +3822,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4106,8 +3842,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 48, .baseSpDefense = 48, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 35, .expYield = 61, .evYield_HP = 1, @@ -4116,15 +3851,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_METAL_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_DITTO, - .eggGroup2 = EGG_GROUP_DITTO, - .abilities = { ABILITY_LIMBER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_DITTO, EGG_GROUP_DITTO}, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4137,8 +3871,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 92, .evYield_HP = 0, @@ -4147,15 +3880,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4168,8 +3900,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 110, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 196, .evYield_HP = 2, @@ -4178,15 +3909,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4199,8 +3929,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 110, .baseSpDefense = 95, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 197, .evYield_HP = 0, @@ -4209,15 +3938,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_VOLT_ABSORB, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4230,8 +3958,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 110, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 198, .evYield_HP = 0, @@ -4240,15 +3967,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_FLASH_FIRE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4261,8 +3987,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 130, .evYield_HP = 0, @@ -4271,15 +3996,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_TRACE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_TRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4292,8 +4016,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 90, .baseSpDefense = 55, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 120, .evYield_HP = 0, @@ -4302,15 +4025,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4323,8 +4045,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 199, .evYield_HP = 0, @@ -4333,15 +4054,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4354,8 +4074,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 55, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 119, .evYield_HP = 0, @@ -4364,15 +4083,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4385,8 +4103,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 201, .evYield_HP = 0, @@ -4395,15 +4112,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4416,8 +4132,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, + .types = {TYPE_ROCK, TYPE_FLYING}, .catchRate = 45, .expYield = 202, .evYield_HP = 0, @@ -4426,15 +4141,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_PRESSURE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4447,8 +4161,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 65, .baseSpDefense = 110, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 25, .expYield = 154, .evYield_HP = 2, @@ -4457,15 +4170,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_CHESTO_BERRY, - .item2 = ITEM_CHESTO_BERRY, + .itemCommon = ITEM_CHESTO_BERRY, + .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_IMMUNITY, ABILITY_THICK_FAT }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -4478,8 +4190,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 125, - .type1 = TYPE_ICE, - .type2 = TYPE_FLYING, + .types = {TYPE_ICE, TYPE_FLYING}, .catchRate = 3, .expYield = 215, .evYield_HP = 0, @@ -4488,15 +4199,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4509,8 +4219,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 125, .baseSpDefense = 90, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, + .types = {TYPE_ELECTRIC, TYPE_FLYING}, .catchRate = 3, .expYield = 216, .evYield_HP = 0, @@ -4519,15 +4228,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4540,8 +4248,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 125, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = {TYPE_FIRE, TYPE_FLYING}, .catchRate = 3, .expYield = 217, .evYield_HP = 0, @@ -4550,15 +4257,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4571,8 +4277,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = {TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 67, .evYield_HP = 0, @@ -4581,15 +4286,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 100, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4602,8 +4306,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = {TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 144, .evYield_HP = 0, @@ -4612,15 +4315,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_FANG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 125, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4633,8 +4335,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = {TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 218, .evYield_HP = 0, @@ -4643,15 +4344,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_FANG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4664,8 +4364,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 154, .baseSpDefense = 90, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 220, .evYield_HP = 0, @@ -4674,15 +4373,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4695,8 +4393,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 64, .evYield_HP = 3, @@ -4705,15 +4402,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4726,8 +4422,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 49, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 64, .evYield_HP = 0, @@ -4736,15 +4431,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4757,8 +4451,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 63, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 141, .evYield_HP = 0, @@ -4767,15 +4460,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4788,8 +4480,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 83, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 208, .evYield_HP = 0, @@ -4798,15 +4489,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4819,8 +4509,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 65, .evYield_HP = 0, @@ -4829,15 +4518,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4850,8 +4538,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 142, .evYield_HP = 0, @@ -4860,15 +4547,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4881,8 +4567,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 109, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 209, .evYield_HP = 0, @@ -4891,15 +4576,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4912,8 +4596,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 44, .baseSpDefense = 48, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 66, .evYield_HP = 0, @@ -4922,15 +4605,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4943,8 +4625,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 59, .baseSpDefense = 63, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 143, .evYield_HP = 0, @@ -4953,15 +4634,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -4974,8 +4654,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 79, .baseSpDefense = 83, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 210, .evYield_HP = 0, @@ -4984,15 +4663,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5005,8 +4683,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 57, .evYield_HP = 0, @@ -5015,15 +4692,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_ORAN_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_KEEN_EYE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5036,8 +4712,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 116, .evYield_HP = 0, @@ -5046,15 +4721,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_KEEN_EYE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5067,8 +4741,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 36, .baseSpDefense = 56, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 58, .evYield_HP = 1, @@ -5077,15 +4750,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INSOMNIA, ABILITY_KEEN_EYE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5098,8 +4770,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 76, .baseSpDefense = 96, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 90, .expYield = 162, .evYield_HP = 2, @@ -5108,15 +4779,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INSOMNIA, ABILITY_KEEN_EYE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5129,8 +4799,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 255, .expYield = 54, .evYield_HP = 0, @@ -5139,15 +4808,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5160,8 +4828,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 110, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 90, .expYield = 134, .evYield_HP = 0, @@ -5170,15 +4837,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5191,8 +4857,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 255, .expYield = 54, .evYield_HP = 0, @@ -5201,15 +4866,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_INSOMNIA }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5222,8 +4886,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 90, .expYield = 134, .evYield_HP = 0, @@ -5232,15 +4895,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_INSOMNIA }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5253,8 +4915,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 90, .expYield = 204, .evYield_HP = 0, @@ -5263,15 +4924,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5284,8 +4944,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 56, .baseSpDefense = 56, - .type1 = TYPE_WATER, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_WATER, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 90, .evYield_HP = 1, @@ -5294,15 +4953,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_YELLOW_SHARD, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5315,8 +4973,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 76, .baseSpDefense = 76, - .type1 = TYPE_WATER, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_WATER, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 156, .evYield_HP = 2, @@ -5325,15 +4982,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_YELLOW_SHARD, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5346,8 +5002,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 42, .evYield_HP = 0, @@ -5356,15 +5011,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5377,8 +5031,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 150, .expYield = 37, .evYield_HP = 0, @@ -5387,15 +5040,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_MOON_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5408,8 +5060,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 40, .baseSpDefense = 20, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 170, .expYield = 39, .evYield_HP = 1, @@ -5418,15 +5069,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -5439,8 +5089,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 40, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 74, .evYield_HP = 0, @@ -5449,15 +5098,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_HUSTLE, ABILITY_SERENE_GRACE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5470,8 +5118,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 80, .baseSpDefense = 105, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 75, .expYield = 114, .evYield_HP = 0, @@ -5480,15 +5127,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_HUSTLE, ABILITY_SERENE_GRACE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5501,8 +5147,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 45, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = {TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 190, .expYield = 73, .evYield_HP = 0, @@ -5511,15 +5156,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5532,8 +5176,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = {TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 75, .expYield = 171, .evYield_HP = 0, @@ -5542,15 +5185,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5563,8 +5205,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 235, .expYield = 59, .evYield_HP = 0, @@ -5573,15 +5214,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5594,8 +5234,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 80, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 117, .evYield_HP = 0, @@ -5604,15 +5243,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5625,8 +5263,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 90, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 194, .evYield_HP = 0, @@ -5635,15 +5272,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5656,8 +5292,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 184, .evYield_HP = 0, @@ -5666,15 +5301,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5687,8 +5321,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 20, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 58, .evYield_HP = 2, @@ -5697,15 +5330,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_THICK_FAT, ABILITY_HUGE_POWER }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5718,8 +5350,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 153, .evYield_HP = 3, @@ -5728,15 +5359,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_THICK_FAT, ABILITY_HUGE_POWER }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5749,8 +5379,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = {TYPE_ROCK, TYPE_ROCK}, .catchRate = 65, .expYield = 135, .evYield_HP = 0, @@ -5759,15 +5388,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5780,8 +5408,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 185, .evYield_HP = 0, @@ -5790,15 +5417,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_KINGS_ROCK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_WATER_ABSORB, ABILITY_DAMP }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -5811,8 +5437,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = {TYPE_GRASS, TYPE_FLYING}, .catchRate = 255, .expYield = 74, .evYield_HP = 0, @@ -5821,15 +5446,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5842,8 +5466,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = {TYPE_GRASS, TYPE_FLYING}, .catchRate = 120, .expYield = 136, .evYield_HP = 0, @@ -5852,15 +5475,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5873,8 +5495,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 55, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = {TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 176, .evYield_HP = 0, @@ -5883,15 +5504,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5904,8 +5524,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 94, .evYield_HP = 0, @@ -5914,15 +5533,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_PICKUP }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5935,8 +5553,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 235, .expYield = 52, .evYield_HP = 0, @@ -5945,15 +5562,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5966,8 +5582,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 105, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 120, .expYield = 146, .evYield_HP = 0, @@ -5976,15 +5591,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5997,8 +5611,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 75, .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 75, .expYield = 147, .evYield_HP = 0, @@ -6007,15 +5620,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6028,8 +5640,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 255, .expYield = 52, .evYield_HP = 1, @@ -6038,15 +5649,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_DAMP, ABILITY_WATER_ABSORB }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6059,8 +5669,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 90, .expYield = 137, .evYield_HP = 2, @@ -6069,15 +5678,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_DAMP, ABILITY_WATER_ABSORB }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6090,8 +5698,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 197, .evYield_HP = 0, @@ -6100,15 +5707,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6121,8 +5727,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 130, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = {TYPE_DARK, TYPE_DARK}, .catchRate = 45, .expYield = 197, .evYield_HP = 0, @@ -6131,15 +5736,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6152,8 +5756,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 85, .baseSpDefense = 42, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = {TYPE_DARK, TYPE_FLYING}, .catchRate = 30, .expYield = 107, .evYield_HP = 0, @@ -6162,15 +5765,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_INSOMNIA, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6183,8 +5785,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 110, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 70, .expYield = 164, .evYield_HP = 0, @@ -6193,15 +5794,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_KINGS_ROCK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6214,8 +5814,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 85, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 147, .evYield_HP = 0, @@ -6224,15 +5823,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6245,8 +5843,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 72, .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 225, .expYield = 61, .evYield_HP = 0, @@ -6255,15 +5852,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -6276,8 +5872,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 33, .baseSpAttack = 33, .baseSpDefense = 58, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 177, .evYield_HP = 2, @@ -6286,15 +5881,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_SHADOW_TAG, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6307,8 +5901,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 90, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_NORMAL, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 149, .evYield_HP = 0, @@ -6317,15 +5910,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_PERSIM_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6338,8 +5930,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 190, .expYield = 60, .evYield_HP = 0, @@ -6348,15 +5939,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_STURDY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6369,8 +5959,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = {TYPE_BUG, TYPE_STEEL}, .catchRate = 75, .expYield = 118, .evYield_HP = 0, @@ -6379,15 +5968,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_STURDY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6400,8 +5988,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 75, .evYield_HP = 1, @@ -6410,15 +5997,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6431,8 +6017,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 35, .baseSpDefense = 65, - .type1 = TYPE_GROUND, - .type2 = TYPE_FLYING, + .types = {TYPE_GROUND, TYPE_FLYING}, .catchRate = 60, .expYield = 108, .evYield_HP = 0, @@ -6441,15 +6026,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6462,8 +6046,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_STEEL, - .type2 = TYPE_GROUND, + .types = {TYPE_STEEL, TYPE_GROUND}, .catchRate = 25, .expYield = 196, .evYield_HP = 0, @@ -6472,15 +6055,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_METAL_COAT, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6493,8 +6075,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 63, .evYield_HP = 0, @@ -6503,15 +6084,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_INTIMIDATE, ABILITY_RUN_AWAY }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6524,8 +6104,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 75, .expYield = 178, .evYield_HP = 0, @@ -6534,15 +6113,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_INTIMIDATE, ABILITY_INTIMIDATE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6555,8 +6133,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = {TYPE_WATER, TYPE_POISON}, .catchRate = 45, .expYield = 100, .evYield_HP = 0, @@ -6565,15 +6142,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6586,8 +6162,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = {TYPE_BUG, TYPE_STEEL}, .catchRate = 25, .expYield = 200, .evYield_HP = 0, @@ -6596,15 +6171,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6617,8 +6191,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 5, .baseSpAttack = 10, .baseSpDefense = 230, - .type1 = TYPE_BUG, - .type2 = TYPE_ROCK, + .types = {TYPE_BUG, TYPE_ROCK}, .catchRate = 190, .expYield = 80, .evYield_HP = 0, @@ -6627,15 +6200,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_BERRY_JUICE, - .item2 = ITEM_BERRY_JUICE, + .itemCommon = ITEM_BERRY_JUICE, + .itemRare = ITEM_BERRY_JUICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_STURDY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6648,8 +6220,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 40, .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_FIGHTING, + .types = {TYPE_BUG, TYPE_FIGHTING}, .catchRate = 45, .expYield = 200, .evYield_HP = 0, @@ -6658,15 +6229,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_GUTS }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6679,8 +6249,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 35, .baseSpDefense = 75, - .type1 = TYPE_DARK, - .type2 = TYPE_ICE, + .types = {TYPE_DARK, TYPE_ICE}, .catchRate = 60, .expYield = 132, .evYield_HP = 0, @@ -6689,15 +6258,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -6710,8 +6278,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 120, .expYield = 124, .evYield_HP = 0, @@ -6720,15 +6287,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PICKUP, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -6741,8 +6307,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 75, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 189, .evYield_HP = 0, @@ -6751,15 +6316,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6772,8 +6336,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 70, .baseSpDefense = 40, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, .expYield = 78, .evYield_HP = 0, @@ -6782,15 +6345,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6803,8 +6365,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_ROCK, + .types = {TYPE_FIRE, TYPE_ROCK}, .catchRate = 75, .expYield = 154, .evYield_HP = 0, @@ -6813,15 +6374,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6834,8 +6394,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ICE, - .type2 = TYPE_GROUND, + .types = {TYPE_ICE, TYPE_GROUND}, .catchRate = 225, .expYield = 78, .evYield_HP = 0, @@ -6844,15 +6403,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ASPEAR_BERRY, - .item2 = ITEM_NONE, + .itemCommon = ITEM_ASPEAR_BERRY, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6865,8 +6423,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_ICE, - .type2 = TYPE_GROUND, + .types = {TYPE_ICE, TYPE_GROUND}, .catchRate = 75, .expYield = 160, .evYield_HP = 1, @@ -6875,15 +6432,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ASPEAR_BERRY, - .item2 = ITEM_NEVER_MELT_ICE, + .itemCommon = ITEM_ASPEAR_BERRY, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6896,8 +6452,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 85, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = {TYPE_WATER, TYPE_ROCK}, .catchRate = 60, .expYield = 113, .evYield_HP = 0, @@ -6906,15 +6461,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_RED_SHARD, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_RED_SHARD, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_HUSTLE, ABILITY_NATURAL_CURE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6927,8 +6481,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 78, .evYield_HP = 0, @@ -6937,15 +6490,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_HUSTLE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6958,8 +6510,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 105, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 164, .evYield_HP = 0, @@ -6968,15 +6519,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6989,8 +6539,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_ICE, - .type2 = TYPE_FLYING, + .types = {TYPE_ICE, TYPE_FLYING}, .catchRate = 45, .expYield = 183, .evYield_HP = 0, @@ -6999,15 +6548,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7020,8 +6568,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 80, .baseSpDefense = 140, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = {TYPE_WATER, TYPE_FLYING}, .catchRate = 25, .expYield = 168, .evYield_HP = 0, @@ -7030,15 +6577,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -7051,8 +6597,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_STEEL, - .type2 = TYPE_FLYING, + .types = {TYPE_STEEL, TYPE_FLYING}, .catchRate = 25, .expYield = 168, .evYield_HP = 0, @@ -7061,15 +6606,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SHARP_BEAK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_STURDY }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7082,8 +6626,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 80, .baseSpDefense = 50, - .type1 = TYPE_DARK, - .type2 = TYPE_FIRE, + .types = {TYPE_DARK, TYPE_FIRE}, .catchRate = 120, .expYield = 114, .evYield_HP = 0, @@ -7092,15 +6635,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -7113,8 +6655,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 110, .baseSpDefense = 80, - .type1 = TYPE_DARK, - .type2 = TYPE_FIRE, + .types = {TYPE_DARK, TYPE_FIRE}, .catchRate = 45, .expYield = 204, .evYield_HP = 0, @@ -7123,15 +6664,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -7144,8 +6684,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_DRAGON, + .types = {TYPE_WATER, TYPE_DRAGON}, .catchRate = 45, .expYield = 207, .evYield_HP = 0, @@ -7154,15 +6693,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_SCALE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7175,8 +6713,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 120, .expYield = 124, .evYield_HP = 1, @@ -7185,15 +6722,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PICKUP, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7206,8 +6742,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 60, .expYield = 189, .evYield_HP = 0, @@ -7216,15 +6751,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STURDY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7237,8 +6771,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 105, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 180, .evYield_HP = 0, @@ -7247,15 +6780,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_UP_GRADE, - .item2 = ITEM_UP_GRADE, + .itemCommon = ITEM_UP_GRADE, + .itemRare = ITEM_UP_GRADE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_TRACE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_TRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7268,8 +6800,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 165, .evYield_HP = 0, @@ -7278,15 +6809,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7299,8 +6829,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 20, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 106, .evYield_HP = 0, @@ -7309,15 +6838,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7330,8 +6858,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 75, .expYield = 91, .evYield_HP = 0, @@ -7340,15 +6867,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -7361,8 +6887,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 138, .evYield_HP = 0, @@ -7371,15 +6896,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7392,8 +6916,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 87, .evYield_HP = 0, @@ -7402,15 +6925,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -7423,8 +6945,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 106, .evYield_HP = 0, @@ -7433,15 +6954,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_STATIC, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -7454,8 +6974,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 83, .baseSpAttack = 70, .baseSpDefense = 55, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 117, .evYield_HP = 0, @@ -7464,15 +6983,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_FLAME_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7485,8 +7003,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 200, .evYield_HP = 0, @@ -7495,15 +7012,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_MOOMOO_MILK, - .item2 = ITEM_MOOMOO_MILK, + .itemCommon = ITEM_MOOMOO_MILK, + .itemRare = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -7516,8 +7032,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 75, .baseSpDefense = 135, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, .expYield = 255, .evYield_HP = 2, @@ -7526,15 +7041,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_LUCKY_EGG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_LUCKY_EGG, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -7547,8 +7061,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 115, .baseSpDefense = 100, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 3, .expYield = 216, .evYield_HP = 0, @@ -7557,15 +7070,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7578,8 +7090,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 90, .baseSpDefense = 75, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 3, .expYield = 217, .evYield_HP = 1, @@ -7588,15 +7099,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7609,8 +7119,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 90, .baseSpDefense = 115, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 3, .expYield = 215, .evYield_HP = 0, @@ -7619,15 +7128,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7640,8 +7148,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 41, .baseSpAttack = 45, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 67, .evYield_HP = 0, @@ -7650,15 +7157,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7671,8 +7177,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 144, .evYield_HP = 0, @@ -7681,15 +7186,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7702,8 +7206,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 61, .baseSpAttack = 95, .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_DARK, + .types = {TYPE_ROCK, TYPE_DARK}, .catchRate = 45, .expYield = 218, .evYield_HP = 0, @@ -7712,15 +7215,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_SAND_STREAM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7733,8 +7235,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 90, .baseSpDefense = 154, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = {TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 3, .expYield = 220, .evYield_HP = 0, @@ -7743,15 +7244,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7764,8 +7264,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 110, .baseSpDefense = 154, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = {TYPE_FIRE, TYPE_FLYING}, .catchRate = 3, .expYield = 220, .evYield_HP = 0, @@ -7774,15 +7273,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7795,8 +7293,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GRASS, + .types = {TYPE_PSYCHIC, TYPE_GRASS}, .catchRate = 45, .expYield = 64, .evYield_HP = 3, @@ -7805,44 +7302,43 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, - [SPECIES_OLD_UNOWN_B] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_C] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_D] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_E] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_F] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_G] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_H] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_I] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_J] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_K] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_L] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_M] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_N] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_O] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_P] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_Q] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_R] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_S] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_T] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_U] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_V] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_W] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_X] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_Y] = OLD_UNOWN_BASE_STATS, - [SPECIES_OLD_UNOWN_Z] = OLD_UNOWN_BASE_STATS, + [SPECIES_OLD_UNOWN_B] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_C] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_D] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_E] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_F] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_G] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_H] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_I] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_J] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_K] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_L] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_M] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_N] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_O] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_P] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_Q] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_R] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_S] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_T] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_U] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_V] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_W] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_X] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_Y] = OLD_UNOWN_SPECIES_INFO, + [SPECIES_OLD_UNOWN_Z] = OLD_UNOWN_SPECIES_INFO, [SPECIES_TREECKO] = { .baseHP = 40, @@ -7851,8 +7347,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 65, .evYield_HP = 0, @@ -7861,15 +7356,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7882,8 +7376,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 141, .evYield_HP = 0, @@ -7892,15 +7385,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7913,8 +7405,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 105, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 208, .evYield_HP = 0, @@ -7923,15 +7414,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_OVERGROW, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7944,8 +7434,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 70, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 65, .evYield_HP = 0, @@ -7954,15 +7443,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7975,8 +7463,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 85, .baseSpDefense = 60, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 142, .evYield_HP = 0, @@ -7985,15 +7472,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8006,8 +7492,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 110, .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 209, .evYield_HP = 0, @@ -8016,15 +7501,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_BLAZE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8037,8 +7521,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 65, .evYield_HP = 0, @@ -8047,15 +7530,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8068,8 +7550,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 45, .expYield = 143, .evYield_HP = 0, @@ -8078,15 +7559,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8099,8 +7579,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 45, .expYield = 210, .evYield_HP = 0, @@ -8109,15 +7588,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_TORRENT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8130,8 +7608,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = {TYPE_DARK, TYPE_DARK}, .catchRate = 255, .expYield = 55, .evYield_HP = 0, @@ -8140,15 +7617,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_PECHA_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8161,8 +7637,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = {TYPE_DARK, TYPE_DARK}, .catchRate = 127, .expYield = 128, .evYield_HP = 0, @@ -8171,15 +7646,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_PECHA_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8192,8 +7666,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 30, .baseSpDefense = 41, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 60, .evYield_HP = 0, @@ -8202,15 +7675,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_ORAN_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PICKUP, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8223,8 +7695,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 50, .baseSpDefense = 61, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 128, .evYield_HP = 0, @@ -8233,15 +7704,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PICKUP, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8254,8 +7724,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 54, .evYield_HP = 1, @@ -8264,15 +7733,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8285,8 +7753,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 120, .expYield = 71, .evYield_HP = 0, @@ -8295,15 +7762,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8316,8 +7782,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 90, .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 161, .evYield_HP = 0, @@ -8326,15 +7791,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8347,8 +7811,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 120, .expYield = 72, .evYield_HP = 0, @@ -8357,15 +7820,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8378,8 +7840,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 90, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 160, .evYield_HP = 0, @@ -8388,15 +7849,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8409,8 +7869,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = {TYPE_WATER, TYPE_GRASS}, .catchRate = 255, .expYield = 74, .evYield_HP = 0, @@ -8419,15 +7878,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8440,8 +7898,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = {TYPE_WATER, TYPE_GRASS}, .catchRate = 120, .expYield = 141, .evYield_HP = 0, @@ -8450,15 +7907,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8471,8 +7927,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = {TYPE_WATER, TYPE_GRASS}, .catchRate = 45, .expYield = 181, .evYield_HP = 0, @@ -8481,15 +7936,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8502,8 +7956,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 255, .expYield = 74, .evYield_HP = 0, @@ -8512,15 +7965,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8533,8 +7985,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 60, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = {TYPE_GRASS, TYPE_DARK}, .catchRate = 120, .expYield = 141, .evYield_HP = 0, @@ -8543,15 +7994,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8564,8 +8014,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 90, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = {TYPE_GRASS, TYPE_DARK}, .catchRate = 45, .expYield = 181, .evYield_HP = 0, @@ -8574,15 +8023,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8595,8 +8043,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_GROUND, + .types = {TYPE_BUG, TYPE_GROUND}, .catchRate = 255, .expYield = 65, .evYield_HP = 0, @@ -8605,15 +8052,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_COMPOUND_EYES, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8626,8 +8072,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 160, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 120, .expYield = 155, .evYield_HP = 0, @@ -8636,15 +8081,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SPEED_BOOST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8657,8 +8101,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_GHOST, + .types = {TYPE_BUG, TYPE_GHOST}, .catchRate = 45, .expYield = 95, .evYield_HP = 2, @@ -8667,15 +8110,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_WONDER_GUARD, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8688,8 +8130,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 200, .expYield = 59, .evYield_HP = 0, @@ -8698,15 +8139,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8719,8 +8159,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 125, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 162, .evYield_HP = 0, @@ -8729,15 +8168,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_GUTS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8750,8 +8188,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 255, .expYield = 65, .evYield_HP = 1, @@ -8760,15 +8197,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8781,8 +8217,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = {TYPE_GRASS, TYPE_FIGHTING}, .catchRate = 90, .expYield = 165, .evYield_HP = 0, @@ -8791,15 +8226,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8812,8 +8246,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 85, .evYield_HP = 0, @@ -8822,15 +8255,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_CHESTO_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -8843,8 +8275,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 30, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = {TYPE_WATER, TYPE_FLYING}, .catchRate = 190, .expYield = 64, .evYield_HP = 0, @@ -8853,15 +8284,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8874,8 +8304,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = {TYPE_WATER, TYPE_FLYING}, .catchRate = 45, .expYield = 164, .evYield_HP = 0, @@ -8884,15 +8313,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8905,8 +8333,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 52, - .type1 = TYPE_BUG, - .type2 = TYPE_WATER, + .types = {TYPE_BUG, TYPE_WATER}, .catchRate = 200, .expYield = 63, .evYield_HP = 0, @@ -8915,15 +8342,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8936,8 +8362,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, .baseSpDefense = 82, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 75, .expYield = 128, .evYield_HP = 0, @@ -8946,15 +8371,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_BUG}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8967,8 +8391,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 125, .expYield = 137, .evYield_HP = 1, @@ -8977,15 +8400,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8998,8 +8420,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 90, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 206, .evYield_HP = 2, @@ -9008,15 +8429,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9029,8 +8449,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 65, .evYield_HP = 0, @@ -9039,15 +8458,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_LEPPA_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -9060,8 +8478,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 138, .evYield_HP = 1, @@ -9070,15 +8487,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_LEPPA_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9091,8 +8507,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 120, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 200, .expYield = 132, .evYield_HP = 0, @@ -9101,15 +8516,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_PERSIM_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_COLOR_CHANGE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9122,8 +8536,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_GROUND, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_GROUND, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 58, .evYield_HP = 0, @@ -9132,15 +8545,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9153,8 +8565,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 70, .baseSpDefense = 120, - .type1 = TYPE_GROUND, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_GROUND, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 189, .evYield_HP = 0, @@ -9163,15 +8574,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9184,8 +8594,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 45, .baseSpDefense = 90, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = {TYPE_ROCK, TYPE_ROCK}, .catchRate = 255, .expYield = 108, .evYield_HP = 0, @@ -9194,15 +8603,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_STURDY, ABILITY_MAGNET_PULL }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9215,8 +8623,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 90, .expYield = 161, .evYield_HP = 0, @@ -9225,15 +8632,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_WHITE_SMOKE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_WHITE_SMOKE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9246,8 +8652,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_DARK, - .type2 = TYPE_GHOST, + .types = {TYPE_DARK, TYPE_GHOST}, .catchRate = 45, .expYield = 98, .evYield_HP = 0, @@ -9256,15 +8661,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9277,8 +8681,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 46, .baseSpDefense = 41, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 190, .expYield = 92, .evYield_HP = 1, @@ -9287,15 +8690,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9308,8 +8710,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 76, .baseSpDefense = 71, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = {TYPE_WATER, TYPE_GROUND}, .catchRate = 75, .expYield = 158, .evYield_HP = 2, @@ -9318,15 +8719,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9339,8 +8739,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 40, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 110, .evYield_HP = 0, @@ -9349,15 +8748,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_HEART_SCALE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_HEART_SCALE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -9370,8 +8768,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 50, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 205, .expYield = 111, .evYield_HP = 0, @@ -9380,15 +8777,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9401,8 +8797,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 90, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = {TYPE_WATER, TYPE_DARK}, .catchRate = 155, .expYield = 161, .evYield_HP = 0, @@ -9411,15 +8806,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9432,8 +8826,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 10, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 61, .evYield_HP = 0, @@ -9442,15 +8835,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9463,8 +8855,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 100, .baseSpDefense = 125, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 213, .evYield_HP = 0, @@ -9473,15 +8864,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_MARVEL_SCALE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -9494,8 +8884,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 20, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = {TYPE_WATER, TYPE_DARK}, .catchRate = 225, .expYield = 88, .evYield_HP = 0, @@ -9504,15 +8893,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_ROUGH_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9525,8 +8913,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = {TYPE_WATER, TYPE_DARK}, .catchRate = 60, .expYield = 175, .evYield_HP = 0, @@ -9535,15 +8922,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_ROUGH_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9556,8 +8942,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 10, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, .expYield = 73, .evYield_HP = 0, @@ -9566,15 +8951,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SOFT_SAND, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9587,8 +8971,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_DRAGON, + .types = {TYPE_GROUND, TYPE_DRAGON}, .catchRate = 120, .expYield = 126, .evYield_HP = 0, @@ -9597,15 +8980,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_LEVITATE, ABILITY_LEVITATE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9618,8 +9000,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_DRAGON, + .types = {TYPE_GROUND, TYPE_DRAGON}, .catchRate = 45, .expYield = 197, .evYield_HP = 0, @@ -9628,15 +9009,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = { ABILITY_LEVITATE, ABILITY_LEVITATE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9649,8 +9029,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 87, .evYield_HP = 1, @@ -9659,15 +9038,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_THICK_FAT, ABILITY_GUTS }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9680,8 +9058,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 200, .expYield = 184, .evYield_HP = 2, @@ -9690,15 +9067,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_KINGS_ROCK, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_THICK_FAT, ABILITY_GUTS }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9711,8 +9087,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 40, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 104, .evYield_HP = 0, @@ -9721,15 +9096,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STATIC, ABILITY_LIGHTNING_ROD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9742,8 +9116,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 105, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 168, .evYield_HP = 0, @@ -9752,15 +9125,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_STATIC, ABILITY_LIGHTNING_ROD }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9773,8 +9145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_FIRE, - .type2 = TYPE_GROUND, + .types = {TYPE_FIRE, TYPE_GROUND}, .catchRate = 255, .expYield = 88, .evYield_HP = 0, @@ -9783,15 +9154,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_RAWST_BERRY, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9804,8 +9174,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 105, .baseSpDefense = 75, - .type1 = TYPE_FIRE, - .type2 = TYPE_GROUND, + .types = {TYPE_FIRE, TYPE_GROUND}, .catchRate = 150, .expYield = 175, .evYield_HP = 0, @@ -9814,15 +9183,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_RAWST_BERRY, - .item2 = ITEM_RAWST_BERRY, + .itemCommon = ITEM_RAWST_BERRY, + .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9835,8 +9203,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 55, .baseSpDefense = 50, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = {TYPE_ICE, TYPE_WATER}, .catchRate = 255, .expYield = 75, .evYield_HP = 1, @@ -9845,15 +9212,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9866,8 +9232,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 75, .baseSpDefense = 70, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = {TYPE_ICE, TYPE_WATER}, .catchRate = 120, .expYield = 128, .evYield_HP = 2, @@ -9876,15 +9241,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9897,8 +9261,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 90, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = {TYPE_ICE, TYPE_WATER}, .catchRate = 45, .expYield = 192, .evYield_HP = 3, @@ -9907,15 +9270,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9928,8 +9290,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 85, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 97, .evYield_HP = 0, @@ -9938,15 +9299,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_POISON_BARB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SAND_VEIL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9959,8 +9319,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = {TYPE_GRASS, TYPE_DARK}, .catchRate = 60, .expYield = 177, .evYield_HP = 0, @@ -9969,15 +9328,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_POISON_BARB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_SAND_VEIL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9990,8 +9348,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = {TYPE_ICE, TYPE_ICE}, .catchRate = 190, .expYield = 74, .evYield_HP = 1, @@ -10000,15 +9357,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10021,8 +9377,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = {TYPE_ICE, TYPE_ICE}, .catchRate = 75, .expYield = 187, .evYield_HP = 2, @@ -10031,15 +9386,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NEVER_MELT_ICE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10052,8 +9406,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 85, - .type1 = TYPE_ROCK, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 150, .evYield_HP = 0, @@ -10062,15 +9415,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_MOON_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10083,8 +9435,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 150, .evYield_HP = 0, @@ -10093,15 +9444,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SUN_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10114,8 +9464,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 20, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 150, .expYield = 33, .evYield_HP = 1, @@ -10124,15 +9473,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_THICK_FAT, ABILITY_HUGE_POWER }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10145,8 +9493,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 89, .evYield_HP = 0, @@ -10155,15 +9502,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_OWN_TEMPO }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10176,8 +9522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 90, .baseSpDefense = 110, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 164, .evYield_HP = 0, @@ -10186,15 +9531,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_THICK_FAT, ABILITY_OWN_TEMPO }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -10207,8 +9551,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 200, .expYield = 120, .evYield_HP = 0, @@ -10217,15 +9560,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_PLUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_PLUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10238,8 +9580,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 75, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 200, .expYield = 120, .evYield_HP = 0, @@ -10248,15 +9589,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_MINUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_MINUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10269,8 +9609,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = {TYPE_STEEL, TYPE_STEEL}, .catchRate = 45, .expYield = 98, .evYield_HP = 0, @@ -10279,15 +9618,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = { ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10300,8 +9638,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_FIGHTING, TYPE_PSYCHIC}, .catchRate = 180, .expYield = 91, .evYield_HP = 0, @@ -10310,15 +9647,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_PURE_POWER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10331,8 +9667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_FIGHTING, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 153, .evYield_HP = 0, @@ -10341,15 +9676,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_PURE_POWER, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10362,8 +9696,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 74, .evYield_HP = 0, @@ -10372,15 +9705,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10393,8 +9725,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 70, .baseSpDefense = 105, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = {TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 188, .evYield_HP = 0, @@ -10403,15 +9734,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10424,8 +9754,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 23, .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 125, .expYield = 44, .evYield_HP = 1, @@ -10434,15 +9763,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_SHADOW_TAG, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10455,8 +9783,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 30, .baseSpDefense = 90, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 190, .expYield = 97, .evYield_HP = 0, @@ -10465,15 +9792,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10486,8 +9812,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 60, .baseSpDefense = 130, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 90, .expYield = 179, .evYield_HP = 0, @@ -10496,15 +9821,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10517,8 +9841,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 150, .expYield = 152, .evYield_HP = 0, @@ -10527,15 +9850,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_POISON_BARB, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_NATURAL_CURE, ABILITY_POISON_POINT }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -10548,8 +9870,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 83, .evYield_HP = 1, @@ -10558,15 +9879,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_TRUANT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10579,8 +9899,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 120, .expYield = 126, .evYield_HP = 0, @@ -10589,15 +9908,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -10610,8 +9928,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 95, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 210, .evYield_HP = 3, @@ -10620,15 +9937,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_TRUANT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10641,8 +9957,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 43, .baseSpDefense = 53, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 225, .expYield = 75, .evYield_HP = 1, @@ -10651,15 +9966,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10672,8 +9986,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 73, .baseSpDefense = 83, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 75, .expYield = 168, .evYield_HP = 2, @@ -10682,15 +9995,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -10703,8 +10015,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 72, .baseSpDefense = 87, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = {TYPE_GRASS, TYPE_FLYING}, .catchRate = 200, .expYield = 169, .evYield_HP = 2, @@ -10713,15 +10024,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, - .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10734,8 +10044,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 28, .baseSpAttack = 51, .baseSpDefense = 23, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 68, .evYield_HP = 1, @@ -10744,15 +10053,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_CHESTO_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10765,8 +10073,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 71, .baseSpDefense = 43, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 120, .expYield = 126, .evYield_HP = 2, @@ -10775,15 +10082,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_CHESTO_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10796,8 +10102,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 91, .baseSpDefense = 63, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 184, .evYield_HP = 3, @@ -10806,15 +10111,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_CHESTO_BERRY, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10827,8 +10131,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 74, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 142, .evYield_HP = 0, @@ -10837,15 +10140,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_BLUE_SHARD, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_BLUE_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10858,8 +10160,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 94, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 178, .evYield_HP = 0, @@ -10868,15 +10169,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10889,8 +10189,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 114, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 178, .evYield_HP = 0, @@ -10899,15 +10198,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10920,8 +10218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 75, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = {TYPE_DARK, TYPE_DARK}, .catchRate = 30, .expYield = 174, .evYield_HP = 0, @@ -10930,15 +10227,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -10951,8 +10247,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 63, .baseSpDefense = 33, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 225, .expYield = 97, .evYield_HP = 0, @@ -10961,15 +10256,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_INSOMNIA, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10982,8 +10276,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 83, .baseSpDefense = 63, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 179, .evYield_HP = 0, @@ -10992,15 +10285,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_SPELL_TAG, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_INSOMNIA, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11013,8 +10305,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 100, .baseSpDefense = 60, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 165, .evYield_HP = 0, @@ -11023,15 +10314,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_SHED_SKIN, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -11044,8 +10334,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 165, .evYield_HP = 0, @@ -11054,15 +10343,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = { ABILITY_IMMUNITY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -11075,8 +10363,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = {TYPE_WATER, TYPE_ROCK}, .catchRate = 25, .expYield = 198, .evYield_HP = 1, @@ -11085,15 +10372,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_GREEN_SHARD, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_GREEN_SHARD, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, - .abilities = { ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11106,8 +10392,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = {TYPE_STEEL, TYPE_ROCK}, .catchRate = 180, .expYield = 96, .evYield_HP = 0, @@ -11116,15 +10401,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11137,8 +10421,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = {TYPE_STEEL, TYPE_ROCK}, .catchRate = 90, .expYield = 152, .evYield_HP = 0, @@ -11147,15 +10430,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11168,8 +10450,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = {TYPE_STEEL, TYPE_ROCK}, .catchRate = 45, .expYield = 205, .evYield_HP = 0, @@ -11178,15 +10459,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, - .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD }, + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11199,8 +10479,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 145, .evYield_HP = 1, @@ -11209,15 +10488,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, + .itemCommon = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_FORECAST, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_FORECAST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11230,8 +10508,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 47, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 150, .expYield = 146, .evYield_HP = 0, @@ -11240,15 +10517,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_ILLUMINATE, ABILITY_SWARM }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11261,8 +10537,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 73, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 150, .expYield = 146, .evYield_HP = 0, @@ -11271,15 +10546,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11292,8 +10566,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 61, .baseSpDefense = 87, - .type1 = TYPE_ROCK, - .type2 = TYPE_GRASS, + .types = {TYPE_ROCK, TYPE_GRASS}, .catchRate = 45, .expYield = 121, .evYield_HP = 0, @@ -11302,15 +10575,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11323,8 +10595,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 81, .baseSpDefense = 107, - .type1 = TYPE_ROCK, - .type2 = TYPE_GRASS, + .types = {TYPE_ROCK, TYPE_GRASS}, .catchRate = 45, .expYield = 201, .evYield_HP = 0, @@ -11333,15 +10604,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11354,8 +10624,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_BUG, + .types = {TYPE_ROCK, TYPE_BUG}, .catchRate = 45, .expYield = 119, .evYield_HP = 0, @@ -11364,15 +10633,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_BATTLE_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11385,8 +10653,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_ROCK, - .type2 = TYPE_BUG, + .types = {TYPE_ROCK, TYPE_BUG}, .catchRate = 45, .expYield = 200, .evYield_HP = 0, @@ -11395,15 +10662,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, - .abilities = { ABILITY_BATTLE_ARMOR, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11416,8 +10682,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 35, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 235, .expYield = 70, .evYield_HP = 0, @@ -11426,15 +10691,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_TRACE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11447,8 +10711,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 120, .expYield = 140, .evYield_HP = 0, @@ -11457,15 +10720,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_TRACE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11478,8 +10740,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 125, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 208, .evYield_HP = 0, @@ -11488,15 +10749,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_SYNCHRONIZE, ABILITY_TRACE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11509,8 +10769,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 30, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = {TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 89, .evYield_HP = 0, @@ -11519,15 +10778,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_SCALE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11540,8 +10798,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = {TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 144, .evYield_HP = 0, @@ -11550,15 +10807,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_SCALE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_ROCK_HEAD, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11571,8 +10827,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 110, .baseSpDefense = 80, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = {TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 218, .evYield_HP = 0, @@ -11581,15 +10836,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_DRAGON_SCALE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, - .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11602,8 +10856,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 35, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 103, .evYield_HP = 0, @@ -11612,15 +10865,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_METAL_COAT, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11633,8 +10885,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 153, .evYield_HP = 0, @@ -11643,15 +10894,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_METAL_COAT, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11664,8 +10914,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 90, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 210, .evYield_HP = 0, @@ -11674,15 +10923,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_METAL_COAT, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11695,8 +10943,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = {TYPE_ROCK, TYPE_ROCK}, .catchRate = 3, .expYield = 217, .evYield_HP = 0, @@ -11705,15 +10952,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11726,8 +10972,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 100, .baseSpDefense = 200, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = {TYPE_ICE, TYPE_ICE}, .catchRate = 3, .expYield = 216, .evYield_HP = 0, @@ -11736,15 +10981,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11757,8 +11001,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 75, .baseSpDefense = 150, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = {TYPE_STEEL, TYPE_STEEL}, .catchRate = 3, .expYield = 215, .evYield_HP = 0, @@ -11767,15 +11010,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11788,8 +11030,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 140, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 5, .expYield = 218, .evYield_HP = 0, @@ -11798,15 +11039,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_DRIZZLE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11819,8 +11059,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 90, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 5, .expYield = 218, .evYield_HP = 0, @@ -11829,15 +11068,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_DROUGHT, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -11850,8 +11088,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 150, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = {TYPE_DRAGON, TYPE_FLYING}, .catchRate = 3, .expYield = 220, .evYield_HP = 0, @@ -11860,15 +11097,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_AIR_LOCK, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11881,8 +11117,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 110, .baseSpDefense = 130, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_DRAGON, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 211, .evYield_HP = 0, @@ -11891,15 +11126,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -11912,8 +11146,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 110, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_DRAGON, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 211, .evYield_HP = 0, @@ -11922,15 +11155,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11943,8 +11175,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 215, .evYield_HP = 3, @@ -11953,15 +11184,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_STAR_PIECE, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STAR_PIECE, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_SERENE_GRACE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -11974,8 +11204,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 150, .baseSpAttack = 150, .baseSpDefense = 50, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 215, .evYield_HP = 0, @@ -11984,15 +11213,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = { ABILITY_PRESSURE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -12005,8 +11233,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 147, .evYield_HP = 0, @@ -12015,15 +11242,14 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_NONE, - .item2 = ITEM_NONE, + .itemCommon = ITEM_NONE, + .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = { ABILITY_LEVITATE, ABILITY_NONE }, + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, diff --git a/src/daycare.c b/src/daycare.c index 6780bcde4..adf754425 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1092,13 +1092,13 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) u8 metLocation; u8 isEgg; - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); if (setHotSpringsLocation) @@ -1119,13 +1119,13 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * u8 language; personality = daycare->offspringPersonality | (Random() << 16); - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); } @@ -1284,8 +1284,8 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) trainerIds[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_OT_ID); personality = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_PERSONALITY); genders[i] = GetGenderFromSpeciesAndPersonality(species[i], personality); - eggGroups[i][0] = gBaseStats[species[i]].eggGroup1; - eggGroups[i][1] = gBaseStats[species[i]].eggGroup2; + eggGroups[i][0] = gSpeciesInfo[species[i]].eggGroups[0]; + eggGroups[i][1] = gSpeciesInfo[species[i]].eggGroups[1]; } // check unbreedable egg group @@ -1594,42 +1594,34 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isEventLegal; - u16 moves[4]; + u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter; + u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; species = GetMonData(egg, MON_DATA_SPECIES); - for (i = 0; i < 4; i++) - { + for (i = 0; i < MAX_MON_MOVES; i++) moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); - } personality = GetMonData(egg, MON_DATA_PERSONALITY); for (i = 0; i < NUM_STATS; i++) - { ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } // language = GetMonData(egg, MON_DATA_LANGUAGE); gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isEventLegal = GetMonData(egg, MON_DATA_EVENT_LEGAL); + isModernFatefulEncounter = GetMonData(egg, MON_DATA_MODERN_FATEFUL_ENCOUNTER); - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0); + CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); - for (i = 0; i < 4; i++) - { + for (i = 0; i < MAX_MON_MOVES; i++) SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]); - } for (i = 0; i < NUM_STATS; i++) - { SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]); - } language = GAME_LANGUAGE; SetMonData(temp, MON_DATA_LANGUAGE, &language); @@ -1639,7 +1631,7 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(temp, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); *egg = *temp; } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 41d5d6b92..a740bda86 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2914,7 +2914,7 @@ void IsDodrioInParty(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_DODRIO) { gSpecialVar_Result = TRUE; return; diff --git a/src/field_poison.c b/src/field_poison.c index 34640489e..02ad5574c 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -12,7 +12,7 @@ static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { - u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + u16 species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_NONE || species == SPECIES_EGG) return FALSE; return TRUE; diff --git a/src/field_specials.c b/src/field_specials.c index 872c5007d..2d360cfa6 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -199,7 +199,7 @@ bool8 PlayerHasGrassPokemonInParty(void) ) { species = GetMonData(pokemon, MON_DATA_SPECIES); - if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS) + if (gSpeciesInfo[species].types[0] == TYPE_GRASS || gSpeciesInfo[species].types[1] == TYPE_GRASS) return TRUE; } } @@ -423,7 +423,7 @@ bool8 IsStarterFirstStageInParty(void) u8 i; for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == species) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) == species) return TRUE; } return FALSE; @@ -515,7 +515,7 @@ u8 GetLeadMonIndex(void) for (i = 0; i < partyCount; i++) { pokemon = &gPlayerParty[i]; - if (GetMonData(pokemon, MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(pokemon, MON_DATA_SPECIES2, NULL) != SPECIES_NONE) + if (GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG && GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE) return i; } return 0; @@ -523,7 +523,7 @@ u8 GetLeadMonIndex(void) u16 GetPartyMonSpecies(void) { - return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); + return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES_OR_EGG, NULL); } bool8 IsMonOTNameNotPlayers(void) @@ -1716,7 +1716,7 @@ void UpdateTrainerCardPhotoIcons(void) partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - species[i] = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL); + species[i] = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL); personality[i] = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, NULL); } VarSet(VAR_TRAINER_CARD_MON_ICON_1, SpeciesToMailSpecies(species[0], personality[0])); @@ -1768,7 +1768,7 @@ bool8 DoesPlayerPartyContainSpecies(void) u8 i; for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == gSpecialVar_0x8004) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) == gSpecialVar_0x8004) return TRUE; } return FALSE; @@ -2232,7 +2232,7 @@ bool8 CapeBrinkGetMoveToTeachLeadPokemon(void) gSpecialVar_0x8007 = leadMonSlot; for (i = 0; i < NELEMS(sCapeBrinkCompatibleSpecies); i++) { - if (GetMonData(&gPlayerParty[leadMonSlot], MON_DATA_SPECIES2, NULL) == sCapeBrinkCompatibleSpecies[i]) + if (GetMonData(&gPlayerParty[leadMonSlot], MON_DATA_SPECIES_OR_EGG, NULL) == sCapeBrinkCompatibleSpecies[i]) { tutorMonId = i; break; @@ -2500,7 +2500,7 @@ bool8 PlayerPartyContainsSpeciesWithPlayerID(void) u8 i; for (i = 0; i < playerCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == gSpecialVar_0x8004 + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) == gSpecialVar_0x8004 && GetPlayerTrainerId() == GetMonData(&gPlayerParty[i], MON_DATA_OT_ID, NULL)) return TRUE; } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 72ba97b47..d408b528e 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -390,7 +390,7 @@ static void Task_Hof_InitMonData(u8 taskId) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE) { - sHofMonPtr[0].mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + sHofMonPtr[0].mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr[0].mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr[0].mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr[0].mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); diff --git a/src/item_use.c b/src/item_use.c index 0070c5631..ce659673e 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -923,7 +923,7 @@ void ItemUse_SetQuestLogEvent(u8 eventId, struct Pokemon *pokemon, u16 itemId, u questLog->itemId = itemId; questLog->param = param; if (pokemon != NULL) - questLog->species = GetMonData(pokemon, MON_DATA_SPECIES2); + questLog->species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG); else questLog->species = 0xFFFF; SetQuestLogEvent(eventId, (void *)questLog); diff --git a/src/load_save.c b/src/load_save.c index 49c2cec88..4d33ceeb8 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -3,6 +3,7 @@ #include "gba/flash_internal.h" #include "load_save.h" #include "pokemon.h" +#include "pokemon_storage_system.h" #include "random.h" #include "item.h" #include "save_location.h" diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index edcbdb722..d50c09484 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -242,7 +242,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) void *mailPtr = (void *)(data + sizeof(struct Pokemon)); pokemon = *(struct Pokemon *)pokemonPtr; - species = GetMonData(&pokemon, MON_DATA_SPECIES2); + species = GetMonData(&pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1); diff --git a/src/oak_speech.c b/src/oak_speech.c index d5b2ba7ba..4d2e4ccb8 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -722,7 +722,7 @@ static void Task_NewGameScene(u8 taskId) break; case 1: sOakSpeechResources = AllocZeroed(sizeof(*sOakSpeechResources)); - OakSpeechNidoranFSetup(1, TRUE); + CreateMonSpritesGfxManager(1, 1); break; case 2: SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -1775,7 +1775,7 @@ static void Task_OakSpeech_WaitForFade(u8 taskId) static void Task_OakSpeech_FreeResources(u8 taskId) { FreeAllWindowBuffers(); - OakSpeechNidoranFFreeResources(); + DestroyMonSpritesGfxManager(); Free(sOakSpeechResources); sOakSpeechResources = NULL; gTextFlags.canABSpeedUpPrint = FALSE; @@ -1876,7 +1876,7 @@ static void CreateNidoranFSprite(u8 taskId) { u8 spriteId; - DecompressPicFromTable(&gMonFrontPicTable[SPECIES_NIDORAN_F], OakSpeechNidoranFGetBuffer(0), SPECIES_NIDORAN_F); + DecompressPicFromTable(&gMonFrontPicTable[SPECIES_NIDORAN_F], MonSpritesGfxManager_GetSpritePtr(0), SPECIES_NIDORAN_F); LoadCompressedSpritePaletteUsingHeap(&gMonPaletteTable[SPECIES_NIDORAN_F]); SetMultiuseSpriteTemplateToPokemon(SPECIES_NIDORAN_F, 0); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 96, 96, 1); diff --git a/src/party_menu.c b/src/party_menu.c index f192cd2e5..cf1984c84 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -2652,7 +2652,7 @@ static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *m // If in a multi battle, show partners Deoxys icon as Normal forme if (IsMultiBattle() == TRUE && gMain.inBattle) handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE; - species2 = GetMonData(mon, MON_DATA_SPECIES2); + species2 = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys); UpdatePartyMonHPBar(menuBox->monSpriteId, mon); } @@ -3357,8 +3357,8 @@ static void SetSwitchedPartyOrderQuestLogEvent(void) { u16 *buffer = Alloc(2 * sizeof(u16)); - buffer[0] = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); - buffer[1] = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES2); + buffer[0] = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); + buffer[1] = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES_OR_EGG); SetQuestLogEvent(QL_EVENT_SWITCHED_PARTY_ORDER, buffer); Free(buffer); } @@ -3847,11 +3847,11 @@ static void CursorCB_Store(u8 taskId) // Register mon for the Trading Board in Union Room static void CursorCB_Register(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isModernFatefulEncounter)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3874,10 +3874,10 @@ static void CursorCB_Register(u8 taskId) static void CursorCB_Trade1(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isModernFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) { @@ -4133,7 +4133,7 @@ static void SetSwappedHeldItemQuestLogEvent(struct Pokemon *mon, u16 item, u16 i { u16 *ptr = Alloc(4 * sizeof(u16)); - ptr[2] = GetMonData(mon, MON_DATA_SPECIES2); + ptr[2] = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); ptr[0] = item; ptr[1] = item2; if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) @@ -4154,7 +4154,7 @@ static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove) { struct FieldMoveWarpParams *ptr = Alloc(sizeof(*ptr)); - ptr->species = GetMonData(mon, MON_DATA_SPECIES2); + ptr->species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); ptr->fieldMove = fieldMove; switch (ptr->fieldMove) { @@ -4187,7 +4187,7 @@ void SetUsedFlyQuestLogEvent(const u8 *healLocCtrlData) mapHeader = Overworld_GetMapHeaderByGroupAndId(ptr->mapGroup, ptr->mapNum); Free(ptr); ptr2 = Alloc(4); - ptr2->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES2); + ptr2->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES_OR_EGG); ptr2->fieldMove = FIELD_MOVE_FLY; ptr2->regionMapSectionId = mapHeader->regionMapSectionId; SetQuestLogEvent(QL_EVENT_USED_FIELD_MOVE, (u16 *)ptr2); @@ -5342,7 +5342,7 @@ u8 GetItemEffectType(u16 item) itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else itemEffect = gItemEffectTable[item - ITEM_POTION]; - if ((itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_MIST)) + if ((itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; else if (itemEffect[0] & ITEM0_SACRED_ASH) return ITEM_EFFECT_SACRED_ASH; diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 6a3f5d884..53a6485d8 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -1555,10 +1555,10 @@ static void ItemPrintFunc_OrderedListMenu(u8 windowId, u32 itemId, u8 y) if (caught) { BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, 0, 0x28, y); - type1 = gBaseStats[species].type1; + type1 = gSpeciesInfo[species].types[0]; BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, type1 + 1, 0x78, y); - if (type1 != gBaseStats[species].type2) - BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, gBaseStats[species].type2 + 1, 0x98, y); + if (type1 != gSpeciesInfo[species].types[1]) + BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, gSpeciesInfo[species].types[1] + 1, 0x98, y); } } @@ -3091,9 +3091,9 @@ u8 DexScreen_DrawMonAreaPage(void) if (monIsCaught) { - BlitMoveInfoIcon(sPokedexScreenData->windowIds[12], 1 + gBaseStats[species].type1, 0, 1); - if (gBaseStats[species].type1 != gBaseStats[species].type2) - BlitMoveInfoIcon(sPokedexScreenData->windowIds[12], 1 + gBaseStats[species].type2, 32, 1); + BlitMoveInfoIcon(sPokedexScreenData->windowIds[12], 1 + gSpeciesInfo[species].types[0], 0, 1); + if (gSpeciesInfo[species].types[0] != gSpeciesInfo[species].types[1]) + BlitMoveInfoIcon(sPokedexScreenData->windowIds[12], 1 + gSpeciesInfo[species].types[1], 32, 1); } PutWindowTilemap(sPokedexScreenData->windowIds[12]); CopyWindowToVram(sPokedexScreenData->windowIds[12], COPYWIN_GFX); diff --git a/src/pokemon.c b/src/pokemon.c index 172f51ad5..330ae3dea 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -23,6 +23,7 @@ #include "overworld.h" #include "party_menu.h" #include "field_specials.h" +#include "berry.h" #include "constants/items.h" #include "constants/item_effects.h" #include "constants/hoenn_cries.h" @@ -40,16 +41,16 @@ #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name #define HOENN_TO_NATIONAL(name) [HOENN_DEX_##name - 1] = NATIONAL_DEX_##name -struct OakSpeechNidoranFStruct +struct MonSpritesGfxManager { - u8 spriteCount:4; + u8 numSprites:4; u8 battlePosition:4; - u8 frameCount; - u8 enable; - bool8 enable2; - u32 sizePerSprite; - u8 *dataBuffer; - u8 **bufferPtrs; + u8 numFrames; + u8 active; + u8 mode; + u32 dataSize; + u8 *spriteBuffer; + u8 **spritePointers; struct SpriteTemplate *templates; struct SpriteFrameImage *frameImages; }; @@ -60,7 +61,7 @@ EWRAM_DATA u8 gEnemyPartyCount = 0; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {}; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; -static EWRAM_DATA struct OakSpeechNidoranFStruct *sOakSpeechNidoranResources = NULL; +static EWRAM_DATA struct MonSpritesGfxManager *sMonSpritesGfxManager = NULL; static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType); static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId); @@ -98,7 +99,8 @@ static const struct CombinedMove sCombinedMoves[2] = // NOTE: The order of the elements in the 3 arrays below is irrelevant. // To reorder the pokedex, see the values in include/constants/pokedex.h. -static const u16 sSpeciesToHoennPokedexNum[] = // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) + // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) +static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] = { SPECIES_TO_HOENN(BULBASAUR), SPECIES_TO_HOENN(IVYSAUR), @@ -513,7 +515,8 @@ static const u16 sSpeciesToHoennPokedexNum[] = // Assigns all species to the Hoe SPECIES_TO_HOENN(CHIMECHO), }; -static const u16 sSpeciesToNationalPokedexNum[] = // Assigns all species to the National Dex Index (Summary No. for National Dex) + // Assigns all species to the National Dex Index (Summary No. for National Dex) +static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = { SPECIES_TO_NATIONAL(BULBASAUR), SPECIES_TO_NATIONAL(IVYSAUR), @@ -928,7 +931,8 @@ static const u16 sSpeciesToNationalPokedexNum[] = // Assigns all species to the SPECIES_TO_NATIONAL(CHIMECHO), }; -static const u16 sHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) +// Assigns all Hoenn Dex Indexes to a National Dex Index +static const u16 sHoennToNationalOrder[NUM_SPECIES - 1] = { HOENN_TO_NATIONAL(TREECKO), HOENN_TO_NATIONAL(GROVYLE), @@ -1345,54 +1349,53 @@ static const u16 sHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using static const struct SpindaSpot sSpindaSpotGraphics[] = { - {16, 7, INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, - {40, 8, INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, - {22, 25, INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, - {34, 26, INCBIN_U16("graphics/spinda_spots/spot_3.bin")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")} }; #include "data/pokemon/item_effects.h" -static const s8 sNatureStatTable[][5] = -{ - // Atk Def Spd Sp.Atk Sp.Def - { 0, 0, 0, 0, 0}, // Hardy - { +1, -1, 0, 0, 0}, // Lonely - { +1, 0, -1, 0, 0}, // Brave - { +1, 0, 0, -1, 0}, // Adamant - { +1, 0, 0, 0, -1}, // Naughty - { -1, +1, 0, 0, 0}, // Bold - { 0, 0, 0, 0, 0}, // Docile - { 0, +1, -1, 0, 0}, // Relaxed - { 0, +1, 0, -1, 0}, // Impish - { 0, +1, 0, 0, -1}, // Lax - { -1, 0, +1, 0, 0}, // Timid - { 0, -1, +1, 0, 0}, // Hasty - { 0, 0, 0, 0, 0}, // Serious - { 0, 0, +1, -1, 0}, // Jolly - { 0, 0, +1, 0, -1}, // Naive - { -1, 0, 0, +1, 0}, // Modest - { 0, -1, 0, +1, 0}, // Mild - { 0, 0, -1, +1, 0}, // Quiet - { 0, 0, 0, 0, 0}, // Bashful - { 0, 0, 0, +1, -1}, // Rash - { -1, 0, 0, 0, +1}, // Calm - { 0, -1, 0, 0, +1}, // Gentle - { 0, 0, -1, 0, +1}, // Sassy - { 0, 0, 0, -1, +1}, // Careful - { 0, 0, 0, 0, 0}, // Quirky +static const s8 sNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = +{ // Attack Defense Speed Sp.Atk Sp.Def + [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, + [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, + [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, + [NATURE_ADAMANT] = { +1, 0, 0, -1, 0 }, + [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 }, + [NATURE_BOLD] = { -1, +1, 0, 0, 0 }, + [NATURE_DOCILE] = { 0, 0, 0, 0, 0 }, + [NATURE_RELAXED] = { 0, +1, -1, 0, 0 }, + [NATURE_IMPISH] = { 0, +1, 0, -1, 0 }, + [NATURE_LAX] = { 0, +1, 0, 0, -1 }, + [NATURE_TIMID] = { -1, 0, +1, 0, 0 }, + [NATURE_HASTY] = { 0, -1, +1, 0, 0 }, + [NATURE_SERIOUS] = { 0, 0, 0, 0, 0 }, + [NATURE_JOLLY] = { 0, 0, +1, -1, 0 }, + [NATURE_NAIVE] = { 0, 0, +1, 0, -1 }, + [NATURE_MODEST] = { -1, 0, 0, +1, 0 }, + [NATURE_MILD] = { 0, -1, 0, +1, 0 }, + [NATURE_QUIET] = { 0, 0, -1, +1, 0 }, + [NATURE_BASHFUL] = { 0, 0, 0, 0, 0 }, + [NATURE_RASH] = { 0, 0, 0, +1, -1 }, + [NATURE_CALM] = { -1, 0, 0, 0, +1 }, + [NATURE_GENTLE] = { 0, -1, 0, 0, +1 }, + [NATURE_SASSY] = { 0, 0, -1, 0, +1 }, + [NATURE_CAREFUL] = { 0, 0, 0, -1, +1 }, + [NATURE_QUIRKY] = { 0, 0, 0, 0, 0 }, }; #include "data/pokemon/tmhm_learnsets.h" #include "data/pokemon/trainer_class_lookups.h" #include "data/pokemon/cry_ids.h" #include "data/pokemon/experience_tables.h" -#include "data/pokemon/base_stats.h" +#include "data/pokemon/species_info.h" #include "data/pokemon/level_up_learnsets.h" #include "data/pokemon/evolution.h" #include "data/pokemon/level_up_learnset_pointers.h" -static const s8 sPokeblockFlavorCompatibilityTable[] = +static const s8 sPokeblockFlavorCompatibilityTable[NUM_NATURES * FLAVOR_COUNT] = { // Cool, Beauty, Cute, Smart, Tough 0, 0, 0, 0, 0, // Hardy @@ -1422,32 +1425,38 @@ static const s8 sPokeblockFlavorCompatibilityTable[] = 0, 0, 0, 0, 0 // Quirky }; -const u8 gPPUpGetMask[] = { 0x03, 0x0c, 0x30, 0xc0 }; // Masks for getting PP Up count, also PP Max values +#define PP_UP_SHIFTS(val) val, (val) << 2, (val) << 4, (val) << 6 +#define PP_UP_SHIFTS_INV(val) (u8)~(val), (u8)~((val) << 2), (u8)~((val) << 4), (u8)~((val) << 6) -const u8 gPPUpSetMask[] = { 0xfc, 0xf3, 0xcf, 0x3f }; // Masks for setting PP Up count +// PP Up bonuses are stored for a Pokémon as a single byte. +// There are 2 bits (a value 0-3) for each move slot that +// represent how many PP Ups have been applied. +// The following arrays take a move slot id and return: +// gPPUpGetMask - A mask to get the number of PP Ups applied to that move slot +// gPPUpClearMask - A mask to clear the number of PP Ups applied to that move slot +// gPPUpAddValues - A value to add to the PP Bonuses byte to apply 1 PP Up to that move slot +const u8 gPPUpGetMask[MAX_MON_MOVES] = {PP_UP_SHIFTS(3)}; +const u8 gPPUpClearMask[MAX_MON_MOVES] = {PP_UP_SHIFTS_INV(3)}; +const u8 gPPUpAddValues[MAX_MON_MOVES] = {PP_UP_SHIFTS(1)}; -const u8 gPPUpAddMask[] = { 0x01, 0x04, 0x10, 0x40 }; // Values added to PP Up count - -const u8 gStatStageRatios[][2] = +const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2] = { - { 10, 40 }, - { 10, 35 }, - { 10, 30 }, - { 10, 25 }, - { 10, 20 }, - { 10, 15 }, - { 10, 10 }, - { 15, 10 }, - { 20, 10 }, - { 25, 10 }, - { 30, 10 }, - { 35, 10 }, - { 40, 10 }, - { 138, 174 }, - { 108, 120 }, + {10, 40}, // -6, MIN_STAT_STAGE + {10, 35}, // -5 + {10, 30}, // -4 + {10, 25}, // -3 + {10, 20}, // -2 + {10, 15}, // -1 + {10, 10}, // 0, DEFAULT_STAT_STAGE + {15, 10}, // +1 + {20, 10}, // +2 + {25, 10}, // +3 + {30, 10}, // +4 + {35, 10}, // +5 + {40, 10}, // +6, MAX_STAT_STAGE }; -static const u8 sFiller = _(""); +static const u8 sText_GameFreak[] = _("ゲーフリ"); static const u8 sHoldEffectToType[][2] = { @@ -1470,7 +1479,7 @@ static const u8 sHoldEffectToType[][2] = {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL}, }; -const struct SpriteTemplate gSpriteTemplates_Battlers[] = +const struct SpriteTemplate gSpriteTemplates_Battlers[MAX_BATTLERS_COUNT] = { [B_POSITION_PLAYER_LEFT] = { .tileTag = TAG_NONE, @@ -1569,7 +1578,8 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = }; // Classes dummied out -static const u8 sSecretBaseFacilityClasses[][5] = +#define NUM_SECRET_BASE_CLASSES 5 +static const u8 sSecretBaseFacilityClasses[GENDER_COUNT][NUM_SECRET_BASE_CLASSES] = { [MALE] = { FACILITY_CLASS_YOUNGSTER, @@ -1597,11 +1607,14 @@ static const u8 sGetMonDataEVConstants[] = MON_DATA_SPATK_EV }; +// For stat-raising items static const u8 sStatsToRaise[] = { STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC }; +// 3 modifiers each for how much to change friendship for different ranges +// 0-99, 100-199, 200+ static const s8 sFriendshipEventDeltas[][3] = { [FRIENDSHIP_EVENT_GROW_LEVEL] = { 5, 3, 2 }, @@ -1616,31 +1629,35 @@ static const s8 sFriendshipEventDeltas[][3] = [FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10 }, }; +#define HM_MOVES_END 0xFFFF + static const u16 sHMMoves[] = { MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH, - MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, 0xFFFF + MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, HM_MOVES_END }; #if defined(FIRERED) +// Attack forme static const u16 sDeoxysBaseStats[] = { - 50, // Hp - 180, // Attack - 20, // Defense - 150, // Speed - 180, // Sp.Attack - 20, // Sp.Defense + [STAT_HP] = 50, + [STAT_ATK] = 180, + [STAT_DEF] = 20, + [STAT_SPEED] = 150, + [STAT_SPATK] = 180, + [STAT_SPDEF] = 20, }; #elif defined(LEAFGREEN) +// Defense forme static const u16 sDeoxysBaseStats[] = { - 50, // Hp - 70, // Attack - 160, // Defense - 90, // Speed - 70, // Sp.Attack - 160, // Sp.Defense + [STAT_HP] = 50, + [STAT_ATK] = 70, + [STAT_DEF] = 160, + [STAT_SPEED] = 90, + [STAT_SPATK] = 70, + [STAT_SPDEF] = 160, }; #endif @@ -1668,34 +1685,33 @@ const u16 gUnionRoomFacilityClasses[NUM_UNION_ROOM_CLASSES * GENDER_COUNT] = FACILITY_CLASS_BEAUTY, }; -static const struct OamData sOakSpeechNidoranFDummyOamData = +static const struct OamData sOamData_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, - .objMode = 0, + .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, - .bpp = 0, - .shape = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, }; -static const struct SpriteTemplate sOakSpeechNidoranFDummyTemplate = +static const struct SpriteTemplate sSpriteTemplate_64x64 = { .tileTag = TAG_NONE, .paletteTag = TAG_NONE, - .oam = &sOakSpeechNidoranFDummyOamData, + .oam = &sOamData_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -// code void ZeroBoxMonData(struct BoxPokemon *boxMon) { u8 *raw = (u8 *)boxMon; @@ -1718,7 +1734,7 @@ void ZeroMonData(struct Pokemon *mon) SetMonData(mon, MON_DATA_SPEED, &arg); SetMonData(mon, MON_DATA_SPATK, &arg); SetMonData(mon, MON_DATA_SPDEF, &arg); - arg = 255; + arg = MAIL_NONE; SetMonData(mon, MON_DATA_MAIL, &arg); } @@ -1742,7 +1758,7 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix ZeroMonData(mon); CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); SetMonData(mon, MON_DATA_LEVEL, &level); - arg = 255; + arg = MAIL_NONE; SetMonData(mon, MON_DATA_MAIL, &arg); CalculateMonStats(mon); } @@ -1770,7 +1786,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, do { value = Random32(); - shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(value, personality); } while (shinyValue < SHINY_ODDS); } else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID @@ -1795,8 +1811,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage); SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName); SetBoxMonData(boxMon, MON_DATA_SPECIES, &species); - SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]); - SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship); + SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][level]); + SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].friendship); value = GetCurrentRegionMapSectionId(); SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value); SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level); @@ -1805,7 +1821,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value); SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender); - if (fixedIV < 32) + if (fixedIV < USE_RANDOM_IVS) { SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); @@ -1819,24 +1835,24 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u32 iv; value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } - if (gBaseStats[species].abilities[1]) + if (gSpeciesInfo[species].abilities[1]) { value = personality & 1; SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value); @@ -1855,7 +1871,7 @@ void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, } while (nature != GetNatureFromPersonality(personality)); - CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, fixedIV, TRUE, personality, OT_ID_PLAYER_ID, 0); } void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter) @@ -1869,7 +1885,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, do { personality = Random32(); - actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28); + actualLetter = GET_UNOWN_LETTER(personality); } while (nature != GetNatureFromPersonality(personality) || gender != GetGenderFromSpeciesAndPersonality(species, personality) @@ -1885,7 +1901,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, || gender != GetGenderFromSpeciesAndPersonality(species, personality)); } - CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, fixedIV, TRUE, personality, OT_ID_PLAYER_ID, 0); } // Used to create the Old Man's Weedle? @@ -1900,25 +1916,25 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) personality = Random32(); } while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); - CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId); + CreateMon(mon, species, level, USE_RANDOM_IVS, TRUE, personality, OT_ID_PRESET, otId); } void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) { - CreateMon(mon, species, level, 0, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, 0, TRUE, personality, OT_ID_PLAYER_ID, 0); SetMonData(mon, MON_DATA_IVS, &ivs); CalculateMonStats(mon); } static void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId) { - CreateMon(mon, species, level, 0, 0, 0, OT_ID_PRESET, otId); - SetMonData(mon, MON_DATA_HP_IV, &ivs[0]); - SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]); - SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]); - SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]); - SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]); - SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]); + CreateMon(mon, species, level, 0, FALSE, 0, OT_ID_PRESET, otId); + SetMonData(mon, MON_DATA_HP_IV, &ivs[STAT_HP]); + SetMonData(mon, MON_DATA_ATK_IV, &ivs[STAT_ATK]); + SetMonData(mon, MON_DATA_DEF_IV, &ivs[STAT_DEF]); + SetMonData(mon, MON_DATA_SPEED_IV, &ivs[STAT_SPEED]); + SetMonData(mon, MON_DATA_SPATK_IV, &ivs[STAT_SPATK]); + SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[STAT_SPDEF]); CalculateMonStats(mon); } @@ -1929,7 +1945,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI u16 evAmount; u8 evsBits; - CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0); + CreateMon(mon, species, level, fixedIV, FALSE, 0, OT_ID_PLAYER_ID, 0); evsBits = evSpread; @@ -1959,9 +1975,9 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) s32 i; u8 value; - CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId); + CreateMon(mon, src->species, src->level, 0, TRUE, src->personality, OT_ID_PRESET, src->otId); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(mon, src->moves[i], i); SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses); @@ -1971,7 +1987,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) /* StringCopy(nickname, src->nickname); - if (nickname[0] == 0xFC && nickname[1] == 0x15) + if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) language = LANGUAGE_JAPANESE; else language = GAME_LANGUAGE; @@ -2005,12 +2021,12 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) CalculateMonStats(mon); } -static void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +static void CreateEventMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 isEventLegal = TRUE; + bool32 isModernFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(mon, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); } void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest) @@ -2026,7 +2042,7 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP dest->heldItem = heldItem; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) dest->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); dest->level = GetMonData(mon, MON_DATA_LEVEL, NULL); @@ -2059,16 +2075,16 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3); s32 i; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct0->raw); i++) checksum += substruct0->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct1->raw); i++) checksum += substruct1->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct2->raw); i++) checksum += substruct2->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct3->raw); i++) checksum += substruct3->raw[i]; return checksum; @@ -2076,7 +2092,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) #define CALC_STAT(base, iv, ev, statIndex, field) \ { \ - u8 baseStat = gBaseStats[species].base; \ + u8 baseStat = gSpeciesInfo[species].base; \ s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ u8 nature = GetNature(mon); \ n = ModifyStatByNature(nature, n, statIndex); \ @@ -2111,13 +2127,13 @@ void CalculateMonStats(struct Pokemon *mon) } else { - s32 n = 2 * gBaseStats[species].baseHP + hpIV; + s32 n = 2 * gSpeciesInfo[species].baseHP + hpIV; newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } - gBattleScripting.field_23 = newMaxHP - oldMaxHP; - if (gBattleScripting.field_23 == 0) - gBattleScripting.field_23 = 1; + gBattleScripting.levelUpHP = newMaxHP - oldMaxHP; + if (gBattleScripting.levelUpHP == 0) + gBattleScripting.levelUpHP = 1; SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); @@ -2160,7 +2176,7 @@ void BoxMonToMon(struct BoxPokemon *src, struct Pokemon *dest) SetMonData(dest, MON_DATA_STATUS, &value); SetMonData(dest, MON_DATA_HP, &value); SetMonData(dest, MON_DATA_MAX_HP, &value); - value = 255; + value = MAIL_NONE; SetMonData(dest, MON_DATA_MAIL, &value); CalculateMonStats(dest); } @@ -2171,7 +2187,7 @@ static u8 GetLevelFromMonExp(struct Pokemon *mon) u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp) level++; return level - 1; @@ -2183,7 +2199,7 @@ u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon) u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp) level++; return level - 1; @@ -2197,7 +2213,7 @@ u16 GiveMoveToMon(struct Pokemon *mon, u16 move) static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); if (!existingMove) @@ -2207,16 +2223,16 @@ static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) return move; } if (existingMove == move) - return -2; + return MON_ALREADY_KNOWS_MOVE; } - return -1; + return MON_HAS_MAX_MOVES; } u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { if (!mon->moves[i]) { @@ -2226,7 +2242,7 @@ u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) } } - return -1; + return MON_HAS_MAX_MOVES; } void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) @@ -2257,21 +2273,21 @@ static void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) u16 moveLevel; u16 move; - moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00); + moveLevel = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV); if (moveLevel > (level << 9)) break; - move = (gLevelUpLearnsets[species][i] & 0x1FF); + move = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); - if (GiveMoveToBoxMon(boxMon, move) == 0xFFFF) + if (GiveMoveToBoxMon(boxMon, move) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move); } } u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) { - u32 retVal = 0; + u32 retVal = MOVE_NONE; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); @@ -2283,17 +2299,17 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) { sLearningMoveTableID = 0; - while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9)) + while ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) != (level << 9)) { sLearningMoveTableID++; if (gLevelUpLearnsets[species][sLearningMoveTableID] == LEVEL_UP_END) - return 0; + return MOVE_NONE; } } - if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9)) + if ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) == (level << 9)) { - gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF); + gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_ID); sLearningMoveTableID++; retVal = GiveMoveToMon(mon, gMoveToLearn); } @@ -2304,11 +2320,11 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) { s32 i; - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; - for (i = 0; i < 3; i++) + for (i = 0; i < MAX_MON_MOVES - 1; i++) { moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL); pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL); @@ -2316,10 +2332,10 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; + moves[MAX_MON_MOVES - 1] = move; + pp[MAX_MON_MOVES - 1] = gBattleMoves[move].pp; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { SetMonData(mon, MON_DATA_MOVE1 + i, &moves[i]); SetMonData(mon, MON_DATA_PP1 + i, &pp[i]); @@ -2331,11 +2347,11 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) static void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) { s32 i; - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; - for (i = 0; i < 3; i++) + for (i = 0; i < MAX_MON_MOVES - 1; i++) { moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL); pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL); @@ -2343,10 +2359,10 @@ static void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 mo ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL); ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; + moves[MAX_MON_MOVES - 1] = move; + pp[MAX_MON_MOVES - 1] = gBattleMoves[move].pp; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &moves[i]); SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]); @@ -2361,6 +2377,11 @@ static void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 mo (var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \ } +// Own function in pokeemerald +#define ShouldGetStatBadgeBoost(flag, battler)\ + (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER)) && FlagGet(flag) && GetBattlerSide(battler) == B_SIDE_PLAYER) + + s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef) { u32 i; @@ -2382,13 +2403,14 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (!typeOverride) type = gBattleMoves[move].type; else - type = typeOverride & 0x3F; + type = typeOverride & DYNAMIC_TYPE_MASK; attack = attacker->attack; defense = defender->defense; spAttack = attacker->spAttack; spDefense = defender->spDefense; + // Get attacker hold item info if (attacker->item == ITEM_ENIGMA_BERRY) { attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect; @@ -2400,6 +2422,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item); } + // Get defender hold item info if (defender->item == ITEM_ENIGMA_BERRY) { defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect; @@ -2414,33 +2437,17 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER) attack *= 2; - // In FRLG, the Battle Tower and opponent checks are stubbed here. - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) - { - if (FlagGet(FLAG_BADGE01_GET) - && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER) - attack = (110 * attack) / 100; - } - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) - { - if (FlagGet(FLAG_BADGE05_GET) - && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER) - defense = (110 * defense) / 100; - } - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) - { - if (FlagGet(FLAG_BADGE07_GET) - && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER) - spAttack = (110 * spAttack) / 100; - } - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) - { - if (FlagGet(FLAG_BADGE07_GET) - && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER) - spDefense = (110 * spDefense) / 100; - } + if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk)) + attack = (110 * attack) / 100; + if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef)) + defense = (110 * defense) / 100; + if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk)) + spAttack = (110 * spAttack) / 100; + if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef)) + spDefense = (110 * spDefense) / 100; - for (i = 0; i < NELEMS(sHoldEffectToType); i++) + // Apply type-bonus hold item + for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++) { if (attackerHoldEffect == sHoldEffectToType[i][0] && type == sHoldEffectToType[i][1]) @@ -2453,6 +2460,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } } + // Apply boosts from hold items if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND) attack = (150 * attack) / 100; if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) @@ -2493,6 +2501,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de gBattleMovePower = (150 * gBattleMovePower) / 100; if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; + + // Self-destruct / Explosion cut defense in half if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) defense /= 2; @@ -2500,7 +2510,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if (gCritMultiplier == 2) { - if (attacker->statStages[STAT_ATK] > 6) + // Critical hit, if attacker has lost attack stat stages then ignore stat drop + if (attacker->statStages[STAT_ATK] > DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK) else damage = attack; @@ -2513,7 +2524,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (gCritMultiplier == 2) { - if (defender->statStages[STAT_DEF] < 6) + // Critical hit, if defender has gained defense stat stages then ignore stat increase + if (defender->statStages[STAT_DEF] < DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF) else damageHelper = defense; @@ -2524,9 +2536,11 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage = damage / damageHelper; damage /= 50; + // Burn cuts attack in half if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS) damage /= 2; + // Apply Reflect if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) @@ -2535,10 +2549,11 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage /= 2; } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) + // Moves hitting both targets do half damage in double battles + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage /= 2; - // moves always do at least 1 damage. + // Moves always do at least 1 damage. if (damage == 0) damage = 1; } @@ -2550,7 +2565,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if (gCritMultiplier == 2) { - if (attacker->statStages[STAT_SPATK] > 6) + // Critical hit, if attacker has lost sp. attack stat stages then ignore stat drop + if (attacker->statStages[STAT_SPATK] > DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK) else damage = spAttack; @@ -2563,7 +2579,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (gCritMultiplier == 2) { - if (defender->statStages[STAT_SPDEF] < 6) + // Critical hit, if defender has gained sp. defense stat stages then ignore stat increase + if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE) APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) else damageHelper = spDefense; @@ -2574,6 +2591,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage = (damage / damageHelper); damage /= 50; + // Apply Lightscreen if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) @@ -2582,12 +2600,14 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage /= 2; } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) + // Moves hitting both targets do half damage in double battles + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage /= 2; - // are effects of weather negated with cloud nine or air lock + // Are effects of weather negated with cloud nine or air lock if (WEATHER_HAS_EFFECT2) { + // Rain weakens Fire, boosts Water if (gBattleWeather & B_WEATHER_RAIN_TEMPORARY) { switch (type) @@ -2601,11 +2621,11 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } } - // any weather except sun weakens solar beam + // Any weather except sun weakens solar beam if ((gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL_TEMPORARY)) && gCurrentMove == MOVE_SOLAR_BEAM) damage /= 2; - // sunny + // Sun boosts Fire, weakens Water if (gBattleWeather & B_WEATHER_SUN) { switch (type) @@ -2620,7 +2640,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } } - // flash fire triggered + // Flash fire triggered if ((gBattleResources->flags->flags[battlerIdAtk] & RESOURCE_FLAG_FLASH_FIRE) && type == TYPE_FIRE) damage = (15 * damage) / 10; } @@ -2636,21 +2656,21 @@ u8 CountAliveMonsInBattle(u8 caseId) switch (caseId) { case BATTLE_ALIVE_EXCEPT_ACTIVE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; } break; case BATTLE_ALIVE_ATK_SIDE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; } break; case BATTLE_ALIVE_DEF_SIDE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; @@ -2696,15 +2716,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon) u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL); - switch (gBaseStats[species].genderRatio) + switch (gSpeciesInfo[species].genderRatio) { case MON_MALE: case MON_FEMALE: case MON_GENDERLESS: - return gBaseStats[species].genderRatio; + return gSpeciesInfo[species].genderRatio; } - if (gBaseStats[species].genderRatio > (personality & 0xFF)) + if (gSpeciesInfo[species].genderRatio > (personality & 0xFF)) return MON_FEMALE; else return MON_MALE; @@ -2712,15 +2732,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon) u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) { - switch (gBaseStats[species].genderRatio) + switch (gSpeciesInfo[species].genderRatio) { case MON_MALE: case MON_FEMALE: case MON_GENDERLESS: - return gBaseStats[species].genderRatio; + return gSpeciesInfo[species].genderRatio; } - if (gBaseStats[species].genderRatio > (personality & 0xFF)) + if (gSpeciesInfo[species].genderRatio > (personality & 0xFF)) return MON_FEMALE; else return MON_MALE; @@ -2730,23 +2750,23 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition) { if (gMonSpritesGfxPtr != NULL) { - if (battlerPosition >= 4) + if (battlerPosition >= MAX_BATTLERS_COUNT) battlerPosition = 0; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; } else { - if (sOakSpeechNidoranResources) + if (sMonSpritesGfxManager) { - if (battlerPosition >= (s8)sOakSpeechNidoranResources->battlePosition) // why a cast?!? changing the unk0_2 type to s8 causes extra shifts, but a cast is the correct fix. why, compiler? + if (battlerPosition >= (s8)sMonSpritesGfxManager->battlePosition) // why a cast?!? changing the unk0_2 type to s8 causes extra shifts, but a cast is the correct fix. why, compiler? battlerPosition = 0; - gMultiuseSpriteTemplate = sOakSpeechNidoranResources->templates[battlerPosition]; + gMultiuseSpriteTemplate = sMonSpritesGfxManager->templates[battlerPosition]; } else { - if (battlerPosition >= 4) + if (battlerPosition >= MAX_BATTLERS_COUNT) battlerPosition = 0; gMultiuseSpriteTemplate = gSpriteTemplates_Battlers[battlerPosition]; @@ -2777,7 +2797,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit static void EncryptBoxMon(struct BoxPokemon *boxMon) { u32 i; - for (i = 0; i < 12; i++) + for (i = 0; i < ARRAY_COUNT(boxMon->secure.raw); i++) { boxMon->secure.raw[i] ^= boxMon->personality; boxMon->secure.raw[i] ^= boxMon->otId; @@ -2787,7 +2807,7 @@ static void EncryptBoxMon(struct BoxPokemon *boxMon) static void DecryptBoxMon(struct BoxPokemon *boxMon) { u32 i; - for (i = 0; i < 12; i++) + for (i = 0; i < ARRAY_COUNT(boxMon->secure.raw); i++) { boxMon->secure.raw[i] ^= boxMon->otId; boxMon->secure.raw[i] ^= boxMon->personality; @@ -2963,9 +2983,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; + boxMon->isBadEgg = TRUE; + boxMon->isEgg = TRUE; + substruct3->isEgg = TRUE; } } @@ -3032,8 +3052,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) { retVal = 0; - // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + 1 - while (retVal < 7) + while (retVal < PLAYER_NAME_LENGTH) { data[retVal] = boxMon->otName[retVal]; retVal++; @@ -3210,16 +3229,21 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_UNUSED_RIBBONS: retVal = substruct3->unusedRibbons; break; - case MON_DATA_EVENT_LEGAL: - retVal = substruct3->eventLegal; + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: + retVal = substruct3->modernFatefulEncounter; break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: retVal = substruct0->species; if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg)) retVal = SPECIES_EGG; break; case MON_DATA_IVS: - retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25); + retVal = substruct3->hpIV + | (substruct3->attackIV << 5) + | (substruct3->defenseIV << 10) + | (substruct3->speedIV << 15) + | (substruct3->spAttackIV << 20) + | (substruct3->spDefenseIV << 25); break; case MON_DATA_KNOWN_MOVES: if (substruct0->species && !substruct3->isEgg) @@ -3340,7 +3364,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) case MON_DATA_MAIL: SET8(mon->mail); break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: break; // why did FRLG go out of its way to specify all of these for default? case MON_DATA_IVS: @@ -3357,7 +3381,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) case MON_DATA_EARTH_RIBBON: case MON_DATA_WORLD_RIBBON: case MON_DATA_UNUSED_RIBBONS: - case MON_DATA_EVENT_LEGAL: + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: case MON_DATA_KNOWN_MOVES: case MON_DATA_RIBBON_COUNT: case MON_DATA_RIBBONS: @@ -3387,9 +3411,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; + boxMon->isBadEgg = TRUE; + boxMon->isEgg = TRUE; + substruct3->isEgg = TRUE; EncryptBoxMon(boxMon); return; } @@ -3425,7 +3449,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_OT_NAME: { s32 i; - for (i = 0; i < 7; i++) + for (i = 0; i < PLAYER_NAME_LENGTH; i++) boxMon->otName[i] = data[i]; break; } @@ -3442,9 +3466,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) { SET16(substruct0->species); if (substruct0->species) - boxMon->hasSpecies = 1; + boxMon->hasSpecies = TRUE; else - boxMon->hasSpecies = 0; + boxMon->hasSpecies = FALSE; break; } case MON_DATA_HELD_ITEM: @@ -3552,9 +3576,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_IS_EGG: SET8(substruct3->isEgg); if (substruct3->isEgg) - boxMon->isEgg = 1; + boxMon->isEgg = TRUE; else - boxMon->isEgg = 0; + boxMon->isEgg = FALSE; break; case MON_DATA_ABILITY_NUM: SET8(substruct3->abilityNum); @@ -3613,8 +3637,8 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_UNUSED_RIBBONS: SET8(substruct3->unusedRibbons); break; - case MON_DATA_EVENT_LEGAL: - SET8(substruct3->eventLegal); + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: + SET8(substruct3->modernFatefulEncounter); break; case MON_DATA_IVS: { @@ -3623,12 +3647,12 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) #else u32 ivs = *data; // Bug: Only the HP IV and the lower 3 bits of the Attack IV are read. The rest become 0. #endif - substruct3->hpIV = ivs & 0x1F; - substruct3->attackIV = (ivs >> 5) & 0x1F; - substruct3->defenseIV = (ivs >> 10) & 0x1F; - substruct3->speedIV = (ivs >> 15) & 0x1F; - substruct3->spAttackIV = (ivs >> 20) & 0x1F; - substruct3->spDefenseIV = (ivs >> 25) & 0x1F; + substruct3->hpIV = ivs & MAX_IV_MASK; + substruct3->attackIV = (ivs >> 5) & MAX_IV_MASK; + substruct3->defenseIV = (ivs >> 10) & MAX_IV_MASK; + substruct3->speedIV = (ivs >> 15) & MAX_IV_MASK; + substruct3->spAttackIV = (ivs >> 20) & MAX_IV_MASK; + substruct3->spDefenseIV = (ivs >> 25) & MAX_IV_MASK; break; } default: @@ -3744,8 +3768,8 @@ u8 GetMonsStateToDoubles(void) // FRLG changed the order of these checks, but there's no point to doing that // because of the requirement of all 3 of these checks. if (GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0 - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG) aliveCount++; } @@ -3755,9 +3779,9 @@ u8 GetMonsStateToDoubles(void) u8 GetAbilityBySpecies(u16 species, bool8 abilityNum) { if (abilityNum) - gLastUsedAbility = gBaseStats[species].abilities[1]; + gLastUsedAbility = gSpeciesInfo[species].abilities[1]; else - gLastUsedAbility = gBaseStats[species].abilities[0]; + gLastUsedAbility = gSpeciesInfo[species].abilities[0]; return gLastUsedAbility; } @@ -3784,24 +3808,24 @@ static void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord gBattleResources->secretBase->party.species[i], gBattleResources->secretBase->party.levels[i], 15, - 1, + TRUE, gBattleResources->secretBase->party.personality[i], - 2, + OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]); - for (j = 0; j < 6; j++) + for (j = 0; j < NUM_STATS; j++) SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gBattleResources->secretBase->party.EVs[i]); - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_MON_MOVES; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp); } } } - gBattleTypeFlags = 8; + gBattleTypeFlags = BATTLE_TYPE_TRAINER; gTrainerBattleOpponent_A = TRAINER_SECRET_BASE; } @@ -3868,13 +3892,13 @@ u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex) void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex) { u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - ppBonuses &= gPPUpSetMask[moveIndex]; + ppBonuses &= gPPUpClearMask[moveIndex]; SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); } void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex) { - mon->ppBonuses &= gPPUpSetMask[moveIndex]; + mon->ppBonuses &= gPPUpClearMask[moveIndex]; } static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) @@ -3886,7 +3910,7 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { gBattleMons[battlerId].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL); gBattleMons[battlerId].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL); @@ -3914,8 +3938,8 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL); gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL); gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL); - gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1; - gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2; + gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; + gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(gBattleMons[battlerId].nickname, nickname); @@ -3924,7 +3948,7 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)]; *hpSwitchout = gBattleMons[battlerId].hp; - for (i = 0; i < 8; i++) + for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[battlerId].status2 = 0; @@ -3937,6 +3961,31 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, 0); } +#define UPDATE_FRIENDSHIP_FROM_ITEM() \ +{ \ + if (retVal == 0 && friendshipChange == 0) \ + { \ + friendshipChange = itemEffect[idx]; \ + friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); \ + if (friendshipChange > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP) \ + friendship += 150 * friendshipChange / 100; \ + else \ + friendship += friendshipChange; \ + if (friendshipChange > 0) \ + { \ + if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL) \ + friendship++; \ + if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) \ + friendship++; \ + } \ + if (friendship < 0) \ + friendship = 0; \ + if (friendship > MAX_FRIENDSHIP) \ + friendship = MAX_FRIENDSHIP; \ + SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); \ + } \ +} + bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, bool8 usedByAI) { u32 data; @@ -3944,15 +3993,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov s32 cmdIndex; bool8 retVal = TRUE; const u8 *itemEffect; - u8 idx = 6; + u8 idx = ITEM_EFFECT_ARG_START; u32 i; - s8 friendshipDelta = 0; + s8 friendshipChange = 0; u8 holdEffect; - u8 battleMonId = 4; + u8 battleMonId = MAX_BATTLERS_COUNT; u16 heldItem; u8 val; u32 evDelta; + // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY) { @@ -3966,6 +4016,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov holdEffect = ItemId_GetHoldEffect(heldItem); } + // Get battler id (if relevant) gPotentialItemEffectBattler = gBattlerInMenuId; if (gMain.inBattle) { @@ -3984,14 +4035,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov else { gActiveBattler = 0; - battleMonId = 4; + battleMonId = MAX_BATTLERS_COUNT; } + // Skip using the item if it won't do anything if (!IS_POKEMON_ITEM(item)) return TRUE; if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY) return TRUE; + // Get item effect if (item == ITEM_ENIGMA_BERRY) { if (gMain.inBattle) @@ -4004,90 +4057,112 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov itemEffect = gItemEffectTable[item - ITEM_POTION]; } - for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) + // Do item effect + for (cmdIndex = 0; cmdIndex < ITEM_EFFECT_ARG_START; cmdIndex++) { switch (cmdIndex) { - // status healing effects + + // Handle ITEM0 effects (infatuation, Dire Hit, X Attack). ITEM0_SACRED_ASH is handled in party_menu.c case 0: + // Cure infatuation if ((itemEffect[cmdIndex] & ITEM0_INFATUATION) - && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_INFATUATION)) + && gMain.inBattle && battleMonId != MAX_BATTLERS_COUNT && (gBattleMons[battleMonId].status2 & STATUS2_INFATUATION)) { gBattleMons[battleMonId].status2 &= ~STATUS2_INFATUATION; retVal = FALSE; } - if ((itemEffect[cmdIndex] & ITEM0_HIGH_CRIT) + + // Dire Hit + if ((itemEffect[cmdIndex] & ITEM0_DIRE_HIT) && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) { gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; retVal = FALSE; } + + // X Attack if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK; - if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; retVal = FALSE; } break; - // in-battle stat boosting effects? + + // Handle ITEM1 effects (in-battle stat boosting effects) case 1: + // X Defend if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND) - && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12) - gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE; retVal = FALSE; } + + // X Speed if ((itemEffect[cmdIndex] & ITEM1_X_SPEED) - && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED; - if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12) - gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE; retVal = FALSE; } break; - // more stat boosting effects? + + // Handle ITEM2 effects (more stat boosting effects) case 2: + // X Accuracy if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12) - gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; retVal = FALSE; } + + // X Sp Attack if ((itemEffect[cmdIndex] & ITEM2_X_SPATK) - && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) { gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK; - if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12; + if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE; retVal = FALSE; } break; + + // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status) case 3: - if ((itemEffect[cmdIndex] & ITEM3_MIST) + // Guard Spec + if ((itemEffect[cmdIndex] & ITEM3_GUARD_SPEC) && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) { gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; retVal = FALSE; } - if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level - && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100) + + // Rare Candy + if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) + && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL) { - data = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; + data = gExperienceTables[gSpeciesInfo[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; SetMonData(mon, MON_DATA_EXP, &data); CalculateMonStats(mon); retVal = FALSE; } + + // Cure status if ((itemEffect[cmdIndex] & ITEM3_SLEEP) && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battleMonId) == 0) { - if (battleMonId != 4) + if (battleMonId != MAX_BATTLERS_COUNT) gBattleMons[battleMonId].status2 &= ~STATUS2_NIGHTMARE; retVal = FALSE; } @@ -4100,15 +4175,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battleMonId) == 0) retVal = FALSE; if ((itemEffect[cmdIndex] & ITEM3_CONFUSION) // heal confusion - && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_CONFUSION)) + && gMain.inBattle && battleMonId != MAX_BATTLERS_COUNT && (gBattleMons[battleMonId].status2 & STATUS2_CONFUSION)) { gBattleMons[battleMonId].status2 &= ~STATUS2_CONFUSION; retVal = FALSE; } break; - // EV, HP, and PP raising effects + + // Handle ITEM4 effects (Change HP/Atk EVs, HP heal, PP heal, PP up, Revive, and evolution stones) case 4: val = itemEffect[cmdIndex]; + + // PP Up if (val & ITEM4_PP_UP) { val &= ~ITEM4_PP_UP; @@ -4116,7 +4194,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov i = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); if (data < 3 && i > 4) { - data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex]; + data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddValues[moveIndex]; SetMonData(mon, MON_DATA_PP_BONUSES, &data); data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - i; @@ -4126,6 +4204,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } } i = 0; + + // Loop through and try each of the remaining ITEM4 effects while (val != 0) { if (val & 1) @@ -4135,20 +4215,25 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov switch (i) { - case 0: // EV_HP - case 1: // EV_ATK + case 0: // ITEM4_EV_HP + case 1: // ITEM4_EV_ATK evCount = GetMonEVCount(mon); - if (evCount >= 510) + + // Has EV increase limit already been reached? + if (evCount >= MAX_TOTAL_EVS) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i], NULL); - if (data < 100) + if (data < EV_ITEM_RAISE_LIMIT) { - if (data + itemEffect[idx] > 100) - evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx]; + // Limit the increase + if (data + itemEffect[idx] > EV_ITEM_RAISE_LIMIT) + evDelta = EV_ITEM_RAISE_LIMIT - (data + itemEffect[idx]) + itemEffect[idx]; else evDelta = itemEffect[idx]; - if (evCount + evDelta > 510) - evDelta += 510 - (evCount + evDelta); + if (evCount + evDelta > MAX_TOTAL_EVS) + evDelta += MAX_TOTAL_EVS - (evCount + evDelta); + + // Update EVs and stats data += evDelta; SetMonData(mon, sGetMonDataEVConstants[i], &data); CalculateMonStats(mon); @@ -4156,8 +4241,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; } break; - case 2: // HEAL_HP - // revive? + case 2: // ITEM4_HEAL_HP + // If Revive, update number of times revive has been used if (val & (ITEM4_REVIVE >> 2)) { if (GetMonData(mon, MON_DATA_HP, NULL) != 0) @@ -4167,7 +4252,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } if (gMain.inBattle) { - if (battleMonId != 4) + if (battleMonId != MAX_BATTLERS_COUNT) { gAbsentBattlerFlags &= ~gBitTable[battleMonId]; CopyPlayerPartyMonToBattleData(battleMonId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battleMonId])); @@ -4190,40 +4275,47 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } } + + // Get amount of HP to restore data = itemEffect[idx++]; switch (data) { - case 0xFF: + case ITEM6_HEAL_HP_FULL: data = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL); break; - case 0xFE: + case ITEM6_HEAL_HP_HALF: data = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2; if (data == 0) data = 1; break; - case 0xFD: - data = gBattleScripting.field_23; + case ITEM6_HEAL_HP_LVL_UP: + data = gBattleScripting.levelUpHP; break; } + + // Only restore HP if not at max health if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) { if (!usedByAI) { + // Restore HP data = GetMonData(mon, MON_DATA_HP, NULL) + data; if (data > GetMonData(mon, MON_DATA_MAX_HP, NULL)) data = GetMonData(mon, MON_DATA_MAX_HP, NULL); SetMonData(mon, MON_DATA_HP, &data); - if (gMain.inBattle && battleMonId != 4) + + // Update battler (if applicable) + if (gMain.inBattle && battleMonId != MAX_BATTLERS_COUNT) { gBattleMons[battleMonId].hp = data; if (!(val & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (gBattleResults.numHealingItemsUsed < 255) gBattleResults.numHealingItemsUsed++; - // I have to re-use this variable to match. + r5 = gActiveBattler; gActiveBattler = battleMonId; - BtlController_EmitGetMonData(BUFFER_A, 0, 0); + BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(gActiveBattler); gActiveBattler = r5; } @@ -4237,10 +4329,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } val &= ~(ITEM4_REVIVE >> 2); break; - case 3: // HEAL_PP_ALL + case 3: // ITEM4_HEAL_PP if (!(val & (ITEM4_HEAL_PP_ONE >> 3))) { - for (r5 = 0; r5 < 4; r5++) + // Heal PP for all moves + for (r5 = 0; r5 < MAX_MON_MOVES; r5++) { u16 move_id; @@ -4256,10 +4349,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5); } SetMonData(mon, MON_DATA_PP1 + r5, &data); - if (gMain.inBattle - && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[r5])) + + // Heal battler PP too (if applicable) + if (gMain.inBattle && battleMonId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battleMonId, r5)) gBattleMons[battleMonId].pp[r5] = data; + retVal = FALSE; } } @@ -4267,8 +4361,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } else { + // Heal PP for one move u16 move_id; - data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL); move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); if (data != CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) @@ -4281,21 +4375,26 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); } SetMonData(mon, MON_DATA_PP1 + moveIndex, &data); - if (gMain.inBattle - && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[moveIndex])) + + // Heal battler PP too (if applicable) + if (gMain.inBattle && battleMonId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battleMonId, moveIndex)) gBattleMons[battleMonId].pp[moveIndex] = data; + retVal = FALSE; } } break; - case 7: // EVO_STONE + + // cases 4-6 are ITEM4_HEAL_PP_ONE, ITEM4_PP_UP, and ITEM4_REVIVE, which + // are already handled above by other cases or before the loop + + case 7: // ITEM4_EVO_STONE { u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item); if (targetSpecies != SPECIES_NONE) { - BeginEvolutionScene(mon, targetSpecies, 0, partyIndex); + BeginEvolutionScene(mon, targetSpecies, FALSE, partyIndex); return FALSE; } } @@ -4306,9 +4405,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov val >>= 1; } break; + + // Handle ITEM5 effects (Change Def/SpDef/SpAtk/Speed EVs, PP Max, and friendship changes) case 5: val = itemEffect[cmdIndex]; i = 0; + + // Loop through and try each of the ITEM5 effects while (val != 0) { if (val & 1) @@ -4317,22 +4420,27 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov switch (i) { - case 0: // EV_DEF - case 1: // EV_SPEED - case 2: // EV_SPDEF - case 3: // EV_SPATK + case 0: // ITEM5_EV_DEF + case 1: // ITEM5_EV_SPEED + case 2: // ITEM5_EV_SPDEF + case 3: // ITEM5_EV_SPATK evCount = GetMonEVCount(mon); - if (evCount >= 510) + + // Has EV increase limit already been reached? + if (evCount >= MAX_TOTAL_EVS) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL); - if (data < 100) + if (data < EV_ITEM_RAISE_LIMIT) { - if (data + itemEffect[idx] > 100) - evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx]; + // Limit the increase + if (data + itemEffect[idx] > EV_ITEM_RAISE_LIMIT) + evDelta = EV_ITEM_RAISE_LIMIT - (data + itemEffect[idx]) + itemEffect[idx]; else evDelta = itemEffect[idx]; - if (evCount + evDelta > 510) - evDelta += 510 - (evCount + evDelta); + if (evCount + evDelta > MAX_TOTAL_EVS) + evDelta += MAX_TOTAL_EVS - (evCount + evDelta); + + // Update EVs and stats data += evDelta; SetMonData(mon, sGetMonDataEVConstants[i + 2], &data); CalculateMonStats(mon); @@ -4340,14 +4448,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov idx++; } break; - case 4: // PP_MAX + case 4: // ITEM5_PP_MAX data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); + + // Check if 3 PP Ups have been applied already if (data < 3) { evDelta = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - data &= gPPUpSetMask[moveIndex]; - data += gPPUpAddMask[moveIndex] * 3; + data &= gPPUpClearMask[moveIndex]; + data += gPPUpAddValues[moveIndex] * 3; // Apply 3 PP Ups (max) SetMonData(mon, MON_DATA_PP_BONUSES, &data); data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - evDelta; @@ -4356,77 +4466,23 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; } break; - case 5: // FRIENDSHIP_LOW - if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && friendshipDelta == 0) - { - friendshipDelta = itemEffect[idx]; - friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * friendshipDelta / 100; - else - friendship += friendshipDelta; - if (friendshipDelta > 0) - { - if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) - friendship++; - if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) - friendship++; - } - if (friendship < 0) - friendship = 0; - if (friendship > 255) - friendship = 255; - SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); - } + case 5: // ITEM5_FRIENDSHIP_LOW + // Changes to friendship are given differently depending on + // how much friendship the Pokémon already has. + // In general, Pokémon with lower friendship receive more, + // and Pokémon with higher friendship receive less. + if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100) + UPDATE_FRIENDSHIP_FROM_ITEM(); idx++; break; - case 6: // FRIENDSHIP_MID - if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200 - && retVal == 0 && friendshipDelta == 0) - { - friendshipDelta = itemEffect[idx]; - friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * friendshipDelta / 100; - else - friendship += friendshipDelta; - if (friendshipDelta > 0) - { - if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) - friendship++; - if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) - friendship++; - } - if (friendship < 0) - friendship = 0; - if (friendship > 255) - friendship = 255; - SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); - } + case 6: // ITEM5_FRIENDSHIP_MID + if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200) + UPDATE_FRIENDSHIP_FROM_ITEM(); idx++; break; - case 7: // FRIENDSHIP_HIGH - if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && friendshipDelta == 0) - { - friendshipDelta = itemEffect[idx]; - friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * friendshipDelta / 100; - else - friendship += friendshipDelta; - if (friendshipDelta > 0) - { - if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) - friendship++; - if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) - friendship++; - } - if (friendship < 0) - friendship = 0; - if (friendship > 255) - friendship = 255; - SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); - } + case 7: // ITEM5_FRIENDSHIP_HIGH + if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200) + UPDATE_FRIENDSHIP_FROM_ITEM(); idx++; break; } @@ -4448,7 +4504,7 @@ static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, { status &= ~healMask; SetMonData(mon, MON_DATA_STATUS, &status); - if (gMain.inBattle && battleId != 4) + if (gMain.inBattle && battleId != MAX_BATTLERS_COUNT) gBattleMons[battleId].status1 &= ~healMask; return FALSE; } @@ -4465,17 +4521,17 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo s32 cmdIndex; bool8 retVal = TRUE; const u8 *itemEffect; - u8 idx = 6; + u8 idx = ITEM_EFFECT_ARG_START; u32 i; s32 sp18 = 0; u8 holdEffect; - u8 battlerId = 4; + u8 battlerId = MAX_BATTLERS_COUNT; u16 heldItem; u8 curEffect; u32 curMoveId; + // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); - // you have to write as such, because otherwise gMain.inBattle will lose its u8 cast if (heldItem == ITEM_ENIGMA_BERRY) { if (gMain.inBattle) @@ -4487,6 +4543,8 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo { holdEffect = ItemId_GetHoldEffect(heldItem); } + + // Get battler id (if relevant) gPotentialItemEffectBattler = gBattlerInMenuId; if (gMain.inBattle) { @@ -4505,12 +4563,16 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo else { gActiveBattler = 0; - battlerId = 4; + battlerId = MAX_BATTLERS_COUNT; } + + // Skip using the item if it won't do anything if (!IS_POKEMON_ITEM(item)) return TRUE; if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY) return TRUE; + + // Get item effect if (item == ITEM_ENIGMA_BERRY) { if (gMain.inBattle) @@ -4520,51 +4582,68 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo } else { - itemEffect = gItemEffectTable[item - 13]; + itemEffect = gItemEffectTable[item - ITEM_POTION]; } - for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) + + for (cmdIndex = 0; cmdIndex < ITEM_EFFECT_ARG_START; cmdIndex++) { switch (cmdIndex) { // status healing effects case 0: - if (itemEffect[cmdIndex] & ITEM0_INFATUATION - && gMain.inBattle - && battlerId != 4 - && gBattleMons[battlerId].status2 & STATUS2_INFATUATION) + // Cure infatuation + if (itemEffect[cmdIndex] & ITEM0_INFATUATION && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && gBattleMons[battlerId].status2 & STATUS2_INFATUATION) retVal = FALSE; - if (itemEffect[cmdIndex] & ITEM0_HIGH_CRIT - && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) + + // Dire Hit + if (itemEffect[cmdIndex] & ITEM0_DIRE_HIT && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) retVal = FALSE; + + // X Attack if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) retVal = FALSE; break; - // in-battle stat boosting effects? + + // Handle ITEM1 effects (in-battle stat boosting effects) case 1: + // X Defend if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND) - && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) retVal = FALSE; + + // X Speed if ((itemEffect[cmdIndex] & ITEM1_X_SPEED) - && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) retVal = FALSE; break; - // more stat boosting effects? + + // Handle ITEM2 effects (more stat boosting effects) case 2: + // X Accuracy if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) retVal = FALSE; + + // X Sp Attack if ((itemEffect[cmdIndex] & ITEM2_X_SPATK) - && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) retVal = FALSE; break; + + // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status case 3: - if ((itemEffect[cmdIndex] & ITEM3_MIST) + // Guard Spec + if ((itemEffect[cmdIndex] & ITEM3_GUARD_SPEC) && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level - && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100) + + // Rare Candy + if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) + && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL) retVal = FALSE; + + // Cure status if ((itemEffect[cmdIndex] & ITEM3_SLEEP) && PartyMonHasStatus(mon, partyIndex, STATUS1_SLEEP, battlerId)) retVal = FALSE; @@ -4577,12 +4656,15 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && PartyMonHasStatus(mon, partyIndex, STATUS1_PARALYSIS, battlerId)) retVal = FALSE; if (itemEffect[cmdIndex] & ITEM3_CONFUSION // heal confusion - && gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)) + && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)) retVal = FALSE; break; - // EV, HP, and PP raising effects + + // Handle ITEM4 effects (Change HP/Atk EVs, HP heal, PP heal, PP up, Revive, and evolution stones) case 4: curEffect = itemEffect[cmdIndex]; + + // PP Up if (curEffect & ITEM4_PP_UP) { curEffect &= ~ITEM4_PP_UP; @@ -4592,25 +4674,28 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo retVal = FALSE; } i = 0; - while (curEffect) // _080428C0 + + // Loop through and try each of the remaining ITEM4 effects + while (curEffect) { if (curEffect & 1) { switch (i) { - case 0: // EV_HP - case 1: // EV_ATK - if (GetMonEVCount(mon) >= 510) + case 0: // ITEM4_EV_HP + case 1: // ITEM4_EV_ATK + + // Has EV increase limit already been reached? + if (GetMonEVCount(mon) >= MAX_TOTAL_EVS) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i], NULL); - if (data < 100) + if (data < EV_ITEM_RAISE_LIMIT) { idx++; retVal = FALSE; } break; - case 2: // HEAL_HP - // revive? + case 2: // ITEM4_HEAL_HP if (curEffect & (ITEM4_REVIVE >> 2)) { if (GetMonData(mon, MON_DATA_HP, NULL) != 0) @@ -4643,7 +4728,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo } idx++; } - else // _080429FA + else { data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL); curMoveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); @@ -4654,7 +4739,11 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo } } break; - case 7: + + // cases 4-6 are ITEM4_HEAL_PP_ONE, ITEM4_PP_UP, and ITEM4_REVIVE, which + // are already handled above by other cases or before the loop + + case 7: // ITEM4_EVO_STONE if (GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item) != SPECIES_NONE) return FALSE; break; @@ -4664,42 +4753,48 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo curEffect >>= 1; } break; + + // Handle ITEM5 effects (Change Def/SpDef/SpAtk/Speed EVs, PP Max, and friendship changes) case 5: curEffect = itemEffect[cmdIndex]; i = 0; + + // Loop through and try each of the ITEM5 effects while (curEffect) { if (curEffect & 1) { switch (i) { - case 0: // EV_DEF - case 1: // EV_SPEED - case 2: // EV_SPDEF - case 3: // EV_SPATK - if (GetMonEVCount(mon) >= 510) + case 0: // ITEM5_EV_DEF + case 1: // ITEM5_EV_SPEED + case 2: // ITEM5_EV_SPDEF + case 3: // ITEM5_EV_SPATK + if (GetMonEVCount(mon) >= MAX_TOTAL_EVS) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL); - if (data < 100) + if (data < EV_ITEM_RAISE_LIMIT) { retVal = FALSE; idx++; } break; - case 4: // PP_MAX + case 4: // ITEM5_PP_MAX data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); tmp = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); - if (data < 3 && tmp > 4) + + // Check if 3 PP Ups have been applied already, and that the move has a total PP of at least 5 (excludes Sketch) + if (data < 3 && tmp >= 5) retVal = FALSE; break; - case 5: // FRIENDSHIP_LOW + case 5: // ITEM5_FRIENDSHIP_LOW if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == FALSE && sp18 == 0) sp18 = itemEffect[idx]; idx++; break; - case 6: // FRIENDSHIP_MID + case 6: // ITEM5_FRIENDSHIP_MID if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200 && retVal == FALSE @@ -4707,7 +4802,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo sp18 = itemEffect[idx]; idx++; break; - case 7: // FRIENDSHIP_HIGH + case 7: // ITEM5_FRIENDSHIP_HIGH if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == FALSE && sp18 == 0) @@ -4742,9 +4837,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) u8 j; u8 val; - offset = 6; + offset = ITEM_EFFECT_ARG_START; - temp = gItemEffectTable[itemId - 13]; + temp = gItemEffectTable[itemId - ITEM_POTION]; if (!temp && itemId != ITEM_ENIGMA_BERRY) return 0; @@ -4756,7 +4851,7 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) itemEffect = temp; - for (i = 0; i < 6; i++) + for (i = 0; i < ITEM_EFFECT_ARG_START; i++) { switch (i) { @@ -4769,8 +4864,8 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) break; case 4: val = itemEffect[4]; - if (val & 0x20) - val &= 0xDF; + if (val & ITEM4_PP_UP) + val &= ~ITEM4_PP_UP; j = 0; while (val) { @@ -4778,25 +4873,26 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) { switch (j) { - case 2: - if (val & 0x10) - val &= 0xEF; - case 0: + case 2: // ITEM4_HEAL_HP + if (val & (ITEM4_REVIVE >> 2)) + val &= ~(ITEM4_REVIVE >> 2); + // fallthrough + case 0: // ITEM4_EV_HP if (i == effectByte && (val & effectBit)) return offset; offset++; break; - case 1: + case 1: // ITEM4_EV_ATK if (i == effectByte && (val & effectBit)) return offset; offset++; break; - case 3: + case 3: // ITEM4_HEAL_PP if (i == effectByte && (val & effectBit)) return offset; offset++; break; - case 7: + case 7: // ITEM4_EVO_STONE if (i == effectByte) return 0; break; @@ -4817,18 +4913,18 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) { switch (j) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: + case 0: // ITEM5_EV_DEF + case 1: // ITEM5_EV_SPEED + case 2: // ITEM5_EV_SPDEF + case 3: // ITEM5_EV_SPATK + case 4: // ITEM5_PP_MAX + case 5: // ITEM5_FRIENDSHIP_LOW + case 6: // ITEM5_FRIENDSHIP_MID if (i == effectByte && (val & effectBit)) return offset; offset++; break; - case 7: + case 7: // ITEM5_FRIENDSHIP_HIGH if (i == effectByte) return 0; break; @@ -4846,10 +4942,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) return offset; } -static void BufferStatRoseMessage(int stat) +static void BufferStatRoseMessage(int statIdx) { gBattlerTarget = gBattlerInMenuId; - StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[stat]]); + StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[statIdx]]); StringCopy(gBattleTextBuff2, gBattleText_Rose); BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose); } @@ -4872,18 +4968,18 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId) } else { - itemEffect = gItemEffectTable[itemId - 13]; + itemEffect = gItemEffectTable[itemId - ITEM_POTION]; } gPotentialItemEffectBattler = gBattlerInMenuId; for (i = 0; i < 3; i++) { - if (itemEffect[i] & 0xF) + if (itemEffect[i] & (ITEM0_X_ATTACK | ITEM1_X_SPEED | ITEM2_X_SPATK)) BufferStatRoseMessage(i * 2); - if (itemEffect[i] & 0xF0) + if (itemEffect[i] & (ITEM0_DIRE_HIT | ITEM1_X_DEFEND | ITEM2_X_ACCURACY)) { - if (i) + if (i != 0) // Dire Hit is the only ITEM0 above { BufferStatRoseMessage(i * 2 + 1); } @@ -4895,7 +4991,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId) } } - if (itemEffect[3] & 0x80) + if (itemEffect[3] & ITEM3_GUARD_SPEC) { gBattlerAttacker = gBattlerInMenuId; BattleStringExpandPlaceholdersToDisplayedString(gBattleText_MistShroud); @@ -4906,12 +5002,12 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId) u8 GetNature(struct Pokemon *mon) { - return GetMonData(mon, MON_DATA_PERSONALITY, NULL) % 25; + return GetMonData(mon, MON_DATA_PERSONALITY, NULL) % NUM_NATURES; } static u8 GetNatureFromPersonality(u32 personality) { - return personality % 25; + return personality % NUM_NATURES; } u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) @@ -4932,6 +5028,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) else holdEffect = ItemId_GetHoldEffect(heldItem); + // Prevent evolution with Everstone, unless we're just viewing the party menu with an evolution item if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != EVO_MODE_ITEM_CHECK) return 0; @@ -4941,7 +5038,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) level = GetMonData(mon, MON_DATA_LEVEL, NULL); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - for (i = 0; i < 5; i++) + for (i = 0; i < EVOS_PER_MON; i++) { switch (gEvolutionTable[species][i].method) { @@ -5003,7 +5100,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) } break; case EVO_MODE_TRADE: - for (i = 0; i < 5; i++) + for (i = 0; i < EVOS_PER_MON; i++) { switch (gEvolutionTable[species][i].method) { @@ -5014,9 +5111,11 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species][i].param == heldItem) { targetSpecies = gEvolutionTable[species][i].targetSpecies; + + // Prevent cross-generational evolutions like Scizor and Steelix until the National Pokedex is obtained if (IsNationalPokedexEnabled() || targetSpecies <= KANTO_SPECIES_END) { - heldItem = 0; + heldItem = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); targetSpecies = gEvolutionTable[species][i].targetSpecies; } @@ -5027,7 +5126,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) break; case EVO_MODE_ITEM_USE: case EVO_MODE_ITEM_CHECK: - for (i = 0; i < 5; i++) + for (i = 0; i < EVOS_PER_MON; i++) { if (gEvolutionTable[species][i].method == EVO_ITEM && gEvolutionTable[species][i].param == evolutionItem) @@ -5042,16 +5141,16 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) return targetSpecies; } -static u16 HoennPokedexNumToSpecies(u16 var) +static u16 HoennPokedexNumToSpecies(u16 hoennNum) { u16 species; - if (!var) + if (!hoennNum) return 0; species = 0; - while (species < NUM_SPECIES - 1 && sSpeciesToHoennPokedexNum[species] != var) + while (species < NUM_SPECIES - 1 && sSpeciesToHoennPokedexNum[species] != hoennNum) species++; if (species == NUM_SPECIES - 1) @@ -5131,42 +5230,81 @@ u16 SpeciesToCryId(u16 species) return sHoennSpeciesIdToCryId[species - ((SPECIES_OLD_UNOWN_Z + 1) - 1)]; } -#define DRAW_SPINDA_SPOTS \ +// Spots can be drawn on Spinda's color indexes 1, 2, or 3 +#define FIRST_SPOT_COLOR 1 +#define LAST_SPOT_COLOR 3 + +// To draw a spot pixel, add 4 to the color index +#define SPOT_COLOR_ADJUSTMENT 4 +/* + The macro below handles drawing the randomly-placed spots on Spinda's front sprite. + Spinda has 4 spots, each with an entry in sSpindaSpotGraphics. Each entry contains + a base x and y coordinate for the spot and a 16x16 binary image. Each bit in the image + determines whether that pixel should be considered part of the spot. + + The position of each spot is randomized using the Spinda's personality. The entire 32 bit + personality value is used, 4 bits for each coordinate of the 4 spots. If the personality + value is 0x87654321, then 0x1 will be used for the 1st spot's x coord, 0x2 will be used for + the 1st spot's y coord, 0x3 will be used for the 2nd spot's x coord, and so on. Each + coordinate is calculated as (baseCoord + (given 4 bits of personality) - 8). In effect this + means each spot can start at any position -8 to +7 off of its base coordinates (256 possibilities). + + The macro then loops over the 16x16 spot image. For each bit in the spot's binary image, if + the bit is set then it's part of the spot; try to draw it. A pixel is drawn on Spinda if the + pixel on Spinda satisfies the following formula: ((u8)(colorIndex - 1) <= 2). The -1 excludes + transparent pixels, as these are index 0. Therefore only colors 1, 2, or 3 on Spinda will + allow a spot to be drawn. These color indexes are Spinda's light brown body colors. To create + the spot it adds 4 to the color index, so Spinda's spots will be colors 5, 6, and 7. + + The above is done two different ways in the macro: one with << 4, and one without. This + is because Spinda's sprite is a 4 bits per pixel image, but the pointer to Spinda's pixels + (destPixels) is an 8 bit pointer, so it addresses two pixels. Shifting by 4 accesses the 2nd + of these pixels, so this is done every other time. +*/ +#define DRAW_SPINDA_SPOTS(personality, dest) \ { \ - int i; \ - for (i = 0; i < 4; i++) \ + s32 i; \ + for (i = 0; i < (s32)ARRAY_COUNT(sSpindaSpotGraphics); i++) \ { \ - int j; \ + s32 row; \ u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \ u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \ \ - for (j = 0; j < 16; j++) \ + for (row = 0; row < SPINDA_SPOT_HEIGHT; row++) \ { \ - int k; \ - s32 row = sSpindaSpotGraphics[i].image[j]; \ + s32 column; \ + s32 spotPixelRow = sSpindaSpotGraphics[i].image[row]; \ \ - for (k = x; k < x + 16; k++) \ + for (column = x; column < x + SPINDA_SPOT_WIDTH; column++) \ { \ - u8 *val = dest + ((k / 8) * 32) + \ - ((k % 8) / 2) + \ - ((y >> 3) << 8) + \ - ((y & 7) << 2); \ + /* Get target pixels on Spinda's sprite */ \ + u8 *destPixels = dest + ((column / 8) * TILE_SIZE_4BPP) + \ + ((column % 8) / 2) + \ + ((y / 8) * TILE_SIZE_4BPP * 8) + \ + ((y % 8) * 4); \ \ - if (row & 1) \ + /* Is this pixel in the 16x16 spot image part of the spot? */ \ + if (spotPixelRow & 1) \ { \ - if (k & 1) \ + /* destPixels addressess two pixels, alternate which */ \ + /* of the two pixels is being considered for drawing */ \ + if (column & 1) \ { \ - if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \ - *val += 0x40; \ + /* Draw spot pixel if this is Spinda's body color */ \ + if ((u8)((*destPixels & 0xF0) - (FIRST_SPOT_COLOR << 4))\ + <= ((LAST_SPOT_COLOR - FIRST_SPOT_COLOR) << 4))\ + *destPixels += (SPOT_COLOR_ADJUSTMENT << 4); \ } \ else \ { \ - if ((u8)((*val & 0xF) - 0x01) <= 0x02) \ - *val += 0x04; \ + /* Draw spot pixel if this is Spinda's body color */ \ + if ((u8)((*destPixels & 0xF) - FIRST_SPOT_COLOR) \ + <= (LAST_SPOT_COLOR - FIRST_SPOT_COLOR)) \ + *destPixels += SPOT_COLOR_ADJUSTMENT; \ } \ } \ \ - row >>= 1; \ + spotPixelRow >>= 1; \ } \ \ y++; \ @@ -5176,18 +5314,20 @@ u16 SpeciesToCryId(u16 species) } \ } +// Same as DrawSpindaSpots but attempts to discern for itself whether or +// not it's the front pic. static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest) { if (species == SPECIES_SPINDA - && dest != gMonSpritesGfxPtr->sprites[0] - && dest != gMonSpritesGfxPtr->sprites[2]) - DRAW_SPINDA_SPOTS; + && dest != gMonSpritesGfxPtr->sprites[B_POSITION_PLAYER_LEFT] + && dest != gMonSpritesGfxPtr->sprites[B_POSITION_PLAYER_RIGHT]) + DRAW_SPINDA_SPOTS(personality, dest); } void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic) { if (species == SPECIES_SPINDA && isFrontPic) - DRAW_SPINDA_SPOTS; + DRAW_SPINDA_SPOTS(personality, dest); } void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) @@ -5199,79 +5339,95 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); } -bool8 GetPlayerFlankId(void) +// The below two functions determine which side of a multi battle the trainer battles on +// 0 is the left (top in party menu), 1 is right (bottom in party menu) +u8 GetPlayerFlankId(void) { - bool8 retVal = FALSE; + u8 flankId = 0; switch (gLinkPlayers[GetMultiplayerId()].id) { case 0: case 3: - retVal = FALSE; + flankId = 0; break; case 1: case 2: - retVal = TRUE; + flankId = 1; break; } - return retVal; + return flankId; } -bool16 GetLinkTrainerFlankId(u8 linkPlayerId) +u16 GetLinkTrainerFlankId(u8 linkPlayerId) { - bool16 retVal = FALSE; + u16 flankId = 0; switch (gLinkPlayers[linkPlayerId].id) { case 0: case 3: - retVal = FALSE; + flankId = 0; break; case 1: case 2: - retVal = TRUE; + flankId = 1; break; } - return retVal; + return flankId; } -s32 GetBattlerMultiplayerId(u16 a1) +s32 GetBattlerMultiplayerId(u16 id) { - s32 id; - for (id = 0; id < MAX_LINK_PLAYERS; id++) - if (gLinkPlayers[id].id == a1) + s32 multiplayerId; + for (multiplayerId = 0; multiplayerId < MAX_LINK_PLAYERS; multiplayerId++) + if (gLinkPlayers[multiplayerId].id == id) break; - return id; + return multiplayerId; } -u8 GetTrainerEncounterMusicId(u16 trainer) +u8 GetTrainerEncounterMusicId(u16 trainerId) { - return gTrainers[trainer].encounterMusic_gender & 0x7F; + return TRAINER_ENCOUNTER_MUSIC(trainerId); } -static u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) +static u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex) { - if (statIndex < 1 || statIndex > 5) - { - // should just be "return n", but it wouldn't match without this - u16 retVal = n; - retVal++; - retVal--; - return retVal; - } +// Because this is a u16 it will be unable to store the +// result of the multiplication for any stat > 595 for a +// positive nature and > 728 for a negative nature. +// Neither occur in the base game, but this can happen if +// any Nature-affected base stat is increased to a value +// above 248. The closest by default is Shuckle at 230. +#ifdef BUGFIX + u32 retVal; +#else + u16 retVal; +#endif + + // Don't modify HP, Accuracy, or Evasion by nature + if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) + return stat; switch (sNatureStatTable[nature][statIndex - 1]) { case 1: - return (u16)(n * 110) / 100; + retVal = stat * 110; + retVal /= 100; + break; case -1: - return (u16)(n * 90) / 100; + retVal = stat * 90; + retVal /= 100; + break; + default: + retVal = stat; + break; } - return n; + return retVal; } void AdjustFriendship(struct Pokemon *mon, u8 event) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL); u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); u8 holdEffect; @@ -5319,7 +5475,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) } delta = sFriendshipEventDeltas[event][friendshipLevel]; - if (delta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + if (delta > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP) // 50% increase, rounding down delta = (150 * delta) / 100; @@ -5332,11 +5488,10 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) friendship++; } - // Clamp to u8 if (friendship < 0) friendship = 0; - if (friendship > 255) - friendship = 255; + if (friendship > MAX_FRIENDSHIP) + friendship = MAX_FRIENDSHIP; SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } @@ -5374,23 +5529,23 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) switch (i) { - case 0: - evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; + case STAT_HP: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_HP * multiplier; break; - case 1: - evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; + case STAT_ATK: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Attack * multiplier; break; - case 2: - evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; + case STAT_DEF: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Defense * multiplier; break; - case 3: - evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; + case STAT_SPEED: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Speed * multiplier; break; - case 4: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; + case STAT_SPATK: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpAttack * multiplier; break; - case 5: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; + case STAT_SPDEF: + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpDefense * multiplier; break; } @@ -5414,9 +5569,9 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); - if (evs[i] + (s16)evIncrease > 255) + if (evs[i] + (s16)evIncrease > MAX_PER_STAT_EVS) { - int val1 = (s16)evIncrease + 255; + int val1 = (s16)evIncrease + MAX_PER_STAT_EVS; int val2 = evs[i] + evIncrease; evIncrease = val1 - val2; } @@ -5448,7 +5603,7 @@ void RandomlyGivePartyPokerus(struct Pokemon *party) &foo; } -u8 CheckPartyPokerus(struct Pokemon *party, u8 party_bm) +u8 CheckPartyPokerus(struct Pokemon *party, u8 selection) { u8 retVal; @@ -5456,25 +5611,23 @@ u8 CheckPartyPokerus(struct Pokemon *party, u8 party_bm) unsigned curBit = 1; retVal = 0; - if (party_bm != 0) // Check mons in party based on bitmask, LSB = first mon + if (selection) { do { - if ((party_bm & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, NULL) & 0xF)) + if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, NULL) & 0xF)) retVal |= curBit; partyIndex++; curBit <<= 1; - party_bm >>= 1; + selection >>= 1; } - while (party_bm); + while (selection); } - else // Single Pokemon + else if (GetMonData(&party[0], MON_DATA_POKERUS, NULL) & 0xF) { - if (GetMonData(&party[0], MON_DATA_POKERUS, NULL) & 0xF) - { - retVal = 1; - } + retVal = 1; } + return retVal; } @@ -5522,9 +5675,9 @@ void PartySpreadPokerus(struct Pokemon *party) static void SetMonExpWithMaxLevelCheck(struct Pokemon *mon, int species, u8 unused, u32 data) { - if (data > gExperienceTables[gBaseStats[species].growthRate][100]) + if (data > gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]) { - data = gExperienceTables[gBaseStats[species].growthRate][100]; + data = gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]; SetMonData(mon, MON_DATA_EXP, &data); } } @@ -5536,9 +5689,9 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) u8 newLevel = level + 1; u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); - if (level < 100) + if (level < MAX_LEVEL) { - if (exp > gExperienceTables[gBaseStats[species].growthRate][newLevel]) + if (exp > gExperienceTables[gSpeciesInfo[species].growthRate][newLevel]) { SetMonData(mon, MON_DATA_LEVEL, &newLevel); SetMonExpWithMaxLevelCheck(mon, species, newLevel, exp); @@ -5556,7 +5709,7 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL); if (species == SPECIES_EGG) { return 0; @@ -5575,36 +5728,36 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) { - u16 learnedMoves[4]; + u16 learnedMoves[MAX_MON_MOVES]; u8 numMoves = 0; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); int i, j, k; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); - for (i = 0; i < 20; i++) + for (i = 0; i < MAX_LEVEL_UP_MOVES; i++) { u16 moveLevel; - if (gLevelUpLearnsets[species][i] == 0xFFFF) + if (gLevelUpLearnsets[species][i] == LEVEL_UP_END) break; - moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV; if (moveLevel <= (level << 9)) { - for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++) ; - if (j == 4) + if (j == MAX_MON_MOVES) { - for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++) ; if (k == numMoves) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID; } } } @@ -5617,48 +5770,48 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) u8 numMoves = 0; int i; - for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + for (i = 0; i < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++) + moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID; return numMoves; } u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) { - u16 learnedMoves[4]; - u16 moves[20]; + u16 learnedMoves[MAX_MON_MOVES]; + u16 moves[MAX_LEVEL_UP_MOVES]; u8 numMoves = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL); u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); int i, j, k; if (species == SPECIES_EGG) return 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); - for (i = 0; i < 20; i++) + for (i = 0; i < MAX_LEVEL_UP_MOVES; i++) { u16 moveLevel; - if (gLevelUpLearnsets[species][i] == 0xFFFF) + if (gLevelUpLearnsets[species][i] == LEVEL_UP_END) break; - moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV; if (moveLevel <= (level << 9)) { - for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++) ; - if (j == 4) + if (j == MAX_MON_MOVES) { - for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++) ; if (k == numMoves) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID; } } } @@ -5678,7 +5831,7 @@ u16 SpeciesToPokedexNum(u16 species) void ClearBattleMonForms(void) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) gBattleMonForms[i] = 0; } @@ -5730,7 +5883,7 @@ void PlayMapChosenOrBattleBGM(u16 songId) const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); @@ -5743,7 +5896,7 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p if (species > SPECIES_EGG) return gMonPaletteTable[0].data; - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) return gMonShinyPaletteTable[species].data; else @@ -5752,7 +5905,7 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); @@ -5762,7 +5915,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u { u32 shinyValue; - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) return &gMonShinyPaletteTable[species]; else @@ -5772,7 +5925,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u bool32 IsHMMove2(u16 move) { int i = 0; - while (sHMMoves[i] != 0xFFFF) + while (sHMMoves[i] != HM_MOVES_END) { if (sHMMoves[i++] == move) return TRUE; @@ -5782,24 +5935,24 @@ bool32 IsHMMove2(u16 move) bool8 IsMonSpriteNotFlipped(u16 species) { - return gBaseStats[species].noFlip; + return gSpeciesInfo[species].noFlip; } static s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor) { u8 nature = GetNature(mon); - return sPokeblockFlavorCompatibilityTable[nature * 5 + flavor]; + return sPokeblockFlavorCompatibilityTable[nature * FLAVOR_COUNT + flavor]; } s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor) { u8 nature = GetNatureFromPersonality(personality); - return sPokeblockFlavorCompatibilityTable[nature * 5 + flavor]; + return sPokeblockFlavorCompatibilityTable[nature * FLAVOR_COUNT + flavor]; } bool8 IsTradedMon(struct Pokemon *mon) { - u8 otName[PLAYER_NAME_LENGTH]; + u8 otName[PLAYER_NAME_LENGTH + 1]; u32 otId; GetMonData(mon, MON_DATA_OT_NAME, otName); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); @@ -5834,7 +5987,7 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0)) { @@ -5870,18 +6023,19 @@ void SetWildMonHeldItem(void) { u16 rnd = Random() % 100; u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL); - if (gBaseStats[species].item1 == gBaseStats[species].item2) + if (gSpeciesInfo[species].itemCommon == gSpeciesInfo[species].itemRare) { - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + // Both held items are the same, 100% chance to hold item + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon); return; } if (rnd > 44) { if (rnd <= 94) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon); else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemRare); } } } @@ -5896,7 +6050,7 @@ bool8 IsMonShiny(struct Pokemon *mon) static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) { bool8 retVal = FALSE; - u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + u32 shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) retVal = TRUE; return retVal; @@ -5931,6 +6085,7 @@ u16 FacilityClassToPicIndex(u16 facilityClass) return gFacilityClassToPicIndex[facilityClass]; } +// If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId) { switch (caseId) @@ -5990,21 +6145,17 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId) static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId) { s32 ivVal, evVal; - u16 statValue; + u16 statValue = 0; u8 nature; if (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS) - { - return statValue = 0; - } - else - { - ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL); - evVal = GetMonData(mon, MON_DATA_HP_EV + statId, NULL); - statValue = ((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5; - nature = GetNature(mon); - statValue = ModifyStatByNature(nature, statValue, (u8)statId); - } + return 0; + + ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL); + evVal = GetMonData(mon, MON_DATA_HP_EV + statId, NULL); + statValue = ((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5; + nature = GetNature(mon); + statValue = ModifyStatByNature(nature, statValue, (u8)statId); return statValue; } @@ -6049,14 +6200,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateEventLegalEnemyMon(void) +void CreateEnemyEventMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateEventLegalMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0); + CreateEventMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -6083,30 +6234,34 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality) bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 battlerId) { - u8 buffer[12]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(battlerId) != B_SIDE_PLAYER) { - GetMonData(mon, MON_DATA_NICKNAME, buffer); - StringGet_Nickname(buffer); - if (!StringCompare(buffer, gText_Ghost)) + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringGet_Nickname(nickname); + if (!StringCompare(nickname, gText_Ghost)) return TRUE; } return FALSE; } -static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *structPtr, u8 battlePosition) +#define ALLOC_FAIL_BUFFER (1 << 0) +#define ALLOC_FAIL_STRUCT (1 << 1) +#define GFX_MANAGER_ACTIVE 0xA3 // Arbitrary value + +static void InitMonSpritesGfx_Mode1(struct MonSpritesGfxManager *structPtr, u8 battlePosition) { u16 i = 0, j = 0; - if (battlePosition > 3) + if (battlePosition >= MAX_BATTLERS_COUNT) { - for (i = 0; i < (s8)structPtr->spriteCount; ++i) + for (i = 0; i < (s8)structPtr->numSprites; ++i) { structPtr->templates[i] = gSpriteTemplates_Battlers[i]; - for (j = 0; j < structPtr->frameCount; ++j) - structPtr->frameImages[i * structPtr->frameCount + j].data = &structPtr->bufferPtrs[i][j * 0x800]; - structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->frameCount]; + for (j = 0; j < structPtr->numFrames; ++j) + structPtr->frameImages[i * structPtr->numFrames + j].data = &structPtr->spritePointers[i][j * MON_PIC_SIZE]; + structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->numFrames]; } } else @@ -6114,172 +6269,173 @@ static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *struc const struct SpriteTemplate *template = &gSpriteTemplates_Battlers[battlePosition]; structPtr->templates[0] = *template; - for (j = 0; j < structPtr->frameCount; ++j) - structPtr->frameImages[j].data = &structPtr->bufferPtrs[0][j * 0x800]; + for (j = 0; j < structPtr->numFrames; ++j) + structPtr->frameImages[j].data = &structPtr->spritePointers[0][j * MON_PIC_SIZE]; structPtr->templates[0].images = structPtr->frameImages; } } // not used -static void OakSpeechNidoranFSetupTemplateDummy(struct OakSpeechNidoranFStruct *structPtr) +static void InitMonSpritesGfx_Mode0(struct MonSpritesGfxManager *structPtr) { u16 i, j; - for (i = 0; i < (s8)structPtr->spriteCount; ++i) + for (i = 0; i < (s8)structPtr->numSprites; ++i) { - structPtr->templates[i] = sOakSpeechNidoranFDummyTemplate; - for (j = 0; j < structPtr->frameCount; ++j) - structPtr->frameImages[i * structPtr->spriteCount + j].data = &structPtr->bufferPtrs[i][j * 0x800]; - structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->spriteCount]; // should be frameCount logically + structPtr->templates[i] = sSpriteTemplate_64x64; + for (j = 0; j < structPtr->numFrames; ++j) + structPtr->frameImages[i * structPtr->numSprites + j].data = &structPtr->spritePointers[i][j * MON_PIC_SIZE]; + structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->numSprites]; // should be numFrames logically structPtr->templates[i].anims = gAnims_MonPic; structPtr->templates[i].paletteTag = i; } } -struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable) +struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 battlePosition, u8 mode) { s32 size; - u8 i, flags = 0; + u8 i, failureFlags = 0; - if (sOakSpeechNidoranResources != NULL) + if (sMonSpritesGfxManager != NULL) { - if (sOakSpeechNidoranResources->enable == 0xA3) + if (sMonSpritesGfxManager->active == GFX_MANAGER_ACTIVE) return NULL; - memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct)); - sOakSpeechNidoranResources = NULL; + memset(sMonSpritesGfxManager, 0, sizeof(*sMonSpritesGfxManager)); + sMonSpritesGfxManager = NULL; } - sOakSpeechNidoranResources = AllocZeroed(0x18); - if (sOakSpeechNidoranResources == NULL) + sMonSpritesGfxManager = AllocZeroed(sizeof(*sMonSpritesGfxManager)); + if (sMonSpritesGfxManager == NULL) return NULL; - switch (enable) + + switch (mode) { - case TRUE: - if (battlePosition == 4) + case 1: + if (battlePosition == MAX_BATTLERS_COUNT) { - sOakSpeechNidoranResources->spriteCount = 4; - sOakSpeechNidoranResources->battlePosition = 4; + sMonSpritesGfxManager->numSprites = MAX_BATTLERS_COUNT; + sMonSpritesGfxManager->battlePosition = MAX_BATTLERS_COUNT; } else { - if (battlePosition > 4) + if (battlePosition > MAX_BATTLERS_COUNT) battlePosition = 0; - sOakSpeechNidoranResources->spriteCount = 1; - sOakSpeechNidoranResources->battlePosition = 1; + sMonSpritesGfxManager->numSprites = 1; + sMonSpritesGfxManager->battlePosition = 1; } - sOakSpeechNidoranResources->frameCount = 4; - sOakSpeechNidoranResources->enable2 = TRUE; + sMonSpritesGfxManager->numFrames = MAX_MON_PIC_FRAMES; + sMonSpritesGfxManager->mode = 1; break; - case FALSE: + case 0: default: if (!battlePosition) battlePosition = 1; if (battlePosition > 8) battlePosition = 8; - sOakSpeechNidoranResources->spriteCount = (battlePosition << 16) >> 16; - sOakSpeechNidoranResources->battlePosition = battlePosition; - sOakSpeechNidoranResources->frameCount = 4; - sOakSpeechNidoranResources->enable2 = FALSE; + sMonSpritesGfxManager->numSprites = (battlePosition << 16) >> 16; + sMonSpritesGfxManager->battlePosition = battlePosition; + sMonSpritesGfxManager->numFrames = 4; + sMonSpritesGfxManager->mode = 0; break; } - size = sOakSpeechNidoranResources->frameCount * 0x800; - sOakSpeechNidoranResources->sizePerSprite = size; - sOakSpeechNidoranResources->dataBuffer = AllocZeroed(sOakSpeechNidoranResources->spriteCount * size); - sOakSpeechNidoranResources->bufferPtrs = AllocZeroed(sOakSpeechNidoranResources->spriteCount * 0x20); - if (sOakSpeechNidoranResources->dataBuffer == NULL || sOakSpeechNidoranResources->bufferPtrs == NULL) + + // Set up sprite / sprite pointer buffers + size = sMonSpritesGfxManager->numFrames * MON_PIC_SIZE; + sMonSpritesGfxManager->dataSize = size; + sMonSpritesGfxManager->spriteBuffer = AllocZeroed(sMonSpritesGfxManager->numSprites * size); + sMonSpritesGfxManager->spritePointers = AllocZeroed(sMonSpritesGfxManager->numSprites * 32); // ? Only * 4 is necessary, perhaps they were thinking bits. + if (sMonSpritesGfxManager->spriteBuffer == NULL || sMonSpritesGfxManager->spritePointers == NULL) { - flags |= 1; + failureFlags |= ALLOC_FAIL_BUFFER; } else { do { - for (i = 0; i < (s8)sOakSpeechNidoranResources->spriteCount; ++i) - sOakSpeechNidoranResources->bufferPtrs[i] = &sOakSpeechNidoranResources->dataBuffer[sOakSpeechNidoranResources->sizePerSprite * i]; + for (i = 0; i < (s8)sMonSpritesGfxManager->numSprites; ++i) + sMonSpritesGfxManager->spritePointers[i] = &sMonSpritesGfxManager->spriteBuffer[sMonSpritesGfxManager->dataSize * i]; } while (0); } - sOakSpeechNidoranResources->templates = AllocZeroed(sizeof(struct SpriteTemplate) * sOakSpeechNidoranResources->spriteCount); - sOakSpeechNidoranResources->frameImages = AllocZeroed(sOakSpeechNidoranResources->spriteCount * sizeof(struct SpriteFrameImage) * sOakSpeechNidoranResources->frameCount); - if (sOakSpeechNidoranResources->templates == NULL || sOakSpeechNidoranResources->frameImages == NULL) + + // Set up sprite structs + sMonSpritesGfxManager->templates = AllocZeroed(sizeof(struct SpriteTemplate) * sMonSpritesGfxManager->numSprites); + sMonSpritesGfxManager->frameImages = AllocZeroed(sMonSpritesGfxManager->numSprites * sizeof(struct SpriteFrameImage) * sMonSpritesGfxManager->numFrames); + if (sMonSpritesGfxManager->templates == NULL || sMonSpritesGfxManager->frameImages == NULL) { - flags |= 2; + failureFlags |= ALLOC_FAIL_STRUCT; } else { - for (i = 0; i < sOakSpeechNidoranResources->frameCount * sOakSpeechNidoranResources->spriteCount; ++i) - sOakSpeechNidoranResources->frameImages[i].size = 0x800; - switch (sOakSpeechNidoranResources->enable2) + for (i = 0; i < sMonSpritesGfxManager->numFrames * sMonSpritesGfxManager->numSprites; i++) + sMonSpritesGfxManager->frameImages[i].size = MON_PIC_SIZE; + switch (sMonSpritesGfxManager->mode) { - case TRUE: - OakSpeechNidoranFSetupTemplate(sOakSpeechNidoranResources, battlePosition); + case 1: + InitMonSpritesGfx_Mode1(sMonSpritesGfxManager, battlePosition); break; - case FALSE: + case 0: default: - OakSpeechNidoranFSetupTemplateDummy(sOakSpeechNidoranResources); + InitMonSpritesGfx_Mode0(sMonSpritesGfxManager); break; } } - if (flags & 2) + + // If either of the allocations failed free their respective members + if (failureFlags & ALLOC_FAIL_STRUCT) { - if (sOakSpeechNidoranResources->frameImages != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->frameImages); - if (sOakSpeechNidoranResources->templates != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->templates); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->frameImages); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->templates); } - if (flags & 1) + if (failureFlags & ALLOC_FAIL_BUFFER) { - if (sOakSpeechNidoranResources->bufferPtrs != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->bufferPtrs); - if (sOakSpeechNidoranResources->dataBuffer != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->dataBuffer); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->spritePointers); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->spriteBuffer); } - if (flags) + + if (failureFlags) { - memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct)); - FREE_AND_SET_NULL(sOakSpeechNidoranResources); + // Clear, something failed to allocate + memset(sMonSpritesGfxManager, 0, sizeof(*sMonSpritesGfxManager)); + FREE_AND_SET_NULL(sMonSpritesGfxManager); } else { - sOakSpeechNidoranResources->enable = 0xA3; + sMonSpritesGfxManager->active = GFX_MANAGER_ACTIVE; } - return sOakSpeechNidoranResources; + return sMonSpritesGfxManager; } -void OakSpeechNidoranFFreeResources(void) +void DestroyMonSpritesGfxManager(void) { - if (sOakSpeechNidoranResources != NULL) + if (sMonSpritesGfxManager != NULL) { - if (sOakSpeechNidoranResources->enable != 0xA3) + if (sMonSpritesGfxManager->active != GFX_MANAGER_ACTIVE) { - memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct)); - sOakSpeechNidoranResources = NULL; + memset(sMonSpritesGfxManager, 0, sizeof(*sMonSpritesGfxManager)); + sMonSpritesGfxManager = NULL; } else { - if (sOakSpeechNidoranResources->frameImages != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->frameImages); - if (sOakSpeechNidoranResources->templates != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->templates); - if (sOakSpeechNidoranResources->bufferPtrs != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->bufferPtrs); - if (sOakSpeechNidoranResources->dataBuffer != NULL) - FREE_AND_SET_NULL(sOakSpeechNidoranResources->dataBuffer); - memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct)); - FREE_AND_SET_NULL(sOakSpeechNidoranResources); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->frameImages); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->templates); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->spritePointers); + TRY_FREE_AND_SET_NULL(sMonSpritesGfxManager->spriteBuffer); + memset(sMonSpritesGfxManager, 0, sizeof(*sMonSpritesGfxManager)); + FREE_AND_SET_NULL(sMonSpritesGfxManager); } } } -void *OakSpeechNidoranFGetBuffer(u8 bufferId) +u8 *MonSpritesGfxManager_GetSpritePtr(u8 spriteNum) { - if (sOakSpeechNidoranResources->enable != 0xA3) + if (sMonSpritesGfxManager->active != GFX_MANAGER_ACTIVE) { return NULL; } else { - if (bufferId >= (s8)sOakSpeechNidoranResources->spriteCount) - bufferId = 0; - return sOakSpeechNidoranResources->bufferPtrs[bufferId]; + if (spriteNum >= (s8)sMonSpritesGfxManager->numSprites) + spriteNum = 0; + return sMonSpritesGfxManager->spritePointers[spriteNum]; } } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index e0ba89e1d..49e94867b 100644 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2692,7 +2692,7 @@ void IsPokemonJumpSpeciesInParty(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (IsSpeciesAllowedInPokemonJump(species)) { gSpecialVar_Result = TRUE; diff --git a/src/pokemon_storage_system_data.c b/src/pokemon_storage_system_data.c index dd1502977..ed09bdb65 100644 --- a/src/pokemon_storage_system_data.c +++ b/src/pokemon_storage_system_data.c @@ -1031,7 +1031,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct Pokemon *mon = (struct Pokemon *)pokemon; - gStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); + gStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); if (gStorage->displayMonSpecies != SPECIES_NONE) { sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); @@ -1054,7 +1054,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon; - gStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2); + gStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (gStorage->displayMonSpecies != SPECIES_NONE) { u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); diff --git a/src/pokemon_storage_system_graphics.c b/src/pokemon_storage_system_graphics.c index 9e97c0e6f..946b319d9 100644 --- a/src/pokemon_storage_system_graphics.c +++ b/src/pokemon_storage_system_graphics.c @@ -298,7 +298,7 @@ static u8 GetMonIconPriorityByCursorArea(void) void CreateMovingMonIcon(void) { u32 personality = GetMonData(&gStorage->movingMon, MON_DATA_PERSONALITY); - u16 species = GetMonData(&gStorage->movingMon, MON_DATA_SPECIES2); + u16 species = GetMonData(&gStorage->movingMon, MON_DATA_SPECIES_OR_EGG); u8 priority = GetMonIconPriorityByCursorArea(); gStorage->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7); @@ -318,7 +318,7 @@ static void InitBoxMonSprites(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); @@ -344,7 +344,7 @@ static void InitBoxMonSprites(u8 boxId) void CreateBoxMonIconAtPos(u8 boxPosition) { - u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { @@ -567,7 +567,7 @@ static void SetBoxSpeciesAndPersonalities(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - gStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + gStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (gStorage->boxSpecies[boxPosition] != SPECIES_NONE) gStorage->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); boxPosition++; @@ -597,14 +597,14 @@ void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode) void CreatePartyMonsSprites(bool8 visible) { u16 i, count; - u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES_OR_EGG); u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY); gStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); count = 1; for (i = 1; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); diff --git a/src/pokemon_storage_system_misc.c b/src/pokemon_storage_system_misc.c index 90bb93e43..9d219c7d2 100644 --- a/src/pokemon_storage_system_misc.c +++ b/src/pokemon_storage_system_misc.c @@ -400,7 +400,7 @@ static void MultiMove_DeselectRow(u8 row, u8 minColumn, u8 maxColumn) static void MultiMove_SetIconToBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY); if (species != SPECIES_NONE) @@ -414,7 +414,7 @@ static void MultiMove_SetIconToBg(u8 x, u8 y) static void MultiMove_ClearIconFromBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) FillWindowPixelRect8Bit(gStorage->multiMoveWindowId, PIXEL_FILL(0), 24 * x, 24 * y, 32, 32); diff --git a/src/pokemon_storage_system_tasks.c b/src/pokemon_storage_system_tasks.c index 173bb14b1..e80e9fe92 100644 --- a/src/pokemon_storage_system_tasks.c +++ b/src/pokemon_storage_system_tasks.c @@ -2680,12 +2680,12 @@ static void SetPokeStorageQuestLogEvent(u8 action) if (sInPartyMenu) { box2 = TOTAL_BOXES_COUNT; - species2 = GetMonData(&gPlayerParty[GetBoxCursorPosition()], MON_DATA_SPECIES2); + species2 = GetMonData(&gPlayerParty[GetBoxCursorPosition()], MON_DATA_SPECIES_OR_EGG); } else { box2 = StorageGetCurrentBox(); - species2 = GetCurrentBoxMonData(GetBoxCursorPosition(), MON_DATA_SPECIES2); + species2 = GetCurrentBoxMonData(GetBoxCursorPosition(), MON_DATA_SPECIES_OR_EGG); } questLogData = &gStorage->pokeStorageQuestLogData; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index c56f243b2..06c747214 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2105,15 +2105,15 @@ static void BufferMonInfo(void) return; } - sMonSummaryScreen->monTypes[0] = gBaseStats[dexNum].type1; - sMonSummaryScreen->monTypes[1] = gBaseStats[dexNum].type2; + sMonSummaryScreen->monTypes[0] = gSpeciesInfo[dexNum].types[0]; + sMonSummaryScreen->monTypes[1] = gSpeciesInfo[dexNum].types[1]; GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_NICKNAME, tempStr); StringCopyN_Multibyte(sMonSummaryScreen->summary.nicknameStrBuf, tempStr, POKEMON_NAME_LENGTH); StringGet_Nickname(sMonSummaryScreen->summary.nicknameStrBuf); gender = GetMonGender(&sMonSummaryScreen->currentMon); - dexNum = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + dexNum = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG); if (gender == MON_FEMALE) StringCopy(sMonSummaryScreen->summary.genderSymbolStrBuf, gText_FemaleSymbol); @@ -2224,7 +2224,7 @@ static void BufferMonSkills(void) if (level < 100) { species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES); - expToNextLevel = gExperienceTables[gBaseStats[species].growthRate][level + 1] - exp; + expToNextLevel = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - exp; } ConvertIntToDecimalStringN(sMonSummaryScreen->summary.expToNextLevelStrBuf, expToNextLevel, STR_CONV_MODE_LEFT_ALIGN, 7); @@ -2646,7 +2646,7 @@ static void PokeSum_PrintTrainerMemo_Mon_HeldByOT(void) // but Japanese uses different grammar for Bold and Gentle natures. if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL) == 0) // Hatched { - if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) // Fateful encounter + if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MODERN_FATEFUL_ENCOUNTER) == TRUE) { if (PokeSum_IsMonBoldOrGentle(nature)) DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gText_PokeSum_FatefulEncounterHatched_BoldGentleGrammar); @@ -2743,7 +2743,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void) // but Japanese uses different grammar for Bold and Gentle natures. if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL) == 0) // hatched from an EGG { - if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) // Fateful encounter + if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MODERN_FATEFUL_ENCOUNTER) == TRUE) { if (PokeSum_IsMonBoldOrGentle(nature)) DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gText_PokeSum_ApparentlyFatefulEncounterHatched_BoldGentleGrammar); @@ -2797,7 +2797,7 @@ static void PokeSum_PrintTrainerMemo_Egg(void) if (sMonSummaryScreen->monList.mons != gEnemyParty) { - if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) + if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MODERN_FATEFUL_ENCOUNTER) == TRUE) chosenStrIndex = 4; else { @@ -2815,7 +2815,7 @@ static void PokeSum_PrintTrainerMemo_Egg(void) } else { - if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) + if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MODERN_FATEFUL_ENCOUNTER) == TRUE) chosenStrIndex = 4; else { @@ -4014,7 +4014,7 @@ static void PokeSum_CreateMonPicSprite(void) sMonPicBounceState = AllocZeroed(sizeof(struct MonPicBounceState)); - species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_PERSONALITY); trainerId = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OT_ID); @@ -4142,7 +4142,7 @@ static void PokeSum_CreateMonIconSprite(void) u16 species; u32 personality; - species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_PERSONALITY); SafeLoadMonIconPalette(species); @@ -4178,7 +4178,7 @@ static void PokeSum_ShowOrHideMonIconSprite(bool8 invisible) static void PokeSum_DestroyMonIconSprite(void) { u16 species; - species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG); SafeFreeMonIconPalette(species); DestroyMonIcon(&gSprites[sMonSummaryScreen->monIconSpriteId]); } @@ -4622,8 +4622,8 @@ static void UpdateExpBarObjs(void) if (level < 100) { - totalExpToNextLevel = gExperienceTables[gBaseStats[species].growthRate][level + 1] - gExperienceTables[gBaseStats[species].growthRate][level]; - curExpToNextLevel = exp - gExperienceTables[gBaseStats[species].growthRate][level]; + totalExpToNextLevel = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - gExperienceTables[gSpeciesInfo[species].growthRate][level]; + curExpToNextLevel = exp - gExperienceTables[gSpeciesInfo[species].growthRate][level]; pointsPerTile = ((totalExpToNextLevel << 2) / 8); totalPoints = (curExpToNextLevel << 2); @@ -5183,9 +5183,9 @@ static void PokeSum_TryPlayMonCry(void) if (!GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_IS_EGG)) { if (ShouldPlayNormalMonCry(&sMonSummaryScreen->currentMon) == TRUE) - PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, CRY_MODE_NORMAL); + PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG), 0, CRY_MODE_NORMAL); else - PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, CRY_MODE_WEAK); + PlayCry_ByMode(GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG), 0, CRY_MODE_WEAK); } } diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index ee6dffcbd..60696d810 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -61,7 +61,7 @@ struct GFRomHeader u32 externalEventFlagsOffset; u32 externalEventDataOffset; u32 unk18; - const struct BaseStats * baseStats; + const struct SpeciesInfo * speciesInfo; const u8 (* abilityNames)[]; const u8 *const * abilityDescriptions; const struct Item * items; @@ -146,7 +146,7 @@ static const struct GFRomHeader sGFRomHeader = { .externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags), .externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData), .unk18 = 0x00000000, - .baseStats = gBaseStats, + .speciesInfo = gSpeciesInfo, .abilityNames = gAbilityNames, .abilityDescriptions = gAbilityDescriptionPointers, .items = gItems, diff --git a/src/save.c b/src/save.c index 08b8465b7..07def36e4 100644 --- a/src/save.c +++ b/src/save.c @@ -7,6 +7,7 @@ #include "link.h" #include "save_failed_screen.h" #include "fieldmap.h" +#include "pokemon_storage_system.h" #include "gba/flash_internal.h" static u8 HandleWriteSector(u16 sectorId, const struct SaveSectorLocation *locations); diff --git a/src/scrcmd.c b/src/scrcmd.c index 12d0a9588..1e7068d3f 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2222,21 +2222,21 @@ bool8 ScrCmd_normalmsg(struct ScriptContext * ctx) return FALSE; } -// This command will set a Pokémon's eventLegal bit; there is no similar command to clear it. -bool8 ScrCmd_setmoneventlegal(struct ScriptContext * ctx) +// This command will set a Pokémon's modernFatefulEncounter bit; there is no similar command to clear it. +bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext * ctx) { - bool8 isEventLegal = TRUE; + bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); return FALSE; } -bool8 ScrCmd_checkmoneventlegal(struct ScriptContext * ctx) +bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext * ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); return FALSE; } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 4bd5c9f22..bc11dc001 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -109,7 +109,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item) for(i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) return TRUE; } diff --git a/src/trade.c b/src/trade.c index e7de8d22d..d3966b993 100644 --- a/src/trade.c +++ b/src/trade.c @@ -948,7 +948,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon * mon = &gPlayerParty[i]; - sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -960,7 +960,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon * mon = &gEnemyParty[i]; - sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -1145,7 +1145,7 @@ void CB2_ReturnToTradeMenuFromSummary(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon( - GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), + GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, sTradeMonSpriteCoords[i][0] * 8 + 14, sTradeMonSpriteCoords[i][1] * 8 - 12, @@ -1157,7 +1157,7 @@ void CB2_ReturnToTradeMenuFromSummary(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon( - GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), + GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8 + 14, sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8 - 12, @@ -1964,7 +1964,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 cursor // Partner cant trade illegitimate Deoxys or Mew partnerSpecies = GetMonData(&gEnemyParty[sTradeMenu->partnerCursorPosition % PARTY_SIZE], MON_DATA_SPECIES); if ((partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) - && !GetMonData(&gEnemyParty[sTradeMenu->partnerCursorPosition % PARTY_SIZE], MON_DATA_EVENT_LEGAL)) + && !GetMonData(&gEnemyParty[sTradeMenu->partnerCursorPosition % PARTY_SIZE], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return PARTNER_MON_INVALID; if (hasLiveMon != 0) @@ -2747,7 +2747,7 @@ static u32 CanTradeSelectedMon(struct Pokemon * playerParty, int partyCount, int for (i = 0; i < partyCount; i++) { - species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2); + species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES_OR_EGG); species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES); } @@ -2790,7 +2790,7 @@ static u32 CanTradeSelectedMon(struct Pokemon * playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_EVENT_LEGAL)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return CANT_TRADE_INVALID_MON; } @@ -2855,17 +2855,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isModernFatefulEncounter) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isEventLegal) + if (!isModernFatefulEncounter) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerCanLinkNationally = player.canLinkNationally; @@ -2890,7 +2890,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf } // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) + if (IsDeoxysOrMewUntradable(playerSpecies, isModernFatefulEncounter)) return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; if (partnerSpecies == SPECIES_EGG) @@ -2902,8 +2902,8 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf else { // Player's Pokémon must be of the type the partner requested - if (gBaseStats[playerSpecies2].type1 != requestedType - && gBaseStats[playerSpecies2].type2 != requestedType) + if (gSpeciesInfo[playerSpecies2].types[0] != requestedType + && gSpeciesInfo[playerSpecies2].types[1] != requestedType) return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS; } @@ -2933,11 +2933,11 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter) { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isEventLegal)) + if (IsDeoxysOrMewUntradable(species, isModernFatefulEncounter)) return CANT_REGISTER_MON; if (hasNationalDex) diff --git a/src/trade_scene.c b/src/trade_scene.c index 47d5f191c..82c363ada 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -755,7 +755,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) { case 0: // Load graphics - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); if (whichParty == TRADE_PLAYER) @@ -883,8 +883,8 @@ void CB2_LinkTrade(void) case 10: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); ShowBg(0); - sTradeAnim->questLogSpecies[TRADE_PLAYER] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_SPECIES2); - sTradeAnim->questLogSpecies[TRADE_PARTNER] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_SPECIES2); + sTradeAnim->questLogSpecies[TRADE_PLAYER] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_SPECIES_OR_EGG); + sTradeAnim->questLogSpecies[TRADE_PARTNER] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_SPECIES_OR_EGG); memcpy(sTradeAnim->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, PLAYER_NAME_LENGTH); gMain.state++; break; diff --git a/src/trainer_tower.c b/src/trainer_tower.c index fd0bc4a0a..5aa48d026 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1030,7 +1030,7 @@ static s32 GetPartyMaxLevel(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG) { s32 currLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL, NULL); if (currLevel > topLevel) diff --git a/src/union_room.c b/src/union_room.c index 48545c01c..59a090f98 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4002,7 +4002,7 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) return UR_TRADE_MATCH; } @@ -4012,8 +4012,8 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); + if (gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type) return UR_TRADE_MATCH; } return UR_TRADE_NOTYPE; @@ -4145,7 +4145,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) count++; } @@ -4174,7 +4174,7 @@ void Script_ResetUnionRoomTrade(void) static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade) { - trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); if (trade->playerSpecies == SPECIES_EGG) @@ -4185,7 +4185,7 @@ static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * tra static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade) { - trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } @@ -4217,7 +4217,7 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mul cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); if (cur_personality != personality) continue; - cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (cur_species != species) continue; response = i;