rewog 3.0.0__py3-none-any.whl

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 (70) hide show
  1. rewog-3.0.0.dist-info/METADATA +518 -0
  2. rewog-3.0.0.dist-info/RECORD +70 -0
  3. rewog-3.0.0.dist-info/WHEEL +4 -0
  4. rewog-3.0.0.dist-info/entry_points.txt +3 -0
  5. rewog-3.0.0.dist-info/licenses/LICENSE +21 -0
  6. wog_dump/__init__.py +27 -0
  7. wog_dump/cli/__init__.py +1 -0
  8. wog_dump/cli/auth.py +128 -0
  9. wog_dump/cli/cache.py +123 -0
  10. wog_dump/cli/catalog.py +167 -0
  11. wog_dump/cli/convert.py +59 -0
  12. wog_dump/cli/decrypt.py +118 -0
  13. wog_dump/cli/download.py +214 -0
  14. wog_dump/cli/errors.py +76 -0
  15. wog_dump/cli/info.py +197 -0
  16. wog_dump/cli/main.py +250 -0
  17. wog_dump/cli/pipeline.py +152 -0
  18. wog_dump/cli/print_export.py +110 -0
  19. wog_dump/cli/render.py +210 -0
  20. wog_dump/cli/scene.py +248 -0
  21. wog_dump/cli/serve.py +57 -0
  22. wog_dump/cli/unpack.py +120 -0
  23. wog_dump/core/__init__.py +1 -0
  24. wog_dump/core/anim.py +99 -0
  25. wog_dump/core/api.py +154 -0
  26. wog_dump/core/auth.py +471 -0
  27. wog_dump/core/catalog.py +118 -0
  28. wog_dump/core/config.py +373 -0
  29. wog_dump/core/database.py +368 -0
  30. wog_dump/core/decrypt.py +317 -0
  31. wog_dump/core/download.py +688 -0
  32. wog_dump/core/export.py +643 -0
  33. wog_dump/core/glb.py +657 -0
  34. wog_dump/core/http.py +72 -0
  35. wog_dump/core/key_import.py +502 -0
  36. wog_dump/core/keys.py +295 -0
  37. wog_dump/core/paths.py +59 -0
  38. wog_dump/core/printprep.py +249 -0
  39. wog_dump/core/probe.py +187 -0
  40. wog_dump/core/render.py +319 -0
  41. wog_dump/core/scene.py +1393 -0
  42. wog_dump/core/scene_states.py +440 -0
  43. wog_dump/core/scene_steps.py +73 -0
  44. wog_dump/core/transforms.py +240 -0
  45. wog_dump/core/unpack.py +846 -0
  46. wog_dump/core/viewer.py +125 -0
  47. wog_dump/core/webapp/__init__.py +1 -0
  48. wog_dump/core/webapp/app.py +218 -0
  49. wog_dump/core/webapp/static/app.js +66 -0
  50. wog_dump/core/webapp/static/index.html +26 -0
  51. wog_dump/core/webapp/static/weapon-view.js +130 -0
  52. wog_dump/core/webapp/static/weapon.html +46 -0
  53. wog_dump/resources/__init__.py +0 -0
  54. wog_dump/resources/blender_setup.py +182 -0
  55. wog_dump/resources/locales/ru/LC_MESSAGES/wog_dump.po +52 -0
  56. wog_dump/resources/render_turntable.py +111 -0
  57. wog_dump/resources/render_video.py +133 -0
  58. wog_dump/resources/viewer/template.html +84 -0
  59. wog_dump/resources/viewer/vendor/LICENSE +21 -0
  60. wog_dump/resources/viewer/vendor/PATCHES.md +8 -0
  61. wog_dump/resources/viewer/vendor/addons/controls/OrbitControls.js +1523 -0
  62. wog_dump/resources/viewer/vendor/addons/loaders/GLTFLoader.js +4727 -0
  63. wog_dump/resources/viewer/vendor/addons/utils/BufferGeometryUtils.js +1373 -0
  64. wog_dump/resources/viewer/vendor/three.module.min.js +6 -0
  65. wog_dump/resources/viewer/viewer.js +350 -0
  66. wog_dump/utils/__init__.py +1 -0
  67. wog_dump/utils/i18n.py +78 -0
  68. wog_dump/utils/logging.py +603 -0
  69. wog_dump/utils/normal_map.py +345 -0
  70. wog_dump/utils/progress.py +97 -0
