gmdkit 0.7.0__tar.gz → 0.7.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. {gmdkit-0.7.0 → gmdkit-0.7.1}/PKG-INFO +9 -25
  2. {gmdkit-0.7.0 → gmdkit-0.7.1}/README.md +8 -24
  3. gmdkit-0.7.1/scripts/compile_defaults.py +45 -0
  4. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/grab_official_levels.py +5 -9
  5. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/__init__.py +0 -2
  6. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/level_loader.py +225 -1
  7. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/globed.py +10 -7
  8. gmdkit-0.7.1/src/gmdkit/functions/color.py +113 -0
  9. gmdkit-0.7.1/src/gmdkit/functions/merging.py +193 -0
  10. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/misc.py +8 -13
  11. gmdkit-0.7.1/src/gmdkit/functions/object.py +120 -0
  12. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/object_list.py +182 -224
  13. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/spawn_tracking.py +10 -10
  14. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/__init__.py +2 -0
  15. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/audio.py +2 -2
  16. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/base.py +77 -0
  17. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/collectibles.py +2 -2
  18. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/enter.py +1 -1
  19. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/shaders.py +25 -18
  20. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/visual.py +50 -2
  21. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/level.py +0 -37
  22. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/color.py +5 -2
  23. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/plist.py +0 -2
  24. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/template.py +96 -127
  25. gmdkit-0.7.1/src/gmdkit/remapping/base.py +674 -0
  26. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/classes.py +141 -97
  27. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/functions.py +5 -5
  28. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/rules.py +15 -11
  29. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/utils.py +6 -5
  30. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/classes.py +32 -67
  31. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/functions.py +31 -0
  32. gmdkit-0.7.1/src/gmdkit/templates/generators/id_remapper.py +139 -0
  33. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/enums.py +268 -25
  34. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/types.py +15 -17
  35. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/PKG-INFO +9 -25
  36. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/SOURCES.txt +1 -123
  37. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/scm_file_list.json +1 -123
  38. gmdkit-0.7.1/src/gmdkit.egg-info/scm_version.json +8 -0
  39. gmdkit-0.7.1/tests/interface_test.py +6 -0
  40. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/test_round_trip.py +16 -15
  41. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/utils.py +19 -15
  42. gmdkit-0.7.0/scripts/build_scripts/build_id_rules.py +0 -162
  43. gmdkit-0.7.0/scripts/build_scripts/build_obj_props.py +0 -482
  44. gmdkit-0.7.0/scripts/compile_defaults.py +0 -50
  45. gmdkit-0.7.0/src/gmdkit/functions/color.py +0 -221
  46. gmdkit-0.7.0/src/gmdkit/functions/level.py +0 -139
  47. gmdkit-0.7.0/src/gmdkit/functions/merging.py +0 -239
  48. gmdkit-0.7.0/src/gmdkit/functions/object.py +0 -370
  49. gmdkit-0.7.0/src/gmdkit/mappings/__init__.py +0 -13
  50. gmdkit-0.7.0/src/gmdkit/mappings/color_id/__init__.py +0 -15
  51. gmdkit-0.7.0/src/gmdkit/mappings/color_id_set.py +0 -21
  52. gmdkit-0.7.0/src/gmdkit/mappings/list_prop/__init__.py +0 -28
  53. gmdkit-0.7.0/src/gmdkit/mappings/lvl_prop/__init__.py +0 -98
  54. gmdkit-0.7.0/src/gmdkit/mappings/lvl_prop/editor/__init__.py +0 -7
  55. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/__init__.py +0 -11
  56. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/collectible/__init__.py +0 -4
  57. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/modifier/__init__.py +0 -5
  58. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/orb/__init__.py +0 -11
  59. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/pad/__init__.py +0 -5
  60. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/portal/__init__.py +0 -18
  61. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/portal/teleport/__init__.py +0 -3
  62. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/speed/__init__.py +0 -5
  63. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/__init__.py +0 -96
  64. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/enter/__init__.py +0 -6
  65. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/enter_preset/__init__.py +0 -13
  66. gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/shader/__init__.py +0 -18
  67. gmdkit-0.7.0/src/gmdkit/mappings/obj_id_alias.py +0 -186
  68. gmdkit-0.7.0/src/gmdkit/mappings/obj_id_set.py +0 -375
  69. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/__init__.py +0 -63
  70. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/animated/__init__.py +0 -9
  71. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/animated/explosion/__init__.py +0 -1
  72. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/item_label/__init__.py +0 -6
  73. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/__init__.py +0 -46
  74. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/__init__.py +0 -5
  75. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/background/__init__.py +0 -4
  76. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/ground/__init__.py +0 -4
  77. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/line/__init__.py +0 -4
  78. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/object/__init__.py +0 -4
  79. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/object_2/__init__.py +0 -4
  80. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_9/__init__.py +0 -9
  81. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/particle/__init__.py +0 -4
  82. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/saw/__init__.py +0 -2
  83. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/start_pos/__init__.py +0 -27
  84. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/template/__init__.py +0 -1
  85. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/text/__init__.py +0 -2
  86. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/timewarp/__init__.py +0 -1
  87. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/__init__.py +0 -92
  88. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/adv_follow/__init__.py +0 -68
  89. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/adv_random/__init__.py +0 -2
  90. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/alpha/__init__.py +0 -3
  91. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/animate/__init__.py +0 -2
  92. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/animate_keyframe/__init__.py +0 -9
  93. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/arrow/__init__.py +0 -11
  94. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/bg_speed/__init__.py +0 -2
  95. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/bpm/__init__.py +0 -5
  96. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_edge/__init__.py +0 -2
  97. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_guide/__init__.py +0 -4
  98. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_mode/__init__.py +0 -4
  99. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_bg/__init__.py +0 -1
  100. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_gr/__init__.py +0 -1
  101. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_mg/__init__.py +0 -1
  102. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/checkpoint/__init__.py +0 -4
  103. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collectible/__init__.py +0 -9
  104. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collectible/coin/__init__.py +0 -1
  105. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collision/__init__.py +0 -9
  106. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collision_block/__init__.py +0 -2
  107. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/color/__init__.py +0 -14
  108. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/count/__init__.py +0 -5
  109. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/dash/__init__.py +0 -5
  110. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/edit_adv_follow/__init__.py +0 -74
  111. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/effect/__init__.py +0 -57
  112. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/end/__init__.py +0 -5
  113. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/end_wall/__init__.py +0 -3
  114. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/enter_preset/__init__.py +0 -2
  115. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/event/__init__.py +0 -5
  116. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/follow/__init__.py +0 -5
  117. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/follow_player_y/__init__.py +0 -6
  118. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/force_block/__init__.py +0 -6
  119. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gamemode_portal/__init__.py +0 -4
  120. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gameplay_offset/__init__.py +0 -4
  121. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gradient/__init__.py +0 -15
  122. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gravity/__init__.py +0 -4
  123. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/instant_collision/__init__.py +0 -8
  124. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/instant_count/__init__.py +0 -5
  125. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_compare/__init__.py +0 -16
  126. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_edit/__init__.py +0 -14
  127. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_persist/__init__.py +0 -5
  128. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/keyframe/__init__.py +0 -18
  129. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/link_visible/__init__.py +0 -1
  130. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/mg_edit/__init__.py +0 -4
  131. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/mg_speed/__init__.py +0 -2
  132. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/move/__init__.py +0 -27
  133. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/object_control/__init__.py +0 -1
  134. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/offset_camera/__init__.py +0 -5
  135. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/offset_gameplay/__init__.py +0 -1
  136. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/on_death/__init__.py +0 -2
  137. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/options/__init__.py +0 -14
  138. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/orb_saw/__init__.py +0 -2
  139. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/pickup/__init__.py +0 -5
  140. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/player_control/__init__.py +0 -9
  141. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/pulse/__init__.py +0 -15
  142. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/random/__init__.py +0 -3
  143. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/reset/__init__.py +0 -1
  144. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/rotate/__init__.py +0 -20
  145. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/rotate_camera/__init__.py +0 -6
  146. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/scale/__init__.py +0 -12
  147. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/sequence/__init__.py +0 -6
  148. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/sfx/__init__.py +0 -44
  149. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/shader/__init__.py +0 -156
  150. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/shake/__init__.py +0 -3
  151. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/song/__init__.py +0 -47
  152. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/spawn/__init__.py +0 -7
  153. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/spawn_particle/__init__.py +0 -11
  154. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/state_block/__init__.py +0 -2
  155. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/static_camera/__init__.py +0 -11
  156. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/stop/__init__.py +0 -3
  157. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/__init__.py +0 -18
  158. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/exit_portal/__init__.py +0 -1
  159. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/portal/__init__.py +0 -1
  160. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time/__init__.py +0 -9
  161. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time_control/__init__.py +0 -2
  162. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time_event/__init__.py +0 -4
  163. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/toggle/__init__.py +0 -2
  164. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/toggle_block/__init__.py +0 -4
  165. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/touch/__init__.py +0 -5
  166. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/ui/__init__.py +0 -6
  167. gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/zoom_camera/__init__.py +0 -4
  168. gmdkit-0.7.0/src/gmdkit/remapping/base.py +0 -1220
  169. gmdkit-0.7.0/src/gmdkit/templates/generators/id_remapper.py +0 -153
  170. gmdkit-0.7.0/src/gmdkit.egg-info/scm_version.json +0 -8
  171. gmdkit-0.7.0/tests/temp_ai_tests.py +0 -448
  172. {gmdkit-0.7.0 → gmdkit-0.7.1}/.gitattributes +0 -0
  173. {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/pypi.yml +0 -0
  174. {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/pytest.yml +0 -0
  175. {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/sheets.yml +0 -0
  176. {gmdkit-0.7.0 → gmdkit-0.7.1}/.gitignore +0 -0
  177. {gmdkit-0.7.0 → gmdkit-0.7.1}/LICENSE +0 -0
  178. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/class_table.csv +0 -0
  179. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/hitbox_table.csv +0 -0
  180. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/level_table.csv +0 -0
  181. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/list_table.csv +0 -0
  182. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/member_table.csv +0 -0
  183. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/obj_default_color_table.csv +0 -0
  184. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/object_table.csv +0 -0
  185. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/prop_table.csv +0 -0
  186. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/remap_table.csv +0 -0
  187. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/main/CCGameManager.dat +0 -0
  188. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/meltdown/CCGameManager.dat +0 -0
  189. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/subzero/CCGameManager.dat +0 -0
  190. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Airborne Robots.gmd +0 -0
  191. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Back On Track.gmd +0 -0
  192. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Base After Base.gmd +0 -0
  193. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Blast Processing.gmd +0 -0
  194. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Cant Let Go.gmd +0 -0
  195. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Clubstep.gmd +0 -0
  196. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Clutterfunk.gmd +0 -0
  197. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Cycles.gmd +0 -0
  198. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Dash.gmd +0 -0
  199. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Deadlocked.gmd +0 -0
  200. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Dry Out.gmd +0 -0
  201. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Electrodynamix.gmd +0 -0
  202. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Electroman Adventures.gmd +0 -0
  203. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Fingerdash.gmd +0 -0
  204. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Geometrical Dominator.gmd +0 -0
  205. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Hexagon Force.gmd +0 -0
  206. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Jumper.gmd +0 -0
  207. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Nock Em.gmd +0 -0
  208. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Polargeist.gmd +0 -0
  209. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Power Trip.gmd +0 -0
  210. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Press Start.gmd +0 -0
  211. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Stereo Madness.gmd +0 -0
  212. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Cellar.gmd +0 -0
  213. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Challenge.gmd +0 -0
  214. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Secret Hollow.gmd +0 -0
  215. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Seven Seas.gmd +0 -0
  216. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Sewers.gmd +0 -0
  217. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Tower.gmd +0 -0
  218. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Theory of Everything 2.gmd +0 -0
  219. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Theory of Everything.gmd +0 -0
  220. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Time Machine.gmd +0 -0
  221. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Viking Arena.gmd +0 -0
  222. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/xStep.gmd +0 -0
  223. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/offline/example_level.gmd +0 -0
  224. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/ORBIT.gmd +0 -0
  225. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/Skeletal Shenanigans.gmd +0 -0
  226. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/test.gmd +0 -0
  227. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Difficulty Soup.gmdl +0 -0
  228. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Easiest Demon Main List.gmdl +0 -0
  229. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Elijo Creer.gmdl +0 -0
  230. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Probably The Worst List.gmdl +0 -0
  231. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Bouncy.gmdt +0 -0
  232. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Grass.gmdt +0 -0
  233. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Sticky.gmdt +0 -0
  234. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Nodes.gmdt +0 -0
  235. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/animated_obj.json +0 -0
  236. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/obj_ids.json +0 -0
  237. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/tabs.json +0 -0
  238. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/default.txt +0 -0
  239. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/0.txt +0 -0
  240. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/1.txt +0 -0
  241. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/10.txt +0 -0
  242. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/11.txt +0 -0
  243. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/12.txt +0 -0
  244. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/13.txt +0 -0
  245. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/14.txt +0 -0
  246. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/15.txt +0 -0
  247. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/16.txt +0 -0
  248. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/17.txt +0 -0
  249. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/18.txt +0 -0
  250. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/19.txt +0 -0
  251. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/2.txt +0 -0
  252. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/20.txt +0 -0
  253. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/23.txt +0 -0
  254. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/3.txt +0 -0
  255. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/4.txt +0 -0
  256. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/5.txt +0 -0
  257. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/6.txt +0 -0
  258. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/7.txt +0 -0
  259. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/8.txt +0 -0
  260. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/9.txt +0 -0
  261. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/1.txt +0 -0
  262. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/10.txt +0 -0
  263. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/11.txt +0 -0
  264. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/12.txt +0 -0
  265. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/13.txt +0 -0
  266. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/14.txt +0 -0
  267. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/15.txt +0 -0
  268. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/16.txt +0 -0
  269. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/17.txt +0 -0
  270. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/18.txt +0 -0
  271. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/19.txt +0 -0
  272. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/2.txt +0 -0
  273. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/20.txt +0 -0
  274. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/21.txt +0 -0
  275. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/22.txt +0 -0
  276. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/3.txt +0 -0
  277. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/3001.txt +0 -0
  278. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/4.txt +0 -0
  279. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5.txt +0 -0
  280. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5001.txt +0 -0
  281. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5002.txt +0 -0
  282. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5003.txt +0 -0
  283. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5004.txt +0 -0
  284. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/6.txt +0 -0
  285. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/7.txt +0 -0
  286. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/8.txt +0 -0
  287. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/9.txt +0 -0
  288. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1001.txt +0 -0
  289. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1002.txt +0 -0
  290. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1003.txt +0 -0
  291. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4001.txt +0 -0
  292. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4002.txt +0 -0
  293. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4003.txt +0 -0
  294. {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/triggers/start_pos_delayer.txt +0 -0
  295. {gmdkit-0.7.0 → gmdkit-0.7.1}/examples/load_test.py +0 -0
  296. {gmdkit-0.7.0 → gmdkit-0.7.1}/pyproject.toml +0 -0
  297. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/__init__.py +0 -0
  298. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_files.py +0 -0
  299. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/__init__.py +0 -0
  300. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/build_obj_ids.py +0 -0
  301. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/casting_id_rules.txt +0 -0
  302. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/casting_obj_props.txt +0 -0
  303. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/object_fields.txt +0 -0
  304. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/utils.py +0 -0
  305. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/compile_colors.py +0 -0
  306. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/__init__.py +0 -0
  307. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/evaluate_obj_keys.py +0 -0
  308. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/generate_key_test.py +0 -0
  309. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/obj_sets.py +0 -0
  310. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/search_level_keys.py +0 -0
  311. {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/download_sheets.py +0 -0
  312. {gmdkit-0.7.0 → gmdkit-0.7.1}/setup.cfg +0 -0
  313. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/__init__.py +0 -0
  314. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/game_save_loader.py +0 -0
  315. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/level_save_loader.py +0 -0
  316. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/list_loader.py +0 -0
  317. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/object_loader.py +0 -0
  318. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/__init__.py +0 -0
  319. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/__init__.py +0 -0
  320. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/guideline/__init__.py +0 -0
  321. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/speed/__init__.py +0 -0
  322. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/paths/__init__.py +0 -0
  323. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/paths/save/__init__.py +0 -0
  324. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/__init__.py +0 -0
  325. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/color_default.py +0 -0
  326. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/color_ids.py +0 -0
  327. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/level.py +0 -0
  328. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/objects.py +0 -0
  329. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/__init__.py +0 -0
  330. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/live_editor.py +0 -0
  331. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/text.py +0 -0
  332. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/__init__.py +0 -0
  333. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/guideline.py +0 -0
  334. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/__init__.py +0 -0
  335. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/animated.py +0 -0
  336. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/area.py +0 -0
  337. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/camera.py +0 -0
  338. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/collisions.py +0 -0
  339. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/follows.py +0 -0
  340. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/gameplay.py +0 -0
  341. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/items.py +0 -0
  342. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/misc.py +0 -0
  343. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/player.py +0 -0
  344. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/teleport.py +0 -0
  345. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/transforms.py +0 -0
  346. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/level_pack.py +0 -0
  347. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/object.py +0 -0
  348. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/__init__.py +0 -0
  349. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/checkpoint.py +0 -0
  350. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/dpad.py +0 -0
  351. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/events.py +0 -0
  352. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/groups.py +0 -0
  353. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/guideline.py +0 -0
  354. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/gzip.py +0 -0
  355. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/hsv.py +0 -0
  356. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/likes.py +0 -0
  357. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/list.py +0 -0
  358. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/particle.py +0 -0
  359. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/persistent.py +0 -0
  360. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/pos_list.py +0 -0
  361. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/random.py +0 -0
  362. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/remaps.py +0 -0
  363. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/replay.py +0 -0
  364. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/sequence.py +0 -0
  365. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/song_info.py +0 -0
  366. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/timer.py +0 -0
  367. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/__init__.py +0 -0
  368. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/game_manager.py +0 -0
  369. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/level_manager.py +0 -0
  370. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/music_library.py +0 -0
  371. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/sfx_library.py +0 -0
  372. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/__init__.py +0 -0
  373. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/base_func.py +0 -0
  374. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/types.py +0 -0
  375. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/__init__.py +0 -0
  376. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/mixins.py +0 -0
  377. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/type_cast.py +0 -0
  378. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/templates/__init__.py +0 -0
  379. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/templates/generators/__init__.py +0 -0
  380. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/__init__.py +0 -0
  381. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/classes.py +0 -0
  382. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/functions.py +0 -0
  383. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/typing.py +0 -0
  384. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/dependency_links.txt +0 -0
  385. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/requires.txt +0 -0
  386. {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/top_level.txt +0 -0
  387. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/__init__.py +0 -0
  388. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/id_load_test.py +0 -0
  389. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/object_test.py +0 -0
  390. {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/time_orbit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gmdkit
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: A toolkit for handling Geometry Dash level data.
5
5
  Author: HDanke
6
6
  License: MIT
@@ -70,11 +70,8 @@ from gmdkit import Level
70
70
  # import object
71
71
  from gmdkit import Object
72
72
 
73
- # import property mappings
74
- from gmdkit.mappings import obj_prop
75
-
76
- # import object functions
77
- import gmdkit.functions.object as obj_func
73
+ # import interfaces
74
+ from gmdkit.models import interfaces
78
75
 
79
76
  # open file
80
77
  level = Level.from_file("example.gmd")
@@ -84,31 +81,18 @@ start = level.start
84
81
 
85
82
  # get level objects as an ObjectList()
86
83
  # object lists subclass list() so they can use all list methods alongside the ones defined by ListClass
87
- # level.objects WILL throw an error if the level lacks an object string,
88
- # or if you passed load = False to Level.from_file(), which skips loading objects
89
- # LevelSave by default does not load the objects of levels
90
- # so for any level you want to edit the objects of you must call level.load() first
91
84
  obj_list = level.objects
92
85
 
93
86
  # filter by condition
94
- after_origin = obj_list.where(lambda obj: obj.get(obj_prop.X, 0) > 0)
95
-
96
- # apply functions, kwargs are filtered for each called function
97
- # ex: obj_func.fix_lighter has 'replacement' as a key argument
98
- after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
87
+ after_origin = obj_list.where(lambda obj: obj.interface.x > 0)
99
88
 
100
89
  # create new object
101
90
  new_obj = Object.default(1)
102
- # set properties of object
103
- # objects subclass dict() so they can use all dict methods alongside the ones defined by DictClass
104
- new_obj.update(
105
- {
106
- obj_prop.X: 100,
107
- obj_prop.Y: 200,
108
- obj_prop.SCALE_X: 2,
109
- obj_prop.SCALE_Y: 2
110
- }
111
- )
91
+ # set properties of object using the typed interface
92
+ intf = new_obj.require_interface(interfaces.BaseObject)
93
+ intf.x = 100
94
+ intf.y = 200
95
+ intf.scale = 2
112
96
 
113
97
  # append object to the level's object list
114
98
  # can also be done directly to level.objects or level['k4'].objects (which level.objects references)
@@ -47,11 +47,8 @@ from gmdkit import Level
47
47
  # import object
48
48
  from gmdkit import Object
49
49
 
50
- # import property mappings
51
- from gmdkit.mappings import obj_prop
52
-
53
- # import object functions
54
- import gmdkit.functions.object as obj_func
50
+ # import interfaces
51
+ from gmdkit.models import interfaces
55
52
 
56
53
  # open file
57
54
  level = Level.from_file("example.gmd")
@@ -61,31 +58,18 @@ start = level.start
61
58
 
62
59
  # get level objects as an ObjectList()
63
60
  # object lists subclass list() so they can use all list methods alongside the ones defined by ListClass
64
- # level.objects WILL throw an error if the level lacks an object string,
65
- # or if you passed load = False to Level.from_file(), which skips loading objects
66
- # LevelSave by default does not load the objects of levels
67
- # so for any level you want to edit the objects of you must call level.load() first
68
61
  obj_list = level.objects
69
62
 
70
63
  # filter by condition
71
- after_origin = obj_list.where(lambda obj: obj.get(obj_prop.X, 0) > 0)
72
-
73
- # apply functions, kwargs are filtered for each called function
74
- # ex: obj_func.fix_lighter has 'replacement' as a key argument
75
- after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
64
+ after_origin = obj_list.where(lambda obj: obj.interface.x > 0)
76
65
 
77
66
  # create new object
78
67
  new_obj = Object.default(1)
79
- # set properties of object
80
- # objects subclass dict() so they can use all dict methods alongside the ones defined by DictClass
81
- new_obj.update(
82
- {
83
- obj_prop.X: 100,
84
- obj_prop.Y: 200,
85
- obj_prop.SCALE_X: 2,
86
- obj_prop.SCALE_Y: 2
87
- }
88
- )
68
+ # set properties of object using the typed interface
69
+ intf = new_obj.require_interface(interfaces.BaseObject)
70
+ intf.x = 100
71
+ intf.y = 200
72
+ intf.scale = 2
89
73
 
90
74
  # append object to the level's object list
91
75
  # can also be done directly to level.objects or level['k4'].objects (which level.objects references)
@@ -0,0 +1,45 @@
1
+ from gmdkit import Object, ObjectList
2
+ from gmdkit.models import interfaces
3
+
4
+ pool = ObjectList.from_file("data/txt/default.txt")
5
+
6
+
7
+ def clean_obj(obj:Object):
8
+ intf = obj.require_interface(interfaces.BaseObject)
9
+ del intf.color_1_index
10
+ del intf.color_2_index
11
+ intf.x = 0
12
+ intf.y = 0
13
+
14
+ intf = obj.require_interface(interfaces.ParticleObject,None)
15
+ if intf:
16
+ intf.data = "30a-1a1a0.3a30a90a90a29a0a11a0a0a0a0a0a0a0a2a1a0a0a1a0a1a0a1a0a1a0a1a1a0a0a1a0a1a0a1a0a1a0a0a0a0a0a0a0a0a0a0a0a0a2a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0"
17
+
18
+
19
+ pool.apply(clean_obj)
20
+
21
+
22
+ default = dict()
23
+
24
+ for obj in pool:
25
+ intf = obj.require_interface(interfaces.BaseObject)
26
+ object_id = intf.obj_id
27
+ default.setdefault(object_id, dict())
28
+ default[object_id].update(obj)
29
+
30
+
31
+ lines = list()
32
+
33
+ for key, value in default.items():
34
+ lines.append(f" {repr(key)}: {repr(value)}")
35
+
36
+
37
+ with open("../src/gmdkit/defaults/objects.py","w") as file:
38
+
39
+ file.write("Default = {\n")
40
+
41
+ file.write(',\n'.join(lines))
42
+
43
+ file.write('\n')
44
+
45
+ file.write(' }')
@@ -2,8 +2,7 @@
2
2
  from pathlib import Path
3
3
 
4
4
  # Package Imports
5
- from gmdkit import GameSave, ObjectString
6
- from gmdkit.mappings import lvl_prop
5
+ from gmdkit import Level, GameSave, ObjectString
7
6
  from gmdkit.functions.object import to_user_coins
8
7
 
9
8
  save_path = Path("data/dat/")
@@ -30,16 +29,13 @@ for folder in common:
30
29
  print(f"Processing level with ID {data['k1']}...")
31
30
 
32
31
  try:
33
-
34
- data[lvl_prop.OBJECT_STRING] = ObjectString.from_file(level_file,encoding="latin-1")
35
-
32
+ data: Level
33
+ data.object_string = ObjectString.from_file(level_file,encoding="latin-1")
36
34
  data.objects.apply(to_user_coins)
37
-
38
- data[lvl_prop.TYPE] = 2
39
-
35
+ data.level_type = 2
40
36
  data.to_file(output_path)
41
37
  except FileNotFoundError:
42
38
  print("No object string file found, skipping.")
43
39
  continue
44
40
 
45
- print(f"Saved {data[lvl_prop.NAME]}.gmd")
41
+ print(f"Saved {data.name}.gmd")
@@ -2,7 +2,6 @@ __all__ = [
2
2
  "constants",
3
3
  "extensions",
4
4
  "functions",
5
- "mappings",
6
5
  "models",
7
6
  "remapping",
8
7
  "typing",
@@ -23,7 +22,6 @@ __all__ = [
23
22
  from . import constants
24
23
  from . import extensions
25
24
  from . import functions
26
- from . import mappings
27
25
  from . import models
28
26
  from . import remapping
29
27
  from .utils import typing, enums
@@ -1,6 +1,7 @@
1
1
  # Package Imports
2
2
  from gmdkit.utils import enums
3
3
  from gmdkit.serialization.type_cast import decode_text, encode_text, get_string
4
+ from gmdkit.models.object import Object, ObjectList
4
5
  from gmdkit.models.prop.list import IntList
5
6
  from gmdkit.models.prop.pos_list import PositionList
6
7
  from gmdkit.models.prop.gzip import ObjectString, ReplayString
@@ -72,7 +73,7 @@ class FieldLoaderMixin(PlistLoaderMixin, metaclass=FieldMetaclass):
72
73
 
73
74
  practice_mode_best: int = DictField(key="k20", default=0)
74
75
 
75
- list_type: enums.LevelType = DictField(
76
+ level_type: enums.LevelType = DictField(
76
77
  key="k21",
77
78
  decoder=enums.LevelType,
78
79
  default=enums.LevelType.LOCAL,
@@ -304,6 +305,229 @@ class FieldLoaderMixin(PlistLoaderMixin, metaclass=FieldMetaclass):
304
305
  editor_build_tab_pages: dict = DictField(key="kI6", default_factory=dict, is_node=True)
305
306
 
306
307
  editor_layer: int = DictField(key="kI7", default=0)
308
+
309
+ @property
310
+ def start(self) -> Object:
311
+ objstr = self.object_string
312
+
313
+ if not hasattr(objstr, "start"):
314
+ objstr.load()
315
+
316
+ return getattr(objstr, "start")
317
+
318
+ @start.setter
319
+ def start(self, value: Object):
320
+ objstr = self.object_string
321
+
322
+ if not hasattr(objstr, "start"):
323
+ objstr.load()
324
+
325
+ setattr(objstr, "start", value)
326
+
327
+ @property
328
+ def objects(self) -> ObjectList:
329
+ objstr = self.object_string
330
+
331
+ if not hasattr(objstr, "objects"):
332
+ objstr.load()
333
+
334
+ return getattr(objstr, "objects")
335
+
336
+ @objects.setter
337
+ def objects(self, value: ObjectList):
338
+ objstr = self.object_string
339
+
340
+ if not hasattr(objstr, "objects"):
341
+ objstr.load()
342
+
343
+ setattr(objstr, "objects", value)
344
+
345
+ @property
346
+ def difficulty(self) -> enums.LevelDifficulty:
347
+ """
348
+ Gets the difficulty rating of a level.
349
+
350
+ Returns
351
+ -------
352
+ enums.LevelDifficulty
353
+ An enum specifying the level's difficulty.
354
+ """
355
+ if self.rating == 0:
356
+ return enums.LevelDifficulty.NA
357
+
358
+ match self.rating_sum:
359
+ case enums.LevelRating.NONE:
360
+ return enums.LevelDifficulty.NA
361
+ case enums.LevelRating.EASY:
362
+ if self.is_auto:
363
+ return enums.LevelDifficulty.AUTO
364
+ else:
365
+ return enums.LevelDifficulty.EASY
366
+ case enums.LevelRating.NORMAL:
367
+ return enums.LevelDifficulty.NORMAL
368
+ case enums.LevelRating.HARD:
369
+ return enums.LevelDifficulty.HARD
370
+
371
+ case enums.LevelRating.HARDER:
372
+ return enums.LevelDifficulty.HARDER
373
+
374
+ case enums.LevelRating.INSANE:
375
+ if self.is_demon:
376
+
377
+ match self.demon_type:
378
+
379
+ case enums.DemonRating.EASY:
380
+ return enums.LevelDifficulty.EASY_DEMON
381
+
382
+ case enums.DemonRating.MEDIUM:
383
+ return enums.LevelDifficulty.MEDIUM_DEMON
384
+
385
+ case enums.DemonRating.HARD:
386
+ return enums.LevelDifficulty.HARD_DEMON
387
+
388
+ case enums.DemonRating.INSANE:
389
+ return enums.LevelDifficulty.INSANE_DEMON
390
+
391
+ case enums.DemonRating.EXTREME:
392
+ return enums.LevelDifficulty.EXTREME_DEMON
393
+
394
+ case _:
395
+ return enums.LevelDifficulty.HARD_DEMON
396
+ else:
397
+ return enums.LevelDifficulty.INSANE
398
+
399
+ case _:
400
+ return enums.LevelDifficulty.NA
401
+
402
+ @difficulty.setter
403
+ def difficulty(self, value: enums.LevelDifficulty):
404
+ del self.is_auto
405
+ del self.is_demon
406
+ self.rating = 10
407
+
408
+ match value:
409
+ case enums.LevelDifficulty.NA:
410
+ del self.rating
411
+ self.rating_sum = enums.LevelRating.NONE
412
+
413
+ case enums.LevelDifficulty.AUTO:
414
+ self.rating_sum = enums.LevelRating.EASY
415
+ self.is_auto = True
416
+
417
+ case enums.LevelDifficulty.EASY:
418
+ self.rating_sum = enums.LevelRating.EASY
419
+
420
+ case enums.LevelDifficulty.NORMAL:
421
+ self.rating_sum = enums.LevelRating.NORMAL
422
+
423
+ case enums.LevelDifficulty.HARD:
424
+ self.rating_sum = enums.LevelRating.HARD
425
+
426
+ case enums.LevelDifficulty.HARDER:
427
+ self.rating_sum = enums.LevelRating.HARDER
428
+
429
+ case enums.LevelDifficulty.INSANE:
430
+ self.rating_sum = enums.LevelRating.INSANE
431
+
432
+ case (
433
+ enums.LevelDifficulty.EASY_DEMON
434
+ | enums.LevelDifficulty.MEDIUM_DEMON
435
+ | enums.LevelDifficulty.HARD_DEMON
436
+ | enums.LevelDifficulty.INSANE_DEMON
437
+ | enums.LevelDifficulty.EXTREME_DEMON
438
+ ):
439
+ self.rating_sum = enums.LevelRating.INSANE
440
+ self.is_demon = True
441
+
442
+ match value:
443
+ case enums.LevelDifficulty.EASY_DEMON:
444
+ self.demon_type = enums.DemonRating.EASY,
445
+ case enums.LevelDifficulty.MEDIUM_DEMON:
446
+ self.demon_type = enums.DemonRating.MEDIUM,
447
+ case enums.LevelDifficulty.HARD_DEMON:
448
+ self.demon_type = enums.DemonRating.HARD,
449
+ case enums.LevelDifficulty.INSANE_DEMON:
450
+ self.demon_type = enums.DemonRating.INSANE,
451
+ case enums.LevelDifficulty.EXTREME_DEMON:
452
+ self.demon_type = enums.DemonRating.EXTREME,
453
+
454
+ case _:
455
+ raise ValueError(f"Unsupported level difficulty: {value!r}")
456
+
457
+ @property
458
+ def feature_rating(self) -> enums.FeatureRating:
459
+ match self.epic_rating:
460
+
461
+ case enums.EpicRating.EPIC:
462
+ return enums.FeatureRating.EPIC
463
+
464
+ case enums.EpicRating.LEGENDARY:
465
+ return enums.FeatureRating.LEGENDARY
466
+
467
+ case enums.EpicRating.MYTHIC:
468
+ return enums.FeatureRating.MYTHIC
469
+
470
+ case _:
471
+ if self.feature_score:
472
+ return enums.FeatureRating.FEATURED
473
+
474
+ elif self.stars:
475
+ return enums.FeatureRating.RATED
476
+
477
+ else:
478
+ return enums.FeatureRating.UNRATED
479
+
480
+ @feature_rating.setter
481
+ def feature_rating(self, value: enums.FeatureRating) -> None:
482
+ match value:
483
+ case enums.FeatureRating.UNRATED:
484
+ self.epic_rating = enums.EpicRating.NONE
485
+ self.feature_score = 0
486
+ self.stars = 0
487
+
488
+ case enums.FeatureRating.RATED:
489
+ self.epic_rating = enums.EpicRating.NONE
490
+ self.feature_score = 0
491
+
492
+ case enums.FeatureRating.FEATURED:
493
+ self.epic_rating = enums.EpicRating.NONE
494
+ self.feature_score = self.feature_score or 1
495
+
496
+ case enums.FeatureRating.EPIC:
497
+ self.epic_rating = enums.EpicRating.EPIC
498
+
499
+ case enums.FeatureRating.LEGENDARY:
500
+ self.epic_rating = enums.EpicRating.LEGENDARY
501
+
502
+ case enums.FeatureRating.MYTHIC:
503
+ self.epic_rating = enums.EpicRating.MYTHIC
504
+
505
+ case _:
506
+ raise ValueError(f"Unsupported feature rating: {value!r}")
507
+
508
+ @property
509
+ def timely_type(self) -> enums.TimelyType:
510
+ """
511
+ Gets the timely (daily, weekly, event) type of a level.
512
+
513
+ Returns
514
+ -------
515
+ enums.TimelyType
516
+ An enum specifying the level's timely type.
517
+ """
518
+ tid = self.timely_id
519
+
520
+ if tid is None:
521
+ return enums.TimelyType.NONE
522
+ elif (0<tid<=10000):
523
+ return enums.TimelyType.DAILY
524
+ elif (10000<tid<=20000):
525
+ return enums.TimelyType.WEEKLY
526
+ elif (20000<tid<=30000):
527
+ return enums.TimelyType.EVENT
528
+ else:
529
+ return enums.TimelyType.NONE
530
+
307
531
 
308
532
  FieldLoaderMixin.add_field(key="k24") # dislikes, unused
309
533
  FieldLoaderMixin.add_field(key="k106") # unknown
@@ -6,8 +6,8 @@ from os import PathLike
6
6
 
7
7
  # Package Imports
8
8
  from gmdkit.models.object import Object, ObjectList
9
- from gmdkit.mappings import obj_prop, obj_id
10
-
9
+ from gmdkit.models import interfaces
10
+ from gmdkit.utils import enums
11
11
 
12
12
  MAGIC = b'\xc4\x19\x7b\xfa'
13
13
  PREFIX = "GLOBED_SCRIPT"
@@ -147,7 +147,7 @@ class GlobedScript:
147
147
  tail:bytes|None=None
148
148
  ):
149
149
 
150
- self.object = text_object or Object.default(obj_id.TEXT)
150
+ self.object = text_object or Object.default(enums.ObjectID.OBJECT_TEXT)
151
151
  self.prefix = prefix
152
152
  self.main = main
153
153
  self.filename = filename
@@ -163,7 +163,8 @@ class GlobedScript:
163
163
 
164
164
  def load(self):
165
165
  try:
166
- string = self.object[obj_prop.text.DATA]
166
+ intf = self.object.require_interface(interfaces.Text)
167
+ string = intf.data
167
168
  string_bytes = string.encode("utf-8", errors="surrogateescape")
168
169
  pre, main, fn, content, sig, tail = decode_script(string_bytes)
169
170
  self.prefix = pre
@@ -189,7 +190,8 @@ class GlobedScript:
189
190
  )
190
191
 
191
192
  string = string_bytes.decode("utf-8", errors="surrogateescape")
192
- self.object[obj_prop.text.DATA] = string
193
+ intf = self.object.require_interface(interfaces.Text)
194
+ intf.data = string
193
195
 
194
196
  except Exception as e:
195
197
  raise RuntimeError(f"Error while saving script data to object: {e}") from e
@@ -225,11 +227,12 @@ class GlobedScript:
225
227
  result = []
226
228
 
227
229
  for obj in obj_list:
230
+ intf = obj.require_interface(interfaces.Text, fallback=None)
228
231
 
229
- if obj_id.TEXT != obj.get(obj_prop.ID):
232
+ if intf is None:
230
233
  continue
231
234
 
232
- string = obj.get(obj_prop.text.DATA)
235
+ string = intf.data
233
236
 
234
237
  if string is None:
235
238
  continue
@@ -0,0 +1,113 @@
1
+ # Package Imports
2
+ from gmdkit.models.level import Level
3
+ from gmdkit.models.object import ObjectList
4
+ from gmdkit.models.prop.color import Color, ColorList
5
+ from gmdkit import remapping
6
+ from gmdkit.models import interfaces
7
+
8
+ RGBA = tuple[int,int,int,float]
9
+
10
+ def color_fade(color_1:Color, color_2:Color, percent:float) -> RGBA:
11
+ """
12
+ Calculates an intermediary color between two colors.
13
+
14
+ Parameters
15
+ ----------
16
+ color_1 : Color
17
+ The original color.
18
+ color_2 : Color
19
+ The new color.
20
+ percent : float
21
+ How much of the new color will be mixed in with the original one.
22
+
23
+ Returns
24
+ -------
25
+ RGBA
26
+ DESCRIPTION.
27
+
28
+ """
29
+ r1, g1, b1, a1 = color_1.get_rgba()
30
+ r2, g2, b2, a2 = color_2.get_rgba()
31
+
32
+ r = round(r1 + (r2 - r1) * percent)
33
+ g = round(g1 + (g2 - g1) * percent)
34
+ b = round(b1 + (b2 - b1) * percent)
35
+ a = a1 + (a2 - a1) * percent
36
+
37
+ return (r,g,b,a)
38
+
39
+
40
+ def create_color_triggers(
41
+ color_list:ColorList,
42
+ ignore_default:bool=True,
43
+ ignore_ids:None=None,
44
+ pos_x:float=0,
45
+ pos_y:float=0
46
+ ) -> ObjectList:
47
+ """
48
+ Converts a list of colors into color triggers.
49
+
50
+ Parameters
51
+ ----------
52
+ color_list :
53
+ A list to retrieve colors from.
54
+ offset_x : float, optional
55
+ Horizontal offset between triggers. The default is 0.
56
+ offset_y : float, optional
57
+ Vertical offset between triggers. The default is -30.
58
+
59
+ Returns
60
+ -------
61
+ ObjectListx
62
+ An ObjectList containing the generated color triggers.
63
+ """
64
+ obj_list = ObjectList()
65
+
66
+ y = pos_y
67
+ x = pos_x
68
+
69
+ for color in color_list:
70
+
71
+ if ignore_ids is not None and color.channel in ignore_ids:
72
+ continue
73
+
74
+ if ignore_default and color.is_default():
75
+ continue
76
+
77
+ intf = interfaces.ColorTrigger.from_color(color)
78
+ intf.x = x
79
+ intf.y = y
80
+ y += -30
81
+ obj_list.append(intf.obj)
82
+
83
+ return obj_list
84
+
85
+
86
+ def create_lvl_color_triggers(
87
+ lvl:Level,
88
+ ignore_default:bool=True,
89
+ pos_x:float=0,
90
+ pos_y:float=0
91
+ ) -> ObjectList:
92
+ intf = lvl.start.require_interface(interfaces.LevelSettings)
93
+ lvl.objects += create_color_triggers(intf.colors,ignore_default,pos_x,pos_y)
94
+
95
+
96
+ def set_used_colors(lvl:Level):
97
+ used = remapping.rules.COLOR_ID_HANDLER.compile_ids(lvl).filter_values(reference=True).get_ids()
98
+ intf = lvl.start.require_interface(interfaces.LevelSettings)
99
+ intf.colors.set_defaults(*used)
100
+
101
+
102
+ def free_unused_colors(lvl:Level, ignore_ids:dict):
103
+ ignore_ids = ignore_ids or {}
104
+
105
+ rules = remapping.rules.BASE_ID_HANDLER.compile_rules(id_types=(remapping.IDType.COLOR_ID,))
106
+
107
+ ids = rules.compile_ids(lvl.objects, by_type=False).filter_values(fixed=False)
108
+ id_base = ids.filter_values(reference=False).get_ids()
109
+ id_ref = ids.filter_values(reference=True).get_ids()
110
+ unused = id_base - id_ref - ignore_ids
111
+
112
+ intf = lvl.start.require_interface(interfaces.LevelSettings)
113
+ intf.colors.exclude(lambda color: color.channel in unused)