mirror of
https://github.com/Skeli789/Dynamic-Pokemon-Expansion.git
synced 2026-04-26 08:17:52 -05:00
Initial commit
This commit is contained in:
commit
6906a69bd9
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
a.exe
|
||||||
|
*.gba
|
||||||
|
build/*
|
||||||
|
extracted/*
|
||||||
|
*.sgm
|
||||||
|
*.dmp
|
||||||
|
*.bak
|
||||||
|
*.lnk
|
||||||
|
*.sav
|
||||||
|
offsets.ini
|
||||||
|
generatedrepoints
|
||||||
17
BPRE.ld
Normal file
17
BPRE.ld
Normal 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
20
LICENSE
Normal 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.
|
||||||
77
bytereplacement
Normal file
77
bytereplacement
Normal 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
111
charmap.tbl
Normal 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
1
functionrewrites
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
##
|
||||||
11
hooks
Normal file
11
hooks
Normal 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
240
include/abilities.h
Normal 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
105
include/base_stats.h
Normal 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
14
include/cries.h
Normal 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
78
include/evolution.h
Normal 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
33
include/graphics.h
Normal 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
783
include/items.h
Normal 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
743
include/moves.h
Normal 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
1307
include/pokedex.h
Normal file
File diff suppressed because it is too large
Load Diff
1088
include/species.h
Normal file
1088
include/species.h
Normal file
File diff suppressed because it is too large
Load Diff
139
include/types.h
Normal file
139
include/types.h
Normal 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
29
linker.ld
Normal 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
30
repointall
Normal 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
|
||||||
1
routinepointers
Normal file
1
routinepointers
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
##
|
||||||
BIN
scripts/__pycache__/string.cpython-36.pyc
Normal file
BIN
scripts/__pycache__/string.cpython-36.pyc
Normal file
Binary file not shown.
264
scripts/build.py
Normal file
264
scripts/build.py
Normal 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
111
scripts/clean.py
Normal 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
189
scripts/data_extractor.py
Normal 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
382
scripts/insert.py
Normal 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
94
scripts/make.py
Normal 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
151
scripts/string.py
Normal 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
76
special_inserts.asm
Normal 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
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
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
35521
src/Base_Stats.c
Normal file
File diff suppressed because it is too large
Load Diff
12918
src/Cry_Table.c
Normal file
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
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
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
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
565
src/Evolution Table.c
Normal 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
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
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
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
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
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
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
1116
src/Item_Animation_Table.c
Normal file
File diff suppressed because it is too large
Load Diff
18156
src/Learnsets.c
Normal file
18156
src/Learnsets.c
Normal file
File diff suppressed because it is too large
Load Diff
1108
src/Palette_Table.c
Normal file
1108
src/Palette_Table.c
Normal file
File diff suppressed because it is too large
Load Diff
1357
src/Pokedex_Data.string
Normal file
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
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
2446
src/Pokedex_Orders.c
Normal file
File diff suppressed because it is too large
Load Diff
3309
src/Pokemon_Name_Table.string
Normal file
3309
src/Pokemon_Name_Table.string
Normal file
File diff suppressed because it is too large
Load Diff
1108
src/Shiny_Palette_Table.c
Normal file
1108
src/Shiny_Palette_Table.c
Normal file
File diff suppressed because it is too large
Load Diff
1107
src/Species_To_Pokdex_Table.c
Normal file
1107
src/Species_To_Pokdex_Table.c
Normal file
File diff suppressed because it is too large
Load Diff
15
src/defines.h
Normal file
15
src/defines.h
Normal 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
109
src/hooks.s
Normal 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
218
src/thumb_compiler_helper.S
Normal 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
149
src/updated_code.c
Normal 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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user