#!/usr/bin/env python3 import json import os import shutil from datetime import datetime """ Script to remove external tileset references from Tiled map This will remove tilesets that reference external .tsx files, keeping only embedded tilesets """ MAP_FILE = "assets/rooms/room_reception2.json" BACKUP_FILE = f"assets/rooms/room_reception2.json.backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}" def main(): """Main function to remove external tileset references""" print("๐Ÿงน Removing External Tileset References") print("=" * 50) if not os.path.exists(MAP_FILE): print(f"โŒ Map file not found: {MAP_FILE}") return # Create backup print(f"๐Ÿ“ Creating backup: {BACKUP_FILE}") shutil.copy2(MAP_FILE, BACKUP_FILE) try: with open(MAP_FILE, 'r') as f: map_data = json.load(f) except Exception as e: print(f"โŒ Error reading map file: {e}") return # Check for external tilesets tilesets = map_data.get('tilesets', []) external_tilesets = [] embedded_tilesets = [] for i, tileset in enumerate(tilesets): if 'source' in tileset: external_tilesets.append((i, tileset)) print(f"โŒ External tileset found: {tileset.get('source', 'unknown')} (firstgid: {tileset.get('firstgid', 'unknown')})") else: embedded_tilesets.append((i, tileset)) print(f"โœ… Embedded tileset: {tileset.get('name', 'unknown')} (firstgid: {tileset.get('firstgid', 'unknown')})") print() if not external_tilesets: print("โœ… No external tileset references found!") print("The map is already clean.") # Remove backup since no changes were made os.remove(BACKUP_FILE) print(f"๐Ÿ—‘๏ธ Removed unnecessary backup: {BACKUP_FILE}") return print(f"๐Ÿšจ Found {len(external_tilesets)} external tileset references") print(f"โœ… Found {len(embedded_tilesets)} embedded tilesets") # Remove external tilesets (in reverse order to maintain indices) removed_count = 0 for i, tileset in reversed(external_tilesets): tileset_name = tileset.get('name', 'unknown') tileset_source = tileset.get('source', 'unknown') firstgid = tileset.get('firstgid', 'unknown') print(f"๐Ÿ—‘๏ธ Removing external tileset: {tileset_name} (source: {tileset_source}, firstgid: {firstgid})") tilesets.pop(i) removed_count += 1 # Update the map data map_data['tilesets'] = tilesets print() print(f"โœ… Successfully removed {removed_count} external tileset references") # Write cleaned map file try: with open(MAP_FILE, 'w') as f: json.dump(map_data, f, indent=2) print(f"๐Ÿ’พ Updated map file: {MAP_FILE}") print(f"๐Ÿ“ Backup created: {BACKUP_FILE}") print() print("๐Ÿ“Š Remaining tilesets:") for tileset in tilesets: name = tileset.get('name', 'unknown') firstgid = tileset.get('firstgid', 'unknown') tilecount = tileset.get('tilecount', 'unknown') print(f" {name}: firstgid={firstgid}, tilecount={tilecount}") print() print("๐ŸŽฏ Next steps:") print("1. Test the game - it should now load without external tileset errors") print("2. If you need the removed tileset, re-embed it in Tiled Editor") print("3. Save the map after making any changes") except Exception as e: print(f"โŒ Error writing cleaned map file: {e}") print(f"๐Ÿ”„ Restoring from backup...") shutil.copy2(BACKUP_FILE, MAP_FILE) return if __name__ == "__main__": main()