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 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 functools import partial
|
||||
from parse import number
|
||||
from parse.generic import macro_line
|
||||
from parse.generic import tokenize
|
||||
from parse.generic import number
|
||||
|
||||
tokenize_lines = partial(macro_line.tokenize_lines, prefix='move ')
|
||||
tokenize_lines = partial(tokenize.lines, prefix='move ')
|
||||
|
||||
@dataclass
|
||||
class Move:
|
||||
name: str
|
||||
constant_name: str
|
||||
effect: str
|
||||
power: int
|
||||
type: str
|
||||
@ -17,14 +17,14 @@ class Move:
|
||||
def flatten(tokens):
|
||||
for t in tokens:
|
||||
assert t[0] == 'move', t
|
||||
_, (name, effect, power, type, accuracy, pp) = t
|
||||
return Move(
|
||||
name,
|
||||
_, (constant_name, effect, power, type, accuracy, pp) = t
|
||||
yield constant_name, Move(
|
||||
constant_name,
|
||||
effect,
|
||||
number(power),
|
||||
number.parse(power),
|
||||
type,
|
||||
number(accuracy),
|
||||
number(pp)
|
||||
number.parse(accuracy),
|
||||
number.parse(pp)
|
||||
)
|
||||
|
||||
def parse(prefix):
|
||||
|
@ -17,9 +17,21 @@ from parse import spritesheet # constants
|
||||
# spritesheets
|
||||
# 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 scripts
|
||||
from parse import pic
|
||||
|
||||
def memoize(f):
|
||||
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_gfx_list = memoize(lambda: tileset.gfx.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
|
||||
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))
|
||||
text_list = memoize(lambda: text.parse_all(prefix))
|
||||
|
||||
# need:
|
||||
#data/tilesets/pair_collision_tile_ids.asm
|
||||
#cut_tree_blocks.asm
|
||||
|
||||
# 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
|
@ -32,8 +32,17 @@ class BaseStats:
|
||||
level_1_learnset: tuple[str, str, str, str]
|
||||
growth_rate: 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):
|
||||
lines = list(lines)
|
||||
pokedex_id, \
|
||||
stat_values, \
|
||||
types, \
|
||||
@ -43,8 +52,7 @@ def parse_base_stat(lines):
|
||||
level_1_learnset, \
|
||||
growth_rate, \
|
||||
tmhm, \
|
||||
padding = map(itemgetter(1), lines)
|
||||
print(stat_values)
|
||||
padding = map(maybe_itemget, lines)
|
||||
return BaseStats(
|
||||
*pokedex_id,
|
||||
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"
|
||||
with open(path) as f:
|
||||
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])
|
||||
out_path = sys.argv[2]
|
||||
in_paths = sys.argv[3:]
|
||||
assert len(sys.argv) >= 4, sys.argv
|
||||
|
||||
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)
|
||||
buf = convert(im, bpp)
|
||||
if 'NBPP_DEBUG' in os.environ:
|
||||
|
Loading…
x
Reference in New Issue
Block a user