gmdkit 0.0.post1__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 (61) hide show
  1. gmdkit-0.0.post1/.gitattributes +2 -0
  2. gmdkit-0.0.post1/.github/workflows/pypi.yml +56 -0
  3. gmdkit-0.0.post1/.gitignore +78 -0
  4. gmdkit-0.0.post1/LICENSE +21 -0
  5. gmdkit-0.0.post1/PKG-INFO +49 -0
  6. gmdkit-0.0.post1/README.md +30 -0
  7. gmdkit-0.0.post1/data/csv/level_table.csv +152 -0
  8. gmdkit-0.0.post1/data/csv/obj_default_color_table.csv +4130 -0
  9. gmdkit-0.0.post1/data/csv/object_table.csv +196 -0
  10. gmdkit-0.0.post1/data/csv/prop_table.csv +1158 -0
  11. gmdkit-0.0.post1/data/csv/remap_table.csv +645 -0
  12. gmdkit-0.0.post1/data/gmd/Skeletal Shenanigans.gmd +1 -0
  13. gmdkit-0.0.post1/data/json/animated_obj.json +58 -0
  14. gmdkit-0.0.post1/data/json/obj_ids.json +1 -0
  15. gmdkit-0.0.post1/data/json/tabs.json +55 -0
  16. gmdkit-0.0.post1/data/txt/default.txt +1 -0
  17. gmdkit-0.0.post1/examples/load_test.py +11 -0
  18. gmdkit-0.0.post1/pyproject.toml +37 -0
  19. gmdkit-0.0.post1/setup.cfg +4 -0
  20. gmdkit-0.0.post1/src/gmdkit/__init__.py +0 -0
  21. gmdkit-0.0.post1/src/gmdkit/casting/__init__.py +0 -0
  22. gmdkit-0.0.post1/src/gmdkit/casting/color.py +31 -0
  23. gmdkit-0.0.post1/src/gmdkit/casting/id_rules.py +1162 -0
  24. gmdkit-0.0.post1/src/gmdkit/casting/level_props.py +41 -0
  25. gmdkit-0.0.post1/src/gmdkit/casting/object_props.py +885 -0
  26. gmdkit-0.0.post1/src/gmdkit/defaults/__init__.py +0 -0
  27. gmdkit-0.0.post1/src/gmdkit/defaults/color_default.py +6125 -0
  28. gmdkit-0.0.post1/src/gmdkit/defaults/objects.py +4075 -0
  29. gmdkit-0.0.post1/src/gmdkit/extra/globed.py +271 -0
  30. gmdkit-0.0.post1/src/gmdkit/extra/text.py +134 -0
  31. gmdkit-0.0.post1/src/gmdkit/functions/__init__.py +0 -0
  32. gmdkit-0.0.post1/src/gmdkit/functions/level.py +79 -0
  33. gmdkit-0.0.post1/src/gmdkit/functions/merging.py +483 -0
  34. gmdkit-0.0.post1/src/gmdkit/functions/object.py +262 -0
  35. gmdkit-0.0.post1/src/gmdkit/functions/object_list.py +662 -0
  36. gmdkit-0.0.post1/src/gmdkit/mappings/__init__.py +7 -0
  37. gmdkit-0.0.post1/src/gmdkit/mappings/color_ids.py +16 -0
  38. gmdkit-0.0.post1/src/gmdkit/mappings/color_props.py +19 -0
  39. gmdkit-0.0.post1/src/gmdkit/mappings/level_props.py +128 -0
  40. gmdkit-0.0.post1/src/gmdkit/mappings/object_ids.py +223 -0
  41. gmdkit-0.0.post1/src/gmdkit/mappings/object_props.py +1279 -0
  42. gmdkit-0.0.post1/src/gmdkit/models/__init__.py +0 -0
  43. gmdkit-0.0.post1/src/gmdkit/models/level.py +117 -0
  44. gmdkit-0.0.post1/src/gmdkit/models/level_pack.py +36 -0
  45. gmdkit-0.0.post1/src/gmdkit/models/live_editor.py +8 -0
  46. gmdkit-0.0.post1/src/gmdkit/models/object.py +93 -0
  47. gmdkit-0.0.post1/src/gmdkit/models/prop/__init__.py +0 -0
  48. gmdkit-0.0.post1/src/gmdkit/models/prop/color.py +30 -0
  49. gmdkit-0.0.post1/src/gmdkit/models/prop/guideline.py +45 -0
  50. gmdkit-0.0.post1/src/gmdkit/models/prop/gzip.py +64 -0
  51. gmdkit-0.0.post1/src/gmdkit/models/prop/hsv.py +27 -0
  52. gmdkit-0.0.post1/src/gmdkit/models/prop/list.py +119 -0
  53. gmdkit-0.0.post1/src/gmdkit/models/prop/particle.py +94 -0
  54. gmdkit-0.0.post1/src/gmdkit/models/prop/string.py +50 -0
  55. gmdkit-0.0.post1/src/gmdkit/models/save.py +71 -0
  56. gmdkit-0.0.post1/src/gmdkit/models/serialization.py +535 -0
  57. gmdkit-0.0.post1/src/gmdkit/models/types.py +382 -0
  58. gmdkit-0.0.post1/src/gmdkit.egg-info/PKG-INFO +49 -0
  59. gmdkit-0.0.post1/src/gmdkit.egg-info/SOURCES.txt +59 -0
  60. gmdkit-0.0.post1/src/gmdkit.egg-info/dependency_links.txt +1 -0
  61. gmdkit-0.0.post1/src/gmdkit.egg-info/top_level.txt +1 -0
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
@@ -0,0 +1,56 @@
1
+ name: Upload Python Package
2
+
3
+
4
+ on:
5
+ release:
6
+ types: [published]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ release-build:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.x"
22
+
23
+ - name: Build release distributions
24
+ run: |
25
+ # NOTE: put your own distribution build steps here.
26
+ python -m pip install build setuptools wheel setuptools-scm
27
+ python -m build
28
+
29
+ - name: Upload distributions
30
+ uses: actions/upload-artifact@v4
31
+ with:
32
+ name: release-dists
33
+ path: dist/
34
+
35
+ pypi-publish:
36
+ runs-on: ubuntu-latest
37
+ needs:
38
+ - release-build
39
+ permissions:
40
+ id-token: write
41
+ contents: read
42
+ environment:
43
+ name: PyPi
44
+ url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }}
45
+
46
+ steps:
47
+ - name: Retrieve release distributions
48
+ uses: actions/download-artifact@v4
49
+ with:
50
+ name: release-dists
51
+ path: dist/
52
+
53
+ - name: Publish release distributions to PyPI
54
+ uses: pypa/gh-action-pypi-publish@release/v1
55
+ with:
56
+ packages-dir: dist/
@@ -0,0 +1,78 @@
1
+ # Temporary Ignores
2
+
3
+
4
+
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ build/
16
+ dist/
17
+ *.egg-info/
18
+ *.egg
19
+ .eggs/
20
+
21
+ # Virtual environments
22
+ .venv/
23
+ venv/
24
+ ENV/
25
+ env/
26
+ .venv*/
27
+ pip-wheel-metadata/
28
+
29
+ # Installer logs
30
+ pip-log.txt
31
+ pip-delete-this-directory.txt
32
+
33
+ # Unit test / coverage reports
34
+ htmlcov/
35
+ .tox/
36
+ .nox/
37
+ .coverage
38
+ .coverage.*
39
+ .cache
40
+ pytest_cache/
41
+ .pytest_cache/
42
+ nosetests.xml
43
+ coverage.xml
44
+ *.cover
45
+ *.py,cover
46
+ .hypothesis/
47
+
48
+ # IDE / editor configs
49
+ .vscode/
50
+ .idea/
51
+ *.swp
52
+ *.swo
53
+ .spyderproject
54
+ .spyderworkspace
55
+ .spyproject
56
+ .spyder*
57
+
58
+ # Jupyter notebooks
59
+ .ipynb_checkpoints
60
+
61
+ # mypy / type checker
62
+ .mypy_cache/
63
+ .dmypy.json
64
+ dmypy.json
65
+
66
+ # Pyre type checker
67
+ .pyre/
68
+
69
+ # Pyright type checker
70
+ .pyright/
71
+
72
+ # Ruff / flake8 / linting
73
+ .ruff_cache/
74
+ .flake8
75
+
76
+ # OS-specific files
77
+ .DS_Store
78
+ Thumbs.db
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 HDanke
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,49 @@
1
+ Metadata-Version: 2.4
2
+ Name: gmdkit
3
+ Version: 0.0.post1
4
+ Summary: A toolkit for handling Geometry Dash level data.
5
+ Author: HDanke
6
+ License: MIT
7
+ Keywords: geometry-dash,gmd,levels,parser,editor
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Requires-Python: >=3.9
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Dynamic: license-file
19
+
20
+ TODO README
21
+
22
+ THIS LIBRARY IS NOT FULLY TESTED, DO NOT EDIT LEVELS WITHOUT BACKUPS.
23
+
24
+ Basic usage:
25
+ ```python
26
+
27
+ # import level
28
+ from gmdkit.models.level import Level
29
+ # import object property mappings
30
+ from gmdkit.mappings import prop_id
31
+ # import object functions
32
+ import gmdkit.functions.object as obj_func
33
+
34
+ # open file
35
+ level = Level.from_file("example.gmd")
36
+
37
+ # get inner level properties
38
+ start = level.start
39
+
40
+ # get level objects
41
+ obj_list = level.objects
42
+
43
+ # filter by condition
44
+ after_origin = obj_list.where(lambda obj: obj.get(prop_id.x, 0) > 0)
45
+
46
+ # apply functions, kwargs are filtered for each called function
47
+ # ex: obj_func.fix_lighter has replacement as a key argument
48
+ after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
49
+ ```
@@ -0,0 +1,30 @@
1
+ TODO README
2
+
3
+ THIS LIBRARY IS NOT FULLY TESTED, DO NOT EDIT LEVELS WITHOUT BACKUPS.
4
+
5
+ Basic usage:
6
+ ```python
7
+
8
+ # import level
9
+ from gmdkit.models.level import Level
10
+ # import object property mappings
11
+ from gmdkit.mappings import prop_id
12
+ # import object functions
13
+ import gmdkit.functions.object as obj_func
14
+
15
+ # open file
16
+ level = Level.from_file("example.gmd")
17
+
18
+ # get inner level properties
19
+ start = level.start
20
+
21
+ # get level objects
22
+ obj_list = level.objects
23
+
24
+ # filter by condition
25
+ after_origin = obj_list.where(lambda obj: obj.get(prop_id.x, 0) > 0)
26
+
27
+ # apply functions, kwargs are filtered for each called function
28
+ # ex: obj_func.fix_lighter has replacement as a key argument
29
+ after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
30
+ ```
@@ -0,0 +1,152 @@
1
+ id,alias,type,format,notes
2
+ kCEK,level.encoder_key,int,,levels use value 4
3
+ kCEK,list.encoder_key,int,,lists use value 12
4
+ k1,level.id,int,,
5
+ k1,list.id,int,,
6
+ k2,level.name,string,,
7
+ k2,list.name,string,,
8
+ k3,level.description,string,,
9
+ k3,list.description,string,,
10
+ k4,level.object_string,string,gzip,
11
+ k5,level.creator,string,,
12
+ k5,list.creator,string,,
13
+ k6,level.user_id,int,,
14
+ k7,level.difficulty,int,,
15
+ k7,list.difficulty,int,,
16
+ k8,level.official_song_id,int,audio track,
17
+ k9,level.rating,int,,
18
+ k10,level.rating_sum,int,,
19
+ k11,level.downloads,int,,
20
+ k11,list.downloads,int,,
21
+ k12,,,,
22
+ k13,level.editable,bool,,
23
+ k14,level.verified,bool,,
24
+ k15,level.uploaded,int,bool,
25
+ k15,list.uploaded,int,bool,
26
+ k16,level.version,int,,
27
+ k16,list.version,int,,
28
+ k17,level.game_version,int,,
29
+ k18,level.attempts,int,,
30
+ k19,level.normal_mode_best,int,,
31
+ k20,level.practice_mode_best,int,,
32
+ k21,level.type,int,,
33
+ k21,list.type,int,,
34
+ k22,level.like_rating,int,,
35
+ k22,list.like_rating,int,,
36
+ k23,level.length,int,,
37
+ k24,level.dislikes,int,,
38
+ k25,level.is_demon,bool,,
39
+ k26,level.stars,int,,
40
+ k27,level.feature_score,int,,
41
+ k27,list.featured,bool,,
42
+ k28,,,,
43
+ k29,,,,
44
+ k30,,,,
45
+ k31,,,,
46
+ k32,,,,
47
+ k33,level.is_auto,bool,,
48
+ k34,level.replay_data,string,gzip,
49
+ k35,level._k35,bool,,
50
+ k36,level.jumps,int,,
51
+ k37,level.official.required_coins,int,,
52
+ k38,level.official.is_unlocked,bool,,
53
+ k39,,,,
54
+ k40,,,,
55
+ k41,level.password,int,,
56
+ k42,level.original_id,int,,
57
+ k42,list.original_id,int,,
58
+ k43,level.mode_2p,bool,,
59
+ k44,,,,
60
+ k45,level.song_id,int,,
61
+ k46,level.revision,int,,
62
+ k46,list.revision,int,,unused
63
+ k47,level.edited_externally,bool,,
64
+ k47,list.edited_externally,bool,,
65
+ k48,level.object_count,int,,
66
+ k49,,,,
67
+ k50,level.binary_version,int,,
68
+ k51,,,,
69
+ k52,,,,
70
+ k53,,,,
71
+ k54,,,,
72
+ k55,,,,
73
+ k56,,,,
74
+ k57,,,,
75
+ k58,,,,
76
+ k59,,,,
77
+ k60,level.account_id,int,,
78
+ k60,list.account_id,int,,
79
+ k61,,,,
80
+ k62,,,,
81
+ k63,,,,
82
+ k64,level.coins,int,,
83
+ k65,level.verified_coins,bool,,
84
+ k66,level.stars_requested,int,,
85
+ k67,level.capacity_string,string,,
86
+ k68,level.anticheat_triggered,bool,,
87
+ k69,level.high_object_count,bool,,
88
+ k70,,,,
89
+ k71,level.orb_percentage,int,,
90
+ k72,level.ldm,bool,,
91
+ k73,level.ldm_enabled,bool,,
92
+ k74,level.timely_id,int,,
93
+ k75,level.epic_rating,int,,
94
+ k76,level.demon_rating,int,,
95
+ k77,level.gauntlet,bool,,
96
+ k78,level.alt_game,bool,,
97
+ k79,level.unlisted,bool,,
98
+ k79,list.unlisted,bool,,
99
+ k80,level.edit_time,int,,
100
+ k81,level.edit_time_copies,int,,
101
+ k82,level.favorite,bool,,
102
+ k82,list.favorite,bool,,unused
103
+ k83,level.order,int,,
104
+ k83,list.order,int,,
105
+ k84,level.level_folder,int,,
106
+ k84,list.level_folder,int,,unused
107
+ k85,level.clicks_best,int,,
108
+ k86,level.time_best,int,,
109
+ k87,level.score_seed,string,level score seed,
110
+ k88,level.level_progress,string,int list,?
111
+ k89,level.verified_check,bool,,
112
+ k90,level.leaderboard_percentage,int,,
113
+ k91,level.locked_layers,string,int list,
114
+ k92,,,,
115
+ k93,level.unlimited_obj_count,bool,,
116
+ k94,level.friends_only,bool,,
117
+ k94,list.friends_only,bool,,
118
+ k95,level.verification_time,int,,
119
+ k96,list.level_ids,string,int list,
120
+ k97,list.level_info,dict,,
121
+ k98,list.upload_time,int,,
122
+ k99,list.update_time,int,,
123
+ k100,list.online_levels_loaded,bool,,
124
+ k101,level.saved_camera_positions,string,pair list,
125
+ k102,level.preview_lock_x,int,,
126
+ k103,level.preview_lock_y,int,,
127
+ k104,level.songs,string,int list,
128
+ k105,level.sfx,string,int list,
129
+ k106,level._k106,int,,unused
130
+ k107,level.best_time,int,,
131
+ k108,level.best_points,int,,
132
+ k109,level.local_best_time,string,int list,
133
+ k110,level.local_best_points,string,int list,
134
+ k111,level.platformer_seed,int,,
135
+ k112,level.shake_disabled,bool,,
136
+ k113,list.diamond_reward,int,,
137
+ k114,list.levels_to_claim,int,,
138
+ k115,,,,
139
+ k116,,,,
140
+ k117,,,,
141
+ k118,,,,
142
+ k119,,,,
143
+ k120,,,,
144
+ kI1,level.editor.camera_x,float,,
145
+ kI2,level.editor.camera_y,float,,
146
+ kI3,level.editor.camera_zoom,float,,
147
+ kI4,level.editor.build_tab_page,int,,
148
+ kI5,level.editor.build_tab,int,,
149
+ kI6,level.editor.build_tab_pages,dict,,
150
+ kI7,level.editor.layer,float,,
151
+ kI8,,,,
152
+ kI9,,,,