tools/parse: more pokemon and move parsers
This commit is contained in:
parent
096769917a
commit
145b6b8936
3
tools/parse/move/__init__.py
Normal file
3
tools/parse/move/__init__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from parse.move import constants
|
||||||
|
from parse.move import names
|
||||||
|
from parse.move import moves
|
@ -1,4 +1,4 @@
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from parse.generic import constants
|
from parse.generic import constants
|
||||||
|
|
||||||
partial(constants.parse, path='constants/move_constants.asm')
|
parse = partial(constants.parse, path='constants/move_constants.asm')
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from parse import number
|
from parse.generic import tokenize
|
||||||
from parse.generic import macro_line
|
from parse.generic import number
|
||||||
|
|
||||||
tokenize_lines = partial(macro_line.tokenize_lines, prefix='move ')
|
tokenize_lines = partial(tokenize.lines, prefix='move ')
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Move:
|
class Move:
|
||||||
name: str
|
constant_name: str
|
||||||
effect: str
|
effect: str
|
||||||
power: int
|
power: int
|
||||||
type: str
|
type: str
|
||||||
@ -17,14 +17,14 @@ class Move:
|
|||||||
def flatten(tokens):
|
def flatten(tokens):
|
||||||
for t in tokens:
|
for t in tokens:
|
||||||
assert t[0] == 'move', t
|
assert t[0] == 'move', t
|
||||||
_, (name, effect, power, type, accuracy, pp) = t
|
_, (constant_name, effect, power, type, accuracy, pp) = t
|
||||||
return Move(
|
yield constant_name, Move(
|
||||||
name,
|
constant_name,
|
||||||
effect,
|
effect,
|
||||||
number(power),
|
number.parse(power),
|
||||||
type,
|
type,
|
||||||
number(accuracy),
|
number.parse(accuracy),
|
||||||
number(pp)
|
number.parse(pp)
|
||||||
)
|
)
|
||||||
|
|
||||||
def parse(prefix):
|
def parse(prefix):
|
||||||
|
@ -17,9 +17,21 @@ from parse import spritesheet # constants
|
|||||||
# spritesheets
|
# spritesheets
|
||||||
# gfx
|
# gfx
|
||||||
|
|
||||||
|
from parse import pokemon # constants
|
||||||
|
# base_stats
|
||||||
|
# evos_moves
|
||||||
|
# names
|
||||||
|
# dex_entries
|
||||||
|
# dex_order
|
||||||
|
# dex_text
|
||||||
|
|
||||||
|
from parse import move # constants
|
||||||
|
# moves
|
||||||
|
# names
|
||||||
|
|
||||||
from parse import text
|
from parse import text
|
||||||
from parse import scripts
|
from parse import scripts
|
||||||
|
from parse import pic
|
||||||
|
|
||||||
def memoize(f):
|
def memoize(f):
|
||||||
value = None
|
value = None
|
||||||
@ -44,8 +56,9 @@ tileset_constants_list = memoize(lambda: tileset.constants.parse(prefix))
|
|||||||
tileset_headers_list = memoize(lambda: tileset.headers.parse(prefix))
|
tileset_headers_list = memoize(lambda: tileset.headers.parse(prefix))
|
||||||
tileset_gfx_list = memoize(lambda: tileset.gfx.parse(prefix))
|
tileset_gfx_list = memoize(lambda: tileset.gfx.parse(prefix))
|
||||||
tileset_collision_tile_ids_list = memoize(lambda: tileset.collision_tile_ids.parse(prefix))
|
tileset_collision_tile_ids_list = memoize(lambda: tileset.collision_tile_ids.parse(prefix))
|
||||||
|
# need:
|
||||||
|
#data/tilesets/pair_collision_tile_ids.asm
|
||||||
|
#cut_tree_blocks.asm
|
||||||
|
|
||||||
# sprites
|
# sprites
|
||||||
spritesheet_gfx_list = memoize(lambda: spritesheet.gfx.parse(prefix))
|
spritesheet_gfx_list = memoize(lambda: spritesheet.gfx.parse(prefix))
|
||||||
@ -56,8 +69,22 @@ spritesheet_constants_list = memoize(lambda: spritesheet.constants.parse(pref
|
|||||||
scripts_list = memoize(lambda: scripts.parse_all(prefix))
|
scripts_list = memoize(lambda: scripts.parse_all(prefix))
|
||||||
text_list = memoize(lambda: text.parse_all(prefix))
|
text_list = memoize(lambda: text.parse_all(prefix))
|
||||||
|
|
||||||
# need:
|
|
||||||
#data/tilesets/pair_collision_tile_ids.asm
|
|
||||||
#cut_tree_blocks.asm
|
|
||||||
|
|
||||||
# home/vcopy: animations
|
# home/vcopy: animations
|
||||||
|
|
||||||
|
# pokemon
|
||||||
|
pokemon_base_stats_list = memoize(lambda: pokemon.base_stats.parse_all(prefix))
|
||||||
|
pokemon_constants_list = memoize(lambda: pokemon.constants.parse(prefix))
|
||||||
|
pokemon_dex_constants_list= memoize(lambda: pokemon.dex_constants.parse(prefix))
|
||||||
|
pokemon_dex_entries_list = memoize(lambda: pokemon.dex_entries.parse(prefix))
|
||||||
|
pokemon_dex_order_list = memoize(lambda: pokemon.dex_order.parse(prefix))
|
||||||
|
pokemon_dex_text_list = memoize(lambda: pokemon.dex_text.parse(prefix))
|
||||||
|
pokemon_evos_moves_list = memoize(lambda: pokemon.evos_moves.parse(prefix))
|
||||||
|
pokemon_names_list = memoize(lambda: pokemon.names.parse(prefix))
|
||||||
|
|
||||||
|
# move
|
||||||
|
move_constants_list = memoize(lambda: move.constants.parse(prefix))
|
||||||
|
move_moves_list = memoize(lambda: move.moves.parse(prefix))
|
||||||
|
move_names_list = memoize(lambda: move.names.parse(prefix))
|
||||||
|
|
||||||
|
# pic
|
||||||
|
pic_list = memoize(lambda: pic.parse(prefix))
|
||||||
|
11
tools/parse/pokemon/__init__.py
Normal file
11
tools/parse/pokemon/__init__.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from parse.pokemon import constants
|
||||||
|
from parse.pokemon import base_stats
|
||||||
|
from parse.pokemon import evos_moves
|
||||||
|
from parse.pokemon import names
|
||||||
|
from parse.pokemon import dex_entries
|
||||||
|
from parse.pokemon import dex_order
|
||||||
|
from parse.pokemon import dex_text
|
||||||
|
from parse.pokemon import dex_constants
|
||||||
|
# missing:
|
||||||
|
# data/pokemon/palettes.asm
|
||||||
|
# data/pokemon/menu_icons.asm
|
@ -33,7 +33,16 @@ class BaseStats:
|
|||||||
growth_rate: str
|
growth_rate: str
|
||||||
tmhm: list[str]
|
tmhm: list[str]
|
||||||
|
|
||||||
|
def maybe_itemget(line):
|
||||||
|
assert len(line) in {1, 2}
|
||||||
|
if len(line) == 1:
|
||||||
|
return []
|
||||||
|
else:
|
||||||
|
return line[1]
|
||||||
|
|
||||||
|
|
||||||
def parse_base_stat(lines):
|
def parse_base_stat(lines):
|
||||||
|
lines = list(lines)
|
||||||
pokedex_id, \
|
pokedex_id, \
|
||||||
stat_values, \
|
stat_values, \
|
||||||
types, \
|
types, \
|
||||||
@ -43,8 +52,7 @@ def parse_base_stat(lines):
|
|||||||
level_1_learnset, \
|
level_1_learnset, \
|
||||||
growth_rate, \
|
growth_rate, \
|
||||||
tmhm, \
|
tmhm, \
|
||||||
padding = map(itemgetter(1), lines)
|
padding = map(maybe_itemget, lines)
|
||||||
print(stat_values)
|
|
||||||
return BaseStats(
|
return BaseStats(
|
||||||
*pokedex_id,
|
*pokedex_id,
|
||||||
StatValues(*map(number.parse, stat_values)),
|
StatValues(*map(number.parse, stat_values)),
|
||||||
|
4
tools/parse/pokemon/dex_constants.py
Normal file
4
tools/parse/pokemon/dex_constants.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from functools import partial
|
||||||
|
from parse.generic import constants
|
||||||
|
|
||||||
|
parse = partial(constants.parse, path='constants/pokedex_constants.asm')
|
@ -68,8 +68,3 @@ def parse(prefix):
|
|||||||
path = prefix / "data/pokemon/dex_text.asm"
|
path = prefix / "data/pokemon/dex_text.asm"
|
||||||
with open(path) as f:
|
with open(path) as f:
|
||||||
return list(parse_texts(tokenize.lines(f.read().split('\n'))))
|
return list(parse_texts(tokenize.lines(f.read().split('\n'))))
|
||||||
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from pprint import pprint
|
|
||||||
pprint(parse(Path("pokered")))
|
|
||||||
|
15
tools/png_size.py
Normal file
15
tools/png_size.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import sys
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
out_path = sys.argv[1]
|
||||||
|
in_path = sys.argv[2]
|
||||||
|
|
||||||
|
im = Image.open(in_path)
|
||||||
|
width, height = im.size
|
||||||
|
assert width % 8 == 0, width
|
||||||
|
assert width <= 255, width
|
||||||
|
assert height <= 255, height
|
||||||
|
|
||||||
|
with open(out_path, 'w') as f:
|
||||||
|
f.write(f"static constexpr uint8_t width = {width};\n")
|
||||||
|
f.write(f"static constexpr uint8_t height = {height};\n")
|
@ -58,10 +58,11 @@ def debug(buf, bpp):
|
|||||||
|
|
||||||
bpp = int(sys.argv[1])
|
bpp = int(sys.argv[1])
|
||||||
out_path = sys.argv[2]
|
out_path = sys.argv[2]
|
||||||
|
in_paths = sys.argv[3:]
|
||||||
assert len(sys.argv) >= 4, sys.argv
|
assert len(sys.argv) >= 4, sys.argv
|
||||||
|
|
||||||
with open(out_path, 'wb') as f:
|
with open(out_path, 'wb') as f:
|
||||||
for in_path in sys.argv[3:]:
|
for in_path in in_paths:
|
||||||
im = Image.open(in_path)
|
im = Image.open(in_path)
|
||||||
buf = convert(im, bpp)
|
buf = convert(im, bpp)
|
||||||
if 'NBPP_DEBUG' in os.environ:
|
if 'NBPP_DEBUG' in os.environ:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user