Last active
May 3, 2016 15:06
-
-
Save dorkster/21ff4511689822824d9c79ec48a6138b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() | |
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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment