Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. # Usage:
  4. # Run ./update_map_objects.py from base directory containing mods/ and tiled/
  5. # OR
  6. # Run ./update_map_objects.py FILENAME to update a single TXT or TMX file
  7.  
  8. import os
  9. import sys
  10. import xml.etree.ElementTree as etree
  11.  
  12. def convertModMap(filename):
  13. temp_filename = "000_TEMPFILE.txt"
  14. section = ""
  15. postponed_line = ""
  16.  
  17. src = open(filename, 'r')
  18. dest =open(temp_filename, 'w')
  19.  
  20. for line in src:
  21. write_line = True
  22.  
  23. if line.startswith("["):
  24. section = line.strip("[]\n\r")
  25.  
  26. if (section == "event"):
  27. if line.startswith("type="):
  28. write_line = False
  29. event_type = line.lstrip("type=")
  30. dest.write("type=event\n")
  31. postponed_line = "activate=" + event_type
  32. elif (section == "enemy"):
  33. if line.startswith("type="):
  34. write_line = False
  35. event_type = line.lstrip("type=")
  36. dest.write("type=enemy\n")
  37. postponed_line = "category=" + event_type
  38. elif (section == "npc"):
  39. if line.startswith("type="):
  40. write_line = False
  41. event_type = line.lstrip("type=")
  42. dest.write("type=npc\n")
  43. postponed_line = "filename=" + event_type
  44.  
  45. if postponed_line != "" and line.startswith("location="):
  46. write_line = False
  47. dest.write(line)
  48. dest.write(postponed_line)
  49. postponed_line = ""
  50.  
  51. if write_line == True:
  52. dest.write(line)
  53.  
  54. os.rename(temp_filename, filename)
  55.  
  56. def convertTiledMap(filename):
  57. tree = etree.parse(filename)
  58. root = tree.getroot()
  59.  
  60. print(filename)
  61.  
  62. for obj_group in root.iter("objectgroup"):
  63. obj_group_name = obj_group.get("name")
  64.  
  65. if obj_group_name == "event":
  66. for obj in obj_group.iter("object"):
  67. obj_type = obj.get("type")
  68. if not obj_type:
  69. continue
  70.  
  71. obj.set("type", "event")
  72.  
  73. obj_properties = obj.find("properties")
  74. if not obj_properties:
  75. obj_properties = etree.SubElement(obj, "properties")
  76.  
  77. obj_properties.append(etree.fromstring('<property name="activate" value="' + obj_type + '" />'))
  78.  
  79. elif obj_group_name == "enemy":
  80. for obj in obj_group.iter("object"):
  81. obj_type = obj.get("type")
  82. if not obj_type:
  83. continue
  84.  
  85. obj.set("type", "enemy")
  86.  
  87. obj_properties = obj.find("properties")
  88. if not obj_properties:
  89. obj_properties = etree.SubElement(obj, "properties")
  90.  
  91. obj_properties.append(etree.fromstring('<property name="category" value="' + obj_type + '" />'))
  92.  
  93. elif obj_group_name == "npc":
  94. for obj in obj_group.iter("object"):
  95. obj_type = obj.get("type")
  96. if not obj_type:
  97. continue
  98.  
  99. obj.set("type", "npc")
  100.  
  101. obj_properties = obj.find("properties")
  102. if not obj_properties:
  103. obj_properties = etree.SubElement(obj, "properties")
  104.  
  105. obj_properties.append(etree.fromstring('<property name="filename" value="' + obj_type + '" />'))
  106.  
  107. tree.write(filename)
  108.  
  109. def main():
  110. cmd_filename = ""
  111.  
  112. if len(sys.argv) > 1:
  113. cmd_filename = sys.argv[1]
  114.  
  115. if cmd_filename.endswith(".tmx"):
  116. convertTiledMap(cmd_filename)
  117. elif cmd_filename.endswith(".txt"):
  118. convertModMap(cmd_filename)
  119. elif not cmd_filename:
  120. # scan mods/ and tiled/ for map files
  121. for mod_root, mod_dirs, mod_files in os.walk("mods/"):
  122. if mod_root.endswith("/maps"):
  123. for i in mod_files:
  124. convertModMap(mod_root + "/" + i)
  125.  
  126. for tiled_root, tiled_dirs, tiled_files in os.walk("tiled/"):
  127. if not tiled_root.endswith("/rules"):
  128. for i in tiled_files:
  129. if i.endswith(".tmx"):
  130. convertTiledMap(tiled_root + "/" + i)
  131. else:
  132. print("Filename specified, but is of invalid extension.")
  133.  
  134. if __name__ == "__main__":
  135. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement