Replace python scripts for packing species archives with C++

This new code is responsible for packing the following archives:

- `pl_personal` -> basic information for each species: stats, types, etc.
- `evo` -> evolution lines for each species
- `wotbl` -> by-level learnsets for each species
- `ppark` -> catching show data for each species
- `height` -> y-offsets for front and back sprites for each species
- `pl_poke_data` -> sprite-rendering data for each species: animation
  ID, frame data, shadow size and offsets, etc.

Additionally, the following headers are generated:

- `res/pokemon/tutorable_moves.h` -> A listing of moves taught by each
  tutor and how much each move costs to be tutored
- `res/pokemon/species_learnsets_by_tutor.h` -> An array of bitmasks for
  each species designating which moves can be tutored to that species
This commit is contained in:
Rachel 2025-01-18 16:58:41 -08:00
parent 7361ba16b2
commit 2c410b8046
1060 changed files with 4564 additions and 5716 deletions

1
.gitignore vendored
View File

@ -19,6 +19,7 @@
/subprojects/knarc/
/subprojects/narc/
/subprojects/metang/
/subprojects/rapidjson-*/
# CLion folders
.idea/

View File

@ -1,9 +1,9 @@
#include "generated/items.h"
#include "generated/moves.h"
#include "generated/species.h"
#include "generated/catching_show_points_category.h"
.include "macros/movement.inc"
.include "consts/badges.inc"
.include "consts/catching_show.inc"
.include "consts/game_records.inc"
.include "consts/journal.inc"
.include "consts/map.inc"

View File

@ -1,34 +0,0 @@
{
"definitions": {
"@CatchingShowPointsCategory": {
"type": "enum",
"values": [
"CATCHING_SHOW_CATCHING_POINTS",
"CATCHING_SHOW_TIME_POINTS",
"CATCHING_SHOW_TYPE_POINTS",
"CATCHING_SHOW_TOTAL_POINTS"
]
},
"@PalParkLandArea": {
"type": "enum",
"values": [
"PAL_PARK_AREA_LAND_NONE",
"PAL_PARK_AREA_LAND_NORTH_WEST",
"PAL_PARK_AREA_LAND_NORTH_EAST",
"PAL_PARK_AREA_LAND_SOUTH_WEST",
"PAL_PARK_AREA_LAND_SOUTH_EAST",
"PAL_PARK_AREA_LAND_END"
]
},
"@PalParkWaterArea": {
"type": "enum",
"values": [
"PAL_PARK_AREA_WATER_NONE",
"PAL_PARK_AREA_WATER_NORTH_WEST",
"PAL_PARK_AREA_WATER_NORTH_EAST",
"PAL_PARK_AREA_WATER_SOUTH_WEST",
"PAL_PARK_AREA_WATER_SOUTH_EAST"
]
}
}
}

View File

@ -1,9 +1,11 @@
# This must be moved here during the refactor to move all constants to metang.
constgen_py = find_program('constgen_py', native: true)
consts_manifest_basenames = [
'badges',
'battle',
'battle_subscripts',
'btlcmd',
'catching_show',
'game_records',
'gender',
'journal',
@ -14,8 +16,6 @@ consts_manifest_basenames = [
'poketch',
'scrcmd',
'sdat',
'shadows',
'tm_learnset',
'trainer',
'trainer_ai',
]

View File

@ -1,13 +0,0 @@
{
"definitions": {
"@PokemonBattleShadowSize": {
"type": "enum",
"values": [
"SHADOW_SIZE_NONE",
"SHADOW_SIZE_SMALL",
"SHADOW_SIZE_MEDIUM",
"SHADOW_SIZE_LARGE"
]
}
}
}

View File

@ -1,111 +0,0 @@
{
"definitions": {
"@TMLearnsetFlags": {
"type": "flags",
"values": [
"TM00",
"TM01",
"TM02",
"TM03",
"TM04",
"TM05",
"TM06",
"TM07",
"TM08",
"TM09",
"TM10",
"TM11",
"TM12",
"TM13",
"TM14",
"TM15",
"TM16",
"TM17",
"TM18",
"TM19",
"TM20",
"TM21",
"TM22",
"TM23",
"TM24",
"TM25",
"TM26",
"TM27",
"TM28",
"TM29",
"TM30",
"TM31",
"TM32",
"TM33",
"TM34",
"TM35",
"TM36",
"TM37",
"TM38",
"TM39",
"TM40",
"TM41",
"TM42",
"TM43",
"TM44",
"TM45",
"TM46",
"TM47",
"TM48",
"TM49",
"TM50",
"TM51",
"TM52",
"TM53",
"TM54",
"TM55",
"TM56",
"TM57",
"TM58",
"TM59",
"TM60",
"TM61",
"TM62",
"TM63",
"TM64",
"TM65",
"TM66",
"TM67",
"TM68",
"TM69",
"TM70",
"TM71",
"TM72",
"TM73",
"TM74",
"TM75",
"TM76",
"TM77",
"TM78",
"TM79",
"TM80",
"TM81",
"TM82",
"TM83",
"TM84",
"TM85",
"TM86",
"TM87",
"TM88",
"TM89",
"TM90",
"TM91",
"TM92",
"HM01",
"HM02",
"HM03",
"HM04",
"HM05",
"HM06",
"HM07",
"HM08"
],
"composites": {}
}
}
}

View File

@ -2,234 +2,278 @@ import json
import pathlib
homedir = pathlib.Path(__file__).resolve().parent
builddir = homedir / 'build'
builddir = homedir / "build"
arm7_c_flags = [
'arm-none-eabi-gcc',
'-c',
'-O3',
'-std=c99',
'-mcpu=arm7tdmi',
'-mfloat-abi=soft',
'-nostdinc',
'-D_NITRO',
'-DSDK_4M',
'-DSDK_ARM7',
'-DSDK_CODE_ARM',
'-DSDK_CW',
'-DSDK_CW_FORCE_EXPORT_SUPPORT',
'-DSDK_FINALROM',
'-DSDK_TS',
"arm-none-eabi-gcc",
"-c",
"-O3",
"-std=c99",
"-mcpu=arm7tdmi",
"-mfloat-abi=soft",
"-nostdinc",
"-D_NITRO",
"-DSDK_4M",
"-DSDK_ARM7",
"-DSDK_CODE_ARM",
"-DSDK_CW",
"-DSDK_CW_FORCE_EXPORT_SUPPORT",
"-DSDK_FINALROM",
"-DSDK_TS",
]
arm9_c_flags = [
'arm-none-eabi-gcc',
'-c',
'-O3',
'-std=c99',
'-mcpu=arm946e-s',
'-mfloat-abi=soft',
'-nostdinc',
'-D_NITRO',
'-DLINK_PPWLOBBY',
'-DNNS_FINALROM',
'-DSDK_4M',
'-DSDK_ARM9',
'-DSDK_CODE_ARM',
'-DSDK_CW',
'-DSDK_CW_FORCE_EXPORT_SUPPORT',
'-DSDK_FINALROM',
'-DSDK_TS',
'-DPOKEPLATINUM_GENERATED_ENUM',
'-DPM_KEEP_ASSERTS',
'-DGAME_VERSION=PLATINUM',
'-DGAME_LANGUAGE=ENGLISH'
"arm-none-eabi-gcc",
"-c",
"-O3",
"-std=c99",
"-mcpu=arm946e-s",
"-mfloat-abi=soft",
"-nostdinc",
"-D_NITRO",
"-DLINK_PPWLOBBY",
"-DNNS_FINALROM",
"-DSDK_4M",
"-DSDK_ARM9",
"-DSDK_CODE_ARM",
"-DSDK_CW",
"-DSDK_CW_FORCE_EXPORT_SUPPORT",
"-DSDK_FINALROM",
"-DSDK_TS",
"-DPOKEPLATINUM_GENERATED_ENUM",
"-DPM_KEEP_ASSERTS",
"-DGAME_VERSION=PLATINUM",
"-DGAME_LANGUAGE=ENGLISH",
]
asm_commands = [
{
'directory': builddir,
'arguments': [
'arm-none-eabi-as',
'-mcpu=arm946e-s',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": [
"arm-none-eabi-as",
"-mcpu=arm946e-s",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'asm').rglob('*.s')
"file": file.resolve(),
}
for file in (homedir / "asm").rglob("*.s")
]
nitrosdk_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/NitroSDK-4.2.30001').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/NitroSDK-4.2.30001").rglob("*.c")
]
nitrosystem_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/NitroSystem-071126.1').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/NitroSystem-071126.1").rglob("*.c")
]
nitrowifi_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/NitroWiFi-2.1.30003').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/NitroWiFi-2.1.30003").rglob("*.c")
]
nitrodwc_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
f'-I{homedir}/subprojects/NitroDWC-2.2.30008/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
f"-I{homedir}/subprojects/NitroDWC-2.2.30008/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/NitroDWC-2.2.30008').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/NitroDWC-2.2.30008").rglob("*.c")
]
libvct_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
f'-I{homedir}/subprojects/NitroDWC-2.2.30008/include',
f'-I{homedir}/subprojects/libvct-1.3.1/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
f"-I{homedir}/subprojects/NitroDWC-2.2.30008/include",
f"-I{homedir}/subprojects/libvct-1.3.1/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/libvct-1.3.1').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/libvct-1.3.1").rglob("*.c")
]
libcrypto_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
f'-I{homedir}/subprojects/NitroDWC-2.2.30008/include',
f'-I{homedir}/subprojects/libvct-1.3.1/include',
f'-I{homedir}/subprojects/libcrypto/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
f"-I{homedir}/subprojects/NitroDWC-2.2.30008/include",
f"-I{homedir}/subprojects/libvct-1.3.1/include",
f"-I{homedir}/subprojects/libcrypto/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/libcrypto').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/libcrypto").rglob("*.c")
]
ppwlobby_c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
f'-I{homedir}/subprojects/NitroDWC-2.2.30008/include',
f'-I{homedir}/subprojects/libvct-1.3.1/include',
f'-I{homedir}/subprojects/libcrypto/include',
f'-I{homedir}/subprojects/ppwlobby/include',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
f"-I{homedir}/subprojects/NitroDWC-2.2.30008/include",
f"-I{homedir}/subprojects/libvct-1.3.1/include",
f"-I{homedir}/subprojects/libcrypto/include",
f"-I{homedir}/subprojects/ppwlobby/include",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'subprojects/ppwlobby').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "subprojects/ppwlobby").rglob("*.c")
]
c_commands = [
{
'directory': builddir,
'arguments': arm9_c_flags + [
f'-I{homedir}/tools/cw/include/MSL_C',
f'-I{homedir}/tools/cw/include/MSL_Extras',
f'-I{homedir}/subprojects/NitroSDK-4.2.30001/include',
f'-I{builddir}/subprojects/NitroSDK-4.2.30001/gen',
f'-I{homedir}/subprojects/NitroSystem-071126.1/include',
f'-I{homedir}/subprojects/NitroWiFi-2.1.30003/include',
f'-I{homedir}/subprojects/NitroDWC-2.2.30008/include',
f'-I{homedir}/subprojects/libvct-1.3.1/include',
f'-I{homedir}/subprojects/libcrypto/include',
f'-I{homedir}/subprojects/ppwlobby/include',
f'-I{homedir}/lib/gds/include',
f'-I{homedir}/lib/spl/include',
f'-iquote{homedir}',
f'-iquote{homedir}/include',
f'-iquote{homedir}/build', # Meson includes this implicitly
f'-iquote{homedir}/build/res', # knarc-generated NAIX headers
f'-iquote{homedir}/build/res/text', # GMM-generated headers
f'-include{homedir}/include/pch/global_pch.h',
'-mthumb',
'-o',
file.with_suffix('.o'),
file.resolve()
"directory": builddir,
"arguments": arm9_c_flags
+ [
f"-I{homedir}/tools/cw/include/MSL_C",
f"-I{homedir}/tools/cw/include/MSL_Extras",
f"-I{homedir}/subprojects/NitroSDK-4.2.30001/include",
f"-I{builddir}/subprojects/NitroSDK-4.2.30001/gen",
f"-I{homedir}/subprojects/NitroSystem-071126.1/include",
f"-I{homedir}/subprojects/NitroWiFi-2.1.30003/include",
f"-I{homedir}/subprojects/NitroDWC-2.2.30008/include",
f"-I{homedir}/subprojects/libvct-1.3.1/include",
f"-I{homedir}/subprojects/libcrypto/include",
f"-I{homedir}/subprojects/ppwlobby/include",
f"-I{homedir}/lib/gds/include",
f"-I{homedir}/lib/spl/include",
f"-iquote{homedir}",
f"-iquote{homedir}/include",
f"-iquote{homedir}/build", # Meson includes this implicitly
f"-iquote{homedir}/build/res", # knarc-generated NAIX headers
f"-iquote{homedir}/build/res/text", # GMM-generated headers
f"-include{homedir}/include/pch/global_pch.h",
"-mthumb",
"-o",
file.with_suffix(".o"),
file.resolve(),
],
'file': file.resolve()
} for file in (homedir / 'src').rglob('*.c')
"file": file.resolve(),
}
for file in (homedir / "src").rglob("*.c")
]
with open('compile_commands.json', 'w') as ofp:
datagen_cpp_commands = [
{
"directory": builddir,
"arguments": [
"g++",
f"-I{homedir}/subprojects/narc/lib/include", # NARC packing
f"-I{homedir}/subprojects/rapidjson-1.1.0/include", # JSON parser
f"-I{homedir}/tools/datagen", # base header file
f"-I{homedir}/include", # source includes
f"-I{builddir}", # metang-generated headers (constants)
"-std=c++17",
"-Wno-deprecated-declarations",
file.with_suffix(".o"),
file.resolve(),
],
"file": file.resolve(),
}
for file in (homedir / "tools" / "datagen").rglob("*.cpp")
]
with open("compile_commands.json", "w") as ofp:
json.dump(
asm_commands + nitrosdk_c_commands + nitrosystem_c_commands
+ nitrowifi_c_commands + nitrodwc_c_commands + libvct_c_commands
+ libcrypto_c_commands + ppwlobby_c_commands + c_commands,
asm_commands
+ nitrosdk_c_commands
+ nitrosystem_c_commands
+ nitrowifi_c_commands
+ nitrodwc_c_commands
+ libvct_c_commands
+ libcrypto_c_commands
+ ppwlobby_c_commands
+ c_commands
+ datagen_cpp_commands,
ofp,
default=str,
indent=4
indent=4,
)

View File

@ -0,0 +1,4 @@
CATCHING_SHOW_CATCHING_POINTS
CATCHING_SHOW_TIME_POINTS
CATCHING_SHOW_TYPE_POINTS
CATCHING_SHOW_TOTAL_POINTS

View File

@ -1,5 +1,16 @@
# This build file defines sets of constants which are used throughout the code
# base, both in the ROM's source code and in internal tooling. We generate these
# constants to ensure that they have a particular set of characteristics, are
# easily validated in data files representing them as strings, and can be easily
# parsed by simple string manipulations.
# This must be declared here instead of in tools/meson.build, as some tools depend
# on metang-generated constants.
metang_exe = find_program('metang', native: true)
enum_generators = {
'abilities': ['--tag-name', 'Ability'],
'catching_show_points_category': ['--tag-name', 'CatchingShowPointsCategory'],
'egg_groups': ['--tag-name', 'EggGroup'],
'evolution_methods': ['--tag-name', 'EvolutionMethod'],
'exp_rates': ['--tag-name', 'ExpRate'],
@ -7,8 +18,11 @@ enum_generators = {
'item_hold_effects': ['--tag-name', 'ItemHoldEffect'],
'items': ['--tag-name', 'Item'],
'moves': ['--tag-name', 'Move'],
'pal_park_land_area': ['--tag-name', 'PalParkLandArea'],
'pal_park_water_area': ['--tag-name', 'PalParkWaterArea'],
'pokemon_colors': ['--tag-name', 'PokemonColor'],
'pokemon_types': ['--tag-name', 'PokemonType'],
'shadow_sizes': ['--tag-name', 'ShadowSize'],
'species': ['--tag-name', 'Species'],
}
@ -35,10 +49,11 @@ foreach gen_key : enum_generators.keys()
command: [
metang_exe, 'enum',
gen_args,
'--guard', 'POKEPLATINUM_GENERATED',
'--output', '@OUTPUT@',
'--lang', 'py',
'@INPUT@',
]
)
endforeach
species_txt = files('species.txt')

View File

@ -0,0 +1,6 @@
PAL_PARK_AREA_LAND_NONE
PAL_PARK_AREA_LAND_NORTH_WEST
PAL_PARK_AREA_LAND_NORTH_EAST
PAL_PARK_AREA_LAND_SOUTH_WEST
PAL_PARK_AREA_LAND_SOUTH_EAST
PAL_PARK_AREA_LAND_END

View File

@ -0,0 +1,5 @@
PAL_PARK_AREA_WATER_NONE
PAL_PARK_AREA_WATER_NORTH_WEST
PAL_PARK_AREA_WATER_NORTH_EAST
PAL_PARK_AREA_WATER_SOUTH_WEST
PAL_PARK_AREA_WATER_SOUTH_EAST

View File

@ -0,0 +1,4 @@
SHADOW_SIZE_NONE
SHADOW_SIZE_SMALL
SHADOW_SIZE_MEDIUM
SHADOW_SIZE_LARGE

View File

@ -1,6 +1,8 @@
#ifndef POKEPLATINUM_MAP_HEADER_H
#define POKEPLATINUM_MAP_HEADER_H
#include "generated/evolution_methods.h"
typedef struct {
u8 unk_00;
u8 unk_01;
@ -58,6 +60,6 @@ BOOL MapHeader_IsTrophyGarden(const u32 headerID);
BOOL MapHeader_IsAmitySquare(const u32 headerID);
BOOL MapHeader_IsAzureFluteAllowed(const u32 headerID);
BOOL MapHeader_IsPokemonCenter2F(const u32 headerID);
enum PokemonEvoMethod MapHeader_GetMapEvolutionMethod(u32 headerID);
enum EvolutionMethod MapHeader_GetMapEvolutionMethod(u32 headerID);
#endif // POKEPLATINUM_MAP_HEADER_H

View File

@ -15,9 +15,9 @@ typedef struct PokeSpriteFaceData {
typedef struct ArchivedPokeSpriteData {
PokeSpriteFaceData faces[MAX_FACES]; ///< Data for each display-face of the Pokemon's sprite.
s8 yOffset; ///< Vertical offset of the Pokemon's sprite for either face.
s8 yOffset; ///< Additional vertical offset of the Pokemon's front-face sprite.
s8 xOffsetShadow; ///< Horizontal offset for the shadow sprite beneath the Pokemon's sprite.
u8 shadowSize; ///< Size of the shadow sprite beneath the Pokemon's sprite. TODO: enum
u8 shadowSize; ///< Size of the shadow sprite beneath the Pokemon's sprite.
} ArchivedPokeSpriteData;
#endif // POKEPLATINUM_ARCHIVED_POKE_SPRITE_DATA_H

View File

@ -63,10 +63,27 @@ typedef struct SpeciesEvolution {
u16 targetSpecies;
} SpeciesEvolution;
typedef struct SpeciesLearnsetEntry {
u16 move : 9;
u16 level : 7;
} SpeciesLearnsetEntry;
// This struct is not explicitly used; it is provided to document and enforce the size of
// the learnset entries.
typedef struct SpeciesLearnset {
ALIGN_4 u16 entries[MAX_LEARNSET_ENTRIES + 1];
ALIGN_4 SpeciesLearnsetEntry entries[MAX_LEARNSET_ENTRIES + 1];
} SpeciesLearnset;
typedef struct SpeciesPalPark {
u8 landArea;
u8 waterArea;
u8 catchingPoints;
u8 rarity;
union {
u8 asU8[2];
u16 asU16;
} unused;
} SpeciesPalPark;
#endif // POKEPLATINUM_SPECIES_H

View File

@ -1,7 +1,7 @@
#ifndef POKEPLATINUM_TUTOR_MOVESETS_H
#define POKEPLATINUM_TUTOR_MOVESETS_H
#include "consts/moves.h"
#include "generated/moves.h"
enum TutorLocation {
TUTOR_LOCATION_ROUTE_212 = 0,

View File

@ -13,6 +13,7 @@ fs = import('fs')
### INCLUDE PATHS ###
############################################################
public_includes = include_directories('include', 'asm', 'res')
toplevel_includes = include_directories('.')
############################################################
@ -115,6 +116,13 @@ libsyscall_dep = dependency('libsyscall')
ppwlobby_dep = dependency('ppwlobby')
############################################################
### CONSTS ###
############################################################
subdir('consts')
subdir('generated')
############################################################
### TOOLS ###
############################################################
@ -133,13 +141,6 @@ subdir('platinum.us')
subdir('lib')
############################################################
### CONSTS ###
############################################################
subdir('consts')
subdir('generated')
############################################################
### FILE SYSTEM ###
############################################################
@ -161,6 +162,7 @@ main = executable('main',
naix_headers,
gen_species_headers,
tutorable_moves_h,
species_learnsets_by_tutor_h,
],
c_args: [
pokeplatinum_args,

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_GRASS" ],
"abilities": [ "ABILITY_SNOW_WARNING", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_WHITE",
"flip": false
},
"body_color": "MON_COLOR_WHITE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_ICE_PUNCH" ],
@ -127,13 +125,13 @@
"trainer_pos_m": 15,
"pokemon_pos_m": 4,
"entry_text": "They appear when the snow flowers\nbloom. When the petals fall, they\nretreat to places unknown again.",
"category": "Frost Tree Pok\u00e9mon"
"category": "Frost Tree Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 2063
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_HUMAN_LIKE", "EGG_GROUP_HUMAN_LIKE" ],
"abilities": [ "ABILITY_SYNCHRONIZE", "ABILITY_INNER_FOCUS" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TELEPORT" ]
@ -119,13 +117,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 25,
"entry_text": "Using its psychic power is such a\nstrain on its brain that it needs\nto sleep for 18 hours a day.",
"category": "Psi Pok\u00e9mon"
"category": "Psi Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 2570
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_PRESSURE", "ABILITY_SUPER_LUCK" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_WHITE",
"flip": true
},
"body_color": "MON_COLOR_WHITE",
"flip_sprite": true,
"learnset": {
"by_level": [
[ 1, "MOVE_SCRATCH" ],
@ -145,13 +143,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 14,
"entry_text": "Rumored to sense disasters with its\nhorn, it became a target. It fled\ndeep into the mountains.",
"category": "Disaster Pok\u00e9mon"
"category": "Disaster Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 4112
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FLYING", "EGG_GROUP_FLYING" ],
"abilities": [ "ABILITY_ROCK_HEAD", "ABILITY_PRESSURE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_PURPLE",
"flip": false
},
"body_color": "MON_COLOR_PURPLE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_ICE_FANG" ],
@ -129,14 +127,14 @@
"pokemon_pos_f": 4,
"trainer_pos_m": 9,
"pokemon_pos_m": 4,
"entry_text": "A Pok\u00e9mon that roamed the skies\nin the dinosaur era. Its teeth are\nlike saw blades.",
"category": "Fossil Pok\u00e9mon"
"entry_text": "A Pokémon that roamed the skies\nin the dinosaur era. Its teeth are\nlike saw blades.",
"category": "Fossil Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 4363
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_MONSTER" ],
"abilities": [ "ABILITY_STURDY", "ABILITY_ROCK_HEAD" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -154,13 +152,13 @@
"trainer_pos_m": 15,
"pokemon_pos_m": 6,
"entry_text": "While seeking iron for food, it\ndigs tunnels by breaking through\nbedrock with its steel horns.",
"category": "Iron Armor Pok\u00e9mon"
"category": "Iron Armor Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 2830
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_RUN_AWAY", "ABILITY_PICKUP" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_PURPLE",
"flip": false
},
"body_color": "MON_COLOR_PURPLE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SCRATCH" ],
@ -136,13 +134,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 15,
"entry_text": "It lives high among the treetops.\nIt can use its tail as freely and\ncleverly as its hands.",
"category": "Long Tail Pok\u00e9mon"
"category": "Long Tail Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_HUMAN_LIKE", "EGG_GROUP_HUMAN_LIKE" ],
"abilities": [ "ABILITY_SYNCHRONIZE", "ABILITY_INNER_FOCUS" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TELEPORT" ],
@ -129,13 +127,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 7,
"entry_text": "The spoons clutched in its hands\nare said to have been created by\nits psychic powers.",
"category": "Psi Pok\u00e9mon"
"category": "Psi Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 2570
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FLYING", "EGG_GROUP_DRAGON" ],
"abilities": [ "ABILITY_NATURAL_CURE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_PLUCK" ],
@ -126,13 +124,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 0,
"entry_text": "If it bonds with a person, it will\ngently envelop the friend with its\nsoft wings, then hum.",
"category": "Humming Pok\u00e9mon"
"category": "Humming Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 4367
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_TECHNICIAN", "ABILITY_PICKUP" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_PURPLE",
"flip": false
},
"body_color": "MON_COLOR_PURPLE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SCRATCH" ],
@ -134,13 +132,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 7,
"entry_text": "Split into two, the tails are so\nadept at handling and doing things,\nAMBIPOM rarely uses its hands.",
"category": "Long Tail Pok\u00e9mon"
"category": "Long Tail Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NORTH_EAST",
"catching_points": 50,
"rarity": 30,
"unused": 771
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_STATIC", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_YELLOW",
"flip": false
},
"body_color": "MON_COLOR_YELLOW",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_FIRE_PUNCH" ],
@ -116,14 +114,14 @@
"pokemon_pos_f": 8,
"trainer_pos_m": 9,
"pokemon_pos_m": 8,
"entry_text": "The tip of its tail shines brightly.\nIn the olden days, people sent\nsignals using the tail\u2019s light.",
"category": "Light Pok\u00e9mon"
"entry_text": "The tip of its tail shines brightly.\nIn the olden days, people sent\nsignals using the tails light.",
"category": "Light Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 1799
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_3", "EGG_GROUP_WATER_3" ],
"abilities": [ "ABILITY_BATTLE_ARMOR", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SCRATCH" ],
@ -115,14 +113,14 @@
"pokemon_pos_f": 3,
"trainer_pos_m": 9,
"pokemon_pos_m": 3,
"entry_text": "A Pok\u00e9mon ancestor that was\nreanimated from a fossil. It lived\nin the sea and hunted with claws.",
"category": "Old Shrimp Pok\u00e9mon"
"entry_text": "A Pokémon ancestor that was\nreanimated from a fossil. It lived\nin the sea and hunted with claws.",
"category": "Old Shrimp Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_SOUTH_EAST",
"catching_points": 70,
"rarity": 20,
"unused": 1035
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_DRAGON" ],
"abilities": [ "ABILITY_INTIMIDATE", "ABILITY_SHED_SKIN" ],
"safari_flee_rate": 60,
"sprite": {
"color": "MON_COLOR_PURPLE",
"flip": false
},
"body_color": "MON_COLOR_PURPLE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_ICE_FANG" ],
@ -120,13 +118,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 8,
"entry_text": "The pattern on its belly is for\nintimidation. It constricts foes\nwhile they are frozen in fear.",
"category": "Cobra Pok\u00e9mon"
"category": "Cobra Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 1542
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_INTIMIDATE", "ABILITY_FLASH_FIRE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_THUNDER_FANG" ],
@ -105,13 +103,13 @@
"trainer_pos_m": 16,
"pokemon_pos_m": 6,
"entry_text": "Its proud and regal appearance\nhas captured the hearts of\npeople since long ago.",
"category": "Legendary Pok\u00e9mon"
"category": "Legendary Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 514
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_MULTITYPE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SEISMIC_TOSS" ],
@ -172,13 +170,13 @@
"trainer_pos_m": 23,
"pokemon_pos_m": 0,
"entry_text": "It is said to have emerged from an\negg in a place where there was\nnothing, then shaped the world.",
"category": "Alpha Pok\u00e9mon"
"category": "Alpha Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 100,
"rarity": 1,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_BUG", "EGG_GROUP_BUG" ],
"abilities": [ "ABILITY_SWARM", "ABILITY_INSOMNIA" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_RED",
"flip": false
},
"body_color": "MON_COLOR_RED",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_BUG_BITE" ],
@ -107,13 +105,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 12,
"entry_text": "It attaches silk to its prey and\nsets it free. Later, it tracks the\nsilk to the prey and its friends.",
"category": "Long Leg Pok\u00e9mon"
"category": "Long Leg Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 1540
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_3", "EGG_GROUP_WATER_3" ],
"abilities": [ "ABILITY_BATTLE_ARMOR", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SCRATCH" ],
@ -121,13 +119,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 6,
"entry_text": "It went ashore after evolving.\nIts entire body is clad in a sturdy\narmor.",
"category": "Plate Pok\u00e9mon"
"category": "Plate Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_SOUTH_EAST",
"catching_points": 80,
"rarity": 10,
"unused": 1035
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_MONSTER" ],
"abilities": [ "ABILITY_STURDY", "ABILITY_ROCK_HEAD" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -127,13 +125,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 25,
"entry_text": "It usually lives deep in mountains.\nHowever, hunger may drive it to\neat railroad tracks and cars.",
"category": "Iron Armor Pok\u00e9mon"
"category": "Iron Armor Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 2830
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_PRESSURE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_GUST" ],
@ -116,14 +114,14 @@
"pokemon_pos_f": 0,
"trainer_pos_m": 7,
"pokemon_pos_m": 0,
"entry_text": "A legendary bird Pok\u00e9mon.\nIt can create blizzards by\nfreezing moisture in the air.",
"category": "Freeze Pok\u00e9mon"
"entry_text": "A legendary bird Pokémon.\nIt can create blizzards by\nfreezing moisture in the air.",
"category": "Freeze Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 4365
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_LEVITATE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_REST" ],
@ -134,13 +132,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 65526,
"entry_text": "When AZELF flew, people gained the\ndetermination to do things.\nIt was the birth of willpower.",
"category": "Willpower Pok\u00e9mon"
"category": "Willpower Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_1", "EGG_GROUP_FAIRY" ],
"abilities": [ "ABILITY_THICK_FAT", "ABILITY_HUGE_POWER" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -119,13 +117,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 19,
"entry_text": "It can spend all day in water,\nsince it can inhale and store\na large volume of air.",
"category": "Aqua Rabbit Pok\u00e9mon"
"category": "Aqua Rabbit Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NORTH_EAST",
"catching_points": 70,
"rarity": 20,
"unused": 771
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_THICK_FAT", "ABILITY_HUGE_POWER" ],
"safari_flee_rate": 120,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SPLASH" ],
@ -100,13 +98,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 27,
"entry_text": "Its tail bounces like a rubber ball.\nIt flings that tail around to fight\nopponents bigger than itself.",
"category": "Polka Dot Pok\u00e9mon"
"category": "Polka Dot Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NORTH_EAST",
"catching_points": 80,
"rarity": 10,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_NONE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_EGG",
"flip": false
},
"body_color": "MON_COLOR_EGG",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SPLASH" ]

View File

@ -1 +1 @@
personal_files += files('data.json')
species_data_files += files('data.json')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_DRAGON", "EGG_GROUP_DRAGON" ],
"abilities": [ "ABILITY_ROCK_HEAD", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_RAGE" ],
@ -115,13 +113,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 23,
"entry_text": "Dreaming of one day flying, it\npractices by leaping off cliffs\nevery day.",
"category": "Rock Head Pok\u00e9mon"
"category": "Rock Head Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 3855
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MINERAL", "EGG_GROUP_MINERAL" ],
"abilities": [ "ABILITY_LEVITATE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_CONFUSION" ],
@ -127,14 +125,14 @@
"pokemon_pos_f": 26,
"trainer_pos_m": 9,
"pokemon_pos_m": 26,
"entry_text": "It moves by spinning on its foot.\nIt is a rare Pok\u00e9mon that was\ndiscovered in ancient ruins.",
"category": "Clay Doll Pok\u00e9mon"
"entry_text": "It moves by spinning on its foot.\nIt is a rare Pokémon that was\ndiscovered in ancient ruins.",
"category": "Clay Doll Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 2568
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_AMORPHOUS", "EGG_GROUP_AMORPHOUS" ],
"abilities": [ "ABILITY_INSOMNIA", "ABILITY_FRISK" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLACK",
"flip": false
},
"body_color": "MON_COLOR_BLACK",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_KNOCK_OFF" ],
@ -126,14 +124,14 @@
"pokemon_pos_f": 13,
"trainer_pos_m": 9,
"pokemon_pos_m": 13,
"entry_text": "A doll that became a Pok\u00e9mon over\nits grudge from being junked. It\nseeks the child that disowned it.",
"category": "Marionette Pok\u00e9mon"
"entry_text": "A doll that became a Pokémon over\nits grudge from being junked. It\nseeks the child that disowned it.",
"category": "Marionette Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 3084
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_2", "EGG_GROUP_WATER_2" ],
"abilities": [ "ABILITY_OBLIVIOUS", "ABILITY_ANTICIPATION" ],
"safari_flee_rate": 120,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_MUD_SLAP" ],
@ -113,13 +111,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 65531,
"entry_text": "Its slimy body is hard to grasp. In\none region, it is said to have been\nborn from hardened mud.",
"category": "Whiskers Pok\u00e9mon"
"category": "Whiskers Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NORTH_EAST",
"catching_points": 50,
"rarity": 30,
"unused": 2051
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_MONSTER" ],
"abilities": [ "ABILITY_STURDY", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GRAY",
"flip": false
},
"body_color": "MON_COLOR_GRAY",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -125,13 +123,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 9,
"entry_text": "When they lined up side by side, no\nfoe could break through. They\nshielded their young in that way.",
"category": "Shield Pok\u00e9mon"
"category": "Shield Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 2827
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_GRASS" ],
"abilities": [ "ABILITY_OVERGROW", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -119,13 +117,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 7,
"entry_text": "The buds that ring its neck give\noff a spicy aroma that perks\npeople up.",
"category": "Leaf Pok\u00e9mon"
"category": "Leaf Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 257
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_BUG", "EGG_GROUP_BUG" ],
"abilities": [ "ABILITY_SWARM", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_YELLOW",
"flip": false
},
"body_color": "MON_COLOR_YELLOW",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_ABSORB" ],
@ -109,13 +107,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 65526,
"entry_text": "Despite its looks, it is aggressive.\nIt jabs with its long, thin mouth if\ndisturbed while collecting pollen.",
"category": "Butterfly Pok\u00e9mon"
"category": "Butterfly Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 4356
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_BUG", "EGG_GROUP_BUG" ],
"abilities": [ "ABILITY_SWARM", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_YELLOW",
"flip": false
},
"body_color": "MON_COLOR_YELLOW",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_FURY_ATTACK" ],
@ -116,13 +114,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 65529,
"entry_text": "Its best attack involves flying\naround at high speed, striking with\npoison needles, then flying off.",
"category": "Poison Bee Pok\u00e9mon"
"category": "Poison Bee Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 1540
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MINERAL", "EGG_GROUP_MINERAL" ],
"abilities": [ "ABILITY_CLEAR_BODY", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TAKE_DOWN" ]
@ -69,13 +67,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 65529,
"entry_text": "It converses with others by using\nmagnetic pulses. In a swarm, they\nmove in perfect unison.",
"category": "Iron Ball Pok\u00e9mon"
"category": "Iron Ball Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 2574
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_GRASS", "EGG_GROUP_GRASS" ],
"abilities": [ "ABILITY_CHLOROPHYLL", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_LEAF_BLADE" ],
@ -103,13 +101,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 27,
"entry_text": "When the heavy rainfall season\nends, it is drawn out by warm\nsunlight to dance in the open.",
"category": "Flower Pok\u00e9mon"
"category": "Flower Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 257
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_GRASS", "EGG_GROUP_GRASS" ],
"abilities": [ "ABILITY_CHLOROPHYLL", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_VINE_WHIP" ],
@ -112,13 +110,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 22,
"entry_text": "It prefers hot and humid\nenvironments. It is quick at\ncapturing prey with its vines.",
"category": "Flower Pok\u00e9mon"
"category": "Flower Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 30,
"rarity": 50,
"unused": 1537
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_1", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_SIMPLE", "ABILITY_UNAWARE" ],
"safari_flee_rate": 60,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -128,13 +126,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 15,
"entry_text": "A river dammed by BIBAREL will\nnever overflow its banks, which\nis appreciated by people nearby.",
"category": "Beaver Pok\u00e9mon"
"category": "Beaver Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 50,
"rarity": 30,
"unused": 773
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_WATER_1", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_SIMPLE", "ABILITY_UNAWARE" ],
"safari_flee_rate": 90,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -121,14 +119,14 @@
"pokemon_pos_f": 25,
"trainer_pos_m": 9,
"pokemon_pos_m": 25,
"entry_text": "A comparison revealed that\nBIDOOF\u2019s front teeth grow at\nthe same rate as RATTATA\u2019s.",
"category": "Plump Mouse Pok\u00e9mon"
"entry_text": "A comparison revealed that\nBIDOOFs front teeth grow at\nthe same rate as RATTATAs.",
"category": "Plump Mouse Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 30,
"rarity": 50,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MONSTER", "EGG_GROUP_WATER_1" ],
"abilities": [ "ABILITY_TORRENT", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BLUE",
"flip": false
},
"body_color": "MON_COLOR_BLUE",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_FLASH_CANNON" ],
@ -131,13 +129,13 @@
"trainer_pos_m": 6,
"pokemon_pos_m": 1,
"entry_text": "The jets of water it spouts from\nthe rocket cannons on its shell\ncan punch through thick steel.",
"category": "Shellfish Pok\u00e9mon"
"category": "Shellfish Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NONE",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NORTH_EAST",
"catching_points": 90,
"rarity": 3,
"unused": 771
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FIELD", "EGG_GROUP_FIELD" ],
"abilities": [ "ABILITY_BLAZE", "ABILITY_NONE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_RED",
"flip": false
},
"body_color": "MON_COLOR_RED",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_FIRE_PUNCH" ],
@ -133,13 +131,13 @@
"trainer_pos_m": 13,
"pokemon_pos_m": 5,
"entry_text": "Flames spout from its wrists,\nenveloping its knuckles. Its\npunches scorch its foes.",
"category": "Blaze Pok\u00e9mon"
"category": "Blaze Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 2306
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FAIRY", "EGG_GROUP_FAIRY" ],
"abilities": [ "ABILITY_NATURAL_CURE", "ABILITY_SERENE_GRACE" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_PINK",
"flip": false
},
"body_color": "MON_COLOR_PINK",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_POUND" ],
@ -144,13 +142,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 6,
"entry_text": "The eggs it lays are filled with\nhappiness. Eating even one bite\nwill bring a smile to anyone.",
"category": "Happiness Pok\u00e9mon"
"category": "Happiness Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_UNDISCOVERED", "EGG_GROUP_UNDISCOVERED" ],
"abilities": [ "ABILITY_STURDY", "ABILITY_ROCK_HEAD" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_BROWN",
"flip": false
},
"body_color": "MON_COLOR_BROWN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_FAKE_TEARS" ],
@ -113,13 +111,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 27,
"entry_text": "It prefers an arid atmosphere. It\nleaks water that looks like tears\nwhen adjusting its moisture level.",
"category": "Bonsai Pok\u00e9mon"
"category": "Bonsai Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_SOUTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 90,
"rarity": 3,
"unused": 1285
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_FAIRY", "EGG_GROUP_GRASS" ],
"abilities": [ "ABILITY_EFFECT_SPORE", "ABILITY_POISON_HEAL" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_ABSORB" ],
@ -127,13 +125,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 8,
"entry_text": "Its short arms stretch when it\nthrows punches. Its technique is\nequal to that of pro boxers.",
"category": "Mushroom Pok\u00e9mon"
"category": "Mushroom Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_WEST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 2305
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MINERAL", "EGG_GROUP_MINERAL" ],
"abilities": [ "ABILITY_LEVITATE", "ABILITY_HEATPROOF" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_SUNNY_DAY" ],
@ -130,13 +128,13 @@
"trainer_pos_m": 9,
"pokemon_pos_m": 7,
"entry_text": "It brought rains by opening portals\nto another world. It was revered\nas a bringer of plentiful harvests.",
"category": "Bronze Bell Pok\u00e9mon"
"category": "Bronze Bell Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 80,
"rarity": 10,
"unused": 2827
}
}
}

View File

@ -1,4 +1,4 @@
personal_files += files('data.json')
species_data_files += files('data.json')
poke_icon_files += files('icon.png')

View File

@ -30,10 +30,8 @@
"egg_groups": [ "EGG_GROUP_MINERAL", "EGG_GROUP_MINERAL" ],
"abilities": [ "ABILITY_LEVITATE", "ABILITY_HEATPROOF" ],
"safari_flee_rate": 0,
"sprite": {
"color": "MON_COLOR_GREEN",
"flip": false
},
"body_color": "MON_COLOR_GREEN",
"flip_sprite": false,
"learnset": {
"by_level": [
[ 1, "MOVE_TACKLE" ],
@ -123,14 +121,14 @@
"pokemon_pos_f": 65528,
"trainer_pos_m": 9,
"pokemon_pos_m": 65528,
"entry_text": "There are researchers who believe\nthis Pok\u00e9mon reflected like a mirror\nin the distant past.",
"category": "Bronze Pok\u00e9mon"
"entry_text": "There are researchers who believe\nthis Pokémon reflected like a mirror\nin the distant past.",
"category": "Bronze Pokémon"
},
"catching_show_data": {
"catching_show": {
"pal_park_land_area": "PAL_PARK_AREA_LAND_NORTH_EAST",
"pal_park_water_area": "PAL_PARK_AREA_WATER_NONE",
"catching_points": 70,
"rarity": 20,
"unused": 2574
}
}
}

Some files were not shown because too many files have changed in this diff Show More