From cbecdc3ac7fb26bc86c8a11d71b74597a85358c3 Mon Sep 17 00:00:00 2001 From: David Kotnik Date: Tue, 13 Jan 2026 14:04:06 +0100 Subject: [PATCH] Generated automatic Tiled tilesets (.tsx) with chroma key #00FF00 configured --- assets/maps/tilesets/CHARS_characters.tsx | 70 + assets/maps/tilesets/CROPS_crops.tsx | 523 ++++++++ assets/maps/tilesets/DEMO_0_DEMO.tsx | 196 +++ assets/maps/tilesets/FAZA1_1_FAZA_1.tsx | 739 ++++++++++ assets/maps/tilesets/FAZA2_2_FAZA_2.tsx | 559 ++++++++ assets/maps/tilesets/SPRITES_sprites.tsx | 1192 +++++++++++++++++ assets/maps/tilesets/SPRITE_BUGS_bugs.tsx | 82 ++ .../tilesets/SPRITE_BUILDINGS_buildings.tsx | 145 ++ .../tilesets/SPRITE_CHARACTERS_characters.tsx | 181 +++ assets/maps/tilesets/SPRITE_CROPS_crops.tsx | 385 ++++++ ..._DIALOGUE_PORTRAITS_dialogue_portraits.tsx | 40 + assets/maps/tilesets/SPRITE_NPCS_npcs.tsx | 46 + .../tilesets/SPRITE_PORTRAITS_portraits.tsx | 34 + assets/maps/tilesets/SPRITE_PROPS_props.tsx | 13 + assets/maps/tilesets/SPRITE_TREES_trees.tsx | 226 ++++ assets/maps/tilesets/SPRITE_UI_ui.tsx | 22 + assets/maps/tilesets/SPRITE_VFX_vfx.tsx | 58 + scripts/generate_tiled_project.py | 127 ++ 18 files changed, 4638 insertions(+) create mode 100644 assets/maps/tilesets/CHARS_characters.tsx create mode 100644 assets/maps/tilesets/CROPS_crops.tsx create mode 100644 assets/maps/tilesets/DEMO_0_DEMO.tsx create mode 100644 assets/maps/tilesets/FAZA1_1_FAZA_1.tsx create mode 100644 assets/maps/tilesets/FAZA2_2_FAZA_2.tsx create mode 100644 assets/maps/tilesets/SPRITES_sprites.tsx create mode 100644 assets/maps/tilesets/SPRITE_BUGS_bugs.tsx create mode 100644 assets/maps/tilesets/SPRITE_BUILDINGS_buildings.tsx create mode 100644 assets/maps/tilesets/SPRITE_CHARACTERS_characters.tsx create mode 100644 assets/maps/tilesets/SPRITE_CROPS_crops.tsx create mode 100644 assets/maps/tilesets/SPRITE_DIALOGUE_PORTRAITS_dialogue_portraits.tsx create mode 100644 assets/maps/tilesets/SPRITE_NPCS_npcs.tsx create mode 100644 assets/maps/tilesets/SPRITE_PORTRAITS_portraits.tsx create mode 100644 assets/maps/tilesets/SPRITE_PROPS_props.tsx create mode 100644 assets/maps/tilesets/SPRITE_TREES_trees.tsx create mode 100644 assets/maps/tilesets/SPRITE_UI_ui.tsx create mode 100644 assets/maps/tilesets/SPRITE_VFX_vfx.tsx create mode 100644 scripts/generate_tiled_project.py diff --git a/assets/maps/tilesets/CHARS_characters.tsx b/assets/maps/tilesets/CHARS_characters.tsx new file mode 100644 index 000000000..1ac230eca --- /dev/null +++ b/assets/maps/tilesets/CHARS_characters.tsx @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/CROPS_crops.tsx b/assets/maps/tilesets/CROPS_crops.tsx new file mode 100644 index 000000000..3cd1b3fe8 --- /dev/null +++ b/assets/maps/tilesets/CROPS_crops.tsx @@ -0,0 +1,523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/DEMO_0_DEMO.tsx b/assets/maps/tilesets/DEMO_0_DEMO.tsx new file mode 100644 index 000000000..d490647b8 --- /dev/null +++ b/assets/maps/tilesets/DEMO_0_DEMO.tsx @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/FAZA1_1_FAZA_1.tsx b/assets/maps/tilesets/FAZA1_1_FAZA_1.tsx new file mode 100644 index 000000000..ea49f9fdb --- /dev/null +++ b/assets/maps/tilesets/FAZA1_1_FAZA_1.tsx @@ -0,0 +1,739 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/FAZA2_2_FAZA_2.tsx b/assets/maps/tilesets/FAZA2_2_FAZA_2.tsx new file mode 100644 index 000000000..a179aae3b --- /dev/null +++ b/assets/maps/tilesets/FAZA2_2_FAZA_2.tsx @@ -0,0 +1,559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITES_sprites.tsx b/assets/maps/tilesets/SPRITES_sprites.tsx new file mode 100644 index 000000000..9ba9382d6 --- /dev/null +++ b/assets/maps/tilesets/SPRITES_sprites.tsx @@ -0,0 +1,1192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_BUGS_bugs.tsx b/assets/maps/tilesets/SPRITE_BUGS_bugs.tsx new file mode 100644 index 000000000..3d8f97ba7 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_BUGS_bugs.tsx @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_BUILDINGS_buildings.tsx b/assets/maps/tilesets/SPRITE_BUILDINGS_buildings.tsx new file mode 100644 index 000000000..ab821143c --- /dev/null +++ b/assets/maps/tilesets/SPRITE_BUILDINGS_buildings.tsx @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_CHARACTERS_characters.tsx b/assets/maps/tilesets/SPRITE_CHARACTERS_characters.tsx new file mode 100644 index 000000000..ab6e3f696 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_CHARACTERS_characters.tsx @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_CROPS_crops.tsx b/assets/maps/tilesets/SPRITE_CROPS_crops.tsx new file mode 100644 index 000000000..4fecb29b1 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_CROPS_crops.tsx @@ -0,0 +1,385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_DIALOGUE_PORTRAITS_dialogue_portraits.tsx b/assets/maps/tilesets/SPRITE_DIALOGUE_PORTRAITS_dialogue_portraits.tsx new file mode 100644 index 000000000..39cff0bdf --- /dev/null +++ b/assets/maps/tilesets/SPRITE_DIALOGUE_PORTRAITS_dialogue_portraits.tsx @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_NPCS_npcs.tsx b/assets/maps/tilesets/SPRITE_NPCS_npcs.tsx new file mode 100644 index 000000000..678b957f6 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_NPCS_npcs.tsx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_PORTRAITS_portraits.tsx b/assets/maps/tilesets/SPRITE_PORTRAITS_portraits.tsx new file mode 100644 index 000000000..0b42b18c7 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_PORTRAITS_portraits.tsx @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_PROPS_props.tsx b/assets/maps/tilesets/SPRITE_PROPS_props.tsx new file mode 100644 index 000000000..8d95152f4 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_PROPS_props.tsx @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_TREES_trees.tsx b/assets/maps/tilesets/SPRITE_TREES_trees.tsx new file mode 100644 index 000000000..b9b74af97 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_TREES_trees.tsx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_UI_ui.tsx b/assets/maps/tilesets/SPRITE_UI_ui.tsx new file mode 100644 index 000000000..abf058838 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_UI_ui.tsx @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/maps/tilesets/SPRITE_VFX_vfx.tsx b/assets/maps/tilesets/SPRITE_VFX_vfx.tsx new file mode 100644 index 000000000..c157c7888 --- /dev/null +++ b/assets/maps/tilesets/SPRITE_VFX_vfx.tsx @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/generate_tiled_project.py b/scripts/generate_tiled_project.py new file mode 100644 index 000000000..1a3b8a56f --- /dev/null +++ b/scripts/generate_tiled_project.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +""" +🧱 GENERATE TILED TILESETS (TSX) +Creates .tsx files for all green-screened assets with transparency configured. +""" + +import os +from pathlib import Path +import glob + +# Constants +ASSET_ROOT = "assets" +TILESET_OUTPUT_DIR = "assets/maps/tilesets" +TRANSPARENT_COLOR = "00ff00" # Green Screen Color + +# XML Templates +TSX_HEADER = """ + + +""" + +TILE_TEMPLATE = """ + + +""" + +TSX_FOOTER = """ +""" + +def get_image_size(path): + # Try to get image dimensions without PIL to avoid dependency if possible, + # but since we already used PIL for green screen, we can use it here. + try: + from PIL import Image + with Image.open(path) as img: + return img.width, img.height + except Exception: + return 32, 32 # Default fallback + +def generate_tileset(directory, name_prefix): + """Generates a Collection of Images tileset for a directory""" + + # Find all PNGs + png_files = sorted(list(Path(directory).rglob("*.png"))) + if not png_files: + return False + + tileset_name = f"{name_prefix}_{os.path.basename(directory)}" + tsx_content = TSX_HEADER.format( + name=tileset_name, + width=32, # Default (doesn't matter much for collection of images) + height=32, + count=len(png_files) + ) + + print(f"📦 Generating tileset: {tileset_name}.tsx ({len(png_files)} images)") + + for i, img_path in enumerate(png_files): + # Calculate relative path from tileset location to image + # Tiled needs relative paths + abs_img = img_path.resolve() + abs_tileset_dir = Path(TILESET_OUTPUT_DIR).resolve() + + try: + rel_path = os.path.relpath(abs_img, abs_tileset_dir) + except ValueError: + # Fallback if on different drives (unlikely here) + rel_path = str(abs_img) + + width, height = get_image_size(abs_img) + + tsx_content += TILE_TEMPLATE.format( + id=i, + width=width, + height=height, + source=rel_path, + trans=TRANSPARENT_COLOR # THIS IS THE MAGIC PART! + ) + + tsx_content += TSX_FOOTER + + # Save TSX + output_path = os.path.join(TILESET_OUTPUT_DIR, f"{tileset_name}.tsx") + with open(output_path, "w") as f: + f.write(tsx_content) + + return True + +def main(): + print("🧱 TILED TILESET GENERATOR") + print("=" * 50) + print(f"Target Transparency: #{TRANSPARENT_COLOR}") + print(f"Output Directory: {TILESET_OUTPUT_DIR}\n") + + os.makedirs(TILESET_OUTPUT_DIR, exist_ok=True) + + directories_to_process = [ + ("assets/PHASE_PACKS/0_DEMO", "DEMO"), + ("assets/PHASE_PACKS/1_FAZA_1", "FAZA1"), + ("assets/PHASE_PACKS/2_FAZA_2", "FAZA2"), + ("assets/sprites", "SPRITES"), + ("assets/crops", "CROPS"), + ("assets/characters", "CHARS") + ] + + total_generated = 0 + + for dir_path, prefix in directories_to_process: + if os.path.exists(dir_path): + # Process main directory + if generate_tileset(dir_path, prefix): + total_generated += 1 + + # Optionally process subdirectories as separate tilesets if needed + # For now, we put everything in one big tileset per main folder to be safe + # But "sprites" is huge, let's split sprites by immediate subdirectory + if "sprites" in dir_path: + for subdir in Path(dir_path).iterdir(): + if subdir.is_dir(): + generate_tileset(subdir, f"SPRITE_{subdir.name.upper()}") + + print("\n" + "=" * 50) + print(f"✅ Generated {total_generated} main tilesets + sub-tilesets.") + print("👉 Import these .tsx files into Tiled map to see automatic transparency!") + +if __name__ == '__main__': + main()