@@ -0,0 +1,518 @@
1
+ Metadata-Version: 2.5
2
+ Name: rewog
3
+ Version: 3.0.0
4
+ Summary: A modern tool to download, decrypt and unpack 3D gun models from World of Guns: Gun Disassembly
5
+ Project-URL: Homepage, https://github.com/InzGIBA/ReWOG
6
+ Project-URL: Repository, https://github.com/InzGIBA/ReWOG
7
+ Project-URL: Documentation, https://github.com/InzGIBA/ReWOG/blob/main/README.md
8
+ Project-URL: Changelog, https://github.com/InzGIBA/ReWOG/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/InzGIBA/ReWOG/issues
10
+ Project-URL: Bug Tracker, https://github.com/InzGIBA/ReWOG/issues
11
+ Author-email: hampta <hampta@example.com>, inzgiba <inzgiba@gmail.com>
12
+ Maintainer-email: inzgiba <inzgiba@gmail.com>
13
+ License: MIT
14
+ License-File: LICENSE
15
+ Keywords: 3d-models,decryption,game-assets,unity,world-of-guns
16
+ Classifier: Development Status :: 4 - Beta
17
+ Classifier: Environment :: Console
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Games/Entertainment
25
+ Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
26
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
+ Classifier: Topic :: Utilities
28
+ Requires-Python: >=3.12
29
+ Requires-Dist: click>=8.1.0
30
+ Requires-Dist: pillow>=10.0.0
31
+ Requires-Dist: pydantic>=2.4.0
32
+ Requires-Dist: python-dotenv>=1.0
33
+ Requires-Dist: requests>=2.31.0
34
+ Requires-Dist: rich>=13.0.0
35
+ Requires-Dist: unitypy>=1.10.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: black>=23.0.0; extra == 'dev'
38
+ Requires-Dist: flake8>=6.0.0; extra == 'dev'
39
+ Requires-Dist: httpx>=0.27; extra == 'dev'
40
+ Requires-Dist: isort>=5.12.0; extra == 'dev'
41
+ Requires-Dist: mkdocs-material>=9.5; extra == 'dev'
42
+ Requires-Dist: mkdocstrings[python]>=0.25; extra == 'dev'
43
+ Requires-Dist: mypy>=1.5.0; extra == 'dev'
44
+ Requires-Dist: pre-commit>=3.4.0; extra == 'dev'
45
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
46
+ Requires-Dist: pytest-mock>=3.11.0; extra == 'dev'
47
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
48
+ Requires-Dist: types-requests>=2.31.0; extra == 'dev'
49
+ Provides-Extra: mitm
50
+ Requires-Dist: mitmproxy>=10.0; extra == 'mitm'
51
+ Provides-Extra: print
52
+ Requires-Dist: networkx>=3.0; extra == 'print'
53
+ Requires-Dist: numpy>=1.26; extra == 'print'
54
+ Requires-Dist: trimesh>=4.0; extra == 'print'
55
+ Provides-Extra: test
56
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
57
+ Requires-Dist: pytest-mock>=3.11.0; extra == 'test'
58
+ Requires-Dist: pytest>=7.4.0; extra == 'test'
59
+ Provides-Extra: usd
60
+ Requires-Dist: usd-core>=24.0; extra == 'usd'
61
+ Provides-Extra: web
62
+ Requires-Dist: fastapi>=0.110; extra == 'web'
63
+ Requires-Dist: uvicorn>=0.29; extra == 'web'
64
+ Description-Content-Type: text/markdown
65
+
66
+ <picture>
67
+ <source media="(prefers-color-scheme: dark)" srcset="assets/hero-dark.svg">
68
+ <source media="(prefers-color-scheme: light)" srcset="assets/hero-light.svg">
69
+ <img alt="ReWOG: World of Guns asset extraction toolkit" src="assets/hero-light.svg" width="100%">
70
+ </picture>
71
+
72
+ **WOG Dump: extract and rebuild 3D weapon models from [World of Guns: Gun Disassembly](https://store.steampowered.com/app/262410/World_of_Guns_Gun_Disassembly/).**
73
+
74
+ A command-line toolkit for 3D artists, modders and researchers who study game assets. WOG Dump logs in with your own game account, downloads encrypted Unity bundles from the game servers, decrypts them and rebuilds the weapon: one command turns the in-game AK-47 into a Blender-ready glTF scene with the exact part hierarchy, game materials and studio lighting. Scenes come out in disassembly states too, with an offline HTML viewer, STL/USD/FBX export, print preparation and turntable videos.
75
+
76
+ [Overview](#overview) · [Features](#features) · [Quick start](#quick-start) · [Usage](#usage) · [Configuration](#configuration) · [Development](#development) · [FAQ](#faq) · [Contributing](#contributing) · [License](#license)
77
+
78
+ <div align="center">
79
+
80
+ [![Python Version](https://img.shields.io/badge/python-3.12+-blue.svg)](https://python.org)
81
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
82
+ [![Code Style](https://img.shields.io/badge/code%20style-black-black.svg)](https://github.com/psf/black)
83
+ [![Package Manager](https://img.shields.io/badge/package%20manager-uv-blue.svg)](https://github.com/astral-sh/uv)
84
+ [![GitHub Issues](https://img.shields.io/github/issues/InzGIBA/ReWOG)](https://github.com/InzGIBA/ReWOG/issues)
85
+ [![GitHub Stars](https://img.shields.io/github/stars/InzGIBA/ReWOG)](https://github.com/InzGIBA/ReWOG/stargazers)
86
+
87
+ </div>
88
+
89
+ ## Overview
90
+
91
+ WOG Dump automates the full path from the game's servers to usable 3D data: weapon catalog, per-asset decryption keys, encrypted downloads, XOR decryption, Unity unpacking and scene export. It targets the current `query2026` protocol (game `2.2.3t6`, Unity 6) and was verified live against the production API in November 2026.
92
+
93
+ - **For:** 3D artists, modders, educators and researchers studying weapon assembly and Unity asset pipelines
94
+ - **Input:** your game-account credentials (or a captured client session) and the weapons you want
95
+ - **Output:** decrypted Unity bundles, extracted models and textures (OBJ, PNG, TGA), glTF scenes in assembled or disassembled poses, an offline HTML viewer, STL/USD/USDZ/FBX export, print-ready parts and turntable videos
96
+ - **Scope:** personal, educational and research use, extracted assets remain the property of Noble Empire Corp. (see [License](#license))
97
+
98
+ > **What's new:** this release adds disassembly states and animated step-by-step builds, a self-contained HTML viewer with part annotations, STL/USD/USDZ/FBX export, print preparation, turntable and clip videos, the `catalog` command, a local web UI, CLI localization (Russian), a protocol compatibility probe, Docker images, a Blender addon and third-party extractor plugins. Full history: [CHANGELOG.md](CHANGELOG.md).
99
+
100
+ ## Features
101
+
102
+ <picture>
103
+ <source media="(prefers-color-scheme: dark)" srcset="assets/feature-01-dark.svg">
104
+ <img alt="Full pipeline, one command from catalog to decrypted assets" src="assets/feature-01-light.svg" width="32%">
105
+ </picture>
106
+ <picture>
107
+ <source media="(prefers-color-scheme: dark)" srcset="assets/feature-02-dark.svg">
108
+ <img alt="Blender-ready scenes, game hierarchy, materials and lighting" src="assets/feature-02-light.svg" width="32%">
109
+ </picture>
110
+ <picture>
111
+ <source media="(prefers-color-scheme: dark)" srcset="assets/feature-03-dark.svg">
112
+ <img alt="Private by design, your own account login, keys stay in SQLite" src="assets/feature-03-light.svg" width="32%">
113
+ </picture>
114
+
115
+ - **Full pipeline**: one command goes from weapon catalog to keys, download, decryption and unpacking. Downloads run in parallel, respect rate limits and resume after interruptions.
116
+ - **Blender-ready scenes**: `build-scene` rebuilds the assembled weapon exactly like in game: part hierarchy and positions, game materials with textures, camera and studio lighting, real-world scale. UI arrows, cutaway meshes and VFX are classified and skipped unless you ask for them with `--extras`.
117
+ - **Disassembly states**: `--state field-strip` puts parts where the game itself puts them after removal, `--state exploded` pushes them apart along removal directions, `--state parts` lays everything out in a grid. `--assembly-steps` writes a step-by-step build, and `--animated` adds one glTF animation placing part after part.
118
+ - **Offline HTML viewer**: `--viewer` embeds the scene and the three.js runtime into one `viewer.html`: open it in any browser, click parts to highlight them, read annotations with part sizes. No Blender, no internet, no install.
119
+ - **Animations**: `--animations` embeds the bundle's operate animation (fire, reload, safety) as real glTF animation tracks.
120
+ - **Export formats**: `--format stl,usd,usdz,fbx` converts a built scene: binary STL for slicers (units baked in), USD/USDZ for AR with preview materials, FBX through headless Blender.
121
+ - **Print preparation**: `print-export` repairs and checks every part with trimesh, reports watertight status per part and writes millimeter-true STLs.
122
+ - **Previews and video**: `render` turns a built scene into transparent turntable PNGs plus a GIF, `--video` encodes an orbit MP4 or one animation clip, all through headless Blender.
123
+ - **Catalog**: `catalog` lists every weapon with its pipeline status and sizes, filters by name and stage, and emits a stable JSON schema other tools build on.
124
+ - **Web UI**: `serve` opens a local page with the same catalog, a 3D viewer per weapon and stage buttons with live logs.
125
+ - **Protocol probe**: `info --protocol-probe` answers "did I break something or did the game update" in one run: endpoint reachability, anonymous query, authenticated key query, weapon list, client version. Any failure exits with code 2.
126
+ - **Plugins**: third-party packages register extra Unity-type extractors through entry points, no fork needed (see [docs/plugins.md](docs/plugins.md)).
127
+ - **Localization**: `--locale ru` switches CLI messages to Russian, unknown locales fall back to English silently.
128
+ - **Private by design**: log in with your own game account (`login` / `register`) or a captured session. Credentials, sessions, keys and the weapon list live in a per-user SQLite database with owner-only permissions, no secrets ship with the repository.
129
+
130
+ ## Quick start
131
+
132
+ ### Requirements
133
+
134
+ - Python 3.12+
135
+ - [uv](https://github.com/astral-sh/uv) (recommended) or pip
136
+ - A game account: create one with `wog-dump register` or use your existing email/password
137
+ - Internet connection and ~10–20 GB of free disk space for a full extraction
138
+ - Optional: [AssetStudio](https://github.com/Perfare/AssetStudio) for browsing raw Unity bundles manually
139
+ - Optional: Blender, for preview renders, videos and FBX export
140
+
141
+ ### Install
142
+
143
+ From [PyPI](https://pypi.org/project/rewog/):
144
+
145
+ ```bash
146
+ pip install rewog
147
+
148
+ # USD/USDZ export support:
149
+ pip install "rewog[usd]"
150
+ # local web UI:
151
+ pip install "rewog[web]"
152
+ # print preparation:
153
+ pip install "rewog[print]"
154
+ ```
155
+
156
+ From source (for development):
157
+
158
+ ```bash
159
+ git clone https://github.com/InzGIBA/ReWOG
160
+ cd ReWOG
161
+
162
+ # with uv (install it via https://astral.sh/uv or `pip install uv`)
163
+ uv pip install -e .
164
+
165
+ # or with plain pip
166
+ pip install -e .
167
+ ```
168
+
169
+ ### Run your first extraction
170
+
171
+ ```bash
172
+ # 1. Create a game account and log in (once; or `wog-dump login` for an existing one)
173
+ wog-dump register
174
+
175
+ # 2. Everything: weapon list, keys, download, decrypt, unpack, normal maps
176
+ wog-dump full-pipeline --update-keys --convert-normals
177
+
178
+ # 3. Rebuild one weapon as a Blender-ready scene
179
+ wog-dump build-scene ak47
180
+ ```
181
+
182
+ Data lands under `runtime/`:
183
+
184
+ ```text
185
+ runtime/
186
+ ├── encrypted/ # raw encrypted Unity3D bundles
187
+ ├── decrypted/ # decrypted bundles
188
+ ├── unpacked/ # extracted models (OBJ) and textures (PNG, TGA)
189
+ └── scenes/ak47/ # ak47.glb + blender_setup.py + scene.json + textures/
190
+ ```
191
+
192
+ Open `runtime/scenes/ak47/ak47.glb` in Blender (`File > Import > glTF 2.0`), or run the generated setup script for a configured scene with collections, hidden extras and a saved `.blend`:
193
+
194
+ ```bash
195
+ blender --background --python runtime/scenes/ak47/blender_setup.py
196
+ ```
197
+
198
+ ### Then try this
199
+
200
+ ```bash
201
+ # Disassembly poses, straight from the game's own removal data
202
+ wog-dump build-scene ak47 --state field-strip
203
+ wog-dump build-scene ak47 --state exploded --explode-distance 0.5
204
+
205
+ # A step-by-step build plus one animated assembly GLB
206
+ wog-dump build-scene ak47 --assembly-steps 5 --animated
207
+
208
+ # Show it to someone without Blender
209
+ wog-dump build-scene ak47 --viewer --annotate
210
+
211
+ # Print a part
212
+ wog-dump print-export ak47 --part bolt
213
+
214
+ # Turntable previews and an orbit video
215
+ wog-dump render ak47
216
+ wog-dump render ak47 --video --duration 8
217
+
218
+ # What do I have, and how do I share this page?
219
+ wog-dump catalog
220
+ wog-dump serve
221
+ ```
222
+
223
+ ## Usage
224
+
225
+ ### Step by step
226
+
227
+ Each pipeline stage is also available as its own command:
228
+
229
+ ```bash
230
+ wog-dump info # configuration and status; add --protocol-probe
231
+ wog-dump download-weapons # fetch the weapon catalog
232
+ wog-dump download-assets --update-keys # download bundles + fresh keys
233
+ wog-dump decrypt-assets # XOR-decrypt the bundles
234
+ wog-dump unpack-assets # extract models and textures
235
+ wog-dump build-scene ak47 # Blender-ready glTF scene
236
+ wog-dump render ak47 # turntable previews; --video for MP4
237
+ wog-dump print-export ak47 # print-ready STLs with diagnostics
238
+ wog-dump catalog # per-weapon status table
239
+ wog-dump convert-normals ./unpacked --recursive # optional: fix normal maps
240
+ ```
241
+
242
+ Every command documents itself: `wog-dump --help` and `wog-dump <command> --help`.
243
+
244
+ ### Common options
245
+
246
+ | Option | Purpose | Example |
247
+ | --- | --- | --- |
248
+ | `--weapons` | Limit a command to specific weapons | `--weapons "ak74,m4a1,glock17"` |
249
+ | `--update-keys` | Fetch fresh decryption keys first | `wog-dump download-assets --update-keys` |
250
+ | `--check-only` | Preview pending downloads without fetching | `wog-dump download-assets --check-only` |
251
+ | `--validate` | Verify decrypted files after decryption | `wog-dump decrypt-assets --validate` |
252
+ | `--extras` | Include UI arrows, cutaway meshes and VFX in a scene | `wog-dump build-scene ak47 --extras all` |
253
+ | `--state` | Disassembly pose: `field-strip`, `exploded`, `parts` | `wog-dump build-scene ak47 --state exploded` |
254
+ | `--assembly-steps` / `--animated` | Step-by-step build, add a placing animation | `wog-dump build-scene ak47 --assembly-steps 5 --animated` |
255
+ | `--animations` | Embed the operate animation in the GLB | `wog-dump build-scene ak47 --animations` |
256
+ | `--viewer` / `--annotate` | Self-contained HTML viewer, add part markers | `wog-dump build-scene ak47 --viewer --annotate` |
257
+ | `--format` | Extra formats: `stl`, `usd`, `usdz`, `fbx` | `wog-dump build-scene ak47 --format stl,usdz --stl-units mm` |
258
+ | `--video` / `--clip` | Orbit MP4 or one animation clip | `wog-dump render ak47 --video --clip "Take 001"` |
259
+ | `--part` / `--merge` | Print single parts or one combined layout | `wog-dump print-export ak47 --merge` |
260
+ | `--locale` | Message language (`ru` ships a catalog) | `wog-dump --locale ru catalog` |
261
+ | `--no-progress` | Disable progress bars (also automatic for piped output) | `wog-dump --no-progress full-pipeline` |
262
+ | `--max-threads` | Worker threads (global option, default 4) | `wog-dump --max-threads 16 full-pipeline` |
263
+ | `--verbose` / `--debug` | Increase logging detail | `wog-dump --debug full-pipeline` |
264
+
265
+ ### Scene output
266
+
267
+ `build-scene` writes everything you need into `runtime/scenes/<weapon>/`:
268
+
269
+ ```text
270
+ <weapon>.glb # full scene: hierarchy, materials, camera, studio lights
271
+ blender_setup.py # one-click Blender import + collections + .blend save
272
+ scene.json # manifest: state, placements, counts, skipped objects, parts
273
+ viewer.html # offline viewer (with --viewer, annotations with --annotate)
274
+ textures/ # source PNG textures (also embedded in the GLB)
275
+ previews/ # turntable PNGs + preview.gif (from wog-dump render)
276
+ renders/ # orbit / clip MP4s (from wog-dump render --video)
277
+ print/ # STLs + print_report.json (from wog-dump print-export)
278
+ ```
279
+
280
+ Non-assembled states go to sibling folders: `<weapon>-field-strip/`, `<weapon>-exploded/`, `<weapon>-parts/`, and `<weapon>-steps/` for step builds.
281
+
282
+ ### Cache management
283
+
284
+ ```bash
285
+ wog-dump cache --migrate # import legacy weapons.txt / keys.txt
286
+ wog-dump cache --show-cache # detailed cache statistics
287
+ wog-dump cache --validate-assets # check downloads exist and are non-empty
288
+ ```
289
+
290
+ ### Web UI
291
+
292
+ A local web UI over the same pipeline: catalog with statuses, a 3D viewer per weapon and stage buttons with live logs. Needs the web extra, binds 127.0.0.1 with a per-start token URL.
293
+
294
+ ```bash
295
+ pip install "rewog[web]"
296
+ wog-dump serve
297
+ ```
298
+
299
+ ### Docker
300
+
301
+ No local Python needed, all state lives in a named volume mounted at `/data`:
302
+
303
+ ```bash
304
+ docker run --rm -it -v wog-data:/data ghcr.io/inzgiba/rewog:latest catalog
305
+ docker run --rm -it -v wog-data:/data ghcr.io/inzgiba/rewog:latest full-pipeline --update-keys
306
+ docker compose run --rm wog catalog # from the repo, via docker-compose.yml
307
+ ```
308
+
309
+ Images publish to GHCR on release tags (`latest` plus semantic versions), pull requests build the image without pushing.
310
+
311
+ ### Using as a Python library
312
+
313
+ ```python
314
+ from wog_dump.core.catalog import build_catalog
315
+ from wog_dump.core.config import get_config
316
+ from wog_dump.core.download import DownloadManager
317
+ from wog_dump.core.decrypt import KeyManager, AssetDecryptor
318
+
319
+ config = get_config()
320
+
321
+ with DownloadManager(config) as downloader:
322
+ successful, failed = downloader.download_assets(["ak74", "m4a1"])
323
+
324
+ key_manager = KeyManager(config)
325
+ keys = key_manager.load_keys()
326
+
327
+ decryptor = AssetDecryptor(config)
328
+ decrypted_files, failed_assets = decryptor.decrypt_all_assets(keys)
329
+
330
+ # Catalog status without the CLI
331
+ for entry in build_catalog(config):
332
+ if entry.scene:
333
+ print(entry.name, entry.size_bytes)
334
+ ```
335
+
336
+ More library entry points: `core.export.convert_format` (GLB to STL/USD/FBX), `core.render.RenderManager` (previews and video), `core.viewer.render_viewer_html` (offline viewer), `core.probe.ProtocolProbe` (compatibility check). The API reference pages live in the docs site.
337
+
338
+ ## Configuration
339
+
340
+ Settings come from a gitignored `.env` in the repository root (see [`.env.example`](.env.example)) or from the environment. Credentials, sessions, keys and the weapon list are stored in a per-user SQLite database, never in the repository.
341
+
342
+ | Setting | Required | Default | Description |
343
+ | --- | --- | --- | --- |
344
+ | `WOG_ACCOUNT_EMAIL` / `WOG_ACCOUNT_PASSWORD` | No | — | Game account for automatic login (alternative to a captured session) |
345
+ | `WOG_AUTH_ID` / `WOG_AUTH_SESSION` | No | — | Captured client session from your own traffic ([guide](docs/mitm-capture.md)) |
346
+ | `WOG_DEVICE_ID` | No | generated | Device id sent to the API |
347
+ | `WOG_DB_PATH` | No | OS user data dir | Location of the per-user SQLite database |
348
+ | `WOG_API_BASE_URL` | No | `https://eu1.ultimate-disassembly.com/v/query2026.php` | Key API endpoint |
349
+ | `WOG_DATA_BASE_URL` | No | `https://data1eu.ultimate-disassembly.com/uni2018` | Asset download server |
350
+ | `WOG_GAME_VERSION` | No | `2.2.3t6` | Client version string validated by the server |
351
+ | `WOG_UNITY_VERSION` | No | `6000.0.84f1` | Unity version string |
352
+ | `WOG_LANG` | No | `en` | Language code sent with login queries |
353
+ | `WOG_LOCALE` | No | `en` | CLI message language (`ru` ships a catalog) |
354
+ | `WOG_NO_PROGRESS` | No | unset | Set to disable progress bars (same as `--no-progress`) |
355
+ | `WOG_BLENDER_PATH` | No | found on PATH | Blender binary for previews, videos and FBX |
356
+ | `WOG_API_REQUEST_DELAY` | No | `0.25` | Seconds between key-API requests (raise on 429) |
357
+ | `WOG_REQUEST_DELAY` | No | `0.1` | Seconds between asset downloads (raise on 429) |
358
+ | `WOG_MAX_THREADS` | No | `4` | Worker threads (1–16) |
359
+ | `WOG_LOG_LEVEL` | No | `INFO` | Log file verbosity (`DEBUG`/`INFO`/`WARNING`/`ERROR`) |
360
+ | `WOG_LOG_DIR` | No | next to the database | Log directory |
361
+
362
+ In-depth references:
363
+
364
+ - **[docs/configuration.md](docs/configuration.md)**: every environment variable, `.env` setup, rate limiting, resumable downloads
365
+ - **[docs/architecture.md](docs/architecture.md)**: how the modules fit together, the extraction pipeline
366
+ - **[docs/database.md](docs/database.md)**: where keys and credentials live, schema, migration from pre-2.4 files
367
+ - **[docs/mitm-capture.md](docs/mitm-capture.md)**: capturing keys and identity from your own game traffic
368
+ - **[docs/plugins.md](docs/plugins.md)**: writing third-party extractor plugins
369
+ - **[docs/research-disassembly-data.md](docs/research-disassembly-data.md)**: where the disassembly poses come from
370
+ - **[docs/benchmarks-download.md](docs/benchmarks-download.md)**: download transport benchmark and decisions
371
+
372
+ ## Development
373
+
374
+ ```bash
375
+ git clone https://github.com/InzGIBA/ReWOG
376
+ cd ReWOG
377
+ uv pip install -e ".[dev]" # or: pip install -e ".[dev]"
378
+ ```
379
+
380
+ ### Checks
381
+
382
+ ```bash
383
+ pytest # all tests
384
+ pytest --cov=wog_dump # with coverage (gate: 85 percent, see .coveragerc)
385
+ pytest -m live # against the real servers (needs auth in .env)
386
+
387
+ black src/ tests/ # formatting
388
+ isort src/ tests/
389
+ mypy src/ # type checking
390
+ flake8 src/ tests/ # linting
391
+ mkdocs serve # docs site preview
392
+ ```
393
+
394
+ ### Project structure
395
+
396
+ <details>
397
+ <summary>Directory map</summary>
398
+
399
+ ```text
400
+ ReWOG/
401
+ ├── src/wog_dump/ # Main package (source layout)
402
+ │ ├── core/ # config, http, api, auth, database, keys, paths,
403
+ │ │ # download, decrypt, unpack, scene, scene_states,
404
+ │ │ # scene_steps, anim, transforms, glb, export, viewer,
405
+ │ │ # render, printprep, catalog, probe, key_import, webapp
406
+ │ ├── resources/ # Blender scripts, viewer runtime and templates
407
+ │ ├── utils/ # logging, normal maps, i18n, progress
408
+ │ └── cli/ # Click commands: download, decrypt, unpack, scene,
409
+ │ # render, print-export, catalog, pipeline, auth,
410
+ │ # cache, info, serve, convert
411
+ ├── tests/ # unit/ + integration/ (CLI end-to-end, real bundles)
412
+ ├── docs/ # guides, architecture, plugins, benchmarks, API reference
413
+ ├── blender-addon/ # Blender 4.2+ extension over the CLI
414
+ ├── examples/ # example extractor plugin
415
+ ├── scripts/ # addon zip, locale compiler, benchmark and audit tools
416
+ └── pyproject.toml # PEP 621 packaging
417
+ ```
418
+
419
+ </details>
420
+
421
+ ## FAQ
422
+
423
+ ### General
424
+
425
+ **Do I need to own the game?**
426
+ The tool downloads public asset files from the game's servers. Ownership is not required. We still recommend owning the game to support the developers.
427
+
428
+ **What formats does WOG Dump export?**
429
+ Blender-ready glTF 2.0 scenes (`build-scene`), OBJ models, PNG/TGA textures, converted normal maps, binary STL (plain or print-prepared), USD and USDZ packages, FBX through Blender, and self-contained HTML viewers.
430
+
431
+ **How do I get a disassembled weapon?**
432
+ Use a state: `wog-dump build-scene ak47 --state field-strip` places parts exactly where the game puts them after removal. `--state exploded` spreads parts along removal directions, `--state parts` lays everything out in a grid. `--assembly-steps 5 --animated` adds a step-by-step build and one placing animation.
433
+
434
+ **Can I show a scene to someone without Blender?**
435
+ Yes: `wog-dump build-scene ak47 --viewer` produces one `viewer.html` file. Open it in any browser, click parts to highlight them, read sizes in the annotation cards. Share the file directly, it needs no internet.
436
+
437
+ **Which operating systems are supported?**
438
+ Windows, macOS and Linux. The tool is pure Python (no C dependencies since v2).
439
+
440
+ **How much disk space do I need?**
441
+ Encrypted ~2–5 GB, decrypted ~2–5 GB, extracted ~3–8 GB. Plan for **10–20 GB** free.
442
+
443
+ ### Troubleshooting
444
+
445
+ **Everything broke after a game update**
446
+ Run `wog-dump info --protocol-probe` first. It checks endpoint reachability, the anonymous query, the authenticated key query, the weapon list asset and your client version, and tells you whether the problem is local or the game protocol moved. Any FAIL exits with code 2, report drifts with the [protocol drift template](https://github.com/InzGIBA/ReWOG/issues/new?template=protocol_drift.md).
447
+
448
+ **`No game account configured` when fetching keys**
449
+ The key API needs authentication. Run `wog-dump register` (new account), `wog-dump login` (existing one), or put `WOG_ACCOUNT_EMAIL`/`WOG_ACCOUNT_PASSWORD`, or a captured `WOG_AUTH_ID`/`WOG_AUTH_SESSION`, into `.env` (see [docs/mitm-capture.md](docs/mitm-capture.md)). Check what is configured with `wog-dump cache`.
450
+
451
+ **`Authentication failed (result=100)`**
452
+ The API rejected the credentials. Verify the email/password pair in the game client itself, then `wog-dump login` again. A captured session expires sometimes. Capture a fresh one or switch to account login.
453
+
454
+ **`Session rejected (result=1000)`**
455
+ The stored session expired. WOG Dump re-logins automatically, if the error persists, run `wog-dump logout && wog-dump login`.
456
+
457
+ **`429` / rate-limit errors**
458
+ Requests are too frequent. Raise the throttles in `.env`: `WOG_API_REQUEST_DELAY=2.0` (key API) and `WOG_REQUEST_DELAY=0.5` (downloads).
459
+
460
+ **`No weapon list found. Run 'download-weapons' first.`**
461
+ Run `wog-dump download-weapons`. Coming from a pre-2.4 installation with `runtime/weapons.txt`? Import it once with `wog-dump cache --migrate`.
462
+
463
+ **`No decryption keys found. Use --update-keys to fetch them.`**
464
+ Run `wog-dump decrypt-assets --update-keys` (auth must be configured).
465
+
466
+ **Key API stopped working after a game update**
467
+ The client version strings are validated server-side. Update them in `.env` to match the current client (find the values in the game's installation or a fresh capture), e.g. `WOG_GAME_VERSION=2.2.3u9` and `WOG_UNITY_VERSION=6000.0.84f1`.
468
+
469
+ **Interrupted download: do I have to start over?**
470
+ No. Partial downloads are kept as `runtime/assets/*.tmp` and resumed via HTTP `Range` requests on the next run. If a `.tmp` file refuses to go away, delete the file to force a fresh download.
471
+
472
+ **The tool seems stuck or slow**
473
+ Check your internet connection, reduce the thread count (`wog-dump --max-threads 2 download-assets`), enable `--verbose` (or `--debug`), and remember that downloads are throttled by design (see `WOG_REQUEST_DELAY`).
474
+
475
+ **Previews or videos say "Blender not found"**
476
+ Install Blender, or point `WOG_BLENDER_PATH` in `.env` at the binary. Renders use CPU Cycles, so no GPU is required.
477
+
478
+ ## Blender addon
479
+
480
+ A native Blender extension (4.2+) over the same CLI: browse the catalog in a sidebar panel, build missing scenes and import the GLB without a terminal. Install the zip from a release, enable it in preferences, set the runtime directory. See [blender-addon/README.md](blender-addon/README.md).
481
+
482
+ ## Contributing
483
+
484
+ Issues and pull requests are welcome: bug fixes, features, documentation, tests, plugins and localization all help. For larger changes, open an issue first to discuss the approach.
485
+
486
+ 1. Fork and clone the repository, then `uv pip install -e ".[dev]"`.
487
+ 2. Create a feature branch and make a focused change.
488
+ 3. Add or update relevant tests and docs, run `pytest`, `black src/ tests/` and `mkdocs build --strict`.
489
+ 4. Open a pull request.
490
+
491
+ - [Contributing Guidelines](CONTRIBUTING.md): the detailed contribution process
492
+ - [Issue Tracker](https://github.com/InzGIBA/ReWOG/issues): bug reports and feature requests
493
+ - [Discussions](https://github.com/InzGIBA/ReWOG/discussions): questions and general help
494
+ - [Code of Conduct](CODE_OF_CONDUCT.md): community standards
495
+
496
+ ## Support
497
+
498
+ Where to get help, in the order we recommend:
499
+
500
+ 1. The [FAQ](#faq) above
501
+ 2. **[SUPPORT.md](SUPPORT.md)**: diagnostics and common solutions
502
+ 3. **[GitHub Issues](https://github.com/InzGIBA/ReWOG/issues)**: bug reports and feature requests (public, searchable)
503
+ 4. **[GitHub Discussions](https://github.com/InzGIBA/ReWOG/discussions)**: questions and general help
504
+
505
+ Please use the public channels so answers remain useful to others. For security-sensitive reports only, email the maintainer directly: [inzgiba@gmail.com](mailto:inzgiba@gmail.com).
506
+
507
+ ## License
508
+
509
+ Released under the MIT License, see [LICENSE](LICENSE).
510
+
511
+ **Legal disclaimer.** This tool is intended for educational and research purposes only. Extracted assets remain the intellectual property of Noble Empire Corp., ensure compliance with the game's Terms of Service, use extracted content only for personal, educational or research purposes, and do not redistribute game assets or use them commercially. The authors and contributors are not responsible for any misuse of this software or violation of terms of service. For questions about asset usage rights, contact Noble Empire Corp. directly.
512
+
513
+ ## Acknowledgements
514
+
515
+ - [DeadZoneGarry](https://github.com/DeadZoneLuna): original decryption research
516
+ - [Noble Empire Corp.](https://noble-empire.com/news.php): the game and its assets
517
+ - [three.js](https://threejs.org) contributors: the viewer runtime (MIT, vendored)
518
+ - Contributors to the original WOG Dump project
@@ -0,0 +1,70 @@
1
+ wog_dump/__init__.py,sha256=1a4aZgR9jdXDTCRmwC-2hPDq6QY1Gi38Eg2R3cIb7uE,781
2
+ wog_dump/cli/__init__.py,sha256=bJtcNJltyvgvYYTd9bC7Wz5mU7fYO3vgdVy4M5LgnDk,43
3
+ wog_dump/cli/auth.py,sha256=Ha0Yb7VX9LC6CDnGtIES870YKXegnVtNGoGo1QUlH-Q,4110
4
+ wog_dump/cli/cache.py,sha256=su8V5dZ3D2FoW0J17HXH1247FPbMskOfn-fo_oClDes,4550
5
+ wog_dump/cli/catalog.py,sha256=FP3AIgdLeDCb-YTdCDuNgnFrqa6ntQ2YvPaM3F52SRo,4865
6
+ wog_dump/cli/convert.py,sha256=Jz3rU8H5Tcgie2k6qQqq2Zfjcb42TZi1PFFH-TqOE9g,2090
7
+ wog_dump/cli/decrypt.py,sha256=wgYOmfXvaoiPZ__CtOgWD7hG81Bg5eCrr_2uHri6p18,3950
8
+ wog_dump/cli/download.py,sha256=xWt71CfZPtrdca2EdaPDMR08MfX1qhK5TjZEm0mtDW0,8195
9
+ wog_dump/cli/errors.py,sha256=rRCo2W3qD740QUrLvOFwTSfrxrqh3bA3ygk38vzBwBk,2151
10
+ wog_dump/cli/info.py,sha256=yemsp_fc-NNSo03k1DmlOdjlhkQ1AS48VZRaFT7WUQ4,6579
11
+ wog_dump/cli/main.py,sha256=3jE90lSm4HMfKdAodQ2DADOOGSM6kLNOXoyOMckr3aM,8112
12
+ wog_dump/cli/pipeline.py,sha256=GoDldlCUFm11f3-rBDRr3sSyzXNMsWcg4r0em-Hwv68,5640
13
+ wog_dump/cli/print_export.py,sha256=ZEmrNqxvqyv4vRhNuN1DF1QG5IYfj0I5PdEFq6gGO78,3374
14
+ wog_dump/cli/render.py,sha256=X9Y1xTZrkl6EwDknQqNch5eI_gp0JD_p1ehe3lpzdus,5527
15
+ wog_dump/cli/scene.py,sha256=N-PglLToPjQXq3qNVnEIptCB5N5O211ZY19EmTLknig,7690
16
+ wog_dump/cli/serve.py,sha256=s2nfXTYgP-FAvWDNA0j2ljHwD0JygjR9lUh6fMoUnnA,1740
17
+ wog_dump/cli/unpack.py,sha256=K7LsUCmDZXt1daUyBtLlPN0e11zULGAsC7F9jH3GeYY,3605
18
+ wog_dump/core/__init__.py,sha256=7q7bKOOY6kFOoh6JiK7jnKkxNIPLe1HGa48mCYPs1ao,39
19
+ wog_dump/core/anim.py,sha256=4TVXYa8gI93H3vBkovYYbDHo9K6ruvR8uecveJfqHKw,3338
20
+ wog_dump/core/api.py,sha256=ztmgYVlrsWHptV8yyliUquOmchn7PjxGDG2g7fnBk6g,5378
21
+ wog_dump/core/auth.py,sha256=d25fUFOpKkAcibxJNbZyfHmMUrf0H6f2ifcU2LQidWE,18380
22
+ wog_dump/core/catalog.py,sha256=MEA4GoVC5kR8aeLMzxZxZp55gSp620N6kYsmPZ7dIag,3783
23
+ wog_dump/core/config.py,sha256=-4ywxrhWrM-2Z-y8pw4iwSCCIEUZ1-u2_25ogBaMn_g,12362
24
+ wog_dump/core/database.py,sha256=efKoDKCyII2wDNuzi8apt5fSrex3Ael0RG410t94QS4,14302
25
+ wog_dump/core/decrypt.py,sha256=H932uDdNPHg4C14elHBsbkm1n1QJ2_dyunRkTTu19bE,11457
26
+ wog_dump/core/download.py,sha256=4yzvUh_2_UVhRzYfyBA5-SYlS4k8rY9T0pIwNI3spPk,26678
27
+ wog_dump/core/export.py,sha256=96e5kX_dMI0ubRBzsXCw7DnS1iGbjwxHxdWVODPulmw,22724
28
+ wog_dump/core/glb.py,sha256=RT8QQiLtNiMD3n9xqlWA2yRxYFZYrbaMIRmGxu0fwAo,23191
29
+ wog_dump/core/http.py,sha256=4-GkvDBHS2V7DmjXPW5x1OeinGRo8oLUkiY_wSE-tZc,2295
30
+ wog_dump/core/key_import.py,sha256=b_JNbsIP62zdrRJMG0firexr7WRu_Mge9nyCCY8CLjo,17288
31
+ wog_dump/core/keys.py,sha256=1QeyumIwQEZdevDNE9nBOl5P3Y96zb2BXSIRMwkKDgs,10981
32
+ wog_dump/core/paths.py,sha256=OEnytNA1zCuughbIrKGAOpRafc-et8APIdyMw_tNY_8,2346
33
+ wog_dump/core/printprep.py,sha256=tzoXklZ8i7RQ1SJDKGw6kfJvpCt25W6i_bJnlSiO8To,8085
34
+ wog_dump/core/probe.py,sha256=k45LiJm90UWD8xdj35xwFp3TG31xybL_ELYAnTG6WI8,7042
35
+ wog_dump/core/render.py,sha256=um9yG8kmDjiOiUzzlTeAVdmczlzRxyaCvSgcpaBrK-k,11514
36
+ wog_dump/core/scene.py,sha256=R6-SD2nPtgUP8iUYAMsCzSfBDvckxNrNiScpFe2Znmw,52271
37
+ wog_dump/core/scene_states.py,sha256=NzmbWUBP6J0lkIUGMKcQDKriXjMSFWaLddBEPe8m0yw,15123
38
+ wog_dump/core/scene_steps.py,sha256=Mnh8832qwX4Mz490QfTkkxhsqyL7p6yWKaHE2wduLQo,2547
39
+ wog_dump/core/transforms.py,sha256=Rl-8Pt6hz8572wABqf1YOKXDjgFEO13XOQMbjpB-Ogw,5879
40
+ wog_dump/core/unpack.py,sha256=mEVzzruR6N1bEdZEZysuC8bxbb0VpxJ34jdDd0HqA04,30852
41
+ wog_dump/core/viewer.py,sha256=VUYf8bSqgLIEAabCnkhv6pokd-8CWJMs5sbsjV2Gx4w,4479
42
+ wog_dump/core/webapp/__init__.py,sha256=hTrsRlGqlEu68dhnoDNk1yBCPGhheh3quslkNchGAgs,47
43
+ wog_dump/core/webapp/app.py,sha256=ATBDSUCYNXb6HYelun7Oy0Ppq8nXzFJK6d3bMN7ceIk,7825
44
+ wog_dump/core/webapp/static/app.js,sha256=OfPJbgvOczJg3kZr29n3usvQYO62CfNz4GqvOhoUcFc,1958
45
+ wog_dump/core/webapp/static/index.html,sha256=0YCXIrGtwTRrI4lpSpjnowJyr6kS5rE-nHo_rzKekOI,932
46
+ wog_dump/core/webapp/static/weapon-view.js,sha256=1gXk4TXiZtIeSFf0Fh30zc844uMpoXrLL8yWIq20fKU,4115
47
+ wog_dump/core/webapp/static/weapon.html,sha256=ZXUSJYdSJLD0qUVhueMyU64ME_Jh3SPLpy30Um3Sjlo,1557
48
+ wog_dump/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ wog_dump/resources/blender_setup.py,sha256=qMgJYhUqAWGzFUDZP2ie4zsxEQ-A5dCRepowoSbKbjc,5928
50
+ wog_dump/resources/render_turntable.py,sha256=bL3C2Jmyo0SukhrozALG2LyxAGnltwhGKXUQAwXdXgc,3636
51
+ wog_dump/resources/render_video.py,sha256=jSRcC1-L2x4oR3n3Xa4ZT4H2RqjXSvvL9qTuE8BoyWs,4147
52
+ wog_dump/resources/locales/ru/LC_MESSAGES/wog_dump.po,sha256=G65Rlia-BOuT9MOY-xGyvW9xE6MhhjENpBH1Ub8crQA,1874
53
+ wog_dump/resources/viewer/template.html,sha256=gxj5y45BqtFHC_QaLI5hE3wt11caGuO1AhPRVVElq8E,2565
54
+ wog_dump/resources/viewer/viewer.js,sha256=IEReM6r4uvgn2cnlJ2PHFVhuOlwp47LSzdth7VO-7io,10309
55
+ wog_dump/resources/viewer/vendor/LICENSE,sha256=TECh72JFC4V8OyqvKUk2MEzVUtll-82dMtTFvPS6RFQ,1081
56
+ wog_dump/resources/viewer/vendor/PATCHES.md,sha256=u87vHCSlDC7OayLZdgHEO0t9BlW51zAYRis6-bJRT7Q,341
57
+ wog_dump/resources/viewer/vendor/three.module.min.js,sha256=CP11RdE9LH-2WraRUwqALa_v1jhZZQGFTyZ9D7E8Oec,691648
58
+ wog_dump/resources/viewer/vendor/addons/controls/OrbitControls.js,sha256=gO-q3qT4pjamX7C9CL_vYvPZOgu5Ti51APIxdsXAf04,32134
59
+ wog_dump/resources/viewer/vendor/addons/loaders/GLTFLoader.js,sha256=xlpn3k17--VgfmggrvIVE061FGWXd6uWh2uwXIMn854,110283
60
+ wog_dump/resources/viewer/vendor/addons/utils/BufferGeometryUtils.js,sha256=wlt5MOVw6exWFzzTuGbsjS4QAWYw2zk377Q52vHO2_Y,31768
61
+ wog_dump/utils/__init__.py,sha256=_TXdRCmm21A8nrpHR43hZ3Ps-WVRJr8l--q8lGUgf_A,38
62
+ wog_dump/utils/i18n.py,sha256=SyoBkCpSbz4yNk3BsM6uZuhb2-6hwA8GbHB-aG7cRlM,2481
63
+ wog_dump/utils/logging.py,sha256=hqHqR9jtlOWvire1_ogayN2RgmmjZPfZbUmjZrjS-8k,20046
64
+ wog_dump/utils/normal_map.py,sha256=F-k37iDPS4qGA0mJ8PgzjkGfe9slX2uY0FD3dDii898,12135
65
+ wog_dump/utils/progress.py,sha256=63GOnc2AacIU0LMhml1QQz3L_v4xMjku51yyog3cgn8,3009
66
+ rewog-3.0.0.dist-info/METADATA,sha256=YVmt_ys8x1P-juYSuBDZ7AyHJ3dueN-nB1fE9CjDQlw,28499
67
+ rewog-3.0.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
68
+ rewog-3.0.0.dist-info/entry_points.txt,sha256=VPyFfxaWRM6AIWX9n5kas14m6EY8MKL30GjQA8p1GLg,109
69
+ rewog-3.0.0.dist-info/licenses/LICENSE,sha256=ApViGy1oBKE28DGEzMMLLYVPScOJINuy8UyoalAEkMU,1063
70
+ rewog-3.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.33.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ wog-convert-normals = wog_dump.utils.normal_map:cli_main
3
+ wog-dump = wog_dump.cli.main:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 InzGIBA
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.
wog_dump/__init__.py ADDED
@@ -0,0 +1,27 @@
1
+ """WOG Dump - Enhanced tool for extracting 3D models from World of Guns: Gun Disassembly.
2
+
3
+ This package provides a complete pipeline for downloading, decrypting, and unpacking
4
+ 3D gun models from World of Guns: Gun Disassembly with modern Python features,
5
+ comprehensive error handling, and performance monitoring.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ __version__ = "3.0.0"
11
+ __author__ = "hampta, inzgiba"
12
+ __email__ = "inzgiba@gmail.com"
13
+ __license__ = "MIT"
14
+ __description__ = (
15
+ "Enhanced tool for extracting 3D models from World of Guns: Gun Disassembly"
16
+ )
17
+
18
+ # Version info tuple for programmatic access
19
+ VERSION_INFO = tuple(int(x) for x in __version__.split("."))
20
+
21
+ __all__ = [
22
+ "__version__",
23
+ "__author__",
24
+ "__email__",
25
+ "__description__",
26
+ "VERSION_INFO",
27
+ ]
@@ -0,0 +1 @@
1
+ """Command-line interface for WOG Dump."""