Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # Usage:
- # Run ./update_map_objects.py from base directory containing mods/ and tiled/
- # OR
- # Run ./update_map_objects.py FILENAME to update a single TXT or TMX file
- import os
- import sys
- import xml.etree.ElementTree as etree
- def convertModMap(filename):
- temp_filename = "000_TEMPFILE.txt"
- section = ""
- postponed_line = ""
- src = open(filename, 'r')
- dest =open(temp_filename, 'w')
- for line in src:
- write_line = True
- if line.startswith("["):
- section = line.strip("[]\n\r")
- if (section == "event"):
- if line.startswith("type="):
- write_line = False
- event_type = line.lstrip("type=")
- dest.write("type=event\n")
- postponed_line = "activate=" + event_type
- elif (section == "enemy"):
- if line.startswith("type="):
- write_line = False
- event_type = line.lstrip("type=")
- dest.write("type=enemy\n")
- postponed_line = "category=" + event_type
- elif (section == "npc"):
- if line.startswith("type="):
- write_line = False
- event_type = line.lstrip("type=")
- dest.write("type=npc\n")
- postponed_line = "filename=" + event_type
- if postponed_line != "" and line.startswith("location="):
- write_line = False
- dest.write(line)
- dest.write(postponed_line)
- postponed_line = ""
- if write_line == True:
- dest.write(line)
- os.rename(temp_filename, filename)
- def convertTiledMap(filename):
- tree = etree.parse(filename)
- root = tree.getroot()
- print(filename)
- for obj_group in root.iter("objectgroup"):
- obj_group_name = obj_group.get("name")
- if obj_group_name == "event":
- for obj in obj_group.iter("object"):
- obj_type = obj.get("type")
- if not obj_type:
- continue
- obj.set("type", "event")
- obj_properties = obj.find("properties")
- if not obj_properties:
- obj_properties = etree.SubElement(obj, "properties")
- obj_properties.append(etree.fromstring('<property name="activate" value="' + obj_type + '" />'))
- elif obj_group_name == "enemy":
- for obj in obj_group.iter("object"):
- obj_type = obj.get("type")
- if not obj_type:
- continue
- obj.set("type", "enemy")
- obj_properties = obj.find("properties")
- if not obj_properties:
- obj_properties = etree.SubElement(obj, "properties")
- obj_properties.append(etree.fromstring('<property name="category" value="' + obj_type + '" />'))
- elif obj_group_name == "npc":
- for obj in obj_group.iter("object"):
- obj_type = obj.get("type")
- if not obj_type:
- continue
- obj.set("type", "npc")
- obj_properties = obj.find("properties")
- if not obj_properties:
- obj_properties = etree.SubElement(obj, "properties")
- obj_properties.append(etree.fromstring('<property name="filename" value="' + obj_type + '" />'))
- tree.write(filename)
- def main():
- cmd_filename = ""
- if len(sys.argv) > 1:
- cmd_filename = sys.argv[1]
- if cmd_filename.endswith(".tmx"):
- convertTiledMap(cmd_filename)
- elif cmd_filename.endswith(".txt"):
- convertModMap(cmd_filename)
- elif not cmd_filename:
- # scan mods/ and tiled/ for map files
- for mod_root, mod_dirs, mod_files in os.walk("mods/"):
- if mod_root.endswith("/maps"):
- for i in mod_files:
- convertModMap(mod_root + "/" + i)
- for tiled_root, tiled_dirs, tiled_files in os.walk("tiled/"):
- if not tiled_root.endswith("/rules"):
- for i in tiled_files:
- if i.endswith(".tmx"):
- convertTiledMap(tiled_root + "/" + i)
- else:
- print("Filename specified, but is of invalid extension.")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement