feat: improve first-session combat and visual assets
This commit is contained in:
@@ -19,7 +19,8 @@ FRAME = 128
|
||||
MICRO_FRAME = 32
|
||||
SCALE = 4
|
||||
COLS = 5
|
||||
ROWS = 6
|
||||
SEED_ROWS = 6
|
||||
ROWS = 8
|
||||
SOURCE_FRAMES = {
|
||||
4: ("attack", "attack-v2.png"),
|
||||
16: ("hit", "hit-v2.png"),
|
||||
@@ -29,6 +30,16 @@ SOURCE_FRAMES = {
|
||||
27: ("bean", "bean-v2.png"),
|
||||
28: ("salve", "salve-v2.png"),
|
||||
29: ("wine", "wine-v2.png"),
|
||||
30: ("confusion", "confusion-v2.png"),
|
||||
31: ("benevolent-command", "benevolent-command-v2.png"),
|
||||
32: ("azure-dragon-strike", "azure-dragon-strike-v2.png"),
|
||||
33: ("changban-roar", "changban-roar-v2.png"),
|
||||
34: ("single-rider-rescue", "single-rider-rescue-v2.png"),
|
||||
35: ("east-wind-fire", "east-wind-fire-v2.png"),
|
||||
36: ("hundred-pace-pierce", "hundred-pace-pierce-v2.png"),
|
||||
37: ("western-cavalry-charge", "western-cavalry-charge-v2.png"),
|
||||
38: ("qilin-stratagem", "qilin-stratagem-v2.png"),
|
||||
39: ("burn", "burn-v2.png"),
|
||||
}
|
||||
REPLACEMENT_FRAMES: dict[int, tuple[str, Callable[[Image.Image], Image.Image]]] = {
|
||||
10: ("axe", lambda atlas: compose_axe_icon(atlas)),
|
||||
@@ -44,11 +55,12 @@ def main() -> None:
|
||||
raise FileNotFoundError(f"missing seed atlas: {seed_path}")
|
||||
|
||||
seed_atlas = Image.open(seed_path).convert("RGBA")
|
||||
expected_size = (COLS * FRAME, ROWS * FRAME)
|
||||
if seed_atlas.size != expected_size:
|
||||
raise ValueError(f"seed atlas must be {expected_size}, got {seed_atlas.size}: {seed_path}")
|
||||
expected_seed_size = (COLS * FRAME, SEED_ROWS * FRAME)
|
||||
if seed_atlas.size != expected_seed_size:
|
||||
raise ValueError(f"seed atlas must be {expected_seed_size}, got {seed_atlas.size}: {seed_path}")
|
||||
|
||||
atlas = seed_atlas.copy()
|
||||
atlas = Image.new("RGBA", (COLS * FRAME, ROWS * FRAME), (0, 0, 0, 0))
|
||||
atlas.alpha_composite(seed_atlas, (0, 0))
|
||||
|
||||
for index, (name, filename) in SOURCE_FRAMES.items():
|
||||
tile = source_icon(SOURCE_DIR / filename)
|
||||
@@ -149,10 +161,11 @@ def micro_atlas_frame(atlas: Image.Image, index: int) -> Image.Image:
|
||||
def write_contact_sheet(seed_atlas: Image.Image, atlas: Image.Image, micro_atlas: Image.Image) -> None:
|
||||
card_width = 500
|
||||
card_height = 220
|
||||
sheet = Image.new("RGB", (card_width * 4, 40 + card_height * 2), (8, 14, 20))
|
||||
draw = ImageDraw.Draw(sheet)
|
||||
draw.text((14, 13), "Battle UI V2 action/item icons - before, HQ, runtime sizes", fill=(232, 220, 183))
|
||||
labels = list(SOURCE_FRAMES.items())
|
||||
sheet_rows = math.ceil(len(labels) / 4)
|
||||
sheet = Image.new("RGB", (card_width * 4, 40 + card_height * sheet_rows), (8, 14, 20))
|
||||
draw = ImageDraw.Draw(sheet)
|
||||
draw.text((14, 13), "Battle UI V2 action/item/signature/status icons - before, HQ, runtime sizes", fill=(232, 220, 183))
|
||||
runtime_sizes = (14, 20, 30, 34, 52, 70)
|
||||
|
||||
for position, (index, (name, _filename)) in enumerate(labels):
|
||||
|
||||
Reference in New Issue
Block a user