Initial commit

This commit is contained in:
Skeli 2019-05-23 15:34:58 -04:00
commit 6906a69bd9
58 changed files with 133541 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
a.exe
*.gba
build/*
extracted/*
*.sgm
*.dmp
*.bak
*.lnk
*.sav
offsets.ini
generatedrepoints

17
BPRE.ld Normal file
View File

@ -0,0 +1,17 @@
malloc_ = 0x08002B9C|1;
free_ = 0x08002BC4|1;
__divsi3 = 0x081E4018|1;
__modsi3 = 0x081E40F4|1;
__udivsi3 = 0x081E460C|1;
__umodsi3 = 0x081E4684|1;
memcpy_ = 0x081E5E78|1;
memset_ = 0x081E5ED8|1;
GetGenderFromSpeciesAndPersonality = 0x803F78C | 1;
SpeciesToNationalPokedexNum = 0x8043298 | 1;
DrawSpindaSpots = 0x8043458 | 1;
GetUnownLetterFromPersonality = 0x8082AB8 | 1;
LZ77UnCompWram = 0x81E3B70 | 1;
/*The Deal Breaker*/
break_func = 0x08416304 | 1;

20
LICENSE Normal file
View File

@ -0,0 +1,20 @@
Copyright © 2000 Kevin Mills <kevin.mills226@gmail.com>
This work is free. You can redistribute it and/or modify it under the
terms of the Do What The Fuck You Want To Public License, Version 2,
as published by Sam Hocevar. See the below file for more details.
--------------------------------------------------------------------
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

1
README.md Normal file
View File

@ -0,0 +1 @@
# Dynamic-Pokemon-Expansion

77
bytereplacement Normal file
View File

@ -0,0 +1,77 @@
##
##Use New Name Table
08041000 C0 46 C0 46 C0 46
##Break Sprite Limiters
0800ED72 07 E0
0800F1B6 07 E0
#Break Palette Limiter
08044104 04 E0
##Break Sprite Position Limiters
0807472E 03 E0
0807465E 03 E0
08074788 06 E0
#Icon Palette Fixes
08096F90 C0 46
08096E7A C0 46 C0 46
080971DA C0 46
#Update Pokedex
081025EC FA
081025EE 40 01
08104B00 C0 46
08104B02 C0 46
08104B16 C0 46
08104B18 C0 46
08104B1A C0 46
08104B26 16 E0
08104B34 0F E0
08104B6A 01 1C
08104B6C C0 46
08104B78 1A E0
08104BA2 01 1C
08104BA4 C0 46
080549B0 20 1C C0 46
080549B6 7D 22
080549BC 20 1C
080549BE 7D 30
080549C2 7D 22
#Seen Flags @0x202583C
080549D0 3C 58 02 02
08104B10 3C 58 02 02
08104B94 3C 58 02 02
#Caught Flags @0x20258B9
08104B5C B9 58 02 02
08104BB8 B9 58 02 02
##Fix Pokedex Species Issue
810583C FF
8105856 FF
#New Game Dex Clear
080549B0 20 1C 00 00
#Fix Evolution Anim
0800EC9A 07 E0
#Fix Trainer Card Stamps
08097011 E0
#Fix New Cries
080720CA 01 1C 11 E0
#Disable Help Menu
0813B8C2 1D E0
#Remove Footprints
08105DFE C0 46 C0 46
#Update Egg Move Limit
08045CA6 32
##Fix Pokedex Species Issue
0810583C FF
08105856 FF

111
charmap.tbl Normal file
View File

@ -0,0 +1,111 @@
00=
1B=\e
2D=&
2E=+
35==
36=;
5B=%
5C=(
5D=)
85=<
86=>
A1=0
A2=1
A3=2
A4=3
A5=4
A6=5
A7=6
A8=7
A9=8
AA=9
AB=!
AC=?
AD=.
AE=-
AF=·
B0=…
B1="
B2=\"
B3=
B4=
B4='
B5=♂
B6=♀
B7=¥
B8=,
B9=×
BA=/
BB=A
BC=B
BD=C
BE=D
BF=E
C0=F
C1=G
C2=H
C3=I
C4=J
C5=K
C6=L
C7=M
C8=N
C9=O
CA=P
CB=Q
CC=R
CD=S
CE=T
CF=U
D0=V
D1=W
D2=X
D3=Y
D4=Z
D5=a
D6=b
D7=c
D8=d
D9=e
DA=f
DB=g
DC=h
DD=i
DE=j
DF=k
E0=l
E1=m
E2=n
E3=o
E4=p
E5=q
E6=r
E7=s
E8=t
E9=u
EA=v
EB=w
EC=x
ED=y
EE=z
EF=▶
F0=:
F1=Ä
F2=Ö
F3=Ü
F4=ä
F5=ö
F6=ü
FA=\l
FB=\p
FE=\n
FF=$
/FF

1
functionrewrites Normal file
View File

@ -0,0 +1 @@
##

11
hooks Normal file
View File

@ -0,0 +1,11 @@
##
LoadSpecialPokePicHook 800ECF2 4
SpeciesToCryId 8043304 1
NationalPokedexNumToSpecies 8043200 1
GetFrontSpritePalFromSpeciesAndPersonality 80440F4 3
GetMonSpritePalStructFromOtIdPersonality 8044180 3
UpdateEggMoveLimit 8045C58 0
GenderedMonIconHook 8096E38 2
PrepareDexListViewsHook 8103530 1
AlphabeticalDexHook 8103684 1
AlternateDexEntriesHook 8105CBC 0

240
include/abilities.h Normal file
View File

@ -0,0 +1,240 @@
#pragma once
#define ABILITY_NONE 0
#define ABILITY_STENCH 0x1
#define ABILITY_DRIZZLE 0x2
#define ABILITY_SPEEDBOOST 0x3
#define ABILITY_BATTLEARMOR 0x4
#define ABILITY_STURDY 0x5
#define ABILITY_DAMP 0x6
#define ABILITY_LIMBER 0x7
#define ABILITY_SANDVEIL 0x8
#define ABILITY_STATIC 0x9
#define ABILITY_VOLTABSORB 0xA
#define ABILITY_WATERABSORB 0xB
#define ABILITY_OBLIVIOUS 0xC
#define ABILITY_CLOUDNINE 0xD
#define ABILITY_COMPOUNDEYES 0xE
#define ABILITY_INSOMNIA 0xF
#define ABILITY_COLORCHANGE 0x10
#define ABILITY_IMMUNITY 0x11
#define ABILITY_FLASHFIRE 0x12
#define ABILITY_SHIELDDUST 0x13
#define ABILITY_OWNTEMPO 0x14
#define ABILITY_SUCTIONCUPS 0x15
#define ABILITY_INTIMIDATE 0x16
#define ABILITY_SHADOWTAG 0x17
#define ABILITY_ROUGHSKIN 0x18
#define ABILITY_WONDERGUARD 0x19
#define ABILITY_LEVITATE 0x1A
#define ABILITY_EFFECTSPORE 0x1B
#define ABILITY_SYNCHRONIZE 0x1C
#define ABILITY_CLEARBODY 0x1D
#define ABILITY_NATURALCURE 0x1E
#define ABILITY_LIGHTNINGROD 0x1F
#define ABILITY_SERENEGRACE 0x20
#define ABILITY_SWIFTSWIM 0x21
#define ABILITY_CHLOROPHYLL 0x22
#define ABILITY_ILLUMINATE 0x23
#define ABILITY_TRACE 0x24
#define ABILITY_HUGEPOWER 0x25
#define ABILITY_POISONPOINT 0x26
#define ABILITY_INNERFOCUS 0x27
#define ABILITY_MAGMAARMOR 0x28
#define ABILITY_WATERVEIL 0x29
#define ABILITY_MAGNETPULL 0x2A
#define ABILITY_SOUNDPROOF 0x2B
#define ABILITY_RAINDISH 0x2C
#define ABILITY_SANDSTREAM 0x2D
#define ABILITY_PRESSURE 0x2E
#define ABILITY_THICKFAT 0x2F
#define ABILITY_EARLYBIRD 0x30
#define ABILITY_FLAMEBODY 0x31
#define ABILITY_RUNAWAY 0x32
#define ABILITY_KEENEYE 0x33
#define ABILITY_HYPERCUTTER 0x34
#define ABILITY_PICKUP 0x35
#define ABILITY_TRUANT 0x36
#define ABILITY_HUSTLE 0x37
#define ABILITY_CUTECHARM 0x38
#define ABILITY_PLUS 0x39
#define ABILITY_MINUS 0x3A
#define ABILITY_FORECAST 0x3B
#define ABILITY_STICKYHOLD 0x3C
#define ABILITY_SHEDSKIN 0x3D
#define ABILITY_GUTS 0x3E
#define ABILITY_MARVELSCALE 0x3F
#define ABILITY_LIQUIDOOZE 0x40
#define ABILITY_OVERGROW 0x41
#define ABILITY_BLAZE 0x42
#define ABILITY_TORRENT 0x43
#define ABILITY_SWARM 0x44
#define ABILITY_ROCKHEAD 0x45
#define ABILITY_DROUGHT 0x46
#define ABILITY_ARENATRAP 0x47
#define ABILITY_VITALSPIRIT 0x48
#define ABILITY_WHITESMOKE 0x49
#define ABILITY_PUREPOWER 0x4A
#define ABILITY_SHELLARMOR 0x4B
#define ABILITY_CACOPHONY 0x4C
#define ABILITY_AIRLOCK 0x4D
#define ABILITY_SWEETVEIL 0x4E
#define ABILITY_SKILLLINK 0x4F
#define ABILITY_MOTORDRIVE 0x50
#define ABILITY_MULTISCALE 0x51
#define ABILITY_TECHNICIAN 0x52
#define ABILITY_SCRAPPY 0x53
#define ABILITY_SUPERLUCK 0x54
#define ABILITY_SNIPER 0x55
#define ABILITY_REGENERATOR 0x56
#define ABILITY_PRANKSTER 0x57
#define ABILITY_ADAPTABILITY 0x58
#define ABILITY_BIGPECKS 0x59
#define ABILITY_MAGICBOUNCE 0x5A
#define ABILITY_RECKLESS 0x5B
#define ABILITY_SHEERFORCE 0x5C
#define ABILITY_IRONFIST 0x5D
#define ABILITY_RIVALRY 0x5E
#define ABILITY_SANDFORCE 0x5F
#define ABILITY_SOLARPOWER 0x60
#define ABILITY_HEATPROOF 0x61
#define ABILITY_DRYSKIN 0x62
#define ABILITY_TINTEDLENS 0x63
#define ABILITY_SOLIDROCK 0x64
#define ABILITY_FILTER 0x65
#define ABILITY_INFILTRATOR 0x66
#define ABILITY_DOWNLOAD 0x67
#define ABILITY_POISONHEAL 0x68
#define ABILITY_ICEBODY 0x69
#define ABILITY_MOODY 0x6A
#define ABILITY_HYDRATION 0x6B
#define ABILITY_HEALER 0x6C
#define ABILITY_SNOWCLOAK 0x6D
#define ABILITY_TANGLEDFEET 0x6E
#define ABILITY_SNOWWARNING 0x6F
#define ABILITY_QUICKFEET 0x70
#define ABILITY_SAPSIPPER 0x71
#define ABILITY_OVERCOAT 0x72
#define ABILITY_MAGICGUARD 0x73
#define ABILITY_BULLETPROOF 0x74
#define ABILITY_GALEWINGS 0x75
#define ABILITY_MOXIE 0x76
#define ABILITY_AFTERMATH 0x77
#define ABILITY_CURSEDBODY 0x78
#define ABILITY_GOOEY 0x79
#define ABILITY_MUMMY 0x7A
#define ABILITY_IRONBARBS 0x7B
#define ABILITY_SANDRUSH 0x7C
#define ABILITY_ANALYTIC 0x7D
#define ABILITY_NOGUARD 0x7E
#define ABILITY_MEGALAUNCHER 0x7F
#define ABILITY_TOUGHCLAWS 0x80
#define ABILITY_STRONGJAW 0x81
#define ABILITY_VICTORYSTAR 0x82
#define ABILITY_STORMDRAIN 0x83
#define ABILITY_DARKAURA 0x84
#define ABILITY_FAIRYAURA 0x85
#define ABILITY_AURABREAK 0x86
#define ABILITY_REFRIGERATE 0x87
#define ABILITY_PIXILATE 0x88
#define ABILITY_AERILATE 0x89
#define ABILITY_NORMALIZE 0x8A
#define ABILITY_UNBURDEN 0x8B
#define ABILITY_SIMPLE 0x8C
#define ABILITY_UNAWARE 0x8D
#define ABILITY_DEFIANT 0x8E
#define ABILITY_COMPETITIVE 0x8F
#define ABILITY_DEFEATIST 0x90
#define ABILITY_SLOWSTART 0x91
#define ABILITY_TOXICBOOST 0x92
#define ABILITY_FLAREBOOST 0x93
#define ABILITY_FURCOAT 0x94
#define ABILITY_WONDERSKIN 0x95
#define ABILITY_PROTEAN 0x96
#define ABILITY_PARENTALBOND 0x97
#define ABILITY_MOLDBREAKER 0x98
#define ABILITY_TURBOBLAZE 0x99
#define ABILITY_TERAVOLT 0x9A
#define ABILITY_ZENMODE 0x9B
#define ABILITY_BATTLEBOND 0x9C
#define ABILITY_BEASTBOOST 0x9D
#define ABILITY_CORROSION 0x9E
#define ABILITY_DISGUISE 0x9F
#define ABILITY_EMERGENCYEXIT 0xA0
#define ABILITY_FLUFFY 0xA1
#define ABILITY_FULLMETALBODY 0xA2
#define ABILITY_BROKEN_1 0xA3
#define ABILITY_BROKEN_2 0xA4
#define ABILITY_POWERCONSTRUCT 0xA5
#define ABILITY_PRISMARMOR 0xA6
#define ABILITY_RKS_SYSTEM 0xA7
#define ABILITY_SCHOOLING 0xA8
#define ABILITY_SHADOWSHIELD 0xA9
#define ABILITY_SHIELDSDOWN 0xAA
#define ABILITY_SLUSHRUSH 0xAB
#define ABILITY_SOULHEART 0xAC
#define ABILITY_STAMINA 0xAD
#define ABILITY_STEELWORKER 0xAE
#define ABILITY_TANGLINGHAIR 0xAF
#define ABILITY_TRIAGE 0xB0
#define ABILITY_WATERBUBBLE 0xB1
#define ABILITY_WATERCOMPACTION 0xB2
#define ABILITY_STALL 0xB3
#define ABILITY_MULTITYPE 0xB4
#define ABILITY_ELECTRICSURGE 0xB5
#define ABILITY_GRASSYSURGE 0xB6
#define ABILITY_MISTYSURGE 0xB7
#define ABILITY_PSYCHICSURGE 0xB8
#define ABILITY_SURGESURFER 0xB9
#define ABILITY_GRASSPELT 0xBA
#define ABILITY_ANGERPOINT 0xBB
#define ABILITY_ANTICIPATION 0xBC
#define ABILITY_FOREWARN 0xBD
#define ABILITY_FRISK 0xBE
#define ABILITY_CONTRARY 0xBF
#define ABILITY_UNNERVE 0xC0
#define ABILITY_WEAKARMOR 0xC1
#define ABILITY_HEAVYMETAL 0xC2
#define ABILITY_LIGHTMETAL 0xC3
#define ABILITY_STEADFAST 0xC4
#define ABILITY_IMPOSTER 0xC5
#define ABILITY_JUSTIFIED 0xC6
#define ABILITY_RATTLED 0xC7
#define ABILITY_MERCILESS 0xC8
#define ABILITY_AROMAVEIL 0xC9
#define ABILITY_FLOWERVEIL 0xCA
#define ABILITY_LEAFGUARD 0xCB
#define ABILITY_KLUTZ 0xCC
#define ABILITY_FLOWERGIFT 0xCD
#define ABILITY_BADDREAMS 0xCE
#define ABILITY_PICKPOCKET 0xCF
#define ABILITY_PORTALPOWER 0xD0
#define ABILITY_POISONTOUCH 0xD1
#define ABILITY_MAGICIAN 0xD2
#define ABILITY_STANCECHANGE 0xD3
#define ABILITY_PRIMORDIALSEA 0xD4
#define ABILITY_DESOLATELAND 0xD5
#define ABILITY_DELTASTREAM 0xD6
#define ABILITY_WIMPOUT 0xD7
#define ABILITY_BERSERK 0xD8
#define ABILITY_LONGREACH 0xD9
#define ABILITY_LIQUIDVOICE 0xDA
#define ABILITY_QUEENLYMAJESTY 0xDB
#define ABILITY_INNARDSOUT 0xDC
#define ABILITY_DAZZLING 0xDD
#define ABILITY_GLUTTONY 0xDE
#define ABILITY_HONEYGATHER 0xDF
#define ABILITY_FRIENDGUARD 0xE0
#define ABILITY_HARVEST 0xE1
#define ABILITY_TELEPATHY 0xE2
#define ABILITY_ILLUSION 0xE3
#define ABILITY_CHEEKPOUCH 0xE4
#define ABILITY_SYMBIOSIS 0xE5
#define ABILITY_STAKEOUT 0xE6
#define ABILITY_COMATOSE 0xE7
#define ABILITY_DANCER 0xE8
#define ABILITY_BATTERY 0xE9
#define ABILITY_RECEIVER 0xEA
#define ABILITY_POWEROFALCHEMY 0xEB
#define ABILITY_NEUROFORCE 0xEC
#define ABILITY_GALVANIZE 0xED

105
include/base_stats.h Normal file
View File

@ -0,0 +1,105 @@
#pragma once
struct BaseStats
{
/* 0x00 */ u8 baseHP;
/* 0x01 */ u8 baseAttack;
/* 0x02 */ u8 baseDefense;
/* 0x03 */ u8 baseSpeed;
/* 0x04 */ u8 baseSpAttack;
/* 0x05 */ u8 baseSpDefense;
/* 0x06 */ u8 type1;
/* 0x07 */ u8 type2;
/* 0x08 */ u8 catchRate;
/* 0x09 */ u8 expYield;
/* 0x0A */ u16 evYield_HP:2;
/* 0x0A */ u16 evYield_Attack:2;
/* 0x0A */ u16 evYield_Defense:2;
/* 0x0A */ u16 evYield_Speed:2;
/* 0x0B */ u16 evYield_SpAttack:2;
/* 0x0B */ u16 evYield_SpDefense:2;
/* 0x0C */ u16 item1;
/* 0x0E */ u16 item2;
/* 0x10 */ u8 genderRatio;
/* 0x11 */ u8 eggCycles;
/* 0x12 */ u8 friendship;
/* 0x13 */ u8 growthRate;
/* 0x14 */ u8 eggGroup1;
/* 0x15 */ u8 eggGroup2;
/* 0x16 */ u8 ability1;
/* 0x17 */ u8 ability2;
/* 0x18 */ u8 safariZoneFleeRate;
/* 0x19 */ u8 bodyColor : 7;
u8 noFlip : 1;
/* 0x1A */ u8 hiddenAbility;
};
enum
{
EGG_GROUP_NONE,
EGG_GROUP_MONSTER,
EGG_GROUP_WATER_1,
EGG_GROUP_BUG,
EGG_GROUP_FLYING,
EGG_GROUP_FIELD,
EGG_GROUP_FAIRY,
EGG_GROUP_GRASS,
EGG_GROUP_HUMAN_LIKE,
EGG_GROUP_WATER_3,
EGG_GROUP_MINERAL,
EGG_GROUP_AMORPHOUS,
EGG_GROUP_WATER_2,
EGG_GROUP_DITTO,
EGG_GROUP_DRAGON,
EGG_GROUP_UNDISCOVERED
};
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 TYPE_NORMAL 0x00
#define TYPE_FIGHTING 0x01
#define TYPE_FLYING 0x02
#define TYPE_POISON 0x03
#define TYPE_GROUND 0x04
#define TYPE_ROCK 0x05
#define TYPE_BUG 0x06
#define TYPE_GHOST 0x07
#define TYPE_STEEL 0x08
#define TYPE_MYSTERY 0x09
#define TYPE_FIRE 0x0a
#define TYPE_WATER 0x0b
#define TYPE_GRASS 0x0c
#define TYPE_ELECTRIC 0x0d
#define TYPE_PSYCHIC 0x0e
#define TYPE_ICE 0x0f
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
#define TYPE_ROOSTLESS 0x13
#define TYPE_BLANK 0x14
#define TYPE_FAIRY 0x17
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF

14
include/cries.h Normal file
View File

@ -0,0 +1,14 @@
#pragma once
struct ToneData
{
u8 type;
u8 key;
u8 length; // sound length (compatible sound)
u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
u32 wav; //struct WaveData *wav;
u8 attack;
u8 decay;
u8 sustain;
u8 release;
};

78
include/evolution.h Normal file
View File

@ -0,0 +1,78 @@
#pragma once
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
struct Evolution
{
u16 method;
u16 param;
u16 targetSpecies;
u16 unknown; // used for mega evo, Dawn Stone, level in EVO_TYPE_IN_PARTY, or time range in EVO_LEVEL_SPECIFIC_TIME_RANGE
};
enum EvolutionMethods
{
EVO_NONE = 0,
EVO_FRIENDSHIP,
EVO_FRIENDSHIP_DAY,
EVO_FRIENDSHIP_NIGHT,
EVO_LEVEL,
EVO_TRADE,
EVO_TRADE_ITEM,
EVO_ITEM, // for dawn stone, add MON_MALE(0x0) or MON_FEMALE(0xFF) to .unknown in evo table entry
EVO_LEVEL_ATK_GT_DEF,
EVO_LEVEL_ATK_EQ_DEF,
EVO_LEVEL_ATK_LT_DEF,
EVO_LEVEL_SILCOON,
EVO_LEVEL_CASCOON,
EVO_LEVEL_NINJASK,
EVO_LEVEL_SHEDINJA,
EVO_BEAUTY,
// new evolutions
EVO_RAINY_OW, // raining in overworld
EVO_MOVE_TYPE, // knows a move with a specific type (eg. sylveon: fairy type move). Param is the move type
EVO_TYPE_IN_PARTY, //specific type (param) in party after given level (unknown).
EVO_MAP, // specific map evolution. bank in param, map in unknown
EVO_MALE_LEVEL, // above given level if male
EVO_FEMALE_LEVEL, // above given level if female
EVO_LEVEL_NIGHT, // above given level at night
EVO_LEVEL_DAY, // above given level during day
EVO_HOLD_ITEM_NIGHT, // level up holding item at night (eg. sneasel)
EVO_HOLD_ITEM_DAY, // level up while holding a specific item during the day (eg. happiny)
EVO_MOVE, // knows a given move
EVO_OTHER_PARTY_MON, //another poke in the party, arg is a specific species
EVO_LEVEL_SPECIFIC_TIME_RANGE, // above given level with a range (unknown is [start][end]. eg lycanroc -> 1700-1800 hrs -> 0x1112)
};
#define EVO_MEGA 0xFE
enum MegaEvoVariants
{
MEGA_VARIANT_STANDARD,
MEGA_VARIANT_PRIMAL,
MEGA_VARIANT_WISH, //Rayquaza
MEGA_VARIANT_ULTRA_BURST, //Necrozma
};
#define MAP_NAME_ROUTE_1 0x65
#define MAP_NAME_ROUTE_2 0x66
#define MAP_NAME_FLOWER_PARADISE 0x88
#define MAP_NAME_GRIM_WOODS 0x7E
#define MAP_NAME_ROUTE_4 0x63
#define MAP_NAME_CINDER_VOLCANO 0x7F
#define MAP_NAME_ROUTE_5 0x69
#define MAP_NAME_VALLEY_CAVE 0x83
#define MAP_NAME_ROUTE_6 0x6A
#define MAP_NAME_ROUTE_7 0x6B
#define MAP_NAME_ROUTE_8 0x6C
#define MAP_NAME_FROST_MOUNTAIN 0x82
#define MAP_NAME_BLIZZARD_CITY 0x5C
#define MAP_NAME_ROUTE_9 0x6D
#define MAP_NAME_ROUTE_10 0x64
#define MAP_NAME_ROUTE_11 0x6F
#define MAP_NAME_THUNDERCAP_MT 0x8A
#define MAP_NAME_ROUTE_12 0x70
#define MAP_NAME_VIVILL_WOODS 0x8C
#define MAP_NAME_ROUTE_16 0x74
#define MAP_NAME_ROUTE_17 0x75

33
include/graphics.h Normal file
View File

@ -0,0 +1,33 @@
#pragma once
// Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
// Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
struct MonCoords
{
// This would use a bitfield, but some function
// uses it as a u8 and casting won't match.
u8 size; // u8 width:4, height:4;
u8 y_offset;
u16 unused;
};
struct CompressedSpriteSheet
{
u32 data; //const u8* data; // LZ77 compressed pixel data
u16 size; // Uncompressed size of pixel data
u16 tag;
};
struct CompressedSpritePalette
{
u32 data; //const u8* data; // LZ77 compressed palette data
u16 tag;
u16 unused;
};
void __attribute__((long_call)) LZ77UnCompWram(const void *src, void *dest);
void __attribute__((long_call)) DrawSpindaSpots(u16, u32, u8*, u8);

783
include/items.h Normal file
View File

@ -0,0 +1,783 @@
#pragma once
#define ITEM_NONE 0
#define ITEM_MASTER_BALL 1
#define ITEM_ULTRA_BALL 2
#define ITEM_GREAT_BALL 3
#define ITEM_POKE_BALL 4
#define ITEM_SAFARI_BALL 5
#define ITEM_NET_BALL 6
#define ITEM_DIVE_BALL 7
#define ITEM_NEST_BALL 8
#define ITEM_REPEAT_BALL 9
#define ITEM_TIMER_BALL 10
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
#define ITEM_POTION 13
#define ITEM_ANTIDOTE 14
#define ITEM_BURN_HEAL 15
#define ITEM_ICE_HEAL 16
#define ITEM_AWAKENING 17
#define ITEM_PARALYZE_HEAL 18
#define ITEM_FULL_RESTORE 19
#define ITEM_MAX_POTION 20
#define ITEM_HYPER_POTION 21
#define ITEM_SUPER_POTION 22
#define ITEM_FULL_HEAL 23
#define ITEM_REVIVE 24
#define ITEM_MAX_REVIVE 25
#define ITEM_FRESH_WATER 26
#define ITEM_SODA_POP 27
#define ITEM_LEMONADE 28
#define ITEM_MOOMOO_MILK 29
#define ITEM_ENERGY_POWDER 30
#define ITEM_ENERGY_ROOT 31
#define ITEM_HEAL_POWDER 32
#define ITEM_REVIVAL_HERB 33
#define ITEM_ETHER 34
#define ITEM_MAX_ETHER 35
#define ITEM_ELIXIR 36
#define ITEM_MAX_ELIXIR 37
#define ITEM_LAVA_COOKIE 38
#define ITEM_BLUE_FLUTE 39
#define ITEM_YELLOW_FLUTE 40
#define ITEM_RED_FLUTE 41
#define ITEM_BLACK_FLUTE 42
#define ITEM_WHITE_FLUTE 43
#define ITEM_BERRY_JUICE 44
#define ITEM_SACRED_ASH 45
#define ITEM_SHOAL_SALT 46
#define ITEM_SHOAL_SHELL 47
#define ITEM_RED_SHARD 48
#define ITEM_BLUE_SHARD 49
#define ITEM_YELLOW_SHARD 50
#define ITEM_GREEN_SHARD 51
#define ITEM_034 52
#define ITEM_035 53
#define ITEM_036 54
#define ITEM_037 55
#define ITEM_038 56
#define ITEM_039 57
#define ITEM_03A 58
#define ITEM_03B 59
#define ITEM_03C 60
#define ITEM_03D 61
#define ITEM_03E 62
#define ITEM_HP_UP 63
#define ITEM_PROTEIN 64
#define ITEM_IRON 65
#define ITEM_CARBOS 66
#define ITEM_CALCIUM 67
#define ITEM_RARE_CANDY 68
#define ITEM_PP_UP 69
#define ITEM_ZINC 70
#define ITEM_PP_MAX 71
#define ITEM_048 72
#define ITEM_GUARD_SPEC 73
#define ITEM_DIRE_HIT 74
#define ITEM_X_ATTACK 75
#define ITEM_X_DEFEND 76
#define ITEM_X_SPEED 77
#define ITEM_X_ACCURACY 78
#define ITEM_X_SPECIAL 79
#define ITEM_POKE_DOLL 80
#define ITEM_FLUFFY_TAIL 81
#define ITEM_052 82
#define ITEM_SUPER_REPEL 83
#define ITEM_MAX_REPEL 84
#define ITEM_ESCAPE_ROPE 85
#define ITEM_REPEL 86
#define ITEM_057 87
#define ITEM_058 88
#define ITEM_059 89
#define ITEM_05A 90
#define ITEM_05B 91
#define ITEM_05C 92
#define ITEM_SUN_STONE 93
#define ITEM_MOON_STONE 94
#define ITEM_FIRE_STONE 95
#define ITEM_THUNDER_STONE 96
#define ITEM_WATER_STONE 97
#define ITEM_LEAF_STONE 98
#define ITEM_063 99
#define ITEM_064 100
#define ITEM_065 101
#define ITEM_066 102
#define ITEM_TINY_MUSHROOM 103
#define ITEM_BIG_MUSHROOM 104
#define ITEM_069 105
#define ITEM_PEARL 106
#define ITEM_BIG_PEARL 107
#define ITEM_STARDUST 108
#define ITEM_STAR_PIECE 109
#define ITEM_NUGGET 110
#define ITEM_HEART_SCALE 111
#define ITEM_070 112
#define ITEM_071 113
#define ITEM_072 114
#define ITEM_073 115
#define ITEM_074 116
#define ITEM_075 117
#define ITEM_076 118
#define ITEM_077 119
#define ITEM_078 120
#define ITEM_ORANGE_MAIL 121
#define ITEM_HARBOR_MAIL 122
#define ITEM_GLITTER_MAIL 123
#define ITEM_MECH_MAIL 124
#define ITEM_WOOD_MAIL 125
#define ITEM_WAVE_MAIL 126
#define ITEM_BEAD_MAIL 127
#define ITEM_SHADOW_MAIL 128
#define ITEM_TROPIC_MAIL 129
#define ITEM_DREAM_MAIL 130
#define ITEM_FAB_MAIL 131
#define ITEM_RETRO_MAIL 132
#define ITEM_CHERI_BERRY 133
#define ITEM_CHESTO_BERRY 134
#define ITEM_PECHA_BERRY 135
#define ITEM_RAWST_BERRY 136
#define ITEM_ASPEAR_BERRY 137
#define ITEM_LEPPA_BERRY 138
#define ITEM_ORAN_BERRY 139
#define ITEM_PERSIM_BERRY 140
#define ITEM_LUM_BERRY 141
#define ITEM_SITRUS_BERRY 142
#define ITEM_FIGY_BERRY 143
#define ITEM_WIKI_BERRY 144
#define ITEM_MAGO_BERRY 145
#define ITEM_AGUAV_BERRY 146
#define ITEM_IAPAPA_BERRY 147
#define ITEM_RAZZ_BERRY 148
#define ITEM_BLUK_BERRY 149
#define ITEM_NANAB_BERRY 150
#define ITEM_WEPEAR_BERRY 151
#define ITEM_PINAP_BERRY 152
#define ITEM_POMEG_BERRY 153
#define ITEM_KELPSY_BERRY 154
#define ITEM_QUALOT_BERRY 155
#define ITEM_HONDEW_BERRY 156
#define ITEM_GREPA_BERRY 157
#define ITEM_TAMATO_BERRY 158
#define ITEM_CORNN_BERRY 159
#define ITEM_MAGOST_BERRY 160
#define ITEM_RABUTA_BERRY 161
#define ITEM_NOMEL_BERRY 162
#define ITEM_SPELON_BERRY 163
#define ITEM_PAMTRE_BERRY 164
#define ITEM_WATMEL_BERRY 165
#define ITEM_DURIN_BERRY 166
#define ITEM_BELUE_BERRY 167
#define ITEM_LIECHI_BERRY 168
#define ITEM_GANLON_BERRY 169
#define ITEM_SALAC_BERRY 170
#define ITEM_PETAYA_BERRY 171
#define ITEM_APICOT_BERRY 172
#define ITEM_LANSAT_BERRY 173
#define ITEM_STARF_BERRY 174
#define ITEM_ENIGMA_BERRY 175
#define ITEM_0B0 176
#define ITEM_0B1 177
#define ITEM_0B2 178
#define ITEM_BRIGHT_POWDER 179
#define ITEM_WHITE_HERB 180
#define ITEM_MACHO_BRACE 181
#define ITEM_EXP_SHARE 182
#define ITEM_QUICK_CLAW 183
#define ITEM_SOOTHE_BELL 184
#define ITEM_MENTAL_HERB 185
#ifdef UNBOUND
#define ITEM_CHOICE_BAND 0xB0 //For Unbound
#else
#define ITEM_CHOICE_BAND 186
#endif
#define ITEM_KINGS_ROCK 187
#define ITEM_SILVER_POWDER 188
#define ITEM_AMULET_COIN 189
#define ITEM_CLEANSE_TAG 190
#define ITEM_SOUL_DEW 191
#define ITEM_DEEP_SEA_TOOTH 192
#define ITEM_DEEP_SEA_SCALE 193
#define ITEM_SMOKE_BALL 194
#define ITEM_EVERSTONE 195
#define ITEM_FOCUS_BAND 196
#define ITEM_LUCKY_EGG 197
#define ITEM_SCOPE_LENS 198
#define ITEM_METAL_COAT 199
#define ITEM_LEFTOVERS 200
#define ITEM_DRAGON_SCALE 201
#define ITEM_LIGHT_BALL 202
#define ITEM_SOFT_SAND 203
#define ITEM_HARD_STONE 204
#define ITEM_MIRACLE_SEED 205
#define ITEM_BLACK_GLASSES 206
#define ITEM_BLACK_BELT 207
#define ITEM_MAGNET 208
#define ITEM_MYSTIC_WATER 209
#define ITEM_SHARP_BEAK 210
#define ITEM_POISON_BARB 211
#define ITEM_NEVER_MELT_ICE 212
#define ITEM_SPELL_TAG 213
#define ITEM_TWISTED_SPOON 214
#define ITEM_CHARCOAL 215
#define ITEM_DRAGON_FANG 216
#define ITEM_SILK_SCARF 217
#define ITEM_UP_GRADE 218
#define ITEM_SHELL_BELL 219
#define ITEM_SEA_INCENSE 220
#define ITEM_LAX_INCENSE 221
#define ITEM_LUCKY_PUNCH 222
#define ITEM_METAL_POWDER 223
#define ITEM_THICK_CLUB 224
#define ITEM_STICK 225
#define ITEM_0E2 226
#define ITEM_0E3 227
#define ITEM_0E4 228
#define ITEM_0E5 229
#define ITEM_0E6 230
#define ITEM_0E7 231
#define ITEM_0E8 232
#define ITEM_0E9 233
#define ITEM_0EA 234
#define ITEM_0EB 235
#define ITEM_0EC 236
#define ITEM_0ED 237
#define ITEM_0EE 238
#define ITEM_0EF 239
#define ITEM_0F0 240
#define ITEM_0F1 241
#define ITEM_0F2 242
#define ITEM_0F3 243
#define ITEM_0F4 244
#define ITEM_0F5 245
#define ITEM_0F6 246
#define ITEM_0F7 247
#define ITEM_0F8 248
#define ITEM_0F9 249
#define ITEM_0FA 250
#define ITEM_0FB 251
#define ITEM_0FC 252
#define ITEM_0FD 253
#define ITEM_RED_SCARF 254
#define ITEM_BLUE_SCARF 255
#define ITEM_PINK_SCARF 256
#define ITEM_GREEN_SCARF 257
#define ITEM_YELLOW_SCARF 258
#define ITEM_MACH_BIKE 259
#define ITEM_COIN_CASE 260
#define ITEM_ITEMFINDER 261
#define ITEM_OLD_ROD 262
#define ITEM_GOOD_ROD 263
#define ITEM_SUPER_ROD 264
#define ITEM_SS_TICKET 265
#define ITEM_CONTEST_PASS 266
#define ITEM_10B 267
#define ITEM_WAILMER_PAIL 268
#define ITEM_DEVON_GOODS 269
#define ITEM_SOOT_SACK 270
#define ITEM_BASEMENT_KEY 271
#define ITEM_ACRO_BIKE 272
#define ITEM_POKEBLOCK_CASE 273
#define ITEM_LETTER 274
#define ITEM_EON_TICKET 275
#define ITEM_RED_ORB 276
#define ITEM_BLUE_ORB 277
#define ITEM_SCANNER 278
#define ITEM_GO_GOGGLES 279
#define ITEM_METEORITE 280
#define ITEM_ROOM_1_KEY 281
#define ITEM_ROOM_2_KEY 282
#define ITEM_ROOM_4_KEY 283
#define ITEM_ROOM_6_KEY 284
#define ITEM_STORAGE_KEY 285
#define ITEM_ROOT_FOSSIL 286
#define ITEM_CLAW_FOSSIL 287
#define ITEM_DEVON_SCOPE 288
#define ITEM_TM01 289
#define ITEM_TM02 290
#define ITEM_TM03 291
#define ITEM_TM04 292
#define ITEM_TM05 293
#define ITEM_TM06 294
#define ITEM_TM07 295
#define ITEM_TM08 296
#define ITEM_TM09 297
#define ITEM_TM10 298
#define ITEM_TM11 299
#define ITEM_TM12 300
#define ITEM_TM13 301
#define ITEM_TM14 302
#define ITEM_TM15 303
#define ITEM_TM16 304
#define ITEM_TM17 305
#define ITEM_TM18 306
#define ITEM_TM19 307
#define ITEM_TM20 308
#define ITEM_TM21 309
#define ITEM_TM22 310
#define ITEM_TM23 311
#define ITEM_TM24 312
#define ITEM_TM25 313
#define ITEM_TM26 314
#define ITEM_TM27 315
#define ITEM_TM28 316
#define ITEM_TM29 317
#define ITEM_TM30 318
#define ITEM_TM31 319
#define ITEM_TM32 320
#define ITEM_TM33 321
#define ITEM_TM34 322
#define ITEM_TM35 323
#define ITEM_TM36 324
#define ITEM_TM37 325
#define ITEM_TM38 326
#define ITEM_TM39 327
#define ITEM_TM40 328
#define ITEM_TM41 329
#define ITEM_TM42 330
#define ITEM_TM43 331
#define ITEM_TM44 332
#define ITEM_TM45 333
#define ITEM_TM46 334
#define ITEM_TM47 335
#define ITEM_TM48 336
#define ITEM_TM49 337
#define ITEM_TM50 338
#define ITEM_HM01 339
#define ITEM_HM02 340
#define ITEM_HM03 341
#define ITEM_HM04 342
#define ITEM_HM05 343
#define ITEM_HM06 344
#define ITEM_HM07 345
#define ITEM_HM08 346
#define ITEM_15B 347
#define ITEM_15C 348
// FireRed/LeafGreen
#define ITEM_OAKS_PARCEL 349
#define ITEM_POKE_FLUTE 350
#define ITEM_SECRET_KEY 351
#define ITEM_BIKE_VOUCHER 352
#define ITEM_GOLD_TEETH 353
#define ITEM_OLD_AMBER 354
#define ITEM_CARD_KEY 355
#define ITEM_LIFT_KEY 356
#define ITEM_HELIX_FOSSIL 357
#define ITEM_DOME_FOSSIL 358
#define ITEM_SILPH_SCOPE 359
#define ITEM_BICYCLE 360
#define ITEM_TOWN_MAP 361
#define ITEM_VS_SEEKER 362
#define ITEM_FAME_CHECKER 363
#define ITEM_TM_CASE 364
#define ITEM_BERRY_POUCH 365
#define ITEM_TEACHY_TV 366
#define ITEM_TRI_PASS 367
#define ITEM_RAINBOW_PASS 368
#define ITEM_TEA 369
#define ITEM_MYSTIC_TICKET 370
#define ITEM_AURORA_TICKET 371
#define ITEM_POWDER_JAR 372
#define ITEM_RUBY 373
#define ITEM_SAPPHIRE 374
//New Sellable Items
#define ITEM_RARE_BONE 0x72
#define ITEM_PEARL_STRING 0xE4
#define ITEM_BIG_NUGGET 0xE5
#define ITEM_COMET_SHARD 0x201
#define ITEM_BALM_MUSHROOM 0x202
//New Food Items
#define ITEM_HONEY 0x48
#define ITEM_BIG_MALASADA 0x203
#define ITEM_CASTELIACONE 0x204
#define ITEM_LUMIOSE_GALETTE 0x205
#define ITEM_RAGE_CANDY_BAR 0x206
#define ITEM_SHALOUR_SABLE 0x207
#define ITEM_OLD_GATEAU 0x208
//Fossils
#define ITEM_SKULL_FOSSIL 0x209
#define ITEM_ARMOR_FOSSIL 0x20A
#define ITEM_COVER_FOSSIL 0x20B
#define ITEM_PLUME_FOSSIL 0x20C
#define ITEM_JAW_FOSSIL 0x20D
#define ITEM_SAIL_FOSSIL 0x20E
//EV Gain Items
#define ITEM_POWER_BRACER 0xF4
#define ITEM_POWER_BELT 0xF5
#define ITEM_POWER_LENS 0xF6
#define ITEM_POWER_BAND 0xF7
#define ITEM_POWER_ANKLET 0xF8
#define ITEM_POWER_WEIGHT 0xF9
//New Battle Hold Items
#define ITEM_ADAMANT_ORB 0x214
#define ITEM_LUSTROUS_ORB 0x215
#define ITEM_GRISEOUS_ORB 0x216
#define ITEM_EXPERT_BELT 0xEB
#define ITEM_POWER_HERB 0xEC
#define ITEM_WIDE_LENS 0xED
#define ITEM_ZOOM_LENS 0xEE
#define ITEM_DESTINY_KNOT 0xEF
#define ITEM_SMOOTH_ROCK 0xF0
#define ITEM_DAMP_ROCK 0xF1
#define ITEM_HEAT_ROCK 0xF2
#define ITEM_ICY_ROCK 0xF3
#define ITEM_BIG_ROOT 0xFA
#define ITEM_LIGHT_CLAY 0x5A
#define ITEM_SAFETY_GOGGLES 0x1ED
#define ITEM_ROCKY_HELMET 0xE2
#define ITEM_WEAKNESS_POLICY 0xE3
#define ITEM_ASSAULT_VEST 0x1EE
#define ITEM_EVIOLITE 0x1EF
#define ITEM_ABSORB_BULB 0x233
#define ITEM_AIR_BALLOON 0x234
#define ITEM_ADRENALINE_ORB 0x235
#define ITEM_BINDING_BAND 0x236
#define ITEM_CELL_BATTERY 0x237
#define ITEM_EJECT_BUTTON 0x238
#define ITEM_FLOAT_STONE 0x239
#define ITEM_FOCUS_SASH 0x23A
#define ITEM_GRIP_CLAW 0x23B
#define ITEM_IRON_BALL 0x23C
#define ITEM_LAGGING_TAIL 0x23D
#define ITEM_LUMINOUS_MOSS 0x23E
#define ITEM_METRONOME 0x240
#define ITEM_MUSCLE_BAND 0x241
#define ITEM_PROTECTIVE_PADS 0x242
#define ITEM_RED_CARD 0x243
#define ITEM_RING_TARGET 0x244
#define ITEM_SHED_SHELL 0x245
#define ITEM_SNOWBALL 0x246
#define ITEM_STICKY_BARB 0x247
#define ITEM_TERRAIN_EXTENDER 0x248
#define ITEM_WISE_GLASSES 0x249
#define ITEM_ELECTRIC_SEED 0x24A
#define ITEM_GRASSY_SEED 0x24B
#define ITEM_MISTY_SEED 0x24C
#define ITEM_PSYCHIC_SEED 0x24D
#define ITEM_LIFE_ORB 0x37
#define ITEM_TOXIC_ORB 0x38
#define ITEM_FLAME_ORB 0x39
#define ITEM_BLACK_SLUDGE 0x3A
#define ITEM_CHOICE_SPECS 0xB1
#define ITEM_CHOICE_SCARF 0xB2
//New Incense
#define ITEM_LUCK_INCENSE 0xFC
#define ITEM_FULL_INCENSE 0xFD
#define ITEM_ODD_INCENSE 0xFE
#define ITEM_PURE_INCENSE 0xFF
#define ITEM_ROCK_INCENSE 0x100
#define ITEM_ROSE_INCENSE 0x101
#define ITEM_WAVE_INCENSE 0x102
//Gems
#define ITEM_NORMAL_GEM 0x24E
#define ITEM_FIGHTING_GEM 0x24F
#define ITEM_FLYING_GEM 0x250
#define ITEM_POISON_GEM 0x251
#define ITEM_GROUND_GEM 0x252
#define ITEM_ROCK_GEM 0x253
#define ITEM_BUG_GEM 0x254
#define ITEM_GHOST_GEM 0x255
#define ITEM_STEEL_GEM 0x256
#define ITEM_FIRE_GEM 0x257
#define ITEM_WATER_GEM 0x258
#define ITEM_GRASS_GEM 0x259
#define ITEM_ELECTRIC_GEM 0x25A
#define ITEM_PSYCHIC_GEM 0x25B
#define ITEM_ICE_GEM 0x25C
#define ITEM_DRAGONG_EM 0x25D
#define ITEM_DARK_GEM 0x25E
#define ITEM_FAIRY_GEM 0x25F
//Arceus Plates
#define ITEM_FIST_PLATE 0x1F0
#define ITEM_SKY_PLATE 0x1F1
#define ITEM_TOXIC_PLATE 0x1F2
#define ITEM_EARTH_PLATE 0x1F3
#define ITEM_STONE_PLATE 0x1F4
#define ITEM_INSECT_PLATE 0x1F5
#define ITEM_SPOOKY_PLATE 0x1F6
#define ITEM_IRON_PLATE 0x1F7
#define ITEM_FLAME_PLATE 0x1F8
#define ITEM_SPLASH_PLATE 0x1F9
#define ITEM_MEADOW_PLATE 0x1FA
#define ITEM_ZAP_PLATE 0x1FB
#define ITEM_MIND_PLATE 0x1FC
#define ITEM_ICICLE_PLATE 0x1FD
#define ITEM_DRACO_PLATE 0x1FE
#define ITEM_DREAD_PLATE 0x1FF
#define ITEM_PIXIE_PLATE 0x200
//Mega Stones
#define ITEM_MEGA_RING 0x161
#define ITEM_ULTRA_NECROZIUM_Z 0x1BD
#define ITEM_VENUSAURITE 0x1BE
#define ITEM_CHARIZARDITE_X 0x1BF
#define ITEM_CHARIZARDITE_Y 0x1C0
#define ITEM_BLASTOISINITE 0x1C1
#define ITEM_BEEDRILLITE 0x1C2
#define ITEM_PIDGEOTITE 0x1C3
#define ITEM_ALAKAZITE 0x1C4
#define ITEM_SLOWBRONITE 0x1C5
#define ITEM_GENGARITE 0x1C6
#define ITEM_KANGASKHANITE 0x1C7
#define ITEM_PINSIRITE 0x1C8
#define ITEM_GYARADOSITE 0x1C9
#define ITEM_AERODACTYLITE 0x1CA
#define ITEM_MEWTWONITE_X 0x1CB
#define ITEM_MEWTWONITE_Y 0x1CC
#define ITEM_AMPHAROSITE 0x1CD
#define ITEM_STEELIXITE 0x1CE
#define ITEM_SCIZORITE 0x1CF
#define ITEM_HERACRONITE 0x1D0
#define ITEM_HOUNDOOMINITE 0x1D1
#define ITEM_TYRANITARITE 0x1D2
#define ITEM_SCEPTILITE 0x1D3
#define ITEM_BLAZIKENITE 0x1D4
#define ITEM_SWAMPERTITE 0x1D5
#define ITEM_GARDEVOIRITE 0x1D6
#define ITEM_SABLENITE 0x1D7
#define ITEM_MAWILITE 0x1D8
#define ITEM_AGGRONITE 0x1D9
#define ITEM_MEDICHAMITE 0x1DA
#define ITEM_MANECTITE 0x1DB
#define ITEM_SHARPEDONITE 0x1DC
#define ITEM_CAMERUPTITE 0x1DD
#define ITEM_ALTARIANITE 0x1DE
#define ITEM_BANETTITE 0x1DF
#define ITEM_ABSOLITE 0x1E0
#define ITEM_GLALITITE 0x1E1
#define ITEM_SALAMENCITE 0x1E2
#define ITEM_METAGROSSITE 0x1E3
#define ITEM_LATIASITE 0x1E4
#define ITEM_LATIOSITE 0x1E5
#define ITEM_LOPUNNITE 0x1E6
#define ITEM_GARCHOMPITE 0x1E7
#define ITEM_LUCARIONITE 0x1E8
#define ITEM_ABOMASITE 0x1E9
#define ITEM_GALLADITE 0x1EA
#define ITEM_AUDINITE 0x1EB
#define ITEM_DIANCITE 0x1EC
//Type-Resist Berries
#define ITEM_OCCA_BERRY 0x21B
#define ITEM_PASSHO_BERRY 0x21C
#define ITEM_WACAN_BERRY 0x21D
#define ITEM_RINDO_BERRY 0x21E
#define ITEM_YACHE_BERRY 0x21F
#define ITEM_CHOPLE_BERRY 0x220
#define ITEM_KEBIA_BERRY 0x221
#define ITEM_SHUCA_BERRY 0x222
#define ITEM_COBA_BERRY 0x223
#define ITEM_PAYAPA_BERRY 0x224
#define ITEM_TANGA_BERRY 0x225
#define ITEM_CHARTI_BERRY 0x226
#define ITEM_KASIB_BERRY 0x227
#define ITEM_HABAN_BERRY 0x228
#define ITEM_COLBUR_BERRY 0x229
#define ITEM_BABIRI_BERRY 0x22A
#define ITEM_CHILAN_BERRY 0x22B
#define ITEM_MICLE_BERRY 0x22C
#define ITEM_CUSTAP_BERRY 0x22D
#define ITEM_JABOCA_BERRY 0x22E
#define ITEM_ROWAP_BERRY 0x22F
#define ITEM_ROSELI_BERRY 0x230
#define ITEM_KEE_BERRY 0x231
#define ITEM_MARANGA_BERRY 0x232
//New Poke Balls
#define ITEM_PARK_BALL 0x34
#define ITEM_CHERISH_BALL 0x35
#define ITEM_DUSK_BALL 0x3C
#define ITEM_HEAL_BALL 0x3D
#define ITEM_QUICK_BALL 0x3E
#define ITEM_FAST_BALL 0x26E
#define ITEM_LEVEL_BALL 0x26F
#define ITEM_LURE_BALL 0x270
#define ITEM_HEAVY_BALL 0x271
#define ITEM_LOVE_BALL 0x272
#define ITEM_FRIEND_BALL 0x273
#define ITEM_MOON_BALL 0x274
#define ITEM_SPORT_BALL 0x275
#define ITEM_BEAST_BALL 0x276
#define ITEM_DREAM_BALL 0x277
//Genesect Drives
#define ITEM_BURN_DRIVE 0x27A
#define ITEM_DOUSE_DRIVE 0x27B
#define ITEM_SHOCK_DRIVE 0x27C
#define ITEM_CHILL_DRIVE 0x27D
//Silvally Memories
#define ITEM_FIGHTING_MEMORY 0x27E
#define ITEM_FLYING_MEMORY 0x27F
#define ITEM_POISON_MEMORY 0x280
#define ITEM_GROUND_MEMORY 0x281
#define ITEM_ROCK_MEMORY 0x282
#define ITEM_BUG_MEMORY 0x283
#define ITEM_GHOST_MEMORY 0x284
#define ITEM_STEEL_MEMORY 0x285
#define ITEM_FIRE_MEMORY 0x286
#define ITEM_WATER_MEMORY 0x287
#define ITEM_GRASS_MEMORY 0x288
#define ITEM_ELECTRIC_MEMORY 0x289
#define ITEM_PSYCHIC_MEMORY 0x28A
#define ITEM_ICE_MEMORY 0x28B
#define ITEM_DRAGON_MEMORY 0x28C
#define ITEM_DARK_MEMORY 0x28D
#define ITEM_FAIRY_MEMORY 0x28E
//Wings
#define ITEM_HEALTH_WING 0x261
#define ITEM_MUSCLE_WING 0x262
#define ITEM_RESIST_WING 0x263
#define ITEM_GENIUS_WING 0x264
#define ITEM_CLEVER_WING 0x265
#define ITEM_SWIFT_WING 0x266
#define ITEM_PRETTY_WING 0x267
//Random Normal Items
#define ITEM_ODD_KEYSTONE 0xFB
#define ITEM_BOTTLE_CAP 0x268
#define ITEM_GOLD_BOTTLE_CAP 0x269
#define ITEM_ABILITY_CAPSULE 0x260
//Nectars
#define ITEM_RED_NECTAR 0x26A
#define ITEM_YELLOW_NECTAR 0x26B
#define ITEM_PINK_NECTAR 0x26C
#define ITEM_PURPLE_NECTAR 0x26D
//Evolution Items
#define ITEM_LINK_CABLE 0x5B
#define ITEM_DUSK_STONE 0x63
#define ITEM_DAWN_STONE 0x64
#define ITEM_SHINY_STONE 0x65
#define ITEM_OVAL_STONE 0x66
#define ITEM_ICE_STONE 0x69
#define ITEM_PROTECTOR 0x70
#define ITEM_MAGMARIZER 0x71
#define ITEM_PRISM_SCALE 0x73
#define ITEM_SACHET 0x74
#define ITEM_WHIPPED_DREAM 0x75
#define ITEM_RAZOR_CLAW 0xE6
#define ITEM_RAZOR_FANG 0xE7
#define ITEM_REAPER_CLOTH 0xE8
#define ITEM_DUBIOUS_DISK 0xE9
#define ITEM_ELECTRIZER 0xEA
//New Key Items
#define ITEM_GRACIDEA 0x217
#define ITEM_DNA_SPLICERS 0x218
#define ITEM_REVEAL_GLASS 0x219
#define ITEM_PRISON_BOTTLE 0x220
#define ITEM_OVAL_CHARM 0x278
#define ITEM_SHINY_CHARM 0x279
#define ITEM_RAINBOW_WING 0x28F
#define ITEM_SILVER_WING 0x290
#define ITEM_N_SOLARIZER 0x291
#define ITEM_N_LUNARIZER 0x292
#define ITEM_SUN_FLUTE 0x293
#define ITEM_MOON_FLUTE 0x294
#define ITEM_LIGHT_STONE 0x295
#define ITEM_DARK_STONE 0x296
//Relic Items
#define ITEM_RELIC_COPPER 0x297
#define ITEM_RELIC_SILVER 0x298
#define ITEM_RELIC_GOLD 0x299
#define ITEM_RELIC_VASE 0x29A
#define ITEM_RELIC_BAND 0x29B
#define ITEM_RELIC_STATUE 0x29C
#define ITEM_RELIC_CROWN 0x29D
//Z-Crystals
enum
{
ITEM_NORMALIUM_Z = 0x29E, //All items after this will be 0x29E + 1, 0x29E + 2...
ITEM_FIGHTINIUM_Z, //Put the Z-Crystals in order
ITEM_FLYINIUM_Z,
ITEM_POISONIUM_Z,
ITEM_GROUNDIUM_Z,
ITEM_ROCKIUM_Z,
ITEM_BUGINIUM_Z,
ITEM_GHOSTIUM_Z,
ITEM_STEELIUM_Z,
ITEM_FIRIUM_Z,
ITEM_WATERIUM_Z,
ITEM_GRASSIUM_Z,
ITEM_ELECTRIUM_Z,
ITEM_PSYCHIUM_Z,
ITEM_ICIUM_Z,
ITEM_DRAGONIUM_Z,
ITEM_DARKINIUM_Z,
ITEM_FAIRIUM,
ITEM_ALORAICHUIUM_Z,
ITEM_DECIDIUM_Z,
ITEM_EEVIUM_Z,
ITEM_INCINIUM_Z,
ITEM_KOMMONIUM_Z,
ITEM_LUNALIUM_Z,
ITEM_LYCANIUM_Z,
ITEM_MARSHADIUM_Z,
ITEM_MEWNIUM_Z,
ITEM_MIMIKIUM_Z,
ITEM_PIKANIUM_Z,
ITEM_PIKASHUNIUM_Z,
ITEM_PRIMARIUM_Z,
ITEM_SNORLIUM_Z,
ITEM_SOLGANIUM_Z,
ITEM_TAPUNIUM_Z,
};
//For Pokemon Unbound
#ifdef UNBOUND
#undef ITEM_ENIGMA_BERRY
#define ITEM_ODDISH_LEAF 0x57
#define ITEM_ENIGMA_BERRY 0x76
#define ITEM_DOWSING_MACHINE 0x105
#define ITEM_UNIFORM 0x10B
#define ITEM_FASHION_CASE 0x10E
#define ITEM_POKE_BALL_KEY_ITEM 0x111
#define ITEM_KEY_CARD_1 0x163
#define ITEM_KEY_CARD_2 0x11A
#define ITEM_KEY_CARD_3 0x11B
#define ITEM_QUEST_LOG 0x15C
#define ITEM_SMELLY_SOCKS 0x15F
#endif
// Emerald
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
#define ITEM_TO_BERRY(itemId)(((itemId - FIRST_BERRY_INDEX) + 1))
#define NUM_TECHNICAL_MACHINES 50
#define NUM_HIDDEN_MACHINES 8
// Check if the item is one that can be used on a Pokemon.
#define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
// POCKETS
#define POCKET_ITEMS 1
#define POCKET_KEY_ITEMS 2
#define POCKET_POKE_BALLS 3
#define POCKET_TM_CASE 4
#define POCKET_BERRY_POUCH 5

743
include/moves.h Normal file
View File

@ -0,0 +1,743 @@
#pragma once
#define MOVE_NAME_LENGTH 12
#define MOVE_NONE 0x0
#define MOVE_POUND 0x1
#define MOVE_KARATECHOP 0x2
#define MOVE_DOUBLESLAP 0x3
#define MOVE_COMETPUNCH 0x4
#define MOVE_MEGAPUNCH 0x5
#define MOVE_PAYDAY 0x6
#define MOVE_FIREPUNCH 0x7
#define MOVE_ICEPUNCH 0x8
#define MOVE_THUNDERPUNCH 0x9
#define MOVE_SCRATCH 0xA
#define MOVE_VICEGRIP 0xB
#define MOVE_GUILLOTINE 0xC
#define MOVE_RAZORWIND 0xD
#define MOVE_SWORDSDANCE 0xE
#define MOVE_CUT 0xF
#define MOVE_GUST 0x10
#define MOVE_WINGATTACK 0x11
#define MOVE_WHIRLWIND 0x12
#define MOVE_FLY 0x13
#define MOVE_BIND 0x14
#define MOVE_SLAM 0x15
#define MOVE_VINEWHIP 0x16
#define MOVE_STOMP 0x17
#define MOVE_DOUBLEKICK 0x18
#define MOVE_MEGAKICK 0x19
#define MOVE_JUMPKICK 0x1A
#define MOVE_ROLLINGKICK 0x1B
#define MOVE_SANDATTACK 0x1C
#define MOVE_HEADBUTT 0x1D
#define MOVE_HORNATTACK 0x1E
#define MOVE_FURYATTACK 0x1F
#define MOVE_HORNDRILL 0x20
#define MOVE_TACKLE 0x21
#define MOVE_BODYSLAM 0x22
#define MOVE_WRAP 0x23
#define MOVE_TAKEDOWN 0x24
#define MOVE_THRASH 0x25
#define MOVE_DOUBLEEDGE 0x26
#define MOVE_TAILWHIP 0x27
#define MOVE_POISONSTING 0x28
#define MOVE_TWINEEDLE 0x29
#define MOVE_PINMISSILE 0x2A
#define MOVE_LEER 0x2B
#define MOVE_BITE 0x2C
#define MOVE_GROWL 0x2D
#define MOVE_ROAR 0x2E
#define MOVE_SING 0x2F
#define MOVE_SUPERSONIC 0x30
#define MOVE_SONICBOOM 0x31
#define MOVE_DISABLE 0x32
#define MOVE_ACID 0x33
#define MOVE_EMBER 0x34
#define MOVE_FLAMETHROWER 0x35
#define MOVE_MIST 0x36
#define MOVE_WATERGUN 0x37
#define MOVE_HYDROPUMP 0x38
#define MOVE_SURF 0x39
#define MOVE_ICEBEAM 0x3A
#define MOVE_BLIZZARD 0x3B
#define MOVE_PSYBEAM 0x3C
#define MOVE_BUBBLEBEAM 0x3D
#define MOVE_AURORABEAM 0x3E
#define MOVE_HYPERBEAM 0x3F
#define MOVE_PECK 0x40
#define MOVE_DRILLPECK 0x41
#define MOVE_SUBMISSION 0x42
#define MOVE_LOWKICK 0x43
#define MOVE_COUNTER 0x44
#define MOVE_SEISMICTOSS 0x45
#define MOVE_STRENGTH 0x46
#define MOVE_ABSORB 0x47
#define MOVE_MEGADRAIN 0x48
#define MOVE_LEECHSEED 0x49
#define MOVE_GROWTH 0x4A
#define MOVE_RAZORLEAF 0x4B
#define MOVE_SOLARBEAM 0x4C
#define MOVE_POISONPOWDER 0x4D
#define MOVE_STUNSPORE 0x4E
#define MOVE_SLEEPPOWDER 0x4F
#define MOVE_PETALDANCE 0x50
#define MOVE_STRINGSHOT 0x51
#define MOVE_DRAGONRAGE 0x52
#define MOVE_FIRESPIN 0x53
#define MOVE_THUNDERSHOCK 0x54
#define MOVE_THUNDERBOLT 0x55
#define MOVE_THUNDERWAVE 0x56
#define MOVE_THUNDER 0x57
#define MOVE_ROCKTHROW 0x58
#define MOVE_EARTHQUAKE 0x59
#define MOVE_FISSURE 0x5A
#define MOVE_DIG 0x5B
#define MOVE_TOXIC 0x5C
#define MOVE_CONFUSION 0x5D
#define MOVE_PSYCHIC 0x5E
#define MOVE_HYPNOSIS 0x5F
#define MOVE_MEDITATE 0x60
#define MOVE_AGILITY 0x61
#define MOVE_QUICKATTACK 0x62
#define MOVE_RAGE 0x63
#define MOVE_TELEPORT 0x64
#define MOVE_NIGHTSHADE 0x65
#define MOVE_MIMIC 0x66
#define MOVE_SCREECH 0x67
#define MOVE_DOUBLETEAM 0x68
#define MOVE_RECOVER 0x69
#define MOVE_HARDEN 0x6A
#define MOVE_MINIMIZE 0x6B
#define MOVE_SMOKESCREEN 0x6C
#define MOVE_CONFUSERAY 0x6D
#define MOVE_WITHDRAW 0x6E
#define MOVE_DEFENSECURL 0x6F
#define MOVE_BARRIER 0x70
#define MOVE_LIGHTSCREEN 0x71
#define MOVE_HAZE 0x72
#define MOVE_REFLECT 0x73
#define MOVE_FOCUSENERGY 0x74
#define MOVE_BIDE 0x75
#define MOVE_METRONOME 0x76
#define MOVE_MIRRORMOVE 0x77
#define MOVE_SELFDESTRUCT 0x78
#define MOVE_EGGBOMB 0x79
#define MOVE_LICK 0x7A
#define MOVE_SMOG 0x7B
#define MOVE_SLUDGE 0x7C
#define MOVE_BONECLUB 0x7D
#define MOVE_FIREBLAST 0x7E
#define MOVE_WATERFALL 0x7F
#define MOVE_CLAMP 0x80
#define MOVE_SWIFT 0x81
#define MOVE_SKULLBASH 0x82
#define MOVE_SPIKECANNON 0x83
#define MOVE_CONSTRICT 0x84
#define MOVE_AMNESIA 0x85
#define MOVE_KINESIS 0x86
#define MOVE_SOFTBOILED 0x87
#define MOVE_HIGHJUMPKICK 0x88
#define MOVE_GLARE 0x89
#define MOVE_DREAMEATER 0x8A
#define MOVE_POISONGAS 0x8B
#define MOVE_BARRAGE 0x8C
#define MOVE_LEECHLIFE 0x8D
#define MOVE_LOVELYKISS 0x8E
#define MOVE_SKYATTACK 0x8F
#define MOVE_TRANSFORM 0x90
#define MOVE_BUBBLE 0x91
#define MOVE_DIZZYPUNCH 0x92
#define MOVE_SPORE 0x93
#define MOVE_FLASH 0x94
#define MOVE_PSYWAVE 0x95
#define MOVE_SPLASH 0x96
#define MOVE_ACIDARMOR 0x97
#define MOVE_CRABHAMMER 0x98
#define MOVE_EXPLOSION 0x99
#define MOVE_FURYSWIPES 0x9A
#define MOVE_BONEMERANG 0x9B
#define MOVE_REST 0x9C
#define MOVE_ROCKSLIDE 0x9D
#define MOVE_HYPERFANG 0x9E
#define MOVE_SHARPEN 0x9F
#define MOVE_CONVERSION 0xA0
#define MOVE_TRIATTACK 0xA1
#define MOVE_SUPERFANG 0xA2
#define MOVE_SLASH 0xA3
#define MOVE_SUBSTITUTE 0xA4
#define MOVE_STRUGGLE 0xA5
#define MOVE_SKETCH 0xA6
#define MOVE_TRIPLEKICK 0xA7
#define MOVE_THIEF 0xA8
#define MOVE_SPIDERWEB 0xA9
#define MOVE_MINDREADER 0xAA
#define MOVE_NIGHTMARE 0xAB
#define MOVE_FLAMEWHEEL 0xAC
#define MOVE_SNORE 0xAD
#define MOVE_CURSE 0xAE
#define MOVE_FLAIL 0xAF
#define MOVE_CONVERSION2 0xB0
#define MOVE_AEROBLAST 0xB1
#define MOVE_COTTONSPORE 0xB2
#define MOVE_REVERSAL 0xB3
#define MOVE_SPITE 0xB4
#define MOVE_POWDERSNOW 0xB5
#define MOVE_PROTECT 0xB6
#define MOVE_MACHPUNCH 0xB7
#define MOVE_SCARYFACE 0xB8
#define MOVE_FEINTATTACK 0xB9
#define MOVE_SWEETKISS 0xBA
#define MOVE_BELLYDRUM 0xBB
#define MOVE_SLUDGEBOMB 0xBC
#define MOVE_MUDSLAP 0xBD
#define MOVE_OCTAZOOKA 0xBE
#define MOVE_SPIKES 0xBF
#define MOVE_ZAPCANNON 0xC0
#define MOVE_FORESIGHT 0xC1
#define MOVE_DESTINYBOND 0xC2
#define MOVE_PERISHSONG 0xC3
#define MOVE_ICYWIND 0xC4
#define MOVE_DETECT 0xC5
#define MOVE_BONERUSH 0xC6
#define MOVE_LOCKON 0xC7
#define MOVE_OUTRAGE 0xC8
#define MOVE_SANDSTORM 0xC9
#define MOVE_GIGADRAIN 0xCA
#define MOVE_ENDURE 0xCB
#define MOVE_CHARM 0xCC
#define MOVE_ROLLOUT 0xCD
#define MOVE_FALSESWIPE 0xCE
#define MOVE_SWAGGER 0xCF
#define MOVE_MILKDRINK 0xD0
#define MOVE_SPARK 0xD1
#define MOVE_FURYCUTTER 0xD2
#define MOVE_STEELWING 0xD3
#define MOVE_MEANLOOK 0xD4
#define MOVE_ATTRACT 0xD5
#define MOVE_SLEEPTALK 0xD6
#define MOVE_HEALBELL 0xD7
#define MOVE_RETURN 0xD8
#define MOVE_PRESENT 0xD9
#define MOVE_FRUSTRATION 0xDA
#define MOVE_SAFEGUARD 0xDB
#define MOVE_PAINSPLIT 0xDC
#define MOVE_SACREDFIRE 0xDD
#define MOVE_MAGNITUDE 0xDE
#define MOVE_DYNAMICPUNCH 0xDF
#define MOVE_MEGAHORN 0xE0
#define MOVE_DRAGONBREATH 0xE1
#define MOVE_BATONPASS 0xE2
#define MOVE_ENCORE 0xE3
#define MOVE_PURSUIT 0xE4
#define MOVE_RAPIDSPIN 0xE5
#define MOVE_SWEETSCENT 0xE6
#define MOVE_IRONTAIL 0xE7
#define MOVE_METALCLAW 0xE8
#define MOVE_VITALTHROW 0xE9
#define MOVE_MORNINGSUN 0xEA
#define MOVE_SYNTHESIS 0xEB
#define MOVE_MOONLIGHT 0xEC
#define MOVE_HIDDENPOWER 0xED
#define MOVE_CROSSCHOP 0xEE
#define MOVE_TWISTER 0xEF
#define MOVE_RAINDANCE 0xF0
#define MOVE_SUNNYDAY 0xF1
#define MOVE_CRUNCH 0xF2
#define MOVE_MIRRORCOAT 0xF3
#define MOVE_PSYCHUP 0xF4
#define MOVE_EXTREMESPEED 0xF5
#define MOVE_ANCIENTPOWER 0xF6
#define MOVE_SHADOWBALL 0xF7
#define MOVE_FUTURESIGHT 0xF8
#define MOVE_ROCKSMASH 0xF9
#define MOVE_WHIRLPOOL 0xFA
#define MOVE_BEATUP 0xFB
#define MOVE_FAKEOUT 0xFC
#define MOVE_UPROAR 0xFD
#define MOVE_STOCKPILE 0xFE
#define MOVE_SPITUP 0xFF
#define MOVE_SWALLOW 0x100
#define MOVE_HEATWAVE 0x101
#define MOVE_HAIL 0x102
#define MOVE_TORMENT 0x103
#define MOVE_FLATTER 0x104
#define MOVE_WILLOWISP 0x105
#define MOVE_MEMENTO 0x106
#define MOVE_FACADE 0x107
#define MOVE_FOCUSPUNCH 0x108
#define MOVE_SMELLINGSALTS 0x109
#define MOVE_FOLLOWME 0x10A
#define MOVE_NATUREPOWER 0x10B
#define MOVE_CHARGE 0x10C
#define MOVE_TAUNT 0x10D
#define MOVE_HELPINGHAND 0x10E
#define MOVE_TRICK 0x10F
#define MOVE_ROLEPLAY 0x110
#define MOVE_WISH 0x111
#define MOVE_ASSIST 0x112
#define MOVE_INGRAIN 0x113
#define MOVE_SUPERPOWER 0x114
#define MOVE_MAGICCOAT 0x115
#define MOVE_RECYCLE 0x116
#define MOVE_REVENGE 0x117
#define MOVE_BRICKBREAK 0x118
#define MOVE_YAWN 0x119
#define MOVE_KNOCKOFF 0x11A
#define MOVE_ENDEAVOR 0x11B
#define MOVE_ERUPTION 0x11C
#define MOVE_SKILLSWAP 0x11D
#define MOVE_IMPRISON 0x11E
#define MOVE_REFRESH 0x11F
#define MOVE_GRUDGE 0x120
#define MOVE_SNATCH 0x121
#define MOVE_SECRETPOWER 0x122
#define MOVE_DIVE 0x123
#define MOVE_ARMTHRUST 0x124
#define MOVE_CAMOUFLAGE 0x125
#define MOVE_TAILGLOW 0x126
#define MOVE_LUSTERPURGE 0x127
#define MOVE_MISTBALL 0x128
#define MOVE_FEATHERDANCE 0x129
#define MOVE_TEETERDANCE 0x12A
#define MOVE_BLAZEKICK 0x12B
#define MOVE_MUDSPORT 0x12C
#define MOVE_ICEBALL 0x12D
#define MOVE_NEEDLEARM 0x12E
#define MOVE_SLACKOFF 0x12F
#define MOVE_HYPERVOICE 0x130
#define MOVE_POISONFANG 0x131
#define MOVE_CRUSHCLAW 0x132
#define MOVE_BLASTBURN 0x133
#define MOVE_HYDROCANNON 0x134
#define MOVE_METEORMASH 0x135
#define MOVE_ASTONISH 0x136
#define MOVE_WEATHERBALL 0x137
#define MOVE_AROMATHERAPY 0x138
#define MOVE_FAKETEARS 0x139
#define MOVE_AIRCUTTER 0x13A
#define MOVE_OVERHEAT 0x13B
#define MOVE_ODORSLEUTH 0x13C
#define MOVE_ROCKTOMB 0x13D
#define MOVE_SILVERWIND 0x13E
#define MOVE_METALSOUND 0x13F
#define MOVE_GRASSWHISTLE 0x140
#define MOVE_TICKLE 0x141
#define MOVE_COSMICPOWER 0x142
#define MOVE_WATERSPOUT 0x143
#define MOVE_SIGNALBEAM 0x144
#define MOVE_SHADOWPUNCH 0x145
#define MOVE_EXTRASENSORY 0x146
#define MOVE_SKYUPPERCUT 0x147
#define MOVE_SANDTOMB 0x148
#define MOVE_SHEERCOLD 0x149
#define MOVE_MUDDYWATER 0x14A
#define MOVE_BULLETSEED 0x14B
#define MOVE_AERIALACE 0x14C
#define MOVE_ICICLESPEAR 0x14D
#define MOVE_IRONDEFENSE 0x14E
#define MOVE_BLOCK 0x14F
#define MOVE_HOWL 0x150
#define MOVE_DRAGONCLAW 0x151
#define MOVE_FRENZYPLANT 0x152
#define MOVE_BULKUP 0x153
#define MOVE_BOUNCE 0x154
#define MOVE_MUDSHOT 0x155
#define MOVE_POISONTAIL 0x156
#define MOVE_COVET 0x157
#define MOVE_VOLTTACKLE 0x158
#define MOVE_MAGICALLEAF 0x159
#define MOVE_WATERSPORT 0x15A
#define MOVE_CALMMIND 0x15B
#define MOVE_LEAFBLADE 0x15C
#define MOVE_DRAGONDANCE 0x15D
#define MOVE_ROCKBLAST 0x15E
#define MOVE_SHOCKWAVE 0x15F
#define MOVE_WATERPULSE 0x160
#define MOVE_DOOMDESIRE 0x161
#define MOVE_PSYCHOBOOST 0x162
#define MOVE_LEECHFANG 0x163
#define MOVE_AIRSLASH 0x164
#define MOVE_AQUAJET 0x165
#define MOVE_AQUATAIL 0x166
#define MOVE_AURASPHERE 0x167
#define MOVE_AVALANCHE 0x168
#define MOVE_BRAVEBIRD 0x169
#define MOVE_BUGBUZZ 0x16A
#define MOVE_BULLETPUNCH 0x16B
#define MOVE_CHARGEBEAM 0x16C
#define MOVE_CLOSECOMBAT 0x16D
#define MOVE_CROSSPOISON 0x16E
#define MOVE_DARKPULSE 0x16F
#define MOVE_DISCHARGE 0x170
#define MOVE_DRACOMETEOR 0x171
#define MOVE_DRAGONPULSE 0x172
#define MOVE_DRAINPUNCH 0x173
#define MOVE_EARTHPOWER 0x174
#define MOVE_ENERGYBALL 0x175
#define MOVE_FOCUSBLAST 0x176
#define MOVE_FORCEPALM 0x177
#define MOVE_GIGAIMPACT 0x178
#define MOVE_GRASSKNOT 0x179
#define MOVE_GUNKSHOT 0x17A
#define MOVE_HAMMERARM 0x17B
#define MOVE_HEADSMASH 0x17C
#define MOVE_ICESHARD 0x17D
#define MOVE_IRONHEAD 0x17E
#define MOVE_LAVAPLUME 0x17F
#define MOVE_MAGNETBOMB 0x180
#define MOVE_MUDBOMB 0x181
#define MOVE_NASTYPLOT 0x182
#define MOVE_NIGHTSLASH 0x183
#define MOVE_OMINOUSWIND 0x184
#define MOVE_POWERGEM 0x185
#define MOVE_POWERWHIP 0x186
#define MOVE_PSYCHOCUT 0x187
#define MOVE_ROCKCLIMB 0x188
#define MOVE_ROCKPOLISH 0x189
#define MOVE_ROCKWRECKER 0x18A
#define MOVE_ROOST 0x18B
#define MOVE_SEEDBOMB 0x18C
#define MOVE_SHADOWCLAW 0x18D
#define MOVE_SHADOWSNEAK 0x18E
#define MOVE_VACUUMWAVE 0x18F
#define MOVE_XSCISSOR 0x190
#define MOVE_ZENHEADBUTT 0x191
#define MOVE_SWITCHEROO 0x192
#define MOVE_DRILLRUN 0x193
#define MOVE_BULLDOZE 0x194
#define MOVE_ELECTROWEB 0x195
#define MOVE_FLAMECHARGE 0x196
#define MOVE_FROSTBREATH 0x197
#define MOVE_HEARTSTAMP 0x198
#define MOVE_HONECLAWS 0x199
#define MOVE_HORNLEECH 0x19A
#define MOVE_COIL 0x19B
#define MOVE_HURRICANE 0x19C
#define MOVE_ICICLECRASH 0x19D
#define MOVE_WORKUP 0x19E
#define MOVE_QUIVERDANCE 0x19F
#define MOVE_LEAFTORNADO 0x1A0
#define MOVE_LOWSWEEP 0x1A1
#define MOVE_SNARL 0x1A2
#define MOVE_STRUGGLEBUG 0x1A3
#define MOVE_STEAMROLLER 0x1A4
#define MOVE_STORMTHROW 0x1A5
#define MOVE_VENOSHOCK 0x1A6
#define MOVE_WILDCHARGE 0x1A7
#define MOVE_POISONJAB 0x1A8
#define MOVE_ACIDSPRAY 0x1A9
#define MOVE_FIERYDANCE 0x1AA
#define MOVE_CLEARSMOG 0x1AB
#define MOVE_LEAFSTORM 0x1AC
#define MOVE_STONEEDGE 0x1AD
#define MOVE_PAYBACK 0x1AE
#define MOVE_FIREFANG 0x1AF
#define MOVE_ICEFANG 0x1B0
#define MOVE_THUNDERFANG 0x1B1
#define MOVE_FLAREBLITZ 0x1B2
#define MOVE_INFERNO 0x1B3
#define MOVE_HEX 0x1B4
#define MOVE_DUALCHOP 0x1B5
#define MOVE_DOUBLEHIT 0x1B6
#define MOVE_COTTONGUARD 0x1B7
#define MOVE_ACROBATICS 0x1B8
#define MOVE_FLAMEBURST 0x1B9
#define MOVE_UTURN 0x1BA
#define MOVE_VOLTSWITCH 0x1BB
#define MOVE_DRAGONTAIL 0x1BC
#define MOVE_CIRCLETHROW 0x1BD
#define MOVE_MIRRORSHOT 0x1BE
#define MOVE_WOODHAMMER 0x1BF
#define MOVE_HEALPULSE 0x1C0
#define MOVE_FLASHCANNON 0x1C1
#define MOVE_BUGBITE 0x1C2
#define MOVE_PLUCK 0x1C3
#define MOVE_SHELLSMASH 0x1C4
#define MOVE_RAGEPOWDER 0x1C5
#define MOVE_WAKEUPSLAP 0x1C6
#define MOVE_RAZORSHELL 0x1C7
#define MOVE_COPYCAT 0x1C8
#define MOVE_MIRACLEEYE 0x1C9
#define MOVE_SUCKERPUNCH 0x1CA
#define MOVE_SCALD 0x1CB
#define MOVE_BRINE 0x1CC
#define MOVE_FAIRYWIND 0x1CD
#define MOVE_BABYDOLLEYES 0x1CE
#define MOVE_PLAYROUGH 0x1CF
#define MOVE_MOONBLAST 0x1D0
#define MOVE_DRAININGKISS 0x1D1
#define MOVE_DAZZLINGGLEAM 0x1D2
#define MOVE_DISARMINGVOICE 0x1D3
#define MOVE_STEALTHROCK 0x1D4
#define MOVE_TOXICSPIKES 0x1D5
#define MOVE_HEALINGWISH 0x1D6
#define MOVE_LUNARDANCE 0x1D7
#define MOVE_TAILWIND 0x1D8
#define MOVE_BOOMBURST 0x1D9
#define MOVE_INCINERATE 0x1DA
#define MOVE_WORRYSEED 0x1DB
#define MOVE_GASTROACID 0x1DC
#define MOVE_GEOMANCY 0x1DD
#define MOVE_FLOWERSHIELD 0x1DE
#define MOVE_ROTOTILLER 0x1DF
#define MOVE_SHIFTGEAR 0x1E0
#define MOVE_STICKYWEB 0x1E1
#define MOVE_STOREDPOWER 0x1E2
#define MOVE_ACUPRESSURE 0x1E3
#define MOVE_PUNISHMENT 0x1E4
#define MOVE_ASSURANCE 0x1E5
#define MOVE_DRAGONRUSH 0x1E6
#define MOVE_DARKVOID 0x1E7
#define MOVE_FEINT 0x1E8
#define MOVE_PHANTOMFORCE 0x1E9
#define MOVE_PETALBLIZZARD 0x1EA
#define MOVE_PLAYNICE 0x1EB
#define MOVE_ROAROFTIME 0x1EC
#define MOVE_SPACIALREND 0x1ED
#define MOVE_MAGMASTORM 0x1EE
#define MOVE_FINALGAMBIT 0x1EF
#define MOVE_SHADOWFORCE 0x1F0
#define MOVE_NUZZLE 0x1F1
#define MOVE_RETALIATE 0x1F2
#define MOVE_STEELYHIT 0x1F3
#define MOVE_JUDGMENT 0x1F4
#define MOVE_FREEZEDRY 0x1F5
#define MOVE_PSYSHOCK 0x1F6
#define MOVE_ROUND 0x1F7
#define MOVE_TAILSLAP 0x1F8
#define MOVE_GEARGRIND 0x1F9
#define MOVE_NATURALGIFT 0x1FA
#define MOVE_CHIPAWAY 0x1FB
#define MOVE_SMACKDOWN 0x1FC
#define MOVE_HYPERSPACEHOLE 0x1FD
#define MOVE_GYROBALL 0x1FE
#define MOVE_HYPERSPACEFURY 0x1FF
#define MOVE_ATTACKORDER 0x200
#define MOVE_DEFENDORDER 0x201
#define MOVE_HEALORDER 0x202
#define MOVE_CAPTIVATE 0x203
#define MOVE_DEFOG 0x204
#define MOVE_ORIGINPULSE 0x205
#define MOVE_PRECIPICEBLADES 0x206
#define MOVE_GUARDSWAP 0x207
#define MOVE_STEAMERUPTION 0x208
#define MOVE_METALBURST 0x209
#define MOVE_MEFIRST 0x20A
#define MOVE_POWERSWAP 0x20B
#define MOVE_POWERTRICK 0x20C
#define MOVE_PSYCHOSHIFT 0x20D
#define MOVE_WRINGOUT 0x20E
#define MOVE_KINGSSHIELD 0x20F
#define MOVE_PSYSTRIKE 0x210
#define MOVE_AUTOTOMIZE 0x211
#define MOVE_DIAMONDSTORM 0x212
#define MOVE_SLUDGEWAVE 0x213
#define MOVE_HEAVYSLAM 0x214
#define MOVE_SYNCHRONOISE 0x215
#define MOVE_ELECTROBALL 0x216
#define MOVE_FOULPLAY 0x217
#define MOVE_ENTRAINMENT 0x218
#define MOVE_NIGHTDAZE 0x219
#define MOVE_ECHOEDVOICE 0x21A
#define MOVE_LANDSWRATH 0x21B
#define MOVE_OBLIVIONWING 0x21C
#define MOVE_HEARTSWAP 0x21D
#define MOVE_CRUSHGRIP 0x21E
#define MOVE_SACREDSWORD 0x21F
#define MOVE_HEATCRASH 0x220
#define MOVE_HEADCHARGE 0x221
#define MOVE_TECHNOBLAST 0x222
#define MOVE_RELICSONG 0x223
#define MOVE_SECRETSWORD 0x224
#define MOVE_GLACIATE 0x225
#define MOVE_BOLTSTRIKE 0x226
#define MOVE_BLUEFLARE 0x227
#define MOVE_FREEZESHOCK 0x228
#define MOVE_ICEBURN 0x229
#define MOVE_VCREATE 0x22A
#define MOVE_FUSIONFLARE 0x22B
#define MOVE_FUSIONBOLT 0x22C
#define MOVE_FELLSTINGER 0x22D
#define MOVE_NOBLEROAR 0x22E
#define MOVE_DRAGONASCENT 0x22F
#define MOVE_PARTINGSHOT 0x230
#define MOVE_TOPSYTURVY 0x231
#define MOVE_COREENFORCER 0x232
#define MOVE_CHATTER 0x233
#define MOVE_CONFIDE 0x234
#define MOVE_WATERSHURIKEN 0x235
#define MOVE_MYSTICALFIRE 0x236
#define MOVE_SPIKYSHIELD 0x237
#define MOVE_EERIEIMPULSE 0x238
#define MOVE_HOLDBACK 0x239
#define MOVE_INFESTATION 0x23A
#define MOVE_POWERUPPUNCH 0x23B
#define MOVE_THOUSANDARROWS 0x23C
#define MOVE_THOUSANDWAVES 0x23D
#define MOVE_PARABOLICCHARGE 0x23E
#define MOVE_SEARINGSHOT 0x23F
#define MOVE_SEEDFLARE 0x240
#define MOVE_ACCELEROCK 0x241
#define MOVE_ANCHORSHOT 0x242
#define MOVE_AURORAVEIL 0x243
#define MOVE_BANEFULBUNKER 0x244
#define MOVE_BEAKBLAST 0x245
#define MOVE_BRUTALSWING 0x246
#define MOVE_BURNUP 0x247
#define MOVE_CLANGINGSCALES 0x248
#define MOVE_DARKESTLARIAT 0x249
#define MOVE_DRAGONHAMMER 0x24A
#define MOVE_FIRELASH 0x24B
#define MOVE_FIRSTIMPRESSION 0x24C
#define MOVE_FLEURCANNON 0x24D
#define MOVE_FLORALHEALING 0x24E
#define MOVE_GEARUP 0x24F
#define MOVE_HIGHHORSEPOWER 0x250
#define MOVE_ICEHAMMER 0x251
#define MOVE_LASERFOCUS 0x252
#define MOVE_LEAFAGE 0x253
#define MOVE_LIQUIDATION 0x254
#define MOVE_LUNGE 0x255
#define MOVE_MOONGEISTBEAM 0x256
#define MOVE_MULTIATTACK 0x257
#define MOVE_NATURESMADNESS 0x258
#define MOVE_POLLENPUFF 0x259
#define MOVE_POWERTRIP 0x25A
#define MOVE_PRISMATICLASER 0x25B
#define MOVE_PSYCHICFANGS 0x25C
#define MOVE_PURIFY 0x25D
#define MOVE_REVELATIONDANCE 0x25E
#define MOVE_SHADOWBONE 0x25F
#define MOVE_SHELLTRAP 0x260
#define MOVE_SHOREUP 0x261
#define MOVE_SMARTSTRIKE 0x262
#define MOVE_SOLARBLADE 0x263
#define MOVE_SPARKLINGARIA 0x264
#define MOVE_SPECTRALTHIEF 0x265
#define MOVE_SPEEDSWAP 0x266
#define MOVE_SPIRITSHACKLE 0x267
#define MOVE_SPOTLIGHT 0x268
#define MOVE_STOMPINGTANTRUM 0x269
#define MOVE_STRENGTHSAP 0x26A
#define MOVE_SUNSTEELSTRIKE 0x26b
#define MOVE_TEARFULLOOK 0x26C
#define MOVE_THROATCHOP 0x26D
#define MOVE_TOXICTHREAD 0x26E
#define MOVE_TROPKICK 0x26F
#define MOVE_ZINGZAP 0x270
#define MOVE_ELECTRICTERRAIN 0x271
#define MOVE_GRASSYTERRAIN 0x272
#define MOVE_MISTYTERRAIN 0x273
#define MOVE_PSYCHICTERRAIN 0x274
#define MOVE_GRASSPLEDGE 0x275
#define MOVE_FIREPLEDGE 0x276
#define MOVE_WATERPLEDGE 0x277
#define MOVE_TRICKROOM 0x278
#define MOVE_MAGICROOM 0x279
#define MOVE_WONDERROOM 0x27A
#define MOVE_CRAFTYSHIELD 0x27B
#define MOVE_MATBLOCK 0x27C
#define MOVE_QUICKGUARD 0x27D
#define MOVE_WIDEGUARD 0x27E
#define MOVE_AQUARING 0x27F
#define MOVE_AROMATICMIST 0x280
#define MOVE_BELCH 0x281
#define MOVE_BESTOW 0x282
#define MOVE_FLING 0x283
#define MOVE_FLYINGPRESS 0x284
#define MOVE_GRAVITY 0x285
#define MOVE_GUARDSPLIT 0x286
#define MOVE_HEALBLOCK 0x287
#define MOVE_IONDELUGE 0x288
#define MOVE_LUCKYCHANT 0x289
#define MOVE_MAGNETRISE 0x28A
#define MOVE_MAGNETICFLUX 0x28B
#define MOVE_POWDER 0x28C
#define MOVE_POWERSPLIT 0x28D
#define MOVE_REFLECTTYPE 0x28E
#define MOVE_SIMPLEBEAM 0x28F
#define MOVE_SOAK 0x290
#define MOVE_TELEKINESIS 0x291
#define MOVE_TRICKORTREAT 0x292
#define MOVE_VENOMDRENCH 0x293
#define MOVE_FORESTSCURSE 0x294
#define MOVE_MINDBLOWN 0x295
#define MOVE_PHOTONGEYSER 0x296
#define MOVE_PLASMAFISTS 0x297
#define MOVE_ELECTRIFY 0x298
#define MOVE_EMBARGO 0x299
#define MOVE_FAIRYLOCK 0x29A
#define MOVE_LIGHTOFRUIN 0x29B
#define MOVE_TRUMPCARD 0x29C
#define MOVE_AFTERYOU 0x29D
#define MOVE_INSTRUCT 0x29E
#define MOVE_QUASH 0x29F
#define MOVE_HAPPYHOUR 0x2A0
#define MOVE_DOUBLEIRONBASH 0x2A1
#define MOVE_LASTRESORT 0x2A2
#define MOVE_SKYDROP 0x2A3
#define MOVE_CELEBRATE 0x2A4
#define MOVE_HOLDHANDS 0x2A5
#define MOVE_BREAKNECK_BLITZ_P 0x2A6
#define MOVE_BREAKNECK_BLITZ_S 0x2A7
#define MOVE_ALL_OUT_PUMMELING_P 0x2A8
#define MOVE_ALL_OUT_PUMMELING_S 0x2A9
#define MOVE_SUPERSONIC_SKYSTRIKE_P 0x2AA
#define MOVE_SUPERSONIC_SKYSTRIKE_S 0x2AB
#define MOVE_ACID_DOWNPOUR_P 0x2AC
#define MOVE_ACID_DOWNPOUR_S 0x2AD
#define MOVE_TECTONIC_RAGE_P 0x2AE
#define MOVE_TECTONIC_RAGE_S 0x2AF
#define MOVE_CONTINENTAL_CRUSH_P 0x2B0
#define MOVE_CONTINENTAL_CRUSH_S 0x2B1
#define MOVE_SAVAGE_SPIN_OUT_P 0x2B2
#define MOVE_SAVAGE_SPIN_OUT_S 0x2B3
#define MOVE_NEVER_ENDING_NIGHTMARE_P 0x2B4
#define MOVE_NEVER_ENDING_NIGHTMARE_S 0x2B5
#define MOVE_CORKSCREW_CRASH_P 0x2B6
#define MOVE_CORKSCREW_CRASH_S 0x2B7
#define MOVE_INFERNO_OVERDRIVE_P 0x2B8
#define MOVE_INFERNO_OVERDRIVE_S 0x2B9
#define MOVE_HYDRO_VORTEX_P 0x2BA
#define MOVE_HYDRO_VORTEX_S 0x2BB
#define MOVE_BLOOM_DOOM_P 0x2BC
#define MOVE_BLOOM_DOOM_S 0x2BD
#define MOVE_GIGAVOLT_HAVOC_P 0x2BE
#define MOVE_GIGAVOLT_HAVOC_S 0x2BF
#define MOVE_SHATTERED_PSYCHE_P 0x2C0
#define MOVE_SHATTERED_PSYCHE_S 0x2C1
#define MOVE_SUBZERO_SLAMMER_P 0x2C2
#define MOVE_SUBZERO_SLAMMER_S 0x2C3
#define MOVE_DEVASTATING_DRAKE_P 0x2C4
#define MOVE_DEVASTATING_DRAKE_S 0x2C5
#define MOVE_BLACK_HOLE_ECLIPSE_P 0x2C6
#define MOVE_BLACK_HOLE_ECLIPSE_S 0x2C7
#define MOVE_TWINKLE_TACKLE_P 0x2C8
#define MOVE_TWINKLE_TACKLE_S 0x2C9
#define MOVE_CATASTROPIKA 0x2CA
#define MOVE_10000000_VOLT_THUNDERBOLT 0x2CB
#define MOVE_STOKED_SPARKSURFER 0x2CC //Paralyze Target
#define MOVE_EXTREME_EVOBOOST 0x2CD //Double Ancient Power
#define MOVE_PULVERIZING_PANCAKE 0x2CE
#define MOVE_GENESIS_SUPERNOVA 0x2CF //Sets up Psychic Terrain
#define MOVE_SINISTER_ARROW_RAID 0x2D0
#define MOVE_MALICIOUS_MOONSAULT 0x2D1
#define MOVE_OCEANIC_OPERETTA 0x2D2
#define MOVE_SPLINTERED_STORMSHARDS 0x2D3 //Removes Terrain
#define MOVE_LETS_SNUGGLE_FOREVER 0x2D4
#define MOVE_CLANGOROUS_SOULBLAZE 0x2D5 //Ancient Power
#define MOVE_GUARDIAN_OF_ALOLA 0x2D6
#define MOVE_SEARING_SUNRAZE_SMASH 0x2D7
#define MOVE_MENACING_MOONRAZE_MAELSTROM 0x2D8
#define MOVE_LIGHT_THAT_BURNS_THE_SKY 0x2D9
#define MOVE_SOUL_STEALING_7_STAR_STRIKE 0x2DA
#define FIRST_Z_MOVE MOVE_BREAKNECK_BLITZ_P
#define LAST_Z_MOVE MOVE_SOUL_STEALING_7_STAR_STRIKE
#define LAST_MOVE_INDEX MOVE_SOUL_STEALING_7_STAR_STRIKE
#define MOVES_COUNT (MOVE_SOUL_STEALING_7_STAR_STRIKE + 1)

1307
include/pokedex.h Normal file

File diff suppressed because it is too large Load Diff

1088
include/species.h Normal file

File diff suppressed because it is too large Load Diff

139
include/types.h Normal file
View File

@ -0,0 +1,139 @@
#pragma once
#include <stdint.h>
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef int64_t s64;
typedef volatile u8 vu8;
typedef volatile u16 vu16;
typedef volatile u32 vu32;
typedef volatile u64 vu64;
typedef volatile s8 vs8;
typedef volatile s16 vs16;
typedef volatile s32 vs32;
typedef volatile s64 vs64;
typedef float f32;
typedef double f64;
typedef u8 bool8;
typedef u16 bool16;
typedef u32 bool32;
typedef u16 species_t;
typedef u16 move_t;
typedef u8 ability_t;
typedef u16 item_t;
typedef u8 item_effect_t;
typedef u8 bank_t;
typedef u8 move_effect_t;
struct PlttData
{
u16 r:5; // red
u16 g:5; // green
u16 b:5; // blue
u16 unused_15:1;
} /*__attribute__((packed))*/;
struct OamData
{
/*0x00*/ u32 y:8;
/*0x01*/ u32 affineMode:2; // 0x1, 0x2 = 0x3
u32 objMode:2; // 0x4, 0x8 = 0xC
u32 mosaic:1; // 0x10
u32 bpp:1; // 0x20
u32 shape:2; // 0x40, 0x80
/*0x02*/ u32 x:9;
u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
u32 size:2;
/*0x04*/ u16 tileNum:10;
u16 priority:2;
u16 paletteNum:4;
/*0x06*/ u16 affineParam;
};
#define ST_OAM_OBJ_NORMAL 0
#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_WINDOW 2
#define ST_OAM_AFFINE_OFF 0
#define ST_OAM_AFFINE_NORMAL 1
#define ST_OAM_AFFINE_ERASE 2
#define ST_OAM_AFFINE_DOUBLE 3
#define ST_OAM_AFFINE_ON_MASK 1
#define ST_OAM_AFFINE_DOUBLE_MASK 2
#define ST_OAM_4BPP 0
#define ST_OAM_8BPP 1
#define ST_OAM_SQUARE 0
#define ST_OAM_H_RECTANGLE 1
#define ST_OAM_V_RECTANGLE 2
struct BgAffineSrcData
{
s32 texX;
s32 texY;
s16 scrX;
s16 scrY;
s16 sx;
s16 sy;
u16 alpha;
};
struct BgAffineDstData
{
s16 pa;
s16 pb;
s16 pc;
s16 pd;
s32 dx;
s32 dy;
};
struct ObjAffineSrcData
{
s16 xScale;
s16 yScale;
u16 rotation;
};
// Multi-player SIO Control Structure
struct SioMultiCnt
{
u16 baudRate:2; // baud rate
u16 si:1; // SI terminal
u16 sd:1; // SD terminal
u16 id:2; // ID
u16 error:1; // error flag
u16 enable:1; // SIO enable
u16 unused_11_8:4;
u16 mode:2; // communication mode (should equal 2)
u16 intrEnable:1; // IRQ enable
u16 unused_15:1;
u16 data; // data
};
#define ST_SIO_MULTI_MODE 2 // Multi-player communication mode
// baud rate
#define ST_SIO_9600_BPS 0 // 9600 bps
#define ST_SIO_38400_BPS 1 // 38400 bps
#define ST_SIO_57600_BPS 2 // 57600 bps
#define ST_SIO_115200_BPS 3 // 115200 bps
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
#define ABS(x) (x) < 0 ? -(x) : (x)

29
linker.ld Normal file
View File

@ -0,0 +1,29 @@
OUTPUT_ARCH(arm)
MEMORY {
rom : ORIGIN = (0x08000000 + 0x1f34230), LENGTH = 32M
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 4k
}
SECTIONS {
.text : {
FILL (0xABCD)
__text_start = . ;
*(.init)
*(.text)
*(.ctors)
*(.dtors)
*(.rodata)
*(.fini)
*(COMMON)
__text_end = . ;
__bss_start__ = . ;
*(.bss)
__bss_end__ = . ;
_end = __bss_end__ ;
__end__ = __bss_end__ ;
} >rom = 0xff
}

30
repointall Normal file
View File

@ -0,0 +1,30 @@
##Repoints all pointers found at given location
##(Eg. repoints pointer located at 0x8016364 which is 0x81D65A8 in vanilla, does not repoint 0x8016364)
gSpeciesNames 08000144
gBaseStats 080001BC
gLevelUpLearnsets 0803EA7C
gEggMoves 08045C50
gCryTable 08072114
gCryTable2 08072104
#gSpeciesIdToCryId 08043328 #NO LONGER NEEDED
gMonFrontPicTable 08000128
gMonBackPicTable 0800012C
gMonFrontPicCoords 08011F4C
gMonBackPicCoords 08074634
gEnemyMonElevation 080356F8
gMonPaletteTable 08000130
gMonShinyPaletteTable 08000134
#Evolution Table
gPokedexEntries 08088E34
gHabitatPtrsTable 08106888
gSpeciesToNationalPokedexNum 0804323C
gPokedexOrder_Alphabetical 08103694
gPokedexOrder_Weight 081037CC
gPokedexOrder_Height 08103868
gMonIconTable 08000138
gMonIconPaletteIndices 0800013C
gItemAnimationTable 0812EAE0

2
repoints Normal file
View File

@ -0,0 +1,2 @@
##
#gMonFootprintTable 08105E14

1
routinepointers Normal file
View File

@ -0,0 +1 @@
##

Binary file not shown.

264
scripts/build.py Normal file
View File

@ -0,0 +1,264 @@
#!/usr/bin/env python3
from glob import glob
from pathlib import Path
import os
import itertools
import hashlib
import subprocess
import sys
from datetime import datetime
from string import StringFileConverter
PathVar = os.environ.get('Path')
Paths = PathVar.split(';')
PATH = ""
for candidatePath in Paths:
if "devkitARM" in candidatePath:
PATH = candidatePath
break
if PATH == "":
print('DevKit does not exist in your Path variable.\nChecking default location.')
PATH = 'C://devkitPro//devkitARM//bin'
if os.path.isdir(PATH) == False:
print("...\nDevkit not found.")
sys.exit(1)
else:
print("Devkit found.")
PREFIX = '/arm-none-eabi-'
AS = (PATH + PREFIX + 'as')
CC = (PATH + PREFIX + 'gcc')
LD = (PATH + PREFIX + 'ld')
GR = ("deps/grit.exe")
ARP = ('armips')
OBJCOPY = (PATH + PREFIX + 'objcopy')
SRC = './src'
GRAPHICS = './graphics'
ASSEMBLY = './assembly'
STRINGS = './strings'
BUILD = './build'
IMAGES = '\Images'
ASFLAGS = ['-mthumb', '-I', ASSEMBLY]
LDFLAGS = ['BPRE.ld', '-T', 'linker.ld']
CFLAGS = ['-mthumb', '-mno-thumb-interwork', '-mcpu=arm7tdmi', '-mtune=arm7tdmi',
'-mno-long-calls', '-march=armv4t', '-Wall', '-Wextra','-Os', '-fira-loop-pressure', '-fipa-pta']
PrintedCompilingImages = False #Used to tell the script whether or not the string "Compiling Images" has been printed
def run_command(cmd):
try:
subprocess.check_output(cmd)
except subprocess.CalledProcessError as e:
print(e.output.decode(), file = sys.stderr)
sys.exit(1)
def make_output_file(filename):
'''Return hash of filename to use as object filename'''
m = hashlib.md5()
m.update(filename.encode())
newfilename = os.path.join(BUILD, m.hexdigest() + '.o')
if not os.path.isfile(filename):
return [newfilename, False]
fileExists = os.path.isfile(newfilename)
if fileExists and os.path.getmtime(newfilename) > os.path.getmtime(filename): #If the object file was created after the file was last modified
return [newfilename, False]
return [newfilename, True]
def make_output_img_file(filename):
'''Return "IMG" + hash of filename to use as object filename'''
m = hashlib.md5()
m.update(filename.encode())
newfilename = os.path.join(BUILD, 'IMG_' + m.hexdigest() + '.o')
if not os.path.isfile(filename):
return [newfilename, False]
fileExists = os.path.isfile(newfilename)
if fileExists and os.path.getmtime(newfilename) > os.path.getmtime(filename): #If the object file was created after the file was last modified
return [newfilename, False]
return [newfilename, True]
def process_assembly(in_file):
'''Assemble'''
out_file_list = make_output_file(in_file)
out_file = out_file_list[0]
if out_file_list[1] is False:
return out_file #No point in recompiling file
try:
print ('Assembling %s' % in_file)
cmd = [AS] + ASFLAGS + ['-c', in_file, '-o', out_file]
run_command(cmd)
except FileNotFoundError:
print('Error! The assembler could not be located.\nAre you sure you set up your path to devkitPro/devkitARM/bin correctly?')
sys.exit()
return out_file
def process_c(in_file):
'''Compile C'''
out_file_list = make_output_file(in_file)
out_file = out_file_list[0]
if out_file_list[1] is False:
return out_file #No point in recompiling file
try:
print ('Compiling %s' % in_file)
cmd = [CC] + CFLAGS + ['-c', in_file, '-o', out_file]
run_command(cmd)
except FileNotFoundError:
print('Error! The C compiler could not be located.\nAre you sure you set up your path to devkitPro/devkitARM/bin correctly?')
sys.exit()
return out_file
def process_string(filename):
'''Build Strings'''
out_file = filename.split(".string")[0] + '.s'
object_file = make_output_file(out_file)[0]
fileExists = os.path.isfile(object_file)
if fileExists and os.path.getmtime(object_file) > os.path.getmtime(filename): #If the .o file was created after the image was last modified
return make_output_file(out_file)[0]
print ('Building Strings %s' % filename)
StringFileConverter(filename)
out_file_list = make_output_file(out_file)
new_out_file = out_file_list[0]
if out_file_list[1] == False:
os.remove(out_file)
return new_out_file #No point in recompiling file
cmd = [AS] + ASFLAGS + ['-c', out_file, '-o', new_out_file]
run_command(cmd)
os.remove(out_file)
return new_out_file
def process_image(in_file):
'''Compile Image'''
if '.bmp' in in_file:
out_file = in_file.split('.bmp')[0] + '.s'
else:
out_file = in_file.split('.png')[0] + '.s'
namelist = in_file.split("\\") #Get path of grit flags
namelist.pop(len(namelist) - 1)
flags = "".join(str(i) + "\\" for i in namelist)
flags += "gritflags.txt"
try:
with open(flags, 'r') as file:
for line in file:
cmd = [GR, in_file] + line.split() + ['-o', out_file]
break #only needs the first line
except FileNotFoundError:
print("No gritflags.txt found in directory with " + in_file)
return 0
out_file_list = make_output_img_file(out_file)
new_out_file = out_file_list[0]
try:
if os.path.getmtime(new_out_file) > os.path.getmtime(in_file): #If the .o file was created after the image was last modified
return new_out_file
else:
run_command(cmd)
except FileNotFoundError:
run_command(cmd) #No .o file has been created
global PrintedCompilingImages
if (PrintedCompilingImages is False):
print ('Compiling Images')
PrintedCompilingImages = True
out_file_list = make_output_img_file(out_file)
new_out_file = out_file_list[0]
if out_file_list[1] == False:
os.remove(out_file)
return new_out_file #No point in recompiling file
cmd = [AS] + ASFLAGS + ['-c', out_file, '-o', new_out_file]
run_command(cmd)
os.remove(out_file)
return new_out_file
def link(objects):
'''Link objects into one binary'''
linked = 'build/linked.o'
cmd = [LD] + LDFLAGS + ['-o', linked] + list(objects)
run_command(cmd)
return linked
def objcopy(binary):
cmd = [OBJCOPY, '-O', 'binary', binary, 'build/output.bin']
run_command(cmd)
def run_glob(globstr, fn):
'''Glob recursively and run the processor function on each file in result'''
if globstr == '**/*.png' or globstr == '**/*.bmp': #Search the graphics location
return run_glob_graphics(globstr, fn)
if sys.version_info > (3, 4):
files = glob(os.path.join(SRC, globstr), recursive = True)
return map(fn, files)
else:
files = Path(SRC).glob(globstr)
return map(fn, map(str, files))
def run_glob_graphics(globstr, fn):
'''Glob recursively and run the processor function on each file in result'''
if sys.version_info > (3, 4):
files = glob(os.path.join(GRAPHICS, globstr), recursive = True)
return map(fn, files)
else:
files = Path(GRAPHICS).glob(globstr)
return map(fn, map(str, files))
def main():
starttime = datetime.now()
globs = {
'**/*.s': process_assembly,
'**/*.c': process_c,
'**/*.string': process_string,
'**/*.png': process_image,
'**/*.bmp': process_image
}
# Create output directory
try:
os.makedirs(BUILD)
except FileExistsError:
pass
# Gather source files and process them
objects = itertools.starmap(run_glob, globs.items())
# Link and extract raw binary
linked = link(itertools.chain.from_iterable(objects))
objcopy(linked)
#Build special_inserts.asm
if not os.path.isfile('build/special_inserts.bin') or os.path.getmtime('build/special_inserts.bin') < os.path.getmtime('special_inserts.asm'): #If the binary file was created after the file was last modified):
cmd = cmd = [AS] + ASFLAGS + ['-c', 'special_inserts.asm', '-o', 'build/special_inserts.o']
run_command(cmd)
cmd = [OBJCOPY, '-O', 'binary', 'build/special_inserts.o', 'build/special_inserts.bin']
run_command(cmd)
print ('Assembling special_inserts.asm')
print('Built in ' + str(datetime.now() - starttime) + '.')
if __name__ == '__main__':
main()

111
scripts/clean.py Normal file
View File

@ -0,0 +1,111 @@
#!/usr/bin/env python3
import os
import sys
import shutil
import hashlib
import glob, os.path
ROM_NAME = "test.gba"
SRC = './src'
GRAPHICS = './graphics'
ASSEMBLY = './assembly'
STRINGS = './strings'
BUILD = './build'
def PutFileNameInRightFormat(filename):
filename = filename.split('/')
newFileName = ""
if filename[0].upper() == "SRC":
newFileName = SRC
elif filename[0].upper() == "ASSEMBLY":
newFileName = ASSEMBLY
elif filename[0].upper() == "GRAPHICS":
newFileName = GRAPHICS
elif filename[0].upper() == "STRINGS":
newFileName = STRINGS
for i in range(1, len(filename)):
newFileName += "\\" + filename[i]
return newFileName
dir_path = os.path.dirname(os.path.realpath(__file__))
try:
os.remove(ROM_NAME)
except:
pass
if len(sys.argv) > 1:
#Try removing specific file only.
if len(sys.argv) > 2 and sys.argv[1].upper() == 'FILE':
try:
filename = PutFileNameInRightFormat(sys.argv[2])
print(filename)
m = hashlib.md5()
m.update(filename.encode())
newfilename = os.path.join(BUILD, m.hexdigest() + '.o')
try:
os.remove(newfilename)
except FileNotFoundError:
os.remove(BUILD + "\\IMG_" + newfilename.split('\\')[1])
print('"Build for ' + sys.argv[2] + '" removed successfully!')
sys.exit(1)
except:
print('Error: Could not remove build for file "' + sys.argv[2] + '".')
sys.exit(1)
#Don't remove generated repoints if the user only wants to remove the build.
elif sys.argv[1].upper() != 'BUILD' and sys.argv[1].upper() != 'GRAPHICS':
try:
os.remove('generatedrepoints')
except:
pass
else:
try:
os.remove('generatedrepoints')
except:
pass
try:
os.remove('offsets.ini')
except:
pass
if (len(sys.argv) > 1) and sys.argv[1].upper() == 'ALL':
try:
shutil.rmtree('build/')
except:
pass
os.chdir("graphics")
for root, dirs, files in os.walk(".", topdown = False):
for file in files:
if file.endswith('.h'):
os.remove(os.path.join(root, file))
elif (len(sys.argv) > 1) and sys.argv[1].upper() == 'GRAPHICS':
os.chdir("graphics")
for root, dirs, files in os.walk(".", topdown = False):
for file in files:
if file.endswith('.h'):
os.remove(os.path.join(root, file))
os.chdir(dir_path.split('\\scripts')[0])
os.chdir("build")
for root, dirs, files in os.walk(".", topdown = False):
for file in files:
if file.startswith('IMG_'): #Don't remove image file
os.remove(os.path.join(root, file))
else:
os.chdir("build")
for root, dirs, files in os.walk(".", topdown = False):
for file in files:
if not file.startswith('IMG_'): #Don't remove image file
os.remove(os.path.join(root, file))
print("Directory cleaned!")

189
scripts/data_extractor.py Normal file
View File

@ -0,0 +1,189 @@
#!/usr/bin/env python3
import os
############
#Options go here.
############
ROM_NAME = "BPRE0.gba" #the name of your rom
NumberOfPokemon = 412 #Change to total number of species in original rom
OutputFolder = os.getcwd() + "/extracted/"
SpeciesDefines = os.getcwd() + "/include/species.h"
############
#Code
############
def GeneralTableExtractor(dynamicOffset, definesDict, definesDict2, outputPath, tableType, tableName,
indexOffset, tableLengthName, startIndex, numEntries, entryLength, alignData):
output = open(outputPath, 'w')
startIndexName = ""
if startIndex != 0:
startIndexName = " - " + indexOffset
dataAlignment = 0
if alignData:
dataAlignment = GetLengthOfLongestValue(definesDict)
with open(ROM_NAME, 'rb') as binary_file:
#Load Dynamic Pointer to Table
binary_file.seek(dynamicOffset)
line = binary_file.read(3)
TablePointer = ExtractPointer(line)
output.write('#include "defines.h"\n\n')
output.write(tableType + ' ' + tableName + '[' + tableLengthName + startIndexName + '] =\n{\n')
for i in range(startIndex, numEntries):
binary_file.seek(TablePointer + ((i - startIndex) * entryLength))
byteList = binary_file.read(entryLength)
if i in definesDict:
output.write('\t[' + definesDict[i] + startIndexName + '] = ')
lenEntry = len(definesDict[i] + startIndexName)
else:
output.write('\t[' + str(i) + startIndexName + '] = ')
lenEntry = len(str(i) + startIndexName)
while lenEntry < dataAlignment: #Align Data
output.write(' ')
lenEntry += 1
data = ExtractPointer(byteList)
if definesDict2 is not False and data in definesDict2:
data = definesDict2[data]
else:
data = hex(data)
output.write(data + ',\n')
output.write('};\n')
output.close()
print("Success!")
def GeneralStructTableExtractor(dynamicOffset, definesDict, outputPath, tableType, tableName, tableLengthName,
numEntries, structLength, memberNames, memberLengths, memberDicts, useMemberNames,
loadDictDataFromIndex, offsetForForce):
assert(len(memberNames) == len(memberLengths) or not useMemberNames)
output = open(outputPath, 'w')
with open(ROM_NAME, 'rb') as binary_file:
#Load Dynamic Pointer to Table
binary_file.seek(dynamicOffset)
line = binary_file.read(3)
TablePointer = ExtractPointer(line)
output.write('#include "defines.h"\n\n')
output.write(tableType + ' ' + tableName + '[' + tableLengthName + '] =\n{\n')
for i in range(numEntries):
binary_file.seek(TablePointer + (i * structLength))
byteList = binary_file.read(structLength)
lenName = 0
if i in definesDict:
output.write('\t[' + definesDict[i] + '] =')
lenName = len(definesDict[i])
else:
output.write('\t[' + str(i) + '] =')
lenName = len(str(i))
if useMemberNames:
output.write('\n\t{\n')
else:
while lenName < 28: #Align structs
output.write(' ')
lenName += 1
output.write(' {')
for j in range(len(memberLengths)):
data = int(ExtractPointer(byteList[:memberLengths[j]]))
if memberDicts != [] and memberDicts[j] is not False:
if loadDictDataFromIndex:
if i in memberDicts[j]:
data = memberDicts[j][i]
else:
data = hex(data)
if offsetForForce > 0:
data += ' + ' + str(offsetForForce)
elif data in memberDicts[j]:
data = memberDicts[j][data]
else:
data = hex(data)
else:
data = hex(data)
if useMemberNames:
output.write('\t\t.' + memberNames[j] + ' = ' + str(data) + ',\n')
elif j + 1 < len(memberLengths):
output.write(str(data) + ', ')
else:
output.write(str(data))
byteList = byteList[memberLengths[j]:]
if i + 1 == numEntries: #Last iteration of loop
if useMemberNames:
output.write('\t},\n};\n')
else:
output.write('},\n};\n')
else:
if useMemberNames:
output.write('\t},\n')
else:
output.write('},\n')
output.close()
print("Success!")
def ExtractPointer(line):
offset = 0
for i in range(len(line)):
offset += (line[i] << (8 * i))
return offset
def DefinesDictMaker(definesFile):
definesDict = {}
with open(definesFile, 'r') as file:
for line in file:
if '#define ' in line:
linelist = line.split()
try:
definesDict[int(linelist[2])] = linelist[1]
except:
try:
definesDict[int(linelist[2], 16)] = linelist[1]
except:
pass
return definesDict
def GetLengthOfLongestValue(dicty):
maxim = ""
for key in dicty:
if len(dicty[key]) > len(maxim):
maxim = dicty[key]
return len(maxim)
#Code Execution Begins Here
SpeciesDict = DefinesDictMaker(SpeciesDefines)
GeneralStructTableExtractor(0x128, SpeciesDict, OutputFolder + "Front_Pic_Table.c", "const struct CompressedSpriteSheet", "gMonFrontPicTable", "NUM_SPECIES", NumberOfPokemon, 8, [], [4, 2, 2], [False, False, SpeciesDict], False, True, 0)
GeneralStructTableExtractor(0x12C, SpeciesDict, OutputFolder + "Back_Pic_Table.c", "const struct CompressedSpriteSheet", "gMonBackPicTable", "NUM_SPECIES", NumberOfPokemon, 8, [], [4, 2, 2], [False, False, SpeciesDict], False, True, 0)
GeneralStructTableExtractor(0x130, SpeciesDict, OutputFolder + "Palette_Table.c", "const struct CompressedSpritePalette", "gMonPaletteTable", "NUM_SPECIES", NumberOfPokemon, 8, [], [4, 2, 2], [False, SpeciesDict, False], False, True, 0)
GeneralStructTableExtractor(0x134, SpeciesDict, OutputFolder + "Shiny_Palette_Table.c", "const struct CompressedSpritePalette", "gMonShinyPaletteTable", "NUM_SPECIES", NumberOfPokemon, 8, [], [4, 2, 2], [False, SpeciesDict, False], False, True, 1500)
GeneralStructTableExtractor(0x11F4C, SpeciesDict, OutputFolder + "Front_Pic_Coords_Table.c", "const struct MonCoords", "gMonFrontPicCoords", "NUM_SPECIES", NumberOfPokemon, 4, ["size", "y_offset"], [1, 1], [], True, False, 0)
GeneralStructTableExtractor(0x74634, SpeciesDict, OutputFolder + "Back_Pic_Coords_Table.c", "const struct MonCoords", "gMonBackPicCoords", "NUM_SPECIES", NumberOfPokemon, 4, ["size", "y_offset"], [1, 1], [], True, False, 0)
GeneralTableExtractor(0x356F8, SpeciesDict, False, OutputFolder + "Enemy_Elevation_Table.c", "const u8", "gEnemyMonElevation", "", "NUM_SPECIES", 0, NumberOfPokemon, 1, False)
GeneralTableExtractor(0x138, SpeciesDict, False, OutputFolder + "Icon_Table.c", "const u32", "gMonIconTable", "", "NUM_SPECIES", 0, NumberOfPokemon, 4, False)
GeneralTableExtractor(0x13C, SpeciesDict, False, OutputFolder + "Icon_Palette_Table.c", "const u8", "gMonIconPaletteIndices", "", "NUM_SPECIES", 0, NumberOfPokemon, 1, False)
GeneralTableExtractor(0x105E14, SpeciesDict, False, OutputFolder + "Footprint_Table.c", "const u32", "gMonFootprintTable", "", "NUM_SPECIES", 0, NumberOfPokemon, 4, False)
GeneralStructTableExtractor(0x72114, SpeciesDict, OutputFolder + "Cry_Table.c", "const struct ToneData", "gCryTable", "NUM_SPECIES", NumberOfPokemon, 12, ["type", "key", "length", "pan_sweep", "wav", "attack", "decay", "sustain", "release"], [1, 1, 1, 1, 4, 1, 1, 1, 1], [], True, False, 0)
GeneralStructTableExtractor(0x72104, SpeciesDict, OutputFolder + "Cry_Table_2.c", "const struct ToneData", "gCryTable2", "NUM_SPECIES", NumberOfPokemon, 12, ["type", "key", "length", "pan_sweep", "wav", "attack", "decay", "sustain", "release"], [1, 1, 1, 1, 4, 1, 1, 1, 1], [], True, False, 0)

382
scripts/insert.py Normal file
View File

@ -0,0 +1,382 @@
#!/usr/bin/env python3
import os
import subprocess
import sys
import shutil
import binascii
import textwrap
import sys
OFFSET_TO_PUT = 0x1f34230
SOURCE_ROM = "BPRE0.gba"
from datetime import datetime
PathVar = os.environ.get('Path')
Paths = PathVar.split(';')
PATH = ""
for candidatePath in Paths:
if "devkitARM" in candidatePath:
PATH = candidatePath
break
if PATH == "":
PATH = 'C://devkitPro//devkitARM//bin'
if os.path.isdir(PATH) == False:
print('Devkit not found.')
sys.exit(1)
ROM_NAME = "test.gba"
PREFIX = 'arm-none-eabi-'
OBJCOPY = os.path.join(PATH, PREFIX + 'objcopy')
OBJDUMP = os.path.join(PATH, PREFIX + 'objdump')
NM = os.path.join(PATH, PREFIX + 'nm')
AS = os.path.join(PATH, PREFIX + 'as')
CC = os.path.join(PATH, PREFIX + 'gcc')
CXX = os.path.join(PATH, PREFIX + 'g++')
def ExtractPointer(listy):
pointer = 0
for a in range(len(listy)):
pointer += (int(listy[a])) << (8 * a)
return pointer
def get_text_section():
try:
# Dump sections
out = subprocess.check_output([OBJDUMP, '-t', 'build/linked.o'])
lines = out.decode().split('\n')
# Find text section
text = filter(lambda x: x.strip().endswith('.text'), lines)
section = (list(text))[0]
# Get the offset
offset = int(section.split(' ')[0], 16)
return offset
except:
print("Error: The insertion process could not be completed.\n" +
"The linker symbol file was not found.")
sys.exit(1)
def symbols(subtract=0):
out = subprocess.check_output([NM, 'build/linked.o'])
lines = out.decode().split('\n')
name = ''
ret = {}
for line in lines:
parts = line.strip().split()
if (len(parts) < 3):
continue
if (parts[1].lower() not in {'t','d'}):
continue
offset = int(parts[0], 16)
ret[parts[2]] = offset - subtract
return ret
def hook(rom, space, hook_at, register=0):
# Align 2
if hook_at & 1:
hook_at -= 1
rom.seek(hook_at)
register &= 7
if hook_at % 4:
data = bytes([0x01, 0x48 | register, 0x00 | (register << 3), 0x47, 0x0, 0x0])
else:
data = bytes([0x00, 0x48 | register, 0x00 | (register << 3), 0x47])
space += 0x08000001
data += (space.to_bytes(4, 'little'))
rom.write(bytes(data))
def funcwrap(rom, space, hook_at, nparams, isreturning):
# Align 2
if hook_at & 1:
hook_at -= 1
rom.seek(hook_at)
nparams=nparams-1
if nparams<4:
data = bytes([0x10, 0xB5, 0x3, 0x4C, 0x0, 0xF0, 0x3, 0xF8, 0x10, 0xBC , (isreturning+1), 0xBC , (isreturning<<3), 0x47, 0x20, 0x47])
else:
k=nparams-3
data = bytes([0x10, 0xB5, 0x82, 0xB0])
for i in range(k+2):
data += bytes([ i+2, 0x9C , i, 0x94])
data += bytes([0x0, 0x9C , (nparams-1), 0x94, 0x1, 0x9C , nparams, 0x94, 0x2, 0xB0 , (k+8), 0x4C,
0x0, 0xF0 , ((k<<1)+13), 0xF8, 0x82, 0xB0 , nparams, 0x9C, 0x1, 0x94 , (nparams-1), 0x9C , 0x0, 0x94])
for i in reversed(range(k+2)):
data += bytes([ i, 0x9C , i+2, 0x94])
data += bytes([0x2, 0xB0 , 0x10, 0xBC, (isreturning+1), 0xBC , (isreturning<<3), 0x47, 0x20, 0x47])
space += 0x08000001
data += (space.to_bytes(4, 'little'))
rom.write(bytes(data))
def repoint(rom, space, repoint_at, slidefactor=0):
rom.seek(repoint_at)
space += (0x08000000+slidefactor)
data = (space.to_bytes(4, 'little'))
rom.write(bytes(data))
ignored_offsets = [0x3986C0, 0x3986EC, 0xDABDF0] #These offsets contain the word 0x8900000 - the attack data from
#Mr. DS's rombase. In order to maintain as much compatability as
#possible, the data at these offsets is never modified.
def real_repoint(rom, offset_tuples):
pointer_list = []
pointer_dict = {}
for tuple in offset_tuples: #Format is (Double Pointer, New Pointer, Symbol)
offset = tuple[0]
rom.seek(offset)
pointer = ExtractPointer(rom.read(4))
pointer_list.append(pointer)
pointer_dict[pointer] = (tuple[1] + 0x08000000, tuple[2])
offset = 0
offset_list = []
while (offset < 0xFFFFFD):
if offset in ignored_offsets:
offset += 4
continue
rom.seek(offset)
word = ExtractPointer(rom.read(4))
rom.seek(offset)
for pointer in pointer_list:
if word == pointer:
offset_list.append((offset, pointer_dict[pointer][1]))
rom.write(bytes(pointer_dict[pointer][0].to_bytes(4, 'little')))
break
offset += 4
return offset_list
def bytereplace(rom, offset, data):
ar=offset
words=data.split()
for i in range(0,len(words)):
rom.seek(ar)
intbyte=int(words[i],16)
rom.write(bytes(intbyte.to_bytes(1, 'big')))
ar += 1
starttime = datetime.now()
try:
shutil.copyfile(SOURCE_ROM, ROM_NAME)
except FileNotFoundError:
print('Error: Insertion could not be completed.\nCould not find source rom: "' + SOURCE_ROM + '".\nPlease make sure a rom with this name exists in the root.')
sys.exit(0)
except PermissionError:
print('Error: Insertion could not be completed.\n"' + ROM_NAME + '" is currently in use by another application.\nPlease free it up before trying again.')
sys.exit(0)
with open(ROM_NAME, 'rb+') as rom:
print("Inserting code.")
table = symbols(get_text_section())
rom.seek(OFFSET_TO_PUT)
with open('build/output.bin', 'rb') as binary:
rom.write(binary.read())
binary.close()
# Adjust symbol table
for entry in table:
table[entry] += OFFSET_TO_PUT
# Insert byte changes
with open('bytereplacement', 'r') as replacelist:
for line in replacelist:
if line.strip().startswith('#') or line.strip() == '' : continue
offset = int(line[:8],16) - 0x08000000
bytereplace(rom, offset, line[9:].strip())
# Do Special Inserts
with open('special_inserts.asm', 'r') as file:
loadOffsets = False
offsetList = []
for line in file:
if line.strip().startswith('.org '):
offsetList.append(int(line.split('.org ')[1].split(',')[0], 16))
offsetList.sort()
try:
with open('build/special_inserts.bin', 'rb') as binFile:
for offset in offsetList:
originalOffset = offset
dataList = ""
if offsetList.index(offset) == len(offsetList) - 1:
while True:
try:
binFile.seek(offset)
dataList += hex(binFile.read(1)[0]) + " "
except IndexError:
break
offset += 1
else:
binFile.seek(offset)
word = ExtractPointer(binFile.read(4))
while (word != 0xFFFFFFFF):
binFile.seek(offset)
dataList += hex(binFile.read(1)[0]) + " "
offset += 1
if offset in offsetList: #Overlapping data
break
word = ExtractPointer(binFile.read(4))
bytereplace(rom, originalOffset, dataList.strip())
except FileNotFoundError:
pass
# Read hooks from a file
with open('hooks', 'r') as hooklist:
for line in hooklist:
if line.strip().startswith('#') or line.strip() == '': continue
symbol, address, register = line.split()
offset = int(address, 16) - 0x08000000
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
hook(rom, code, offset, int(register))
# Read repoints from a file
with open('repoints', 'r') as repointlist:
for line in repointlist:
if line.strip().startswith('#') or line.strip() == '': continue
if len(line.split()) is 2:
symbol, address = line.split()
offset = int(address, 16) - 0x08000000
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
repoint(rom, code, offset)
if len(line.split()) is 3:
symbol, address, slide = line.split()
offset = int(address, 16) - 0x08000000
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
repoint(rom, code, offset, int(slide))
symbols_repointed = set()
try:
with open('generatedrepoints', 'r') as repointlist:
for line in repointlist:
if line.strip().startswith('#') or line.strip() == '': continue
symbol, address = line.split()
offset = int(address)
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
symbols_repointed.add(symbol)
repoint(rom, code, offset)
except FileNotFoundError:
with open('generatedrepoints', 'w') as repointlist:
repointlist.write('##This is a generated file at runtime. Do not modify it!\n')
offsets_to_repoint_together = []
with open('repointall', 'r') as repointlist:
for line in repointlist:
if line.strip().startswith('#') or line.strip() == '': continue
symbol, address = line.split()
offset = int(address, 16) - 0x08000000
if symbol in symbols_repointed: continue
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
offsets_to_repoint_together.append((offset, code, symbol))
if offsets_to_repoint_together != []:
offsets = real_repoint(rom, offsets_to_repoint_together) #Format is [(offset, symbol), ...]
output = open('generatedrepoints', 'a')
for tuple in offsets:
output.write(tuple[1] + ' ' + str(tuple[0]) + '\n')
#output.close() #Purposely left open so the user can't modify it
# Read routine repoints from a file
with open('routinepointers', 'r') as pointerlist:
for line in pointerlist:
if line.strip().startswith('#') or line.strip() == '': continue
symbol, address = line.split()
offset = int(address, 16) - 0x08000000
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
repoint(rom, code, offset, 1)
# Read routine rewrite wrapper from a file
with open('functionrewrites', 'r') as frwlist:
for line in frwlist:
if line.strip().startswith('#') or line.strip() == '': continue
symbol, address, nparam, isreturning = line.split()
offset = int(address, 16) - 0x08000000
try:
code = table[symbol]
except KeyError:
print('Symbol missing:', symbol)
continue
funcwrap(rom, code, offset, int(nparam), int(isreturning))
width = max(map(len, table.keys())) + 1
try:
offset_file = open("offsets.ini", 'r+')
except FileNotFoundError:
offset_file = open("offsets.ini", 'w')
offset_file.truncate()
for key in sorted(table.keys()):
fstr = ('{:' + str(width) + '} {:08X}')
offset_file.write(fstr.format(key + ':', table[key] + 0x08000000) + '\n')
offset_file.close()
print('Inserted in ' + str(datetime.now() - starttime) + '.')

94
scripts/make.py Normal file
View File

@ -0,0 +1,94 @@
#!/usr/bin/env python3
import shutil
import sys
import os
############
#Options go here.
############
ROM_NAME = "BPRE0.gba" #The name of your rom
OFFSET_TO_PUT = 0xB00000
SEARCH_FREE_SPACE = False #Set to True if you want the script to search for free space;Set to False if you don't want to search for free space as you for example update the engine
#############
#Options end here.
#############
###############
#Functions start here.
###############
def align_x100(offset):
mod_x100 = offset % 0x100
if mod_x100 != 0x0: #not aligned properly
offset += (0x100 - mod_x100)
return offset
def find_offset_to_put(rom, needed_bytes, start_loc):
offset = start_loc
rom.seek(0, 2)
max_pos = rom.tell()
found_bytes = 0
while found_bytes < needed_bytes:
if offset + found_bytes >= max_pos:
print("End of file reached. Not enough free space.")
return 0
found_bytes += 1
rom.seek(offset + found_bytes)
if rom.read(1) != b'\xFF':
offset = align_x100(offset + found_bytes)
found_bytes = 0
return offset
def file_change_line(file_path, line_to_change, replacement):
file = open(file_path, 'r')
copy = file.read()
file.seek(0x0)
line_no = 1
for line in file:
if (line_no == line_to_change):
copy = copy.replace(line, replacement)
break
line_no += 1
file.close()
file = open(file_path, 'w')
file.write(copy)
file.close()
def edit_linker(offset):
file_change_line("linker.ld", 4, "\t\trom : ORIGIN = (0x08000000 + " + hex(offset) + "), LENGTH = 32M\n")
def edit_insert(offset):
file_change_line("./scripts/insert.py", 11, "OFFSET_TO_PUT = " + hex(offset) + '\n')
file_change_line("./scripts/insert.py", 12, 'SOURCE_ROM = "' + ROM_NAME + '"\n')
def build_code():
os.system("python scripts/build.py")
def insert_code():
os.system("python scripts/insert.py")
def clear_from_to(rom, from_, to_):
rom.seek(from_)
for i in range(0, to_ - from_):
rom.write(b'\xFF')
##############
#Functions end here.
##############
try:
with open(ROM_NAME, 'rb+') as rom:
offset = OFFSET_TO_PUT
if SEARCH_FREE_SPACE == True:
offset = find_offset_to_put(rom, 0x50000, align_x100(offset))
edit_linker(offset)
edit_insert(offset)
build_code()
insert_code()
rom.close()
except:
print('Error: Could not find source rom: "' + ROM_NAME + '".\nPlease make sure a rom with this name exists in the root.')

151
scripts/string.py Normal file
View File

@ -0,0 +1,151 @@
#!/usr/bin/env python3
# -*- coding: cp437 -*-
CharMap = "charmap.tbl"
SpecialBuffers = {
"." : ["B0"],
"BUFFER" : ["FD"],
"ATTACKER" : ["FD", "0F"],
"TARGET" : ["FD", "10"],
"EFFECT_BANK" : ["FD", "11"],
"SCRIPTING_BANK" : ["FD", "13"],
"CURRENT_MOVE" : ["FD", "14"],
"LAST_ITEM" : ["FD", "16"],
"LAST_ABILITY" : ["FD", "17"],
"ATTACKER_ABILITY" : ["FD", "18"],
"TARGET_ABILITY" : ["FD", "19"],
"SCRIPTING_BANK_ABILITY" : ["FD", "1A"],
"PLAYER_NAME" : ["FD", "23"],
}
def StringFileConverter(filename):
stringToWrite = ".thumb\n.text\n.align 2\n\n"
with open(filename, 'r') as file:
maxLength = 0
fillFF = False
readingState = 0
for line in file:
line = line.rstrip("\n\r") #Remove only newline characters
if line == "" or line[:2] == "//": #Ignore blank lines and comment lines
continue
if readingState == 0: #Only when the file starts
line = line.strip()
if line[:6].upper() == "#ORG @" and line[6:] != "":
title = line[6:]
stringToWrite += ".global " + title + "\n" + title + ":\n"
readingState = 1
elif "MAX_LENGTH" in line and "=" in line:
try:
maxLength = int(line.split("=")[1])
except:
print('Error reading max length in line: "' + line + '" in file: "' + filename + '"')
elif "FILL_FF" in line and "=" in line:
try:
fillFF = bool(line.split("=")[1])
except:
print('Error reading FF fill in line: "' + line + '" in file: "' + filename + '"')
else:
print('Warning! Error with line: "' + line + '" in file: "' + filename + '"')
elif readingState == 1:
if line[:6].upper() == "#ORG @" and line[6:] != "":
line = line.strip()
title = line[6:]
stringToWrite += ".global " + title + "\n" + title + ":\n"
else:
stringToWrite += ProcessString(line, maxLength, fillFF)
stringToWrite += "0xFF\n\n" #Only print line in everything went alright
output = open(filename.split(".string")[0] + '.s', 'w') #Only open file once we know everything went okay.
output.write(stringToWrite)
output.close()
def ProcessString(string, maxLength = 0, fillWithFF = False):
charMap = PokeByteTableMaker()
stringToWrite = ".byte "
buffer = False
escapeChar = False
bufferChars = ""
strLen = 0
for char in string:
if maxLength > 0 and strLen >= maxLength:
print('Warning: The string "' + string + '" has exceeded the maximum length of ' + str(maxLength) + ' and has been truncated!')
break
if buffer is True:
if char == ']':
buffer = False
if bufferChars in SpecialBuffers:
for bufferChar in SpecialBuffers[bufferChars]:
if maxLength > 0 and strLen >= maxLength: #End buffer in middle
print('Warning: The string buffer "' + bufferChars + '" has exceeded the maximum length of ' + str(maxLength) + ' and has been truncated!')
break
stringToWrite += ("0x" + bufferChar + ", ")
strLen += 1
else:
stringToWrite += ("0x" + bufferChars + ", ")
strLen += 1
bufferChars = ""
else:
bufferChars += char
elif escapeChar is True:
escapeChar = False
try:
stringToWrite += hex(charMap["\\" + char]) + ", "
strLen += 1
except KeyError:
print('Error parsing string: "' + string + '"')
break
else:
try:
stringToWrite += hex(charMap[char]) + ", "
strLen += 1
except KeyError:
if (char == '['):
buffer = True
elif (char == '\\'):
escapeChar = True
elif char == '"':
stringToWrite += hex(charMap["\\" + char])
strLen += 1
else:
print('Error parsing string: "' + string + '"' + ' at character "' + char + '".')
break
if strLen < maxLength and fillWithFF:
while strLen < maxLength:
stringToWrite += "0xFF, "
strLen += 1
return stringToWrite
def PokeByteTableMaker():
dicty = {}
with open(CharMap) as file:
for line in file:
if line.strip() != "/FF" and line.strip() != "":
if (line[2] == '=' and line[3] != ""):
try:
if line[3] == '\\':
dicty[line[3] + line[4]] = int(line.split('=')[0], 16)
else:
dicty[line[3]] = int(line.split('=')[0], 16)
except:
pass
dicty[' '] = 0
dicty[""] = 0xB0
dicty[""] = 0xB1
return dicty

76
special_inserts.asm Normal file
View File

@ -0,0 +1,76 @@
.text
.align 2
.thumb
.equ NUM_SPECIES, 1102
.equ EVOS_PER_MON, 16
.equ NUM_DEX_ENTRIES, 809
.equ SEEN_DEX_FLAGS, 0x203C700
.equ CAUGHT_DEX_FLAGS, (SEEN_DEX_FLAGS + (NUM_DEX_ENTRIES / 8) + 1)
@@Fix Num Evolutions@@
.org 0x4598A, 0xFF
.byte EVOS_PER_MON * 8
.org 0x4598E, 0xFF
.byte EVOS_PER_MON * 8
@@Fix Breeding@@
.org 0x459CC, 0xFF
ldr r0, .BreedingNumSpecies
add r0, #0x1
.org 0x459EC, 0xFF
.BreedingNumSpecies: .word NUM_SPECIES - 1
@@Fix Egg Hatching Time@@
.org 0x46204, 0xFF
.word gBaseStats + 0x11
.org 0x462A8, 0xFF
.word gBaseStats + 0x11
@@Fix New Game Dex Flags Clear@@
.org 0x549B0, 0xFF
mov r0, r4
mov r8, r8
mov r1, #0x0
mov r2, #(NUM_DEX_ENTRIES / 8) + 1
.org 0x549BC, 0xFF
mov r0, r4
add r0, #(NUM_DEX_ENTRIES / 8) + 1
mov r1, #0x0
mov r2, #(NUM_DEX_ENTRIES / 8) + 1
.org 0x549D0, 0xFF
.word SEEN_DEX_FLAGS
@@Fix Dex Views@@
.org 0x88EA4, 0xFF @Pokedex Count
.word NUM_DEX_ENTRIES - 1
.org 0x1037D4, 0xFF @Weight View
.word NUM_DEX_ENTRIES - 1
.org 0x103870, 0xFF @Height View
.word NUM_DEX_ENTRIES - 1
.org 0x103920, 0xFF @General
.word NUM_DEX_ENTRIES - 1
.org 0x104B10, 0xFF
.word SEEN_DEX_FLAGS
.org 0x104B5C, 0xFF
.word CAUGHT_DEX_FLAGS
.org 0x104B94, 0xFF
.word SEEN_DEX_FLAGS
.org 0x104BB8, 0xFF
.word CAUGHT_DEX_FLAGS
.org 0x104C28, 0xFF
.word NUM_DEX_ENTRIES - 1

5516
src/Back_Pic_Coords_Table.c Normal file

File diff suppressed because it is too large Load Diff

1108
src/Back_Pic_Table.c Normal file

File diff suppressed because it is too large Load Diff

35521
src/Base_Stats.c Normal file

File diff suppressed because it is too large Load Diff

12918
src/Cry_Table.c Normal file

File diff suppressed because it is too large Load Diff

12918
src/Cry_Table_2.c Normal file

File diff suppressed because it is too large Load Diff

3792
src/Egg_Moves.c Normal file

File diff suppressed because it is too large Load Diff

1107
src/Enemy_Elevation_Table.c Normal file

File diff suppressed because it is too large Load Diff

565
src/Evolution Table.c Normal file
View File

@ -0,0 +1,565 @@
#include "defines.h"
#include "../include/moves.h"
#include "../include/items.h"
#include "../include/evolution.h"
#include "../include/base_stats.h"
const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
{
[SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR, 0}},
[SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR, 0}},
[SPECIES_VENUSAUR] = {{EVO_MEGA, ITEM_VENUSAURITE, SPECIES_VENUSAUR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON, 0}},
[SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD, 0}},
[SPECIES_CHARIZARD] = {{EVO_MEGA, ITEM_CHARIZARDITE_X, SPECIES_CHARIZARD_MEGA_X, MEGA_VARIANT_STANDARD},
{EVO_MEGA, ITEM_CHARIZARDITE_Y, SPECIES_CHARIZARD_MEGA_Y, MEGA_VARIANT_STANDARD}},
[SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE, 0}},
[SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE, 0}},
[SPECIES_BLASTOISE] = {{EVO_MEGA, ITEM_BLASTOISINITE, SPECIES_BLASTOISE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD, 0}},
[SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE, 0}},
[SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA, 0}},
[SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL, 0}},
[SPECIES_BEEDRILL] = {{EVO_MEGA, ITEM_BEEDRILLITE, SPECIES_BEEDRILL_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO, 0}},
[SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT, 0}},
[SPECIES_PIDGEOT] = {{EVO_MEGA, ITEM_PIDGEOTITE, SPECIES_PIDGEOT_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE, 0}},
[SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW, 0}},
[SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK, 0}},
[SPECIES_PIKACHU] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU, 0}},
[SPECIES_SANDSHREW] = {{EVO_LEVEL, 22, SPECIES_SANDSLASH, 0}},
[SPECIES_NIDORAN_F] = {{EVO_LEVEL, 16, SPECIES_NIDORINA, 0}},
[SPECIES_NIDORINA] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN, 0}},
[SPECIES_NIDORAN_M] = {{EVO_LEVEL, 16, SPECIES_NIDORINO, 0}},
[SPECIES_NIDORINO] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING, 0}},
[SPECIES_CLEFAIRY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE, 0}},
[SPECIES_VULPIX] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES, 0}},
[SPECIES_JIGGLYPUFF] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF, 0}},
[SPECIES_ZUBAT] = {{EVO_LEVEL, 22, SPECIES_GOLBAT, 0}},
[SPECIES_GOLBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_CROBAT, 0}},
[SPECIES_ODDISH] = {{EVO_LEVEL, 21, SPECIES_GLOOM, 0}},
[SPECIES_GLOOM] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_BELLOSSOM, 0},
{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME, 0}},
[SPECIES_PARAS] = {{EVO_LEVEL, 24, SPECIES_PARASECT, 0}},
[SPECIES_VENONAT] = {{EVO_LEVEL, 31, SPECIES_VENOMOTH, 0}},
[SPECIES_DIGLETT] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO, 0}},
[SPECIES_MEOWTH] = {{EVO_LEVEL, 28, SPECIES_PERSIAN, 0}},
[SPECIES_PSYDUCK] = {{EVO_LEVEL, 33, SPECIES_GOLDUCK, 0}},
[SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE, 0}},
[SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE, 0}},
[SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL, 0}},
[SPECIES_POLIWHIRL] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH, 0},
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED, 0},
{EVO_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED, 0}},
[SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA, 0}},
[SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_ALAKAZAM, 0}},
[SPECIES_ALAKAZAM] = {{EVO_MEGA, ITEM_ALAKAZITE, SPECIES_ALAKAZAM_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE, 0}},
[SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_MACHAMP, 0}},
[SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL, 0}},
[SPECIES_WEEPINBELL] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL, 0}},
[SPECIES_TENTACOOL] = {{EVO_LEVEL, 30, SPECIES_TENTACRUEL, 0}},
[SPECIES_GEODUDE] = {{EVO_LEVEL, 25, SPECIES_GRAVELER, 0}},
[SPECIES_GRAVELER] = {{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOLEM, 0},
{EVO_TRADE, 0, SPECIES_GOLEM, 0}},
[SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH, 0}},
[SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO, 0},
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING, 0},
{EVO_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING, 0}},
[SPECIES_SLOWBRO] = {{EVO_MEGA, ITEM_SLOWBRONITE, SPECIES_SLOWBRO_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON, 0}},
[SPECIES_MAGNETON] = {{EVO_MAP, MAP_NAME_THUNDERCAP_MT, SPECIES_MAGNEZONE, 0}},
[SPECIES_DODUO] = {{EVO_LEVEL, 31, SPECIES_DODRIO, 0}},
[SPECIES_SEEL] = {{EVO_LEVEL, 34, SPECIES_DEWGONG, 0}},
[SPECIES_GRIMER] = {{EVO_LEVEL, 38, SPECIES_MUK, 0}},
[SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER, 0}},
[SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER, 0}},
[SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GENGAR, 0}},
[SPECIES_GENGAR] = {{EVO_MEGA, ITEM_GENGARITE, SPECIES_GENGAR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX, 0},
{EVO_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX, 0}},
[SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO, 0}},
[SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER, 0}},
[SPECIES_VOLTORB] = {{EVO_LEVEL, 30, SPECIES_ELECTRODE, 0}},
[SPECIES_EXEGGCUTE] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR, 0}},
[SPECIES_CUBONE] = {{EVO_LEVEL, 28, SPECIES_MAROWAK, 0}},
[SPECIES_LICKITUNG] = {{EVO_MOVE, 205, SPECIES_LICKILICKY, 0}},
[SPECIES_KOFFING] = {{EVO_LEVEL, 35, SPECIES_WEEZING, 0}},
[SPECIES_RHYHORN] = {{EVO_LEVEL, 42, SPECIES_RHYDON, 0}},
[SPECIES_RHYDON] = {{EVO_ITEM, ITEM_BIG_NUGGET, SPECIES_RHYPERIOR, 0},
{EVO_TRADE_ITEM, ITEM_BIG_NUGGET, SPECIES_RHYPERIOR, 0}},
[SPECIES_CHANSEY] = {{EVO_FRIENDSHIP, 0, SPECIES_BLISSEY, 0}},
[SPECIES_TANGELA] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO, 0}},
[SPECIES_KANGASKHAN] = {{EVO_MEGA, ITEM_KANGASKHANITE, SPECIES_KANGASKHAN_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA, 0}},
[SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA, 0},
{EVO_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA, 0}},
[SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING, 0}},
[SPECIES_STARYU] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE, 0}},
[SPECIES_SCYTHER] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR, 0},
{EVO_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR, 0}},
[SPECIES_ELECTABUZZ] = {{EVO_ITEM, ITEM_ELECTRIZER, SPECIES_ELECTIVIRE, 0},
{EVO_TRADE_ITEM, ITEM_ELECTRIZER, SPECIES_ELECTIVIRE, 0}},
[SPECIES_MAGMAR] = {{EVO_TRADE_ITEM, ITEM_PEARL_STRING, SPECIES_MAGMORTAR, 0},
{EVO_ITEM, ITEM_PEARL_STRING, SPECIES_MAGMORTAR, 0}},
[SPECIES_PINSIR] = {{EVO_MEGA, ITEM_PINSIRITE, SPECIES_PINSIR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS, 0}},
[SPECIES_GYARADOS] = {{EVO_MEGA, ITEM_GYARADOSITE, SPECIES_GYARADOS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_EEVEE] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_ESPEON, 0},
{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_UMBREON, 0},
{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON, 0},
{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON, 0},
{EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON, 0},
{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_LEAFEON, 0},
{EVO_ITEM, ITEM_ICE_STONE, SPECIES_GLACEON, 0},
{EVO_MOVE_TYPE, TYPE_FAIRY, SPECIES_SYLVEON, 0}},
[SPECIES_PORYGON] = {{EVO_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2, 0},
{EVO_TRADE_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2, 0}},
[SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR, 0}},
[SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS, 0}},
[SPECIES_AERODACTYL] = {{EVO_MEGA, ITEM_AERODACTYLITE, SPECIES_AERODACTYL_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR, 0}},
[SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE, 0}},
[SPECIES_MEWTWO] = {{EVO_MEGA, ITEM_MEWTWONITE_X, SPECIES_MEWTWO_MEGA_X, MEGA_VARIANT_STANDARD},
{EVO_MEGA, ITEM_MEWTWONITE_Y, SPECIES_MEWTWO_MEGA_Y, MEGA_VARIANT_STANDARD}},
[SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF, 0}},
[SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM, 0}},
[SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA, 0}},
[SPECIES_QUILAVA] = {{EVO_LEVEL, 36, SPECIES_TYPHLOSION, 0}},
[SPECIES_TOTODILE] = {{EVO_LEVEL, 18, SPECIES_CROCONAW, 0}},
[SPECIES_CROCONAW] = {{EVO_LEVEL, 30, SPECIES_FERALIGATR, 0}},
[SPECIES_SENTRET] = {{EVO_LEVEL, 15, SPECIES_FURRET, 0}},
[SPECIES_HOOTHOOT] = {{EVO_LEVEL, 20, SPECIES_NOCTOWL, 0}},
[SPECIES_LEDYBA] = {{EVO_LEVEL, 18, SPECIES_LEDIAN, 0}},
[SPECIES_SPINARAK] = {{EVO_LEVEL, 22, SPECIES_ARIADOS, 0}},
[SPECIES_CHINCHOU] = {{EVO_LEVEL, 27, SPECIES_LANTURN, 0}},
[SPECIES_PICHU] = {{EVO_FRIENDSHIP, 0, SPECIES_PIKACHU, 0}},
[SPECIES_CLEFFA] = {{EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY, 0}},
[SPECIES_IGGLYBUFF] = {{EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF, 0}},
[SPECIES_TOGEPI] = {{EVO_FRIENDSHIP, 0, SPECIES_TOGETIC, 0}},
[SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU, 0}},
[SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY, 0}},
[SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS, 0}},
[SPECIES_AMPHAROS] = {{EVO_MEGA, ITEM_AMPHAROSITE, SPECIES_AMPHAROS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL, 0}},
[SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM, 0}},
[SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF, 0}},
[SPECIES_AIPOM] = {{EVO_MOVE, 438, SPECIES_AMBIPOM, 0}},
[SPECIES_SUNKERN] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA, 0}},
[SPECIES_YANMA] = {{EVO_MOVE, 246, SPECIES_YANMEGA, 0}},
[SPECIES_WOOPER] = {{EVO_LEVEL, 20, SPECIES_QUAGSIRE, 0}},
[SPECIES_MURKROW] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_HONCHKROW, 0}},
[SPECIES_MISDREAVUS] = {{EVO_ITEM, ITEM_036, SPECIES_MISMAGIUS, 0}},
[SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS, 0}},
[SPECIES_GLIGAR] = {{EVO_HOLD_ITEM_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR, 0}},
[SPECIES_STEELIX] = {{EVO_MEGA, ITEM_STEELIXITE, SPECIES_STEELIX_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL, 0}},
[SPECIES_SCIZOR] = {{EVO_MEGA, ITEM_SCIZORITE, SPECIES_SCIZOR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_HERACROSS] = {{EVO_MEGA, ITEM_HERACRONITE, SPECIES_HERACROSS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING, 0}},
[SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO, 0}},
[SPECIES_SWINUB] = {{EVO_LEVEL, 33, SPECIES_PILOSWINE, 0}},
[SPECIES_PILOSWINE] = {{EVO_MOVE, 246, SPECIES_MAMOSWINE, 0}},
[SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY, 0}},
[SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM, 0}},
[SPECIES_HOUNDOOM] = {{EVO_MEGA, ITEM_HOUNDOOMINITE, SPECIES_HOUNDOOM_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN, 0}},
[SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISK, SPECIES_PORYGON_Z, 0},
{EVO_ITEM, ITEM_DUBIOUS_DISK, SPECIES_PORYGON_Z, 0}},
[SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE, 0},
{EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP, 0},
{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN, 0}},
[SPECIES_SMOOCHUM] = {{EVO_LEVEL, 30, SPECIES_JYNX, 0}},
[SPECIES_ELEKID] = {{EVO_LEVEL, 30, SPECIES_ELECTABUZZ, 0}},
[SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR, 0}},
[SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR, 0}},
[SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR, 0}},
[SPECIES_TYRANITAR] = {{EVO_MEGA, ITEM_TYRANITARITE, SPECIES_TYRANITAR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE, 0}},
[SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE, 0}},
[SPECIES_SCEPTILE] = {{EVO_MEGA, ITEM_SCEPTILITE, SPECIES_SCEPTILE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN, 0}},
[SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN, 0}},
[SPECIES_BLAZIKEN] = {{EVO_MEGA, ITEM_BLAZIKENITE, SPECIES_BLAZIKEN_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP, 0}},
[SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT, 0}},
[SPECIES_SWAMPERT] = {{EVO_MEGA, ITEM_SWAMPERTITE, SPECIES_SWAMPERT_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA, 0}},
[SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE, 0}},
[SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON, 0},
{EVO_LEVEL_CASCOON, 7, SPECIES_CASCOON, 0}},
[SPECIES_SILCOON] = {{EVO_LEVEL, 10, SPECIES_BEAUTIFLY, 0}},
[SPECIES_CASCOON] = {{EVO_LEVEL, 10, SPECIES_DUSTOX, 0}},
[SPECIES_LOTAD] = {{EVO_LEVEL, 14, SPECIES_LOMBRE, 0}},
[SPECIES_LOMBRE] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO, 0}},
[SPECIES_SEEDOT] = {{EVO_LEVEL, 14, SPECIES_NUZLEAF, 0}},
[SPECIES_NUZLEAF] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY, 0}},
[SPECIES_NINCADA] = {{EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK, 0},
{EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA, 0}},
[SPECIES_TAILLOW] = {{EVO_LEVEL, 22, SPECIES_SWELLOW, 0}},
[SPECIES_SHROOMISH] = {{EVO_LEVEL, 23, SPECIES_BRELOOM, 0}},
[SPECIES_WINGULL] = {{EVO_LEVEL, 25, SPECIES_PELIPPER, 0}},
[SPECIES_SURSKIT] = {{EVO_LEVEL, 22, SPECIES_MASQUERAIN, 0}},
[SPECIES_WAILMER] = {{EVO_LEVEL, 40, SPECIES_WAILORD, 0}},
[SPECIES_SKITTY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY, 0}},
[SPECIES_BALTOY] = {{EVO_LEVEL, 36, SPECIES_CLAYDOL, 0}},
[SPECIES_NOSEPASS] = {{EVO_MAP, MAP_NAME_THUNDERCAP_MT, SPECIES_PROBOPASS, 0}},
[SPECIES_SABLEYE] = {{EVO_MEGA, ITEM_SABLENITE, SPECIES_SABLEYE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH, 0}},
[SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT, 0}},
[SPECIES_FEEBAS] = {{EVO_BEAUTY, 0, SPECIES_MILOTIC, 0},
{EVO_ITEM, ITEM_NONE, SPECIES_MILOTIC, 0},
{EVO_TRADE_ITEM, ITEM_NONE, SPECIES_MILOTIC, 0}},
[SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO, 0}},
[SPECIES_SHARPEDO] = {{EVO_MEGA, ITEM_SHARPEDONITE, SPECIES_SHARPEDO_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA, 0}},
[SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON, 0}},
[SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA, 0}},
[SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC, 0}},
[SPECIES_MANECTRIC] = {{EVO_MEGA, ITEM_MANECTITE, SPECIES_MANECTRIC_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT, 0}},
[SPECIES_CAMERUPT] = {{EVO_MEGA, ITEM_CAMERUPTITE, SPECIES_CAMERUPT_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO, 0}},
[SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN, 0}},
[SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE, 0}},
[SPECIES_SNORUNT] = {{EVO_LEVEL, 42, SPECIES_GLALIE, 0},
{EVO_ITEM, ITEM_DAWN_STONE, SPECIES_FROSLASS, MON_FEMALE}},
[SPECIES_GLALIE] = {{EVO_MEGA, ITEM_GLALITITE, SPECIES_GLALIE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL, 0}},
[SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG, 0}},
[SPECIES_MAWILE] = {{EVO_MEGA, ITEM_MAWILITE, SPECIES_MAWILE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM, 0}},
[SPECIES_MEDICHAM] = {{EVO_MEGA, ITEM_MEDICHAMITE, SPECIES_MEDICHAM_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA, 0}},
[SPECIES_ALTARIA] = {{EVO_MEGA, ITEM_ALTARIANITE, SPECIES_ALTARIA_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET, 0}},
[SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS, 0}},
[SPECIES_DUSCLOPS] = {{EVO_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR, 0},
{EVO_TRADE_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR, 0}},
[SPECIES_ROSELIA] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_ROSERADE, 0}},
[SPECIES_SLAKOTH] = {{EVO_LEVEL, 18, SPECIES_VIGOROTH, 0}},
[SPECIES_VIGOROTH] = {{EVO_LEVEL, 36, SPECIES_SLAKING, 0}},
[SPECIES_GULPIN] = {{EVO_LEVEL, 26, SPECIES_SWALOT, 0}},
[SPECIES_WHISMUR] = {{EVO_LEVEL, 20, SPECIES_LOUDRED, 0}},
[SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD, 0}},
[SPECIES_CLAMPERL] = {{EVO_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL, 0},
{EVO_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS, 0},
{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL, 0},
{EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS, 0}},
[SPECIES_ABSOL] = {{EVO_MEGA, ITEM_ABSOLITE, SPECIES_ABSOL_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE, 0}},
[SPECIES_BANETTE] = {{EVO_MEGA, ITEM_BANETTITE, SPECIES_BANETTE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON, 0}},
[SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON, 0}},
[SPECIES_AGGRON] = {{EVO_MEGA, ITEM_AGGRONITE, SPECIES_AGGRON_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY, 0}},
[SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO, 0}},
[SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA, 0}},
[SPECIES_KIRLIA] = {{EVO_LEVEL, 30, SPECIES_GARDEVOIR, 0},
{EVO_ITEM, ITEM_DAWN_STONE, SPECIES_GALLADE, MON_MALE}},
[SPECIES_GARDEVOIR] = {{EVO_MEGA, ITEM_GARDEVOIRITE, SPECIES_GARDEVOIR_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON, 0}},
[SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE, 0}},
[SPECIES_SALAMENCE] = {{EVO_MEGA, ITEM_SALAMENCITE, SPECIES_SALAMENCE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG, 0}},
[SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS, 0}},
[SPECIES_METAGROSS] = {{EVO_MEGA, ITEM_METAGROSSITE, SPECIES_METAGROSS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_KYOGRE] = {{EVO_MEGA, ITEM_BLUE_ORB, SPECIES_KYOGRE_PRIMAL, MEGA_VARIANT_PRIMAL}},
[SPECIES_GROUDON] = {{EVO_MEGA, ITEM_RED_ORB, SPECIES_GROUDON_PRIMAL, MEGA_VARIANT_PRIMAL}},
[SPECIES_RAYQUAZA] = {{EVO_MEGA, MOVE_DRAGONASCENT, SPECIES_RAYQUAZA_MEGA, MEGA_VARIANT_WISH}},
[SPECIES_LATIAS] = {{EVO_MEGA, ITEM_LATIASITE, SPECIES_LATIAS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_LATIOS] = {{EVO_MEGA, ITEM_LATIOSITE, SPECIES_LATIOS_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TURTWIG] = {{EVO_LEVEL, 18, SPECIES_GROTLE, 0}},
[SPECIES_GROTLE] = {{EVO_LEVEL, 32, SPECIES_TORTERRA, 0}},
[SPECIES_CHIMCHAR] = {{EVO_LEVEL, 14, SPECIES_MONFERNO, 0}},
[SPECIES_MONFERNO] = {{EVO_LEVEL, 36, SPECIES_INFERNAPE, 0}},
[SPECIES_PIPLUP] = {{EVO_LEVEL, 16, SPECIES_PRINPLUP, 0}},
[SPECIES_PRINPLUP] = {{EVO_LEVEL, 36, SPECIES_EMPOLEON, 0}},
[SPECIES_STARLY] = {{EVO_LEVEL, 14, SPECIES_STARAVIA, 0}},
[SPECIES_STARAVIA] = {{EVO_LEVEL, 34, SPECIES_STARAPTOR, 0}},
[SPECIES_BIDOOF] = {{EVO_LEVEL, 15, SPECIES_BIBAREL, 0}},
[SPECIES_KRICKETOT] = {{EVO_LEVEL, 10, SPECIES_KRICKETUNE, 0}},
[SPECIES_SHINX] = {{EVO_LEVEL, 15, SPECIES_LUXIO, 0}},
[SPECIES_LUXIO] = {{EVO_LEVEL, 30, SPECIES_LUXRAY, 0}},
[SPECIES_BUDEW] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_ROSELIA, 0}},
[SPECIES_CRANIDOS] = {{EVO_LEVEL, 30, SPECIES_RAMPARDOS, 0}},
[SPECIES_SHIELDON] = {{EVO_LEVEL, 30, SPECIES_BASTIODON, 0}},
[SPECIES_BURMY] = {{EVO_FEMALE_LEVEL, 20, SPECIES_WORMADAM, 0},
{EVO_MALE_LEVEL, 20, SPECIES_MOTHIM, 0}},
[SPECIES_COMBEE] = {{EVO_FEMALE_LEVEL, 21, SPECIES_VESPIQUEN, 0}},
[SPECIES_BUIZEL] = {{EVO_LEVEL, 26, SPECIES_FLOATZEL, 0}},
[SPECIES_CHERUBI] = {{EVO_LEVEL, 25, SPECIES_CHERRIM, 0}},
[SPECIES_SHELLOS] = {{EVO_LEVEL, 32, SPECIES_GASTRODON, 0}},
[SPECIES_DRIFLOON] = {{EVO_LEVEL, 28, SPECIES_DRIFBLIM, 0}},
[SPECIES_BUNEARY] = {{EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY, 0}},
[SPECIES_LOPUNNY] = {{EVO_MEGA, ITEM_LOPUNNITE, SPECIES_LOPUNNY_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_GLAMEOW] = {{EVO_LEVEL, 38, SPECIES_PURUGLY, 0}},
[SPECIES_CHINGLING] = {{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_CHIMECHO, 0}},
[SPECIES_STUNKY] = {{EVO_LEVEL, 34, SPECIES_SKUNTANK, 0}},
[SPECIES_BRONZOR] = {{EVO_LEVEL, 33, SPECIES_BRONZONG, 0}},
[SPECIES_BONSLY] = {{EVO_MOVE, 102, SPECIES_SUDOWOODO, 0}},
[SPECIES_MIME_JR] = {{EVO_MOVE, 102, SPECIES_MR_MIME, 0}},
[SPECIES_HAPPINY] = {{EVO_HOLD_ITEM_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY, 0}},
[SPECIES_GIBLE] = {{EVO_LEVEL, 24, SPECIES_GABITE, 0}},
[SPECIES_GABITE] = {{EVO_LEVEL, 48, SPECIES_GARCHOMP, 0}},
[SPECIES_GARCHOMP] = {{EVO_MEGA, ITEM_GARCHOMPITE, SPECIES_GARCHOMP_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_MUNCHLAX] = {{EVO_FRIENDSHIP, 0, SPECIES_SNORLAX, 0}},
[SPECIES_RIOLU] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_LUCARIO, 0}},
[SPECIES_LUCARIO] = {{EVO_MEGA, ITEM_LUCARIONITE, SPECIES_LUCARIO_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_HIPPOPOTAS] = {{EVO_FEMALE_LEVEL, 34, SPECIES_HIPPOWDON_F, 0}},
[SPECIES_SKORUPI] = {{EVO_LEVEL, 40, SPECIES_DRAPION, 0}},
[SPECIES_CROAGUNK] = {{EVO_LEVEL, 37, SPECIES_TOXICROAK, 0}},
[SPECIES_FINNEON] = {{EVO_LEVEL, 31, SPECIES_LUMINEON, 0}},
[SPECIES_MANTYKE] = {{EVO_OTHER_PARTY_MON, SPECIES_REMORAID, SPECIES_MANTINE, 0}},
[SPECIES_SNOVER] = {{EVO_LEVEL, 40, SPECIES_ABOMASNOW, 0}},
[SPECIES_ABOMASNOW] = {{EVO_MEGA, ITEM_ABOMASITE, SPECIES_ABOMASNOW_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_GALLADE] = {{EVO_MEGA, ITEM_GALLADITE, SPECIES_GALLADE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_SNIVY] = {{EVO_LEVEL, 17, SPECIES_SERVINE, 0}},
[SPECIES_SERVINE] = {{EVO_LEVEL, 36, SPECIES_SERPERIOR, 0}},
[SPECIES_TEPIG] = {{EVO_LEVEL, 17, SPECIES_PIGNITE, 0}},
[SPECIES_PIGNITE] = {{EVO_LEVEL, 36, SPECIES_EMBOAR, 0}},
[SPECIES_OSHAWOTT] = {{EVO_LEVEL, 17, SPECIES_DEWOTT, 0}},
[SPECIES_DEWOTT] = {{EVO_LEVEL, 36, SPECIES_SAMUROTT, 0}},
[SPECIES_PATRAT] = {{EVO_LEVEL, 20, SPECIES_WATCHOG, 0}},
[SPECIES_LILLIPUP] = {{EVO_LEVEL, 16, SPECIES_HERDIER, 0}},
[SPECIES_HERDIER] = {{EVO_LEVEL, 32, SPECIES_STOUTLAND, 0}},
[SPECIES_PURRLOIN] = {{EVO_LEVEL, 20, SPECIES_LIEPARD, 0}},
[SPECIES_PANSAGE] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SIMISAGE, 0}},
[SPECIES_PANSEAR] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_SIMISEAR, 0}},
[SPECIES_PANPOUR] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_SIMIPOUR, 0}},
[SPECIES_MUNNA] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_MUSHARNA, 0}},
[SPECIES_PIDOVE] = {{EVO_LEVEL, 21, SPECIES_TRANQUILL, 0}},
[SPECIES_TRANQUILL] = {{EVO_LEVEL, 32, SPECIES_UNFEZANT, 0}},
[SPECIES_BLITZLE] = {{EVO_LEVEL, 27, SPECIES_ZEBSTRIKA, 0}},
[SPECIES_ROGGENROLA] = {{EVO_LEVEL, 25, SPECIES_BOLDORE, 0}},
[SPECIES_BOLDORE] = {{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GIGALITH, 0},
{EVO_TRADE, 0, SPECIES_GIGALITH, 0}},
[SPECIES_WOOBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_SWOOBAT, 0}},
[SPECIES_DRILBUR] = {{EVO_LEVEL, 31, SPECIES_EXCADRILL, 0}},
[SPECIES_AUDINO] = {{EVO_MEGA, ITEM_AUDINITE, SPECIES_AUDINO_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_TIMBURR] = {{EVO_LEVEL, 25, SPECIES_GURDURR, 0}},
[SPECIES_GURDURR] = {{EVO_TRADE, 0, SPECIES_CONKELDURR, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_CONKELDURR, 0}},
[SPECIES_TYMPOLE] = {{EVO_LEVEL, 25, SPECIES_PALPITOAD, 0}},
[SPECIES_PALPITOAD] = {{EVO_LEVEL, 36, SPECIES_SEISMITOAD, 0}},
[SPECIES_SEWADDLE] = {{EVO_LEVEL, 20, SPECIES_SWADLOON, 0}},
[SPECIES_SWADLOON] = {{EVO_FRIENDSHIP, 0, SPECIES_LEAVANNY, 0}},
[SPECIES_VENIPEDE] = {{EVO_LEVEL, 22, SPECIES_WHIRLIPEDE, 0}},
[SPECIES_WHIRLIPEDE] = {{EVO_LEVEL, 30, SPECIES_SCOLIPEDE, 0}},
[SPECIES_COTTONEE] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_WHIMSICOTT, 0}},
[SPECIES_PETILIL] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_LILLIGANT, 0}},
[SPECIES_SANDILE] = {{EVO_LEVEL, 29, SPECIES_KROKOROK, 0}},
[SPECIES_KROKOROK] = {{EVO_LEVEL, 40, SPECIES_KROOKODILE, 0}},
[SPECIES_DARUMAKA] = {{EVO_LEVEL, 35, SPECIES_DARMANITAN, 0}},
[SPECIES_DWEBBLE] = {{EVO_LEVEL, 34, SPECIES_CRUSTLE, 0}},
[SPECIES_SCRAGGY] = {{EVO_LEVEL, 39, SPECIES_SCRAFTY, 0}},
[SPECIES_YAMASK] = {{EVO_LEVEL, 34, SPECIES_COFAGRIGUS, 0}},
[SPECIES_TIRTOUGA] = {{EVO_LEVEL, 37, SPECIES_CARRACOSTA, 0}},
[SPECIES_ARCHEN] = {{EVO_LEVEL, 37, SPECIES_ARCHEOPS, 0}},
[SPECIES_TRUBBISH] = {{EVO_LEVEL, 36, SPECIES_GARBODOR, 0}},
[SPECIES_ZORUA] = {{EVO_LEVEL, 30, SPECIES_ZOROARK, 0}},
[SPECIES_MINCCINO] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_CINCCINO, 0}},
[SPECIES_GOTHITA] = {{EVO_LEVEL, 32, SPECIES_GOTHORITA, 0}},
[SPECIES_GOTHORITA] = {{EVO_LEVEL, 41, SPECIES_GOTHITELLE, 0}},
[SPECIES_SOLOSIS] = {{EVO_LEVEL, 32, SPECIES_DUOSION, 0}},
[SPECIES_DUOSION] = {{EVO_LEVEL, 41, SPECIES_REUNICLUS, 0}},
[SPECIES_DUCKLETT] = {{EVO_LEVEL, 35, SPECIES_SWANNA, 0}},
[SPECIES_VANILLITE] = {{EVO_LEVEL, 35, SPECIES_VANILLISH, 0}},
[SPECIES_VANILLISH] = {{EVO_LEVEL, 47, SPECIES_VANILLUXE, 0}},
[SPECIES_DEERLING] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK, 0}},
[SPECIES_KARRABLAST] = {{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_ESCAVALIER, 0},
{EVO_TRADE, 0, SPECIES_ESCAVALIER, 0}},
[SPECIES_FOONGUS] = {{EVO_LEVEL, 39, SPECIES_AMOONGUSS, 0}},
[SPECIES_FRILLISH] = {{EVO_LEVEL, 40, SPECIES_JELLICENT, 0}},
[SPECIES_JOLTIK] = {{EVO_LEVEL, 36, SPECIES_GALVANTULA, 0}},
[SPECIES_FERROSEED] = {{EVO_LEVEL, 40, SPECIES_FERROTHORN, 0}},
[SPECIES_KLINK] = {{EVO_LEVEL, 38, SPECIES_KLANG, 0}},
[SPECIES_KLANG] = {{EVO_LEVEL, 49, SPECIES_KLINKLANG, 0}},
[SPECIES_TYNAMO] = {{EVO_LEVEL, 39, SPECIES_EELEKTRIK, 0}},
[SPECIES_EELEKTRIK] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_EELEKTROSS, 0}},
[SPECIES_ELGYEM] = {{EVO_LEVEL, 42, SPECIES_BEHEEYEM, 0}},
[SPECIES_LITWICK] = {{EVO_LEVEL, 41, SPECIES_LAMPENT, 0}},
[SPECIES_LAMPENT] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_CHANDELURE, 0}},
[SPECIES_AXEW] = {{EVO_LEVEL, 38, SPECIES_FRAXURE, 0}},
[SPECIES_FRAXURE] = {{EVO_LEVEL, 48, SPECIES_HAXORUS, 0}},
[SPECIES_CUBCHOO] = {{EVO_LEVEL, 37, SPECIES_BEARTIC, 0}},
[SPECIES_SHELMET] = {{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_ACCELGOR, 0},
{EVO_TRADE, 0, SPECIES_ACCELGOR, 0}},
[SPECIES_MIENFOO] = {{EVO_LEVEL, 50, SPECIES_MIENSHAO, 0}},
[SPECIES_GOLETT] = {{EVO_LEVEL, 43, SPECIES_GOLURK, 0}},
[SPECIES_PAWNIARD] = {{EVO_LEVEL, 52, SPECIES_BISHARP, 0}},
[SPECIES_RUFFLET] = {{EVO_LEVEL, 54, SPECIES_BRAVIARY, 0}},
[SPECIES_VULLABY] = {{EVO_LEVEL, 54, SPECIES_MANDIBUZZ, 0}},
[SPECIES_DEINO] = {{EVO_LEVEL, 50, SPECIES_ZWEILOUS, 0}},
[SPECIES_ZWEILOUS] = {{EVO_LEVEL, 64, SPECIES_HYDREIGON, 0}},
[SPECIES_LARVESTA] = {{EVO_LEVEL, 59, SPECIES_VOLCARONA, 0}},
[SPECIES_FRILLISH_F] = {{EVO_LEVEL, 40, SPECIES_JELLICENT_F, 0}},
[SPECIES_BURMY_SANDY] = {{EVO_FEMALE_LEVEL, 20, SPECIES_WORMADAM_SANDY, 0},
{EVO_MALE_LEVEL, 20, SPECIES_MOTHIM, 0}},
[SPECIES_BURMY_TRASH] = {{EVO_FEMALE_LEVEL, 20, SPECIES_WORMADAM_TRASH, 0},
{EVO_MALE_LEVEL, 20, SPECIES_MOTHIM, 0}},
[SPECIES_SHELLOS_EAST] = {{EVO_LEVEL, 32, SPECIES_GASTRODON_EAST, 0}},
[SPECIES_DEERLING_SUMMER] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK_SUMMER, 0}},
[SPECIES_DEERLING_AUTUMN] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK_AUTUMN, 0}},
[SPECIES_DEERLING_WINTER] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK_WINTER, 0}},
[SPECIES_HIPPOPOTAS_F] = {{EVO_LEVEL, 34, SPECIES_HIPPOWDON_F, 0}},
[SPECIES_CHESPIN] = {{EVO_LEVEL, 16, SPECIES_QUILLADIN, 0}},
[SPECIES_QUILLADIN] = {{EVO_LEVEL, 36, SPECIES_CHESNAUGHT, 0}},
[SPECIES_FENNEKIN] = {{EVO_LEVEL, 16, SPECIES_BRAIXEN, 0}},
[SPECIES_BRAIXEN] = {{EVO_LEVEL, 36, SPECIES_DELPHOX, 0}},
[SPECIES_FROAKIE] = {{EVO_LEVEL, 16, SPECIES_FROGADIER, 0}},
[SPECIES_FROGADIER] = {{EVO_LEVEL, 36, SPECIES_GRENINJA, 0}},
[SPECIES_BUNNELBY] = {{EVO_LEVEL, 20, SPECIES_DIGGERSBY, 0}},
[SPECIES_FLETCHLING] = {{EVO_LEVEL, 17, SPECIES_FLETCHINDER, 0}},
[SPECIES_FLETCHINDER] = {{EVO_LEVEL, 35, SPECIES_TALONFLAME, 0}},
[SPECIES_SCATTERBUG] = {{EVO_LEVEL, 9, SPECIES_SPEWPA, 0}},
[SPECIES_SPEWPA] = {{EVO_LEVEL, 12, SPECIES_VIVILLON, 0}},
[SPECIES_LITLEO] = {{EVO_MALE_LEVEL, 35, SPECIES_PYROAR, 0},
{EVO_FEMALE_LEVEL, 35, SPECIES_PYROAR_FEMALE, 0}},
[SPECIES_FLABEBE] = {{EVO_LEVEL, 19, SPECIES_FLOETTE, 0}},
[SPECIES_FLOETTE] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES, 0}},
[SPECIES_SKIDDO] = {{EVO_LEVEL, 32, SPECIES_GOGOAT, 0}},
[SPECIES_PANCHAM] = {{EVO_TYPE_IN_PARTY, 32, SPECIES_PANGORO, TYPE_DARK}},
[SPECIES_ESPURR] = {{EVO_MALE_LEVEL, 25, SPECIES_MEOWSTIC, 0},
{EVO_FEMALE_LEVEL, 25, SPECIES_MEOWSTIC_FEMALE, 0}},
[SPECIES_HONEDGE] = {{EVO_LEVEL, 35, SPECIES_DOUBLADE, 0}},
[SPECIES_DOUBLADE] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_AEGISLASH, 0}},
[SPECIES_SPRITZEE] = {{EVO_ITEM, ITEM_NONE, SPECIES_AROMATISSE, 0},
{EVO_TRADE_ITEM, ITEM_NONE, SPECIES_AROMATISSE, 0}},
[SPECIES_SWIRLIX] = {{EVO_ITEM, ITEM_NONE, SPECIES_SLURPUFF, 0},
{EVO_TRADE_ITEM, ITEM_NONE, SPECIES_SLURPUFF, 0}},
[SPECIES_INKAY] = {{EVO_LEVEL, 40, SPECIES_MALAMAR, 0}},
[SPECIES_BINACLE] = {{EVO_LEVEL, 39, SPECIES_BARBARACLE, 0}},
[SPECIES_SKRELP] = {{EVO_LEVEL, 48, SPECIES_DRAGALGE, 0}},
[SPECIES_CLAUNCHER] = {{EVO_LEVEL, 37, SPECIES_CLAWITZER, 0}},
[SPECIES_HELIOPTILE] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_HELIOLISK, 0}},
[SPECIES_TYRUNT] = {{EVO_LEVEL_DAY, 39, SPECIES_TYRANTRUM, 0}},
[SPECIES_GOOMY] = {{EVO_LEVEL, 40, SPECIES_SLIGGOO, 0}},
[SPECIES_SLIGGOO] = {{EVO_RAINY_OW, 50, SPECIES_GOODRA, 0}},
[SPECIES_PHANTUMP] = {{EVO_TRADE, 0, SPECIES_TREVENANT, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_TREVENANT, 0}},
[SPECIES_PUMPKABOO] = {{EVO_TRADE, 0, SPECIES_GOURGEIST, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOURGEIST, 0}},
[SPECIES_BERGMITE] = {{EVO_LEVEL, 37, SPECIES_AVALUGG, 0}},
[SPECIES_NOIBAT] = {{EVO_LEVEL, 48, SPECIES_NOIVERN, 0}},
[SPECIES_DIANCIE] = {{EVO_MEGA, ITEM_DIANCITE, SPECIES_DIANCIE_MEGA, MEGA_VARIANT_STANDARD}},
[SPECIES_FLABEBE_BLUE] = {{EVO_LEVEL, 19, SPECIES_FLOETTE_BLUE, 0}},
[SPECIES_FLABEBE_ORANGE] = {{EVO_LEVEL, 19, SPECIES_FLOETTE_ORANGE, 0}},
[SPECIES_FLABEBE_YELLOW] = {{EVO_LEVEL, 19, SPECIES_FLOETTE_YELLOW, 0}},
[SPECIES_FLABEBE_WHITE] = {{EVO_LEVEL, 19, SPECIES_FLOETTE_WHITE, 0}},
[SPECIES_FLOETTE_BLUE] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_BLUE, 0}},
[SPECIES_FLOETTE_ORANGE] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_ORANGE, 0}},
[SPECIES_FLOETTE_YELLOW] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_YELLOW, 0}},
[SPECIES_FLOETTE_WHITE] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_WHITE, 0}},
[SPECIES_PUMPKABOO_XL] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_XL, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOURGEIST_XL, 0}},
[SPECIES_PUMPKABOO_L] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_L, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOURGEIST_L, 0}},
[SPECIES_PUMPKABOO_M] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_M, 0},
{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOURGEIST_M, 0}},
[SPECIES_VENUSAUR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_VENUSAUR, MEGA_VARIANT_STANDARD}},
[SPECIES_CHARIZARD_MEGA_X] = {{EVO_MEGA, ITEM_NONE, SPECIES_CHARIZARD, MEGA_VARIANT_STANDARD}},
[SPECIES_CHARIZARD_MEGA_Y] = {{EVO_MEGA, ITEM_NONE, SPECIES_CHARIZARD, MEGA_VARIANT_STANDARD}},
[SPECIES_BLASTOISE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_BLASTOISE, MEGA_VARIANT_STANDARD}},
[SPECIES_BEEDRILL_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_BEEDRILL, MEGA_VARIANT_STANDARD}},
[SPECIES_PIDGEOT_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_PIDGEOT, MEGA_VARIANT_STANDARD}},
[SPECIES_ALAKAZAM_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_ALAKAZAM, MEGA_VARIANT_STANDARD}},
[SPECIES_SLOWBRO_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SLOWBRO, MEGA_VARIANT_STANDARD}},
[SPECIES_GENGAR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GENGAR, MEGA_VARIANT_STANDARD}},
[SPECIES_KANGASKHAN_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_KANGASKHAN, MEGA_VARIANT_STANDARD}},
[SPECIES_PINSIR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_PINSIR, MEGA_VARIANT_STANDARD}},
[SPECIES_GYARADOS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GYARADOS, MEGA_VARIANT_STANDARD}},
[SPECIES_AERODACTYL_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_AERODACTYL, MEGA_VARIANT_STANDARD}},
[SPECIES_MEWTWO_MEGA_X] = {{EVO_MEGA, ITEM_NONE, SPECIES_MEWTWO, MEGA_VARIANT_STANDARD}},
[SPECIES_MEWTWO_MEGA_Y] = {{EVO_MEGA, ITEM_NONE, SPECIES_MEWTWO, MEGA_VARIANT_STANDARD}},
[SPECIES_AMPHAROS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_AMPHAROS, MEGA_VARIANT_STANDARD}},
[SPECIES_STEELIX_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_STEELIX, MEGA_VARIANT_STANDARD}},
[SPECIES_SCIZOR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SCIZOR, MEGA_VARIANT_STANDARD}},
[SPECIES_HERACROSS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_HERACROSS, MEGA_VARIANT_STANDARD}},
[SPECIES_HOUNDOOM_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_HOUNDOOM, MEGA_VARIANT_STANDARD}},
[SPECIES_TYRANITAR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_TYRANITAR, MEGA_VARIANT_STANDARD}},
[SPECIES_SCEPTILE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SCEPTILE, MEGA_VARIANT_STANDARD}},
[SPECIES_BLAZIKEN_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_BLAZIKEN, MEGA_VARIANT_STANDARD}},
[SPECIES_SWAMPERT_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SWAMPERT, MEGA_VARIANT_STANDARD}},
[SPECIES_GARDEVOIR_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GARDEVOIR, MEGA_VARIANT_STANDARD}},
[SPECIES_SABLEYE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SABLEYE, MEGA_VARIANT_STANDARD}},
[SPECIES_MAWILE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_MAWILE, MEGA_VARIANT_STANDARD}},
[SPECIES_AGGRON_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_AGGRON, MEGA_VARIANT_STANDARD}},
[SPECIES_MEDICHAM_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_MEDICHAM, MEGA_VARIANT_STANDARD}},
[SPECIES_MANECTRIC_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_MANECTRIC, MEGA_VARIANT_STANDARD}},
[SPECIES_SHARPEDO_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SHARPEDO, MEGA_VARIANT_STANDARD}},
[SPECIES_CAMERUPT_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_CAMERUPT, MEGA_VARIANT_STANDARD}},
[SPECIES_ALTARIA_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_ALTARIA, MEGA_VARIANT_STANDARD}},
[SPECIES_BANETTE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_BANETTE, MEGA_VARIANT_STANDARD}},
[SPECIES_ABSOL_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_ABSOL, MEGA_VARIANT_STANDARD}},
[SPECIES_GLALIE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GLALIE, MEGA_VARIANT_STANDARD}},
[SPECIES_SALAMENCE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_SALAMENCE, MEGA_VARIANT_STANDARD}},
[SPECIES_METAGROSS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_METAGROSS, MEGA_VARIANT_STANDARD}},
[SPECIES_LATIAS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_LATIAS, MEGA_VARIANT_STANDARD}},
[SPECIES_LATIOS_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_LATIOS, MEGA_VARIANT_STANDARD}},
[SPECIES_GROUDON_PRIMAL] = {{EVO_MEGA, ITEM_NONE, SPECIES_GROUDON, MEGA_VARIANT_PRIMAL}},
[SPECIES_KYOGRE_PRIMAL] = {{EVO_MEGA, ITEM_NONE, SPECIES_KYOGRE, MEGA_VARIANT_PRIMAL}},
[SPECIES_RAYQUAZA_MEGA] = {{EVO_MEGA, MOVE_NONE, SPECIES_RAYQUAZA, MEGA_VARIANT_WISH}},
[SPECIES_LOPUNNY_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_LOPUNNY, MEGA_VARIANT_STANDARD}},
[SPECIES_GARCHOMP_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GARCHOMP, MEGA_VARIANT_STANDARD}},
[SPECIES_LUCARIO_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_LUCARIO, MEGA_VARIANT_STANDARD}},
[SPECIES_ABOMASNOW_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_ABOMASNOW, MEGA_VARIANT_STANDARD}},
[SPECIES_GALLADE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_GALLADE, MEGA_VARIANT_STANDARD}},
[SPECIES_AUDINO_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_AUDINO, MEGA_VARIANT_STANDARD}},
[SPECIES_DIANCIE_MEGA] = {{EVO_MEGA, ITEM_NONE, SPECIES_DIANCIE, MEGA_VARIANT_STANDARD}},
[SPECIES_VIVILLON_ELEGANT] = {{EVO_MEGA, ITEM_NONE, SPECIES_TALONFLAME, MEGA_VARIANT_STANDARD}},
[SPECIES_ROWLET] = {{EVO_LEVEL, 17, SPECIES_DARTRIX, 0}},
[SPECIES_DARTRIX] = {{EVO_LEVEL, 34, SPECIES_DECIDUEYE, 0}},
[SPECIES_LITTEN] = {{EVO_LEVEL, 17, SPECIES_TORRACAT, 0}},
[SPECIES_TORRACAT] = {{EVO_LEVEL, 34, SPECIES_INCINEROAR, 0}},
[SPECIES_POPPLIO] = {{EVO_LEVEL, 17, SPECIES_BRIONNE, 0}},
[SPECIES_BRIONNE] = {{EVO_LEVEL, 34, SPECIES_PRIMARINA, 0}},
[SPECIES_PIKIPEK] = {{EVO_LEVEL, 14, SPECIES_TRUMBEAK, 0}},
[SPECIES_TRUMBEAK] = {{EVO_LEVEL, 28, SPECIES_TOUCANNON, 0}},
[SPECIES_YUNGOOS] = {{EVO_LEVEL_DAY, 20, SPECIES_GUMSHOOS, 0}},
[SPECIES_GRUBBIN] = {{EVO_LEVEL, 20, SPECIES_CHARJABUG, 0}},
[SPECIES_CHARJABUG] = {{EVO_MAP, MAP_NAME_THUNDERCAP_MT, SPECIES_VIKAVOLT, 0}},
[SPECIES_CRABRAWLER] = {{EVO_MAP, MAP_NAME_FROST_MOUNTAIN, SPECIES_CRABOMINABLE, 0},
{EVO_MAP, MAP_NAME_ROUTE_8, SPECIES_NONE, 0},
{EVO_MAP, MAP_NAME_BLIZZARD_CITY, SPECIES_NONE, 0}},
[SPECIES_CUTIEFLY] = {{EVO_LEVEL, 25, SPECIES_RIBOMBEE, 0}},
[SPECIES_ROCKRUFF] = {{EVO_LEVEL_DAY, 25, SPECIES_LYCANROC, 0},
{EVO_LEVEL_NIGHT, 25, SPECIES_LYCANROC_N, 0}},
[SPECIES_MAREANIE] = {{EVO_LEVEL, 38, SPECIES_TOXAPEX, 0}},
[SPECIES_MUDBRAY] = {{EVO_LEVEL, 30, SPECIES_MUDSDALE, 0}},
[SPECIES_DEWPIDER] = {{EVO_LEVEL, 22, SPECIES_ARAQUANID, 0}},
[SPECIES_FOMANTIS] = {{EVO_LEVEL_DAY, 34, SPECIES_LURANTIS, 0}},
[SPECIES_MORELULL] = {{EVO_LEVEL, 24, SPECIES_SHIINOTIC, 0}},
[SPECIES_SALANDIT] = {{EVO_FEMALE_LEVEL, 33, SPECIES_SALAZZLE, 0}},
[SPECIES_STUFFUL] = {{EVO_LEVEL, 27, SPECIES_BEWEAR, 0}},
[SPECIES_BOUNSWEET] = {{EVO_LEVEL, 18, SPECIES_STEENEE, 0}},
[SPECIES_STEENEE] = {{EVO_MOVE, 23, SPECIES_TSAREENA, 0}},
[SPECIES_WIMPOD] = {{EVO_LEVEL, 30, SPECIES_GOLISOPOD, 0}},
[SPECIES_SANDYGAST] = {{EVO_LEVEL, 42, SPECIES_PALOSSAND, 0}},
[SPECIES_TYPE_NULL] = {{EVO_FRIENDSHIP, 0, SPECIES_SILVALLY, 0}},
[SPECIES_JANGMO_O] = {{EVO_LEVEL, 35, SPECIES_HAKAMO_O, 0}},
[SPECIES_HAKAMO_O] = {{EVO_LEVEL, 45, SPECIES_KOMMO_O, 0}},
[SPECIES_COSMOG] = {{EVO_LEVEL, 43, SPECIES_COSMOEM, 0}},
[SPECIES_COSMOEM] = {{EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO, 0},
{EVO_LEVEL_NIGHT, 53, SPECIES_LUNALA, 0}},
[SPECIES_SANDSHREW_A] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_A, 0}},
[SPECIES_VULPIX_A] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_A, 0}},
[SPECIES_DIGLETT_A] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO_A, 0}},
[SPECIES_MEOWTH_A] = {{EVO_FRIENDSHIP, 0, SPECIES_PERSIAN_A, 0}},
[SPECIES_GEODUDE_A] = {{EVO_LEVEL, 25, SPECIES_GRAVELER_A, 0}},
[SPECIES_GRAVELER_A] = {{EVO_ITEM, ITEM_LINK_CABLE, SPECIES_GOLEM_A, 0},
{EVO_TRADE, 0, SPECIES_GOLEM_A, 0}},
[SPECIES_GRIMER_A] = {{EVO_LEVEL, 38, SPECIES_MUK_A, 0}},
[SPECIES_EXEGGCUTE_A] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR_A, 0}},
[SPECIES_CUBONE_A] = {{EVO_LEVEL_NIGHT, 28, SPECIES_MAROWAK_A, 0}},
[SPECIES_POIPOLE] = {{EVO_MOVE, 370, SPECIES_NAGANADEL, 0}},
[SPECIES_NECROZMA_MANE] = {{EVO_MEGA, ITEM_ULTRA_NECROZIUM_Z, SPECIES_NECROZMA_ULTRA, MEGA_VARIANT_ULTRA_BURST}},
[SPECIES_NECROZMA_WINGS] = {{EVO_MEGA, ITEM_ULTRA_NECROZIUM_Z, SPECIES_NECROZMA_ULTRA, MEGA_VARIANT_ULTRA_BURST}},
[SPECIES_NECROZMA_ULTRA] = {{EVO_MEGA, ITEM_NONE, SPECIES_NECROZMA_MANE, MEGA_VARIANT_ULTRA_BURST},
{EVO_MEGA, ITEM_NONE, SPECIES_NECROZMA_WINGS, MEGA_VARIANT_ULTRA_BURST}},
[SPECIES_MELTAN] = {{EVO_ITEM, ITEM_METAL_COAT, SPECIES_MELMETAL, 0}},
};

1111
src/Footprint_Table.c Normal file

File diff suppressed because it is too large Load Diff

5516
src/Front_Pic_Coords_Table.c Normal file

File diff suppressed because it is too large Load Diff

1108
src/Front_Pic_Table.c Normal file

File diff suppressed because it is too large Load Diff

2455
src/Habitat_Table.c Normal file

File diff suppressed because it is too large Load Diff

1107
src/Icon_Palette_Table.c Normal file

File diff suppressed because it is too large Load Diff

1107
src/Icon_Table.c Normal file

File diff suppressed because it is too large Load Diff

1116
src/Item_Animation_Table.c Normal file

File diff suppressed because it is too large Load Diff

18156
src/Learnsets.c Normal file

File diff suppressed because it is too large Load Diff

1108
src/Palette_Table.c Normal file

File diff suppressed because it is too large Load Diff

1357
src/Pokedex_Data.string Normal file

File diff suppressed because it is too large Load Diff

11384
src/Pokedex_Data_Table.c Normal file

File diff suppressed because it is too large Load Diff

2446
src/Pokedex_Orders.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1108
src/Shiny_Palette_Table.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

15
src/defines.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include "../include/types.h"
#include "../include/species.h"
//#define INCLUDE_FOOTPRINTS //If you uncomment this line, make sure to uncomment gMonFootprintTable in repoints, and remove the footprint remover in bytereplacement
#define EVOS_PER_MON 16
#define FALSE 0
#define TRUE 1
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
#define SPECIES_TABLES_TERMIN 0xFEFE

109
src/hooks.s Normal file
View File

@ -0,0 +1,109 @@
.thumb
.align 2
@0x8103530 with r1
PrepareDexListViewsHook:
cmp r0, #0x0
beq PrepareDexListViewsReturn
ldr r2, =gNumDexEntries
ldrh r2, [r2]
str r2, [sp]
PrepareDexListViewsReturn:
ldr r0, =0x810353A | 1
bx r0
.pool
@0x8103684 with r1
AlphabeticalDexHook:
add r8, r0
ldr r0, =gNumSpecies
ldrh r0, [r0]
cmp r8, r0
ldr r1, =0x810368C | 1
bx r1
.pool
@0x8105CBC with r0
AlternateDexEntriesHook:
lsl r2, r2, #0x18
lsr r5, r2, #0x18
lsl r3, r3, #0x18
lsr r7, r3, #0x18
mov r0, r1
mov r4, r1
bl TryLoadAlternateDexEntry
cmp r0, #0x0
bne AlternateDexEntriesReturn
mov r0, r4
ldr r1, =0x8105CC6 | 1
bxr1:
bx r1
AlternateDexEntriesReturn:
push {r0}
mov r0, r4
ldr r1, =SpeciesToNationalPokedexNum
bl bxr1
mov r4, r0
mov r1, #0x1
mov r2, #0x0
bl DexFlagCheckCall
lsl r0, #0x18
cmp r0, #0x0
pop {r0}
beq DontDisplayDesc
mov r1, r0
ldr r0, =0x8105CEA | 1
bx r0
DontDisplayDesc:
ldr r0, =0x8105D5C | 1
bx r0
DexFlagCheckCall:
ldr r3, =0x8104AB0 | 1
bx r3
@0x8045C58 with r0
UpdateEggMoveLimit:
add r0, r2, #0x1
lsl r0, r0, #0x10
lsr r2, r0, #0x10
push {r2}
bl GetUpdatedEggMoveLimit
pop {r2}
ldr r1, =0x8045C60 | 1
bx r1
@0x800ECF2 with r4
LoadSpecialPokePicHook:
mov r7, r8
push {r7}
ldr r4, [sp, #0x18]
sub sp, #0x4
str r4, [sp, #0x0]
bl LoadSpecialPokePic
add sp, #0x4
pop {r7}
mov r8, r7
pop {r4-r7}
pop {r0}
bx r0
@0x8096E38 with r2
GenderedMonIconHook:
lsr r7, r3, #0x10
lsl r0, #0x18
lsr r0, #0x18
mov r9, r0
mov r0, r4
ldr r1, [sp, #0x50] @Personality
bl TryGetFemaleGenderedSpecies
mov r4, r0
ldr r1, [sp, #0x50] @Personality
ldr r0, =0x8096E40 | 1
bx r0

218
src/thumb_compiler_helper.S Normal file
View File

@ -0,0 +1,218 @@
.text
.align 1
.force_thumb
.syntax unified
.global __gnu_thumb1_case_uqi
.thumb_func
.type __gnu_thumb1_case_uqi,function
__gnu_thumb1_case_uqi:
push {r1}
mov r1, lr
lsrs r1, r1, #1
lsls r1, r1, #1
ldrb r1, [r1, r0]
lsls r1, r1, #1
add lr, lr, r1
pop {r1}
bx lr
.size __gnu_thumb1_case_uqi, . - __gnu_thumb1_case_uqi
.force_thumb
.syntax unified
.global __gnu_thumb1_case_uhi
.thumb_func
.type __gnu_thumb1_case_uhi,function
__gnu_thumb1_case_uhi:
push {r0, r1}
mov r1, lr
lsrs r1, r1, #1
lsls r0, r0, #1
lsls r1, r1, #1
ldrh r1, [r1, r0]
lsls r1, r1, #1
add lr, lr, r1
pop {r0, r1}
bx lr
.size __gnu_thumb1_case_uhi, . - __gnu_thumb1_case_uhi
.force_thumb
.syntax unified
.global __gnu_thumb1_case_sqi
.thumb_func
.type __gnu_thumb1_case_sqi,function
__gnu_thumb1_case_sqi:
push {r1}
mov r1, lr
lsrs r1, r1, #1
lsls r1, r1, #1
ldrsb r1, [r1, r0]
lsls r1, r1, #1
add lr, r1
pop {r1}
bx lr
.size __gnu_thumb1_case_sqi, . - __gnu_thumb1_case_sqi
.force_thumb
.syntax unified
.global __gnu_thumb1_case_shi
.thumb_func
.type __gnu_thumb1_case_shi,function
__gnu_thumb1_case_shi:
push {r0, r1}
mov r1, lr
lsrs r1, r1, #1
lsls r0, r0, #1
lsls r1, r1, #1
ldrsh r1, [r1, r0]
lsls r1, r1, #1
add lr, lr, r1
pop {r0, r1}
bx lr
.size __gnu_thumb1_case_shi, . - __gnu_thumb1_case_shi
.force_thumb
.syntax unified
.global __gnu_thumb1_case_si
.thumb_func
.type __gnu_thumb1_case_shi,function
__gnu_thumb1_case_si:
push {r0, r1}
mov r1, lr
adds.n r1, r1, #2 /* Align to word. */
lsrs r1, r1, #2
lsls r0, r0, #2
lsls r1, r1, #2
ldr r0, [r1, r0]
adds r0, r0, r1
mov lr, r0
pop {r0, r1}
mov pc, lr /* We know we were called from thumb code. */
.size __gnu_thumb1_case_si, . - __gnu_thumb1_case_si
.force_thumb
.syntax unified
.global __aeabi_uidiv
.thumb_func
.type __aeabi_uidiv,function
__aeabi_uidiv:
ldr r3, =(__udivsi3)
bx r3
.size __aeabi_uidiv, . - __aeabi_uidiv
.force_thumb
.syntax unified
.global __aeabi_idiv
.thumb_func
.type __aeabi_idiv,function
__aeabi_idiv:
ldr r3, =(__divsi3)
bx r3
.size __aeabi_idiv, . - __aeabi_idiv
.force_thumb
.syntax unified
.global __aeabi_idivmod
.thumb_func
.type __aeabi_idivmod,function
__aeabi_idivmod:
push {lr}
bl ActualModulationInt
.byte 0x01, 0x1C @;mov r1, r0 - Return to r1 for some reason
pop {pc}
ActualModulationInt:
ldr r3, =(__modsi3)
bx r3
.size __aeabi_idivmod, . - __aeabi_idivmod
.force_thumb
.syntax unified
.global __aeabi_uidivmod
.thumb_func
.type __aeabi_uidivmod,function
__aeabi_uidivmod:
push {lr}
bl ActualModulationUInt
.byte 0x01, 0x1C @;mov r1, r0 - Return to r1 for some reason
pop {pc}
ActualModulationUInt:
ldr r3, =(__umodsi3)
bx r3
.size __aeabi_uidivmod, . - __aeabi_uidivmod
.force_thumb
.syntax unified
.global memcpy
.thumb_func
.type memcpy,function
memcpy:
ldr r3, =(memcpy_)
bx r3
.size memcpy, . - memcpy
.force_thumb
.syntax unified
.global memset
.thumb_func
.type memset,function
memset:
ldr r3, =(memset_)
bx r3
.size memset, . - memset
.force_thumb
.syntax unified
.global malloc
.thumb_func
.type malloc,function
malloc:
ldr r3, =(malloc_)
bx r3
.size malloc, . - malloc
.force_thumb
.syntax unified
.global free
.thumb_func
.type free,function
free:
ldr r1, =(free_)
bx r1
.size free, . - free
.force_thumb
.syntax unified
.global read_word
.thumb_func
.type read_word,function
read_word:
movs r2, r0
ldrb r0, [r2, #3]
lsls r0, r0, #0x18
ldrb r1, [r2, #2]
lsls r1, r1, #0x10
orrs r0, r1
ldrb r1, [r2, #1]
lsls r1, r1, #8
orrs r0, r1
ldrb r1, [r2]
orrs r0, r1
bx lr
.force_thumb
.syntax unified
.global rand
.thumb_func
.type rand,function
rand:
ldr r2, =(0x3005000) @rand_seed
ldr r1, [r2]
ldr r0, =(0x41C64E6D)
muls r0, r1
ldr r1, =(0x6073)
adds r0, r0, r1
str r0, [r2]
lsrs r0, r0, #0x10
bx lr

149
src/updated_code.c Normal file
View File

@ -0,0 +1,149 @@
#include "defines.h"
#include "../include/pokedex.h"
#include "../include/graphics.h"
#include "../include/evolution.h"
//Backsprite battle start
extern const u16 gSpeciesIdToCryId[];
extern const u16 gSpeciesToNationalPokedexNum[];
extern const struct AlternateDexEntries gAlternateDexEntries[];
extern const struct CompressedSpriteSheet gMonBackPicTable[];
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
const u16 gNumSpecies = NUM_SPECIES;
const u16 gNumDexEntries = NUM_DEX_ENTRIES;
u8 __attribute__((long_call)) GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
u8 __attribute__((long_call)) GetUnownLetterFromPersonality(u32 personality);
void __attribute__((long_call)) break_func(u32);
//This file's functions
u16 TryGetFemaleGenderedSpecies(u16 species, u32 personality);
u16 SpeciesToCryId(u16 species)
{
return species + 1;
}
u16 NationalPokedexNumToSpecies(u16 nationalNum)
{
u16 species;
if (!nationalNum)
return 0;
species = 0;
while (species < (NUM_SPECIES - 1) && gSpeciesToNationalPokedexNum[species] != nationalNum)
species++;
if (species == NUM_SPECIES - 1)
return 0;
return species + 1;
}
const u8* TryLoadAlternateDexEntry(u16 species)
{
for (int i = 0; gAlternateDexEntries[i].species != SPECIES_TABLES_TERMIN; ++i)
{
if (gAlternateDexEntries[i].species == species)
return gAlternateDexEntries[i].description;
}
return 0;
}
void LoadSpecialPokePic(const struct CompressedSpriteSheet* src, void* dest, u16 species, u32 personality, bool8 isFrontPic)
{
u16 oldSpecies = species;
const struct CompressedSpriteSheet* table = isFrontPic ? gMonFrontPicTable : gMonBackPicTable;
species = TryGetFemaleGenderedSpecies(species, personality);
if (species != oldSpecies) //Updated sprite
src = &table[species];
if (species == SPECIES_UNOWN)
{
u16 i = GetUnownLetterFromPersonality(personality);
// The other Unowns are separate from Unown A.
if (i == 0)
i = SPECIES_UNOWN;
else
i += SPECIES_UNOWN_B - 1;
if (!isFrontPic)
LZ77UnCompWram((void*) gMonBackPicTable[i].data, dest);
else
LZ77UnCompWram((void*) gMonFrontPicTable[i].data, dest);
}
else if (species > NUM_SPECIES) // is species unknown? draw the ? icon
LZ77UnCompWram((void*) gMonFrontPicTable[0].data, dest);
else
LZ77UnCompWram((void*) src->data, dest);
DrawSpindaSpots(species, personality, dest, isFrontPic);
}
const u32* GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
species = TryGetFemaleGenderedSpecies(species, personality);
if (species > NUM_SPECIES)
return (u32*) gMonPaletteTable[0].data;
shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
if (shinyValue < 8)
return (u32*) gMonShinyPaletteTable[species].data;
else
return (u32*) gMonPaletteTable[species].data;
}
const struct CompressedSpritePalette* GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
{
u32 shinyValue;
species = TryGetFemaleGenderedSpecies(species, personality);
break_func(5);
shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
if (shinyValue < 8)
return &gMonShinyPaletteTable[species];
else
return &gMonPaletteTable[species];
}
u16 TryGetFemaleGenderedSpecies(u16 species, u32 personality)
{
if (GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE)
{
switch (species) {
case SPECIES_HIPPOPOTAS:
species = SPECIES_HIPPOPOTAS_F;
break;
case SPECIES_HIPPOWDON:
species = SPECIES_HIPPOWDON_F;
break;
case SPECIES_UNFEZANT:
species = SPECIES_UNFEZANT_F;
break;
case SPECIES_FRILLISH:
species = SPECIES_FRILLISH_F;
break;
case SPECIES_JELLICENT:
species = SPECIES_JELLICENT_F;
break;
case SPECIES_PYROAR:
species = SPECIES_PYROAR_FEMALE;
break;
}
}
return species;
}