pywargame 0.3.1__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 (150) hide show
  1. pywargame/__init__.py +2 -0
  2. pywargame/common/__init__.py +3 -0
  3. pywargame/common/collector.py +87 -0
  4. pywargame/common/dicedraw.py +363 -0
  5. pywargame/common/drawdice.py +40 -0
  6. pywargame/common/singleton.py +22 -0
  7. pywargame/common/test.py +25 -0
  8. pywargame/common/verbose.py +59 -0
  9. pywargame/common/verboseguard.py +53 -0
  10. pywargame/cyberboard/__init__.py +18 -0
  11. pywargame/cyberboard/archive.py +283 -0
  12. pywargame/cyberboard/base.py +63 -0
  13. pywargame/cyberboard/board.py +462 -0
  14. pywargame/cyberboard/cell.py +200 -0
  15. pywargame/cyberboard/collect.py +49 -0
  16. pywargame/cyberboard/collectgbx0pwd.py +30 -0
  17. pywargame/cyberboard/collectgbxext.py +30 -0
  18. pywargame/cyberboard/collectgsnexp.py +32 -0
  19. pywargame/cyberboard/collectgsnext.py +30 -0
  20. pywargame/cyberboard/draw.py +396 -0
  21. pywargame/cyberboard/exporter.py +1132 -0
  22. pywargame/cyberboard/extractor.py +240 -0
  23. pywargame/cyberboard/features.py +17 -0
  24. pywargame/cyberboard/gamebox.py +81 -0
  25. pywargame/cyberboard/gbxexp.py +76 -0
  26. pywargame/cyberboard/gbxext.py +64 -0
  27. pywargame/cyberboard/gsnexp.py +147 -0
  28. pywargame/cyberboard/gsnext.py +59 -0
  29. pywargame/cyberboard/head.py +111 -0
  30. pywargame/cyberboard/image.py +76 -0
  31. pywargame/cyberboard/main.py +47 -0
  32. pywargame/cyberboard/mark.py +102 -0
  33. pywargame/cyberboard/palette.py +36 -0
  34. pywargame/cyberboard/piece.py +169 -0
  35. pywargame/cyberboard/player.py +36 -0
  36. pywargame/cyberboard/scenario.py +115 -0
  37. pywargame/cyberboard/testgrid.py +156 -0
  38. pywargame/cyberboard/tile.py +121 -0
  39. pywargame/cyberboard/tray.py +68 -0
  40. pywargame/cyberboard/windows.py +41 -0
  41. pywargame/cyberboard/zeropwd.py +45 -0
  42. pywargame/cyberboard.py +2728 -0
  43. pywargame/gbx0pwd.py +2776 -0
  44. pywargame/gbxextract.py +2795 -0
  45. pywargame/gsnexport.py +16499 -0
  46. pywargame/gsnextract.py +2790 -0
  47. pywargame/latex/__init__.py +2 -0
  48. pywargame/latex/collect.py +34 -0
  49. pywargame/latex/latexexporter.py +4010 -0
  50. pywargame/latex/main.py +184 -0
  51. pywargame/vassal/__init__.py +66 -0
  52. pywargame/vassal/base.py +139 -0
  53. pywargame/vassal/board.py +243 -0
  54. pywargame/vassal/buildfile.py +60 -0
  55. pywargame/vassal/chart.py +79 -0
  56. pywargame/vassal/chessclock.py +197 -0
  57. pywargame/vassal/collect.py +98 -0
  58. pywargame/vassal/collectpatch.py +28 -0
  59. pywargame/vassal/command.py +21 -0
  60. pywargame/vassal/documentation.py +322 -0
  61. pywargame/vassal/dumpcollect.py +28 -0
  62. pywargame/vassal/dumpvsav.py +28 -0
  63. pywargame/vassal/element.py +439 -0
  64. pywargame/vassal/exporter.py +89 -0
  65. pywargame/vassal/extension.py +101 -0
  66. pywargame/vassal/folder.py +103 -0
  67. pywargame/vassal/game.py +940 -0
  68. pywargame/vassal/gameelements.py +1091 -0
  69. pywargame/vassal/globalkey.py +127 -0
  70. pywargame/vassal/globalproperty.py +433 -0
  71. pywargame/vassal/grid.py +573 -0
  72. pywargame/vassal/map.py +1061 -0
  73. pywargame/vassal/mapelements.py +1020 -0
  74. pywargame/vassal/merge.py +57 -0
  75. pywargame/vassal/merger.py +460 -0
  76. pywargame/vassal/moduledata.py +275 -0
  77. pywargame/vassal/mrgcollect.py +31 -0
  78. pywargame/vassal/patch.py +44 -0
  79. pywargame/vassal/patchcollect.py +28 -0
  80. pywargame/vassal/player.py +83 -0
  81. pywargame/vassal/save.py +495 -0
  82. pywargame/vassal/skel.py +380 -0
  83. pywargame/vassal/trait.py +224 -0
  84. pywargame/vassal/traits/__init__.py +36 -0
  85. pywargame/vassal/traits/area.py +50 -0
  86. pywargame/vassal/traits/basic.py +35 -0
  87. pywargame/vassal/traits/calculatedproperty.py +22 -0
  88. pywargame/vassal/traits/cargo.py +29 -0
  89. pywargame/vassal/traits/click.py +41 -0
  90. pywargame/vassal/traits/clone.py +28 -0
  91. pywargame/vassal/traits/delete.py +24 -0
  92. pywargame/vassal/traits/deselect.py +32 -0
  93. pywargame/vassal/traits/dynamicproperty.py +112 -0
  94. pywargame/vassal/traits/globalcommand.py +55 -0
  95. pywargame/vassal/traits/globalhotkey.py +26 -0
  96. pywargame/vassal/traits/globalproperty.py +54 -0
  97. pywargame/vassal/traits/hide.py +67 -0
  98. pywargame/vassal/traits/label.py +76 -0
  99. pywargame/vassal/traits/layer.py +105 -0
  100. pywargame/vassal/traits/mark.py +20 -0
  101. pywargame/vassal/traits/mask.py +85 -0
  102. pywargame/vassal/traits/mat.py +26 -0
  103. pywargame/vassal/traits/moved.py +35 -0
  104. pywargame/vassal/traits/movefixed.py +51 -0
  105. pywargame/vassal/traits/nonrect.py +95 -0
  106. pywargame/vassal/traits/nostack.py +55 -0
  107. pywargame/vassal/traits/place.py +104 -0
  108. pywargame/vassal/traits/prototype.py +20 -0
  109. pywargame/vassal/traits/report.py +34 -0
  110. pywargame/vassal/traits/restrictaccess.py +28 -0
  111. pywargame/vassal/traits/restrictcommand.py +32 -0
  112. pywargame/vassal/traits/return.py +40 -0
  113. pywargame/vassal/traits/rotate.py +62 -0
  114. pywargame/vassal/traits/sendto.py +59 -0
  115. pywargame/vassal/traits/sheet.py +129 -0
  116. pywargame/vassal/traits/skel.py +9 -0
  117. pywargame/vassal/traits/stack.py +28 -0
  118. pywargame/vassal/traits/submenu.py +27 -0
  119. pywargame/vassal/traits/trail.py +61 -0
  120. pywargame/vassal/traits/trigger.py +72 -0
  121. pywargame/vassal/turn.py +272 -0
  122. pywargame/vassal/upgrade.py +191 -0
  123. pywargame/vassal/vmod.py +323 -0
  124. pywargame/vassal/vsav.py +100 -0
  125. pywargame/vassal/widget.py +358 -0
  126. pywargame/vassal/withtraits.py +634 -0
  127. pywargame/vassal/xml.py +4 -0
  128. pywargame/vassal/zone.py +399 -0
  129. pywargame/vassal.py +12500 -0
  130. pywargame/vmodpatch.py +12548 -0
  131. pywargame/vsavdump.py +12533 -0
  132. pywargame/vslmerge.py +13015 -0
  133. pywargame/wgexport.py +16689 -0
  134. pywargame/ztexport.py +14351 -0
  135. pywargame/zuntzu/__init__.py +5 -0
  136. pywargame/zuntzu/base.py +82 -0
  137. pywargame/zuntzu/collect.py +38 -0
  138. pywargame/zuntzu/countersheet.py +250 -0
  139. pywargame/zuntzu/dicehand.py +48 -0
  140. pywargame/zuntzu/exporter.py +936 -0
  141. pywargame/zuntzu/gamebox.py +154 -0
  142. pywargame/zuntzu/map.py +36 -0
  143. pywargame/zuntzu/piece.py +37 -0
  144. pywargame/zuntzu/scenario.py +208 -0
  145. pywargame/zuntzu/ztexp.py +115 -0
  146. pywargame-0.3.1.dist-info/METADATA +353 -0
  147. pywargame-0.3.1.dist-info/RECORD +150 -0
  148. pywargame-0.3.1.dist-info/WHEEL +5 -0
  149. pywargame-0.3.1.dist-info/licenses/LICENSE +5 -0
  150. pywargame-0.3.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,353 @@
1
+ Metadata-Version: 2.4
2
+ Name: pywargame
3
+ Version: 0.3.1
4
+ Summary: Python library to manipulate wargame modules
5
+ Home-page: https://wargames_tex.gitlab.io/pywargame/
6
+ Author: Christian Holm Christensen
7
+ Author-email: cholmcc@gmail.com
8
+ License: CC-BY-SA-4.0
9
+ Project-URL: Documentation, https://wargames_tex.gitlab.io/pywargame
10
+ Project-URL: Source Code, https://gitlab.com/wargmes_tex/pywargame
11
+ Keywords: Boardgame,Wargame,VASSAL,ZunTzu,CyberBoard,LaTeX
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Other Audience
15
+ Classifier: Topic :: Games/Entertainment :: Board Games
16
+ Requires-Python: >=3.6
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: numpy>=1.16
20
+ Requires-Dist: pillow>=10.0.0
21
+ Requires-Dist: svgwrite>=1.3.0
22
+ Requires-Dist: wand>=0.6.0
23
+ Requires-Dist: myst-parser>=4.0.0
24
+ Dynamic: license-file
25
+
26
+ # Python utilities for Wargames
27
+
28
+ This is a collection of various utilities to make things for Computer
29
+ Aided Wargaming (CAW).
30
+
31
+ ## Content
32
+
33
+ - [`pywargame`](pywargame) Top of package
34
+ - [`common`](pywargame/common) Common utilities used by other code.
35
+ - [`vassal`](pywargame/vassal) Read or write
36
+ [VASSAL](https://vassalengine.org)
37
+ ([GitHub](https://github.com/vassalengine/vassal)) modules,
38
+ including
39
+ - merging modules and extensions,
40
+ - patching modules with a Python script, and
41
+ - inspecting content of save and log files.
42
+ - [`cyberboard`](pywargame/cyberboard) Read
43
+ [CyberBoard](http://cyberboard.norsesoft.com/)
44
+ ([GitHub](https://github.com/CyberBoardPBEM/cbwindows)) GameBox
45
+ files.
46
+ - [`zuntzu`](pywargame/zuntzu) Convert [ZunTzu](https://zuntzu.com)
47
+ ([GitHub](https://github.com/ZunTzu-Software/ZunTzu)) GameBox to
48
+ VASSAL module.
49
+ - [`latex`](pywargame/latex) Create (draft) VASSAL module from LaTeX
50
+ sources using the package
51
+ [`wargame`](https://gitlab.com/wargames_tex/wargame_tex).
52
+
53
+
54
+ ## Changes
55
+
56
+ The code isn't versioned yet, and therefore the changes are given by
57
+ date.
58
+
59
+ - 2nd of February, 2024
60
+ - Fix problem with background of maps exported from CyberBoard
61
+ gamebox. Thanks to @zovs66 for pointing this out.
62
+ - `cyberboard.py` now supports file format version 4+ (but not 5, as
63
+ that will introduce the saving for features and other stuff).
64
+
65
+ ## Scripts
66
+
67
+ - [`vslmerge.py`](vassal/merge.py) merges VASSAL modules and
68
+ extensions together into one module. This is work in progress.
69
+ Please report any problems you see.
70
+
71
+ - [`vmodpatch.py`](vassal/patch.py) patches a VASSAL modules by
72
+ running a Python script on it. The input module file is
73
+ overwritten.
74
+
75
+ - [`vsavdump.py`](vassal/dumpsave.py) dumps the content of a VASSAL
76
+ save or log file to standard output.
77
+
78
+ - [`gbxextract.py`](cyberboard/gbxext.py) reads in a CyberBoard
79
+ GameBox file (`.gbx`) and writes out a ZIP file with images and a
80
+ JSON file with information about the GameBox and the images.
81
+
82
+ Pieces (units and markers) are saved as PNGs, while the boards are
83
+ saves as SVGs.
84
+
85
+ - [`gsnextract.py`](cyberboard/gsnext.py) reads in a CyberBoard
86
+ Scenario file (`.gsn`) and writes out a ZIP file with images and a
87
+ JSON file with information about the Scenario, GameBox, and the
88
+ images.
89
+
90
+ Pieces (units and markers) are saved as PNGs, while the boards are
91
+ saves as SVGs.
92
+
93
+ - [`gsnexport.py`](cyberboard/gsnexp.py) reads in a
94
+ CyberBoard Scenario file (`.gsn`) and generates a (draft) VASSAL
95
+ module. A Python script can be supplied to patch up the module.
96
+
97
+ - [`ztexport.py`](zuntzu/ztexp.py) reads in a ZunTzu game box file
98
+ (`.ztb`) and generates a (draft) VASSAL module. A Python script can
99
+ be supplied to patch up the module.
100
+
101
+ - [`wgexport.py`](latex/main.py) reads in a PDF and JSON file created
102
+ from LaTeX sources using the
103
+ [`wargame`](https://gitlab.com/wargames_tex/wargame_tex) package,
104
+ and generates a (draft) VASSAL module. A Python script can be
105
+ supplied to patch up the module.
106
+
107
+ ## Download
108
+
109
+ You can get the scripts in ZIP file
110
+
111
+ - [artifacts.zip][]
112
+
113
+ or individually
114
+
115
+ - [vassal.py][]
116
+ - [vslmerge.py][]
117
+ - [vmodpatch.py][]
118
+ - [vsavdump.py][]
119
+ - [cyberboard.py][]
120
+ - [gbxextract.py][]
121
+ - [gsnextract.py][]
122
+ - [gsnexport.py][]
123
+ - [ztexport.py][]
124
+ - [wgexport.py][]
125
+ - [requirements.txt][]
126
+ - [README.md][]
127
+
128
+ or [browse][] the files.
129
+
130
+ ## Build
131
+
132
+ You need
133
+
134
+ - `numpy` - some numerics
135
+ - `pillow` - PNG image creation
136
+ - `svgwrite` - SVG image creation
137
+ - `wand` - SVG rendering to PNG
138
+
139
+ for these scripts. Do
140
+
141
+ pip install -r requirements.txt
142
+
143
+ to ensure you have those installed.
144
+
145
+ To generate these scripts, do
146
+
147
+ cd pywargame/vassal && ./collect.py
148
+ cd pywargame/cyberboard && ./collect.py
149
+ cd pywargame/cyberboard && ./collectgbxext.py
150
+ cd pywargame/cyberboard && ./collectgsnext.py
151
+ cd pywargame/cyberboard && ./collectgsnexp.py
152
+ cd pywargame/latex && ./collect.py
153
+ cp pywargame/cyberboard/gbxextract.py .
154
+ cp pywargame/cyberboard/gsnextract.py .
155
+ cp pywargame/cyberboard/gsnexport.py .
156
+ cp pywargame/latex/wgexport.py .
157
+
158
+ or simply, on most modern operating systems,
159
+
160
+ make
161
+
162
+ ### Usage
163
+
164
+ ./vslmerge.py <VMOD and VMDX files> [<OPTIONS>]
165
+ ./vmodpath.py <VMOD> <SCRIPT> [<OPTIONS>]
166
+ ./vsavdump.py <VSAV or VLOG> [<OPTIONS>]
167
+ ./gbxextract.py <GBX> [<OPTIONS>]
168
+ ./gsnextract.py <GSN> [<OPTIONS>]
169
+ ./gsnexport.py <GSN> [<OPTIONS>]
170
+ ./ztexport.py <ZTB> [<OPTIONS>]
171
+ ./wgexport.py <PDF> <JSON> [<OPTIONS>]
172
+
173
+
174
+ Pass `-h` or `--help` as an option for a summery of available options
175
+
176
+ ### Note on `vslmerge.py`
177
+
178
+ The _first_ input file should be a module (_not_ an extension).
179
+
180
+ The script is _work-in-progress_ - please report any problems you may
181
+ have.
182
+
183
+ ### Note on `gsnexport.py`
184
+
185
+ Converting a CyberBoard scenario to a VASSAL module may take a _long_
186
+ time. If you are not sure anything is happening, try passing the
187
+ option `-V` (or `--verbose`) to see what is going on. The speed of
188
+ the conversion depends a lot on the graphics used in the game box.
189
+
190
+ The default is to add pieces in their starting positions directly in
191
+ the module. However, with the option `-S` the initial placement of
192
+ units will be put in a save file (`.vsav`). This is useful if there
193
+ are two or more scenario files associated with a game box, and you
194
+ want to merge all these into a single module.
195
+
196
+ The script can only convert one gamebox and scenario at a time. As
197
+ mentioned above, without the `-S` option, all pieces are placed
198
+ directly in their starting position. This makes for a nice standalone
199
+ module. However, if the game box as two or more scenario files
200
+ associated with it, we should add the option `-S` and convert each
201
+ scenario by it self. The generated module files - one for each
202
+ scenario - can then be merged into one using the
203
+ [`vslmerge.py`](vassal/merge.py) script.
204
+
205
+ CyberBoard game boxes and scenarios made with CyberBoard prior to
206
+ version 3.0 are _not_ supported. You may have some luck opening first
207
+ the game box and then the scenario with `CBDesign.exe` and
208
+ `CBPlay.exe`, respectively, and saving anew. Of course, this requires
209
+ an installation of CyberBoard (on Linux, use
210
+ [wine](https://winehq.org)).
211
+
212
+ Some CyberBoard game boxes and scenarios do not define the title or
213
+ version of the game. In that case, you may pass the options `--title`
214
+ and `--version` to set the title or version, respectively.
215
+
216
+ If the game box file (`.gbx`) cannot directly be found, use the option
217
+ `--gamebox` to specify the game box file.
218
+
219
+ Another common problem with Cyberboard scenarios is that they do not
220
+ specify a starting map, or that the starting map is not the actual
221
+ board. In that case, one can write a small Python script that patches
222
+ up the VASSAL module. For example, the file
223
+ [`misc/PortStanley.py`](misc/PortStanley.py) will patch up the
224
+ scenario [_Port
225
+ Stanley_](http://limeyyankgames.co.uk/cyberboard/port-stanley) game
226
+ box, so that the VASSAL module will show the right board. Other
227
+ options for this patch script could be to change the piece names to
228
+ something more appropriate than the auto-generated names, add charts
229
+ and tables, set the splash image, and so on. Please refer to the
230
+ [`vassal`](vassal) module API for more.
231
+
232
+ If you find that the board SVGs are not rendering as expected, you may
233
+ want to run `gsnexporter` first, and turn run `gsnexport.py` as
234
+
235
+ ./gsnexport.py <ZIP FILE> [<OPTIONS>]
236
+
237
+ possibly after editing SVGs
238
+
239
+ ./gsnextract.py <GSN FILE> [<OPTIONS>]
240
+ unzip MyModule.zip board_0_0,svg
241
+ <Edit board_0_0.svg> # E.g. using Inkscape
242
+ zip -u board_0_0.png
243
+ ./gsnexport.py <ZIP FILE> [<OPTIONS>]
244
+
245
+ A good SVG editor is [Inkscape](https://inkscape.org).
246
+
247
+ ### Note on `ztexport.py`
248
+
249
+ Converting a ZunTzu scenario to a VASSAL module may take a _some_
250
+ time. If you are not sure anything is happening, try passing the
251
+ option `-V` (or `--verbose`) to see what is going on. The speed of
252
+ the conversion depends a lot on the graphics used in the game box.
253
+
254
+ If you get the error `cache resources exhausted` try lowering the
255
+ resolution (`-r`).
256
+
257
+ If the ZunTzu gamebox does not use selectable boards, pass the option
258
+ `-a` to generate maps for all defined maps. Otherwise, the script
259
+ will assume that all maps are alternatives for the default map.
260
+
261
+ The generated VASSAL module is pretty close to the input, but should
262
+ be considered a draft. Use the VASSAL editor to flesh out details.
263
+ For example, ZunTzu gameboxes has no notion of "sides" of play.
264
+
265
+ The generated module contains the scenarios that are in the gamebox.
266
+ There's no provision for converting other saves. However, you can
267
+ always add your favourite save the to game box, before conversion,
268
+ using your favourite ZIP-file manager.
269
+
270
+ Terrain tiles (or counters) can be selected by Ctrl-click.
271
+
272
+ The script is not omnipotent, and may fail on some ZunTzu gameboxes.
273
+ Open an Issue against this project, providing all the necessary
274
+ details, if that happens to you.
275
+
276
+ ## API
277
+
278
+ The module [`vassal`](vassal) allows one to generate a VASSAL module
279
+ programmatically, or to read in a VASSAL module and manipulate it
280
+ programmatically. It also has features for defining a _save_
281
+ (`.vsav`) file programmatically.
282
+
283
+ The module [`cyberboard`](cyberboard) allows one to read in a
284
+ CyberBoard GameBox file and retrieve information from it - such as
285
+ piece and board images.
286
+
287
+ ## License
288
+
289
+ This is distributed on the GPL-3 license.
290
+
291
+ ## A word about copyright
292
+
293
+ Caveat: _I am not a lawyer_.
294
+
295
+ Note, if you use these tools to convert a CyberBoard or ZunTzu GameBox
296
+ to say a VASSAL module, then you are creating a derived product from
297
+ the originally copyrighted product (the GameBox). Thus, if you want
298
+ to distribute, even to friends, the generated VASSAL module, you
299
+ _must_ make sure that you are licensed to do so.
300
+
301
+ If the GameBox is licensed under an
302
+ [_Open Source_](https://opensource.org/) license, like
303
+ [Creative-Commons Attribution, Share-Alike](https://creativecommons.org/licenses/by-sa/4.0/), GPL-3,
304
+ or similar, you are explicitly permitted to distribute your derived
305
+ work.
306
+
307
+ If, on the other hand, the license states _all rights reserved_ then
308
+ you cannot redistribute without explicit permission by the copyright
309
+ holder.
310
+
311
+ If no license is explicitly given, then the default is akin to
312
+ _all rights reserved_.
313
+
314
+ Note, if the converted data contains graphics or the like, it may not
315
+ be the module developer that holds the copyright to the materials.
316
+ The developer may (or may not) have obtained permission to distribute
317
+ the materials, but that does not imply that permission is given to
318
+ third party.
319
+
320
+ However, what is copyrightable and what isn't [is not
321
+ obvious](https://boardgamegeek.com/thread/493249/). Only _original_
322
+ and _artistic_ forms of _expression_ can be copyrighted. Ideas, and
323
+ similar, cannot. That means that the mechanics of a game cannot be
324
+ copyrighted. The exact graphics and phrasing of the rules _can_.
325
+ However, if you make distinctive new graphics and rephrase the rules,
326
+ it is _not_ subject the original copyright. Note, however, that it is
327
+ not enough to change a colour or font here or there - it has to be
328
+ _original_.
329
+
330
+ Note that you are free to make your own copy, as long as you obtained
331
+ the original legally. Copyright only matters if you plan to
332
+ _redistribute_, irrespective of whether or not you monetise the
333
+ redistribution, or if the redistribution is private or public.
334
+
335
+
336
+
337
+ [artifacts.zip]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/download?job=dist
338
+ [vassal.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/vassal.py?job=dist
339
+ [vslmerge.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/vslmerge.py?job=dist
340
+ [vmodpatch.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/vmodpatch.py?job=dist
341
+ [vsavdump.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/vsavdump.py?job=dist
342
+ [cyberboard.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/cyberboard.py?job=dist
343
+ [gbxextract.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/gbxextract.py?job=dist
344
+ [gsnextract.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/gsnextract.py?job=dist
345
+ [gsnexport.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/gsnexport.py?job=dist
346
+ [ztexport.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/ztexport.py?job=dist
347
+ [wgexport.py]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/wgexport.py?job=dist
348
+ [requirements.txt]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/requirements.txt?job=dist
349
+ [README.md]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/file/public/README.md?job=dist
350
+ [browse]: https://gitlab.com/wargames_tex/pywargame/-/jobs/artifacts/master/browse/public?job=dist
351
+
352
+
353
+
@@ -0,0 +1,150 @@
1
+ pywargame/__init__.py,sha256=sjrb0lWsIeAEwKEpztnR5pZXkzfnWSoVDoL0wQmjqfI,44
2
+ pywargame/cyberboard.py,sha256=1bmBXZs9t4fWb47gPv3Rcw9LwuRhgHXFh5oJKLPCRTk,96184
3
+ pywargame/gbx0pwd.py,sha256=xvtHXyqxhYwPyCOjqcS0nX2QG_obEVfsdoFd7LupPmA,97320
4
+ pywargame/gbxextract.py,sha256=3g_JJOZPEq79Cp_FdJ3J6E_vzVgTNzSiTW9YdeJ-xFc,98228
5
+ pywargame/gsnexport.py,sha256=o8UB4kgcWtb8E80w9UhO55XPQ-rWliRsc-KSbDkTBoo,581467
6
+ pywargame/gsnextract.py,sha256=j8SD0bEnmuWaaRYUMk2rDyaMHAojbcLSnkUXzTlS0Po,97876
7
+ pywargame/vassal.py,sha256=kFcTuFOjez8YPpWPiKl5rX4NREVW-fJoJvFJ5Ii4IZU,429345
8
+ pywargame/vmodpatch.py,sha256=mREzY0A9k8CghRFQCiykZ0XwLZwZIqv5kDhDLFrF-bc,430650
9
+ pywargame/vsavdump.py,sha256=itcuy6v9fQfsWFclq1_rAAaKqhAqDtD1sIqbwotQQh4,430086
10
+ pywargame/vslmerge.py,sha256=ezqMswnY4MEGcvTVNb1WnhKSSGVwwnE9fjtordeLUUw,449805
11
+ pywargame/wgexport.py,sha256=z-7I5sJnlHLmaOtcdigzOeEYY2ByI05oHOaBU6sYZ-Y,619207
12
+ pywargame/ztexport.py,sha256=0xCSgC8B7a-S_TSTb9oaOs94srGgf45uv9e7yJPtwD0,500380
13
+ pywargame/common/__init__.py,sha256=7lhVl-Rqb410-JEOrJwtxPBCth1S5xtull3QWiKBpjI,104
14
+ pywargame/common/collector.py,sha256=rKKZ-cmITF9KvVOEhfnGLCeRRSVjSV2yhcJ-xpZWNFc,2714
15
+ pywargame/common/dicedraw.py,sha256=oVUj5IUxWAV1NL7I3oLnEvxUjnqoZnO9t4S729Y5LqY,13462
16
+ pywargame/common/drawdice.py,sha256=VFzXPAFRH3QwAh9kE1uogEErN8MW05DX7_uJWUmUBAw,1371
17
+ pywargame/common/singleton.py,sha256=NCsJG0V8PLZsXLEIg3pSLjM4cATH58kC1FVWGlyXpp4,585
18
+ pywargame/common/test.py,sha256=e1N45iaJAYTzNGbkF54kBvTCUfP21olWAJ-WK4dhM64,532
19
+ pywargame/common/verbose.py,sha256=nxVJdmMNEPcXvZSdEqbJLWCJL6OtjWy_1HPhSGBY0XM,1401
20
+ pywargame/common/verboseguard.py,sha256=h0yEZaPCUhTawzTSkkDPOA3o6V1PU7SXRB4mMfmv86A,1251
21
+ pywargame/cyberboard/__init__.py,sha256=-eAfVaro8mXkvTbGiJSUC9dgUB57aMikR2nxEB73-yU,384
22
+ pywargame/cyberboard/archive.py,sha256=rssXskhURBMbbbSjTypR_UZHB9UVKY-HcjHxUEk4WdI,8370
23
+ pywargame/cyberboard/base.py,sha256=kvyDJiZUXQNGRH95pAjc8zUYpb78a0WBLKIL30rh3yY,2048
24
+ pywargame/cyberboard/board.py,sha256=zuDgKyzEWy9FuTC4fAFbwUR68gVBbj3EAERn6344s8c,18834
25
+ pywargame/cyberboard/cell.py,sha256=48q0tZ_HITsZhlH8q1v1t4G4hBxavjGhYSpansFUsOQ,6713
26
+ pywargame/cyberboard/collect.py,sha256=hWd0zddmcG850yMvjk42S5hnk_codsLEKN6nDaqJ8e8,1231
27
+ pywargame/cyberboard/collectgbx0pwd.py,sha256=w9Nj9GX29vxYMWe-EswJIj9_xfoPYWvygR6tFDW6NoQ,746
28
+ pywargame/cyberboard/collectgbxext.py,sha256=77RrFsTWD0sfYIwXj_o2ObXS3fMZQpWk41PM3ePwUHc,748
29
+ pywargame/cyberboard/collectgsnexp.py,sha256=C7SCX-qLWS3W1mZhU4AS5yi-f0PlKwuPJwqmK16Au7Y,805
30
+ pywargame/cyberboard/collectgsnext.py,sha256=qwlSLCFqRYWqo8tsduT1H0UQIrUAMJUQjLVbvfHnRlo,748
31
+ pywargame/cyberboard/draw.py,sha256=xFjyV-GqqqskprwHvPHX2zHEZxPQRdtBOGQj24gaQvA,12882
32
+ pywargame/cyberboard/exporter.py,sha256=9WmNBSHEfcX_vnZXasZ1Ah6B9YhO1kLaaONle08Vi4o,50358
33
+ pywargame/cyberboard/extractor.py,sha256=sZZY3Far82B0O2gJm1eBkHQNlMry0yMmXcSdvjyJD8g,8585
34
+ pywargame/cyberboard/features.py,sha256=rvqRnJnLG4bGa-Vu4gbkUCtCZZB3S1v_8Yl7CLkIkUY,803
35
+ pywargame/cyberboard/gamebox.py,sha256=9mxOwJ_-Mb-AicZ_amr6mOBRLIn-dcoq_Y1fwizZTMo,3243
36
+ pywargame/cyberboard/gbxexp.py,sha256=L2oqZSzea9azJ2r8w791QqiZPpIGbFbv8dQ6al9gTVY,2680
37
+ pywargame/cyberboard/gbxext.py,sha256=uW5O6bCl9iehebWGAPJa5LVBt9HAGm1AfvcpuMw-V8o,1949
38
+ pywargame/cyberboard/gsnexp.py,sha256=9BoZ7d2GRlskr51hkNWP8pNlw7Raukqd4jt_TfiyvoA,5708
39
+ pywargame/cyberboard/gsnext.py,sha256=uO8Ym3h9l5rbK0bZukiez908JvtsS7RUMSpBRev2wQE,1598
40
+ pywargame/cyberboard/head.py,sha256=Mh7YK7ixHVqMY4zSzpWL205thrMlBz-6qOGDI2BKIoA,3520
41
+ pywargame/cyberboard/image.py,sha256=r87hhkDrvzPCDh1lIq7untgvzEmaDsQpMSMufvxEkjg,2606
42
+ pywargame/cyberboard/main.py,sha256=nRPnyLnDJmF7aa2GLQobov5KOPnSEbEF2-Kr6xMTpBQ,1199
43
+ pywargame/cyberboard/mark.py,sha256=kap75FpoGQ36PEV0nZrP7UZheVuKouPjwXYicoQswQM,3850
44
+ pywargame/cyberboard/palette.py,sha256=rF20HJEAiYdZOeh_SiNgxWLlIlGIq1MVgiMSOfANrSo,1134
45
+ pywargame/cyberboard/piece.py,sha256=IKqjrgnC0O3jHRx7eEQu_VhCOaVG0oENYQH1mhjiQGU,6653
46
+ pywargame/cyberboard/player.py,sha256=d8xgFVsEyNrgr_OLENkwwjmgd-6X3kefwb7N_ZQ5Tg0,942
47
+ pywargame/cyberboard/scenario.py,sha256=XyMjsNhtLQXObKpoZxiQYm9X3aaww_R_o-UAE9PNb1Q,5028
48
+ pywargame/cyberboard/testgrid.py,sha256=JXWtFfaHDHxXvz33G-3SeymQoKlz0WvwQs_SdPVB3EE,4533
49
+ pywargame/cyberboard/tile.py,sha256=4kG7E0O431JJnPi_JPRctRRQiCO20GkhXPrCG6xDUGw,4208
50
+ pywargame/cyberboard/tray.py,sha256=S0EPUchWUG9Ct9NeYAQIZtNl-MxZch39-XKJFz6Ew48,2195
51
+ pywargame/cyberboard/windows.py,sha256=TWj1Y12CSuIukWzntQWCGNSBMpyGZmXyscQKoH-O-SY,1357
52
+ pywargame/cyberboard/zeropwd.py,sha256=CtfvpIC1T84q0sA2hQcDXn8rxEk-vgFMtkHaX2bOSQQ,1018
53
+ pywargame/latex/__init__.py,sha256=Rp37RgAtQZSRS_uBvCEQRVLKoVTCPJ-IvIKapTIOpys,43
54
+ pywargame/latex/collect.py,sha256=ybBcV6KlLKP7CKB8yUzjl5vM52sMmmIe8zIij_D4mQE,790
55
+ pywargame/latex/latexexporter.py,sha256=2EDPRiuOc7tpKjNHjL9-euHMr1D4sJjFvsHl5JG7Dac,182872
56
+ pywargame/latex/main.py,sha256=0PJvfv_z1NmOUIXpsC6HqzM7oJy0nBbeEcefyKeMJow,7080
57
+ pywargame/vassal/__init__.py,sha256=8JLcxirw4NL_9k2D3p9gZYOXCqOlZzMUlGYmvKEcQSs,1880
58
+ pywargame/vassal/base.py,sha256=okGsRZ3lW98SkGqboY1eEEHr0v0tkgfJcoDrOrW13Ag,3197
59
+ pywargame/vassal/board.py,sha256=iSqcJyj0a3DLkfe7Y3KfuHKmKnyCegzzXqFkBwK9rrY,8028
60
+ pywargame/vassal/buildfile.py,sha256=RuteXzk4OEBuTdzz0E5J3bmd__coisTBRwdB7avdXi8,1576
61
+ pywargame/vassal/chart.py,sha256=N-39Xlp3vBZ5SUQDOE7lDN3oUYKcoHofxtjVfeDAZNo,2566
62
+ pywargame/vassal/chessclock.py,sha256=_gcBSADQtPEKtwcxA_bXdFT03i48EbwC4AqjdoQjeTY,7107
63
+ pywargame/vassal/collect.py,sha256=QcQb0T8B38BrUCjBqMVrDU6qg4nM2SQfEZ6LNcIKKaQ,2698
64
+ pywargame/vassal/collectpatch.py,sha256=uMactHfNEQKETX5cIhDyrXoBQPDZCa8IT4tTcPL_QV8,736
65
+ pywargame/vassal/command.py,sha256=ORTdovo4Xha4gj0zgO50SiA03kjBPRfs_kAeNj7PLRU,534
66
+ pywargame/vassal/documentation.py,sha256=JYGdcrdh1Q0si1S8jT5BQ6VNqa1DtZemayYFsmNCkj0,9795
67
+ pywargame/vassal/dumpcollect.py,sha256=SAUQQI5hi43lMnsNmndOvzYA-p8-s8yu85kxSaLCfuM,738
68
+ pywargame/vassal/dumpvsav.py,sha256=lN71zyoXp18wiZ61wehwAwdetiV_ilvOWd-uClDrdl0,569
69
+ pywargame/vassal/element.py,sha256=LaqhYvg_gfTL6zlqs54SpW_2V46psiaZsBcW2Qt-ayI,14771
70
+ pywargame/vassal/exporter.py,sha256=j3OCSDz_2x2NgSASlR__CqncwSUKi_mH-_zy47Ipv6o,2971
71
+ pywargame/vassal/extension.py,sha256=0_3RBXB4R66PKkXb3obds0qG5xLrF3Eh4P6Hqg0bat4,3047
72
+ pywargame/vassal/folder.py,sha256=2qkbDQWqTpYykwAe2qAW0vHhI6IqSuGIuEv1mPN7CtQ,3211
73
+ pywargame/vassal/game.py,sha256=_a7biqSYhN9zHp9xIEXefDwDPvpbkLR__gIv3sabAdQ,28206
74
+ pywargame/vassal/gameelements.py,sha256=Rk6MpBnYssNp2p2lLgree9p5Z0zTL0QTCe4_BQwY6_E,43867
75
+ pywargame/vassal/globalkey.py,sha256=B1z-NGmvzXlxTMCjbvys4Ve_zHoCGyaWQNf1ekX4QZo,4754
76
+ pywargame/vassal/globalproperty.py,sha256=BYp6dAW5IPZMN1-xvIZoUmmdj3U7itq7hZv8PxhmE2c,14700
77
+ pywargame/vassal/grid.py,sha256=imILtYucwVGD5PEwpf1opGnkCV-wLWchvIaN_556gvI,20018
78
+ pywargame/vassal/map.py,sha256=iySQQ1d5Phg7vAl97eRhkzxkSI95U3fPRoujg9vRDs8,36242
79
+ pywargame/vassal/mapelements.py,sha256=pXfPF80VyuHNBcBwKKKxxMhge0pyfky7bup2nc0t8hI,42681
80
+ pywargame/vassal/merge.py,sha256=QwiQRxbbHDQoWEu5MGcPoYFZtX8Iif3bo-wDIcSeNLI,1791
81
+ pywargame/vassal/merger.py,sha256=4MKFOrFvEb8oGxvyf6-xpuz36_mUwO426TgQoaOEW78,18643
82
+ pywargame/vassal/moduledata.py,sha256=jyqVVLAak6U0oxOgpPXkb1wTtimbecAx6loCEm0_L2k,8162
83
+ pywargame/vassal/mrgcollect.py,sha256=emDUB-wfCPvg7pSQ9RQyP56ASuWjNi0T6ElvtYOdzXM,779
84
+ pywargame/vassal/patch.py,sha256=-iEhXvOBPbfqCFl0CKz5dImZkYHzUF0N-3jlWbWlw2A,1170
85
+ pywargame/vassal/patchcollect.py,sha256=uMactHfNEQKETX5cIhDyrXoBQPDZCa8IT4tTcPL_QV8,736
86
+ pywargame/vassal/player.py,sha256=hkv7Lj1Kt2bqHMUotBdF-mu14mDtX52jKPRWciHzL0k,2377
87
+ pywargame/vassal/save.py,sha256=e50hupScDnYkmoC5fg1l2aebj0t23OjWpAUH8VJCiM4,16739
88
+ pywargame/vassal/skel.py,sha256=K7IKmmoLDCLTJMSpfTzFtbBFGEuCMXM6kfWob0_n7MI,15284
89
+ pywargame/vassal/trait.py,sha256=rbl6bliEUy1GAuyPYJ8z7_n69KKp0HQ9dA9P1GV1zv8,7216
90
+ pywargame/vassal/turn.py,sha256=RHL3xXH_e_YzrsFf2kXGD03y265YZai-En9fyMzavdY,9242
91
+ pywargame/vassal/upgrade.py,sha256=jGA09TBXnyj4Eb3khWE49xJ0PNDYjopBYizVAX6uZFc,5446
92
+ pywargame/vassal/vmod.py,sha256=dxe0JC0ROT1huBpJjxKfYSbEzS40yGt5_umZkJv8BLo,8742
93
+ pywargame/vassal/vsav.py,sha256=lOWYw-pZzNTeeRjnHnWKwc8_impwCyH3i7fd4ZaYLA0,3396
94
+ pywargame/vassal/widget.py,sha256=aOkyA7Q4ZJZK-VYFc5KWPF8gTX34XLp89mhYUoPMQ64,11496
95
+ pywargame/vassal/withtraits.py,sha256=6mwDWZqopQjK67NvZ3OL0apZaz0kNHL9JYDyfUDZVZA,20562
96
+ pywargame/vassal/xml.py,sha256=450RmaIpEpK_IFzdFmZCSUxT46CtrH8VmHbLlaI9CNw,155
97
+ pywargame/vassal/zone.py,sha256=JEhJbIjIENpFQ_tnBFyPjCBSgwxCi8MxGSdOZiJVfNw,12610
98
+ pywargame/vassal/traits/__init__.py,sha256=SRvmvYloJZ5YiRttJ662aavhpWGEiiBRukej0wFzOI8,1228
99
+ pywargame/vassal/traits/area.py,sha256=Gbs2Kd88DePxqoeIk2aHMOBXTROKACa9lnfSHCf_0dI,2009
100
+ pywargame/vassal/traits/basic.py,sha256=Mt3ijrZxSmeNfhfO9SNkWt7xgdb3bLUgD05lSNUrVF0,1238
101
+ pywargame/vassal/traits/calculatedproperty.py,sha256=yOBoEc7FZG3fkfVEFguInnLViY7sbQJRalHhe13EpoY,591
102
+ pywargame/vassal/traits/cargo.py,sha256=aRnSEeLr4I-ASjiCPrMckLmFbxS0Wu5-vWnci1Hnddk,926
103
+ pywargame/vassal/traits/click.py,sha256=yUfpbhYarbgMAoXoH7YMEAOi9nm8vPf9u7E4oc-R_Ng,1325
104
+ pywargame/vassal/traits/clone.py,sha256=Pxe9W2i_ZeNkVLcpVG6jUKQx0l8GgZmrdMTufS3pl08,759
105
+ pywargame/vassal/traits/delete.py,sha256=0fisxx0sU6YbAL_TcXrsubpD6frrk3t5a3Y0J4AiFDE,601
106
+ pywargame/vassal/traits/deselect.py,sha256=4GsPb9Z-ZyzbI1w8LvQBT4P0dYUShBSBGdAbP70vf88,915
107
+ pywargame/vassal/traits/dynamicproperty.py,sha256=QsIY_9ljWH_gZQAz-fHVhG7re-pFvon25FfMogIEb5M,3807
108
+ pywargame/vassal/traits/globalcommand.py,sha256=jyEldb1tMh3lA_mSiN_VMcLOOZDZdJW7Nh9grRmuQAg,2054
109
+ pywargame/vassal/traits/globalhotkey.py,sha256=51E4axEZEou0Zkl9ILZZ4OxNw58UIfk3L58mNfFjCkM,810
110
+ pywargame/vassal/traits/globalproperty.py,sha256=77_IYO2L4D2nmBSlbNdUHw9BB1N2My7YoNfc9MtjSro,1996
111
+ pywargame/vassal/traits/hide.py,sha256=OGSwl0rc7vd8dTBc6u25qsyghgy2MDzvvlBFZHda93I,2233
112
+ pywargame/vassal/traits/label.py,sha256=jg4u-YxDQOjT5DxFLeCrkyfiS7jeGa60bR_H9Ym0l8Q,2768
113
+ pywargame/vassal/traits/layer.py,sha256=kQqGc2NaFAaMNSK0QibcrGXA3WsZVCvcijGGeVWql6A,3685
114
+ pywargame/vassal/traits/mark.py,sha256=denp_VOTn6c29VhOoAC1O5dLXqI3IwUZ7BUkMTYeo8c,456
115
+ pywargame/vassal/traits/mask.py,sha256=0GmvEHKXRK_Kdv3_JcBoG5wfcFKurCg86RLa4_rX6uk,2470
116
+ pywargame/vassal/traits/mat.py,sha256=Z9MrZLROzqvOLJGVN_iAzCi6ieiRhhBIhB6bYxZJ_tI,537
117
+ pywargame/vassal/traits/moved.py,sha256=8zJaixuSGHe75SokJocrv2tWokpzz9EXXLHgsp2DIGQ,1065
118
+ pywargame/vassal/traits/movefixed.py,sha256=9uKDEPGoswvdBNFQDlpoWZ4WDTh8qHGSYJtaq4vWKvE,1787
119
+ pywargame/vassal/traits/nonrect.py,sha256=eFyT39Gr4sWk_2fF6f9NnRrBC4xrVkKqt3FQg-lggYQ,2777
120
+ pywargame/vassal/traits/nostack.py,sha256=rd3Rnlcjakt4UObztr30LGweeQmF0DvLkmknN-5-_m0,1741
121
+ pywargame/vassal/traits/place.py,sha256=IOV8vBZZcqL1Ym7FTu0HsRYLDEI7tQZY4ppfPyH-PHg,4300
122
+ pywargame/vassal/traits/prototype.py,sha256=6nYPiWgzXatd-uqcWkNvZgHfWhMmOG-DCOsV097R_SQ,483
123
+ pywargame/vassal/traits/report.py,sha256=HHahfMJZEgn6yPsPFgIKpemUR04kF35uedlRX3nYO9s,1156
124
+ pywargame/vassal/traits/restrictaccess.py,sha256=ns7fHN4Q956wpzgTW2IcIZItb5zu_19uo69EJI27uOI,866
125
+ pywargame/vassal/traits/restrictcommand.py,sha256=rurjfxtHKWHS4oXqkYcCddBw3WZd72tCkHfrUvuBd8A,1025
126
+ pywargame/vassal/traits/return.py,sha256=3GQIYyIxTCNoQHKZGhjGvoueoTwiYVe4trwAXWhm_FY,1277
127
+ pywargame/vassal/traits/rotate.py,sha256=t38UYNfPuWQLTAKes6p8kn66m2-mUZhEbrH-e8d01lo,2580
128
+ pywargame/vassal/traits/sendto.py,sha256=QFDmOHTdICCjop6l2-9b1ZGhb6__buHDP7PnD2DWUck,2368
129
+ pywargame/vassal/traits/sheet.py,sha256=B3padHBd8qMa1XUaIzfHUF5yMvAS0_bFIIZUHSMqF80,4247
130
+ pywargame/vassal/traits/skel.py,sha256=X_NgGBclRchpUbQ6HoJrSYVALRTgO4FZ9T-FmDgtEQw,101
131
+ pywargame/vassal/traits/stack.py,sha256=eB8zbm8K8GGn2Z1v0Vz3NfxjIyPrKTgN0B42Ml8sUYQ,820
132
+ pywargame/vassal/traits/submenu.py,sha256=X-iK0rxTuVZqofwGHg4Lp6R3mHHknjZJvR0eLH7YC5U,900
133
+ pywargame/vassal/traits/trail.py,sha256=8mnHJVSVrGOQptRluNVsu53QIuq6MlBOXPgO76PWcg4,2703
134
+ pywargame/vassal/traits/trigger.py,sha256=fFubQhB6ONQn9XCrKcFjqtjB0pyf59BK_qhwUR9YV_c,2857
135
+ pywargame/zuntzu/__init__.py,sha256=INxe_W1IQ6_47bvIwiUOz7GQXwLXQJzZDp0ddpog8I4,13
136
+ pywargame/zuntzu/base.py,sha256=qhGEwspN9sXjLW-GpU7pllm-jC9AAm-MhF-oLwiTxdQ,2496
137
+ pywargame/zuntzu/collect.py,sha256=TSjgsr0t3mBxNSoaapde4LOm2UXQCPnxLWZbwBUdtSs,969
138
+ pywargame/zuntzu/countersheet.py,sha256=s3oI5oiuGhSX-rL3La8NTAhQ7Teq0AiIlBdEqp_QgUE,10172
139
+ pywargame/zuntzu/dicehand.py,sha256=T2tHplnNYD5TXecxLm2vHzput39_UWjJXlvLod-D8gw,1802
140
+ pywargame/zuntzu/exporter.py,sha256=BzNW-Hpqc5wHpZ_aA9unyu11mPs86t_OMn6toNe41gQ,38481
141
+ pywargame/zuntzu/gamebox.py,sha256=ya4CWSnmUMI_cNi8yJpXtVvpzGQmQX71LoawvCRUtPQ,5535
142
+ pywargame/zuntzu/map.py,sha256=XWwesbmoHmAnpNkFnvzJo2-VgHayWbty9DWW1VDERK0,1291
143
+ pywargame/zuntzu/piece.py,sha256=gkncBL4twsjRBi7ZWJ6pdKDIK1gi_sK-xIih-RzYJHc,934
144
+ pywargame/zuntzu/scenario.py,sha256=cN6jW_aXg92o8nJcTL30kxDpTICNGn6H0kmSU7rPONw,6518
145
+ pywargame/zuntzu/ztexp.py,sha256=ca6V-5kc02bacUh24c1xgxnpus0BIbGAp_5sLtH-RWk,3970
146
+ pywargame-0.3.1.dist-info/licenses/LICENSE,sha256=memetuYBJ7n0A-1_Uiq5GO8YUt6PMciiMROkV9zAqW4,265
147
+ pywargame-0.3.1.dist-info/METADATA,sha256=RjkLzYNu-crMlFAE47cw8V22CSg_KyyjhIGDS6AD94A,13981
148
+ pywargame-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
149
+ pywargame-0.3.1.dist-info/top_level.txt,sha256=w2HqLsCQSoBKEOc2YXLJLyc2Ihg2XQ2Hq29E1IasW74,10
150
+ pywargame-0.3.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,5 @@
1
+ This work is licensed under the Creative Commons
2
+ Attribution-ShareAlike 4.0 International License. To view a copy of
3
+ this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or
4
+ send a letter to Creative Commons, PO Box 1866, Mountain View, CA
5
+ 94042, USA.
@@ -0,0 +1 @@
1
+ pywargame