fivefury 0.2.6__tar.gz → 0.2.7__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 (356) hide show
  1. {fivefury-0.2.6 → fivefury-0.2.7}/LICENSE +111 -111
  2. fivefury-0.2.7/PKG-INFO +172 -0
  3. fivefury-0.2.7/README.md +160 -0
  4. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/__init__.py +1749 -1542
  5. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/__init__.py +71 -71
  6. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/base.py +120 -120
  7. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/ydd.py +23 -23
  8. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/ydr.py +20 -20
  9. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/yft.py +48 -46
  10. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/assets/ypt.py +20 -20
  11. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/__init__.py +16 -16
  12. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/audio.py +39 -39
  13. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/conversion.py +127 -127
  14. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/structures.py +289 -289
  15. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/binary.py +176 -176
  16. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/__init__.py +128 -128
  17. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/geometry.py +294 -227
  18. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/materials.py +158 -158
  19. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/model.py +1296 -1296
  20. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/reader.py +517 -517
  21. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/bounds/writer.py +838 -838
  22. fivefury-0.2.7/fivefury/buckets.py +38 -0
  23. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/assets.py +108 -108
  24. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/core.py +2 -0
  25. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/io.py +386 -362
  26. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/kinds.py +28 -28
  27. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/paths.py +28 -28
  28. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/scan.py +10 -2
  29. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/views.py +67 -67
  30. fivefury-0.2.7/fivefury/cdr/__init__.py +69 -0
  31. fivefury-0.2.7/fivefury/cdr/model.py +319 -0
  32. fivefury-0.2.7/fivefury/cdr/reader.py +629 -0
  33. fivefury-0.2.7/fivefury/cdr/resource.py +131 -0
  34. fivefury-0.2.7/fivefury/cdr/shaders.py +69 -0
  35. fivefury-0.2.7/fivefury/cdr/vertices.py +349 -0
  36. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/colors.py +208 -208
  37. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/common.py +49 -49
  38. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/crypto/__init__.py +315 -313
  39. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/crypto/backends.py +200 -200
  40. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/crypto/keys.py +151 -151
  41. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/__init__.py +183 -183
  42. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/analysis.py +19 -19
  43. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/dsl.py +1704 -1669
  44. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/events.py +797 -797
  45. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/flags.py +76 -76
  46. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/lights.py +163 -163
  47. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/model.py +147 -147
  48. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/names.py +209 -209
  49. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/payloads.py +295 -295
  50. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/pso.py +127 -127
  51. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/__init__.py +79 -79
  52. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/base.py +511 -511
  53. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/bindings.py +639 -639
  54. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/core.py +186 -186
  55. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/event_api.py +510 -510
  56. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/io.py +443 -443
  57. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/shared.py +261 -261
  58. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/subtitles.py +136 -136
  59. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/timeline.py +257 -257
  60. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/scene/validation.py +353 -353
  61. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/schema.py +531 -531
  62. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/write.py +486 -486
  63. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cut/xml.py +100 -100
  64. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/dlc/__init__.py +74 -74
  65. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/dlc/enums.py +243 -243
  66. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/dlc/highlevel.py +306 -306
  67. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/dlc/model.py +570 -570
  68. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/dlc/xml.py +51 -51
  69. {fivefury-0.2.6/fivefury/ydr → fivefury-0.2.7/fivefury/drawable}/Shaders.xml +8940 -8940
  70. fivefury-0.2.7/fivefury/drawable/__init__.py +41 -0
  71. fivefury-0.2.7/fivefury/drawable/lod.py +41 -0
  72. fivefury-0.2.7/fivefury/drawable/model.py +268 -0
  73. {fivefury-0.2.6/fivefury/ydr → fivefury-0.2.7/fivefury/drawable}/shaders.py +248 -304
  74. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/game_target.py +25 -25
  75. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/gamefile.py +17 -3
  76. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/gtxd.py +227 -227
  77. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/gxt2.py +286 -286
  78. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/hashing.py +24 -24
  79. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/__init__.py +71 -71
  80. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/backed.py +57 -57
  81. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/builder.py +216 -214
  82. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/defs.py +738 -738
  83. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/read.py +29 -19
  84. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/resource.py +107 -107
  85. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/meta/utils.py +38 -38
  86. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/__init__.py +120 -120
  87. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/codec.py +104 -104
  88. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/model.py +150 -150
  89. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/reader.py +315 -315
  90. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/schema.py +40 -40
  91. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/pso/writer.py +101 -101
  92. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rbf.py +197 -197
  93. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rel/__init__.py +117 -117
  94. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rel/enums.py +78 -78
  95. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rel/io.py +987 -987
  96. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rel/model.py +1226 -1226
  97. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/resolver.py +177 -177
  98. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/resource.py +510 -510
  99. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/resource_textures.py +25 -25
  100. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rpf/__init__.py +1165 -858
  101. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rpf/convert.py +211 -165
  102. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rpf/entries.py +29 -18
  103. fivefury-0.2.7/fivefury/rpf/modes.py +66 -0
  104. fivefury-0.2.7/fivefury/rpf/ps3.py +59 -0
  105. fivefury-0.2.7/fivefury/rpf/streaming.py +98 -0
  106. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/rpf/utils.py +119 -115
  107. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/texture.py +20 -20
  108. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/vector.py +183 -150
  109. fivefury-0.2.7/fivefury/vehiclemeta/__init__.py +139 -0
  110. fivefury-0.2.7/fivefury/vehiclemeta/carcols.py +757 -0
  111. fivefury-0.2.7/fivefury/vehiclemeta/common.py +115 -0
  112. fivefury-0.2.7/fivefury/vehiclemeta/enums.py +235 -0
  113. fivefury-0.2.7/fivefury/vehiclemeta/handling.py +372 -0
  114. fivefury-0.2.7/fivefury/vehiclemeta/resource.py +222 -0
  115. fivefury-0.2.7/fivefury/vehiclemeta/variations.py +121 -0
  116. fivefury-0.2.7/fivefury/vehiclemeta/vehicles.py +651 -0
  117. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/xml.py +185 -185
  118. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ybn/__init__.py +152 -132
  119. fivefury-0.2.7/fivefury/ybn/mlo.py +86 -0
  120. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/__init__.py +92 -92
  121. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/cutscene.py +753 -753
  122. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/model.py +1082 -1117
  123. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/reader.py +514 -514
  124. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/sequence_channels.py +324 -324
  125. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/sequence_codec.py +818 -818
  126. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/sequence_tracks.py +239 -239
  127. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/sequences.py +66 -66
  128. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ycd/write.py +677 -712
  129. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydd/__init__.py +26 -26
  130. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydd/model.py +152 -152
  131. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydd/reader.py +101 -101
  132. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydd/rigging.py +223 -223
  133. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydd/writer.py +228 -228
  134. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/ShadersGen9Conversion.xml +7045 -7045
  135. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/__init__.py +158 -158
  136. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/assimp.py +553 -553
  137. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/build_types.py +231 -231
  138. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/builder.py +402 -399
  139. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/collision.py +100 -100
  140. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/defs.py +193 -197
  141. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/gen9.py +444 -444
  142. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/gen9_shader_info.py +188 -188
  143. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/materials.py +165 -165
  144. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/model.py +1785 -1888
  145. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/prepare.py +857 -790
  146. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/read_joints.py +157 -157
  147. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/read_lights.py +137 -112
  148. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/read_materials.py +405 -415
  149. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/read_skeleton.py +145 -145
  150. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/reader.py +532 -525
  151. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/rigging.py +263 -263
  152. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/shader_enums.py +316 -316
  153. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/shader_info.py +237 -237
  154. fivefury-0.2.7/fivefury/ydr/shaders.py +48 -0
  155. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_buffers.py +198 -198
  156. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_drawable.py +177 -174
  157. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_geometry.py +93 -93
  158. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_joints.py +108 -108
  159. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_lights.py +68 -68
  160. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_materials.py +494 -494
  161. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_models.py +218 -218
  162. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/write_skeleton.py +279 -314
  163. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/__init__.py +37 -37
  164. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/audit.py +97 -97
  165. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/constants.py +17 -17
  166. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/enums.py +77 -77
  167. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/instructions.py +310 -310
  168. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/model.py +618 -618
  169. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/ped.py +72 -72
  170. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/reader.py +200 -200
  171. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yed/writer.py +192 -192
  172. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/__init__.py +145 -91
  173. fivefury-0.2.7/fivefury/yft/cloth.py +175 -0
  174. fivefury-0.2.7/fivefury/yft/cloth_reader.py +295 -0
  175. fivefury-0.2.7/fivefury/yft/cloth_writer.py +355 -0
  176. fivefury-0.2.7/fivefury/yft/constants.py +84 -0
  177. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/corpus.py +66 -66
  178. fivefury-0.2.7/fivefury/yft/drawable_reader.py +148 -0
  179. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/drawables.py +27 -26
  180. fivefury-0.2.7/fivefury/yft/events.py +145 -0
  181. fivefury-0.2.7/fivefury/yft/events_reader.py +47 -0
  182. fivefury-0.2.7/fivefury/yft/events_writer.py +87 -0
  183. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/fields_reader.py +110 -84
  184. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/fragment.py +352 -309
  185. fivefury-0.2.7/fivefury/yft/fragment_drawable.py +71 -0
  186. fivefury-0.2.7/fivefury/yft/glass.py +206 -0
  187. fivefury-0.2.7/fivefury/yft/glass_reader.py +190 -0
  188. fivefury-0.2.7/fivefury/yft/glass_writer.py +170 -0
  189. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/io_helpers.py +91 -91
  190. fivefury-0.2.7/fivefury/yft/matrices.py +80 -0
  191. fivefury-0.2.7/fivefury/yft/matrices_reader.py +39 -0
  192. fivefury-0.2.7/fivefury/yft/matrices_writer.py +26 -0
  193. fivefury-0.2.7/fivefury/yft/model.py +118 -0
  194. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/physics.py +794 -805
  195. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/physics_authoring.py +285 -259
  196. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/physics_reader.py +811 -680
  197. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/physics_writer.py +525 -407
  198. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/pointers.py +73 -66
  199. fivefury-0.2.7/fivefury/yft/reader.py +250 -0
  200. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/stats.py +20 -20
  201. fivefury-0.2.7/fivefury/yft/validation.py +762 -0
  202. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/yft/writer.py +631 -406
  203. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/__init__.py +131 -131
  204. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/base.py +92 -92
  205. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/blocks.py +15 -15
  206. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/cargens.py +126 -126
  207. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/defs.py +292 -290
  208. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/entities.py +161 -151
  209. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/enums.py +173 -173
  210. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/extension_defs.py +132 -132
  211. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/extensions.py +188 -188
  212. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/grass.py +265 -265
  213. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/io.py +35 -23
  214. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/lights.py +318 -318
  215. fivefury-0.2.7/fivefury/ymap/mlo_validation.py +170 -0
  216. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/model.py +652 -578
  217. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/occluders.py +294 -273
  218. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/packing.py +38 -38
  219. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/surfaces.py +54 -54
  220. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/timecycle.py +113 -113
  221. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymap/utils.py +71 -71
  222. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/__init__.py +15 -4
  223. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/builder.py +270 -192
  224. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/model.py +56 -17
  225. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/pso.py +25 -13
  226. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/resource.py +7 -4
  227. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/schema.py +6 -2
  228. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/utils.py +1 -1
  229. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymt/__init__.py +328 -328
  230. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymt/ped_metadata.py +131 -131
  231. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymt/ped_variation.py +227 -227
  232. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymt/scenario.py +139 -139
  233. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymt/streaming.py +133 -133
  234. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/__init__.py +69 -69
  235. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/heightmaps.py +240 -240
  236. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/model.py +628 -628
  237. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/network.py +78 -78
  238. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/reader.py +176 -176
  239. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/regions.py +65 -65
  240. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynd/writer.py +202 -202
  241. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynv/__init__.py +52 -49
  242. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynv/assimp.py +368 -368
  243. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynv/model.py +842 -724
  244. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ynv/reader.py +431 -346
  245. fivefury-0.2.7/fivefury/ynv/writer.py +502 -0
  246. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytd/__init__.py +408 -408
  247. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytd/defs.py +389 -389
  248. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytd/model.py +158 -158
  249. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/__init__.py +135 -135
  250. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/archetypes.py +16 -16
  251. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/asset_types.py +20 -20
  252. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/base_archetype.py +105 -105
  253. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/defs.py +187 -187
  254. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/extension_defs.py +132 -132
  255. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/extensions.py +188 -188
  256. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/flags.py +140 -140
  257. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/helpers.py +234 -234
  258. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/lod.py +66 -66
  259. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/mlo.py +314 -214
  260. fivefury-0.2.7/fivefury/ytyp/mlo_validation.py +208 -0
  261. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/model.py +280 -259
  262. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ytyp/timed_archetype.py +52 -52
  263. fivefury-0.2.7/fivefury.egg-info/PKG-INFO +172 -0
  264. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury.egg-info/SOURCES.txt +46 -12
  265. {fivefury-0.2.6 → fivefury-0.2.7}/native/bounds_algorithms.cpp +492 -492
  266. {fivefury-0.2.6 → fivefury-0.2.7}/native/bounds_algorithms.h +43 -43
  267. {fivefury-0.2.6 → fivefury-0.2.7}/native/bounds_python.cpp +333 -333
  268. {fivefury-0.2.6 → fivefury-0.2.7}/native/bounds_python.h +22 -22
  269. {fivefury-0.2.6 → fivefury-0.2.7}/native/bounds_types.h +96 -96
  270. {fivefury-0.2.6 → fivefury-0.2.7}/native/crypto_magic.cpp +90 -90
  271. {fivefury-0.2.6 → fivefury-0.2.7}/native/crypto_magic.h +11 -11
  272. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_bindings.h +1 -0
  273. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_bounds.cpp +377 -377
  274. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_crypto.cpp +33 -33
  275. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_index.cpp +109 -109
  276. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_resource.cpp +214 -214
  277. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_vertex.cpp +515 -515
  278. {fivefury-0.2.6 → fivefury-0.2.7}/native/resource_layout.cpp +386 -385
  279. {fivefury-0.2.6 → fivefury-0.2.7}/native/resource_layout.h +48 -48
  280. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_archive.cpp +32 -7
  281. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_crypto.cpp +15 -4
  282. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_index.cpp +281 -281
  283. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_index.h +97 -97
  284. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_scan.h +5 -5
  285. {fivefury-0.2.6 → fivefury-0.2.7}/pyproject.toml +31 -31
  286. {fivefury-0.2.6 → fivefury-0.2.7}/setup.py +42 -42
  287. fivefury-0.2.7/tests/test_cdr.py +183 -0
  288. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_cut.py +746 -746
  289. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_cut_dsl.py +437 -437
  290. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_cut_no_template.py +224 -224
  291. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_dlc.py +228 -228
  292. fivefury-0.2.7/tests/test_drawable.py +103 -0
  293. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_gtxd.py +252 -252
  294. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_hashing.py +357 -357
  295. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_meta_rpf_contracts.py +566 -513
  296. fivefury-0.2.7/tests/test_mlo.py +248 -0
  297. fivefury-0.2.7/tests/test_rpf_ps3.py +96 -0
  298. fivefury-0.2.7/tests/test_rpf_streaming_folder.py +122 -0
  299. fivefury-0.2.7/tests/test_vehiclemeta.py +234 -0
  300. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ybn.py +1011 -971
  301. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ycd.py +1039 -1039
  302. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ycd_cutscene_builder.py +194 -194
  303. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ydd.py +101 -101
  304. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ydr.py +537 -537
  305. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ydr_builder.py +2166 -2116
  306. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ydr_shaders.py +52 -52
  307. fivefury-0.2.7/tests/test_yft.py +900 -0
  308. fivefury-0.2.7/tests/test_ymap_occluders.py +37 -0
  309. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ymf.py +211 -175
  310. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ynd.py +213 -213
  311. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ynv.py +392 -297
  312. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ynv_assimp.py +58 -58
  313. {fivefury-0.2.6 → fivefury-0.2.7}/tests/test_ytyp_flags.py +113 -113
  314. fivefury-0.2.6/PKG-INFO +0 -1106
  315. fivefury-0.2.6/README.md +0 -1094
  316. fivefury-0.2.6/fivefury/ydr/_helpers.py +0 -39
  317. fivefury-0.2.6/fivefury/yft/constants.py +0 -47
  318. fivefury-0.2.6/fivefury/yft/drawable_reader.py +0 -48
  319. fivefury-0.2.6/fivefury/yft/model.py +0 -66
  320. fivefury-0.2.6/fivefury/yft/reader.py +0 -175
  321. fivefury-0.2.6/fivefury/yft/validation.py +0 -331
  322. fivefury-0.2.6/fivefury/ynv/writer.py +0 -353
  323. fivefury-0.2.6/fivefury.egg-info/PKG-INFO +0 -1106
  324. fivefury-0.2.6/tests/test_awc.py +0 -133
  325. fivefury-0.2.6/tests/test_cut_ycd.py +0 -159
  326. fivefury-0.2.6/tests/test_gxt2.py +0 -75
  327. fivefury-0.2.6/tests/test_high_level_api_consistency.py +0 -316
  328. fivefury-0.2.6/tests/test_pso.py +0 -75
  329. fivefury-0.2.6/tests/test_rel.py +0 -602
  330. fivefury-0.2.6/tests/test_ydr_rigging.py +0 -70
  331. fivefury-0.2.6/tests/test_yed.py +0 -233
  332. fivefury-0.2.6/tests/test_yft.py +0 -412
  333. fivefury-0.2.6/tests/test_ymt_ped_variation.py +0 -103
  334. fivefury-0.2.6/tests/test_ymt_ymf.py +0 -65
  335. {fivefury-0.2.6 → fivefury-0.2.7}/MANIFEST.in +0 -0
  336. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/_native.py +0 -0
  337. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/constants.py +0 -0
  338. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/crypto.py +0 -0
  339. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/awc/io.py +0 -0
  340. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/cache/__init__.py +0 -0
  341. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/data/lut.dat +0 -0
  342. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/data/magic.dat +0 -0
  343. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/data/ng.dat +0 -0
  344. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/metahash.py +0 -0
  345. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ydr/gen9_shader_enums.py +0 -0
  346. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury/ymf/enums.py +0 -0
  347. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury.egg-info/dependency_links.txt +0 -0
  348. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury.egg-info/requires.txt +0 -0
  349. {fivefury-0.2.6 → fivefury-0.2.7}/fivefury.egg-info/top_level.txt +0 -0
  350. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_bindings.cpp +0 -0
  351. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_module.cpp +0 -0
  352. {fivefury-0.2.6 → fivefury-0.2.7}/native/py_rpf.cpp +0 -0
  353. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_archive.h +0 -0
  354. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_read.cpp +0 -0
  355. {fivefury-0.2.6 → fivefury-0.2.7}/native/rpf_scan.cpp +0 -0
  356. {fivefury-0.2.6 → fivefury-0.2.7}/setup.cfg +0 -0
@@ -1,111 +1,111 @@
1
- CC0 1.0 Universal
2
-
3
- Statement of Purpose
4
-
5
- The laws of most jurisdictions throughout the world automatically confer
6
- exclusive Copyright and Related Rights upon the creator and subsequent owner(s)
7
- (each and all, an "owner") of an original work of authorship and/or a database
8
- (each, a "Work").
9
-
10
- Certain owners wish to permanently relinquish those rights to a Work for the
11
- purpose of contributing to a commons of creative, cultural and scientific works
12
- ("Commons") that the public can reliably and without fear of later claims of
13
- infringement build upon, modify, incorporate in other works, reuse and
14
- redistribute as freely as possible in any form whatsoever and for any purposes,
15
- including without limitation commercial purposes. These owners may contribute to
16
- the Commons to promote the ideal of a free culture and the further production of
17
- creative, cultural and scientific works, or to gain reputation or greater
18
- distribution for their Work in part through the use and efforts of others.
19
-
20
- For these and/or other purposes and motivations, and without any expectation of
21
- additional consideration or compensation, the person associating CC0 with a Work
22
- (the "Affirmer"), to the extent that he or she is an owner of Copyright and
23
- Related Rights in the Work, voluntarily elects to apply CC0 to the Work and
24
- publicly distribute the Work under its terms, with knowledge of his or her
25
- Copyright and Related Rights in the Work and the meaning and intended legal
26
- effect of CC0 on those rights.
27
-
28
- 1. Copyright and Related Rights. A Work made available under CC0 may be
29
- protected by copyright and related or neighboring rights ("Copyright and Related
30
- Rights"). Copyright and Related Rights include, but are not limited to, the
31
- following:
32
-
33
- i. the right to reproduce, adapt, distribute, perform, display, communicate, and
34
- translate a Work;
35
-
36
- ii. moral rights retained by the original author(s) and/or performer(s);
37
-
38
- iii. publicity and privacy rights pertaining to a person's image or likeness
39
- depicted in a Work;
40
-
41
- iv. rights protecting against unfair competition in regards to a Work, subject to
42
- the limitations in paragraph 4(a), below;
43
-
44
- v. rights protecting the extraction, dissemination, use and reuse of data in a
45
- Work;
46
-
47
- vi. database rights (such as those arising under Directive 96/9/EC of the
48
- European Parliament and of the Council of 11 March 1996 on the legal protection
49
- of databases, and under any national implementation thereof, including any
50
- amended or successor version of such directive); and
51
-
52
- vii. other similar, equivalent or corresponding rights throughout the world based
53
- on applicable law or treaty, and any national implementations thereof.
54
-
55
- 2. Waiver. To the greatest extent permitted by, but not in contravention of,
56
- applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
57
- unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and
58
- Related Rights and associated claims and causes of action, whether now known or
59
- unknown (including existing as well as future claims and causes of action), in
60
- the Work (i) in all territories worldwide, (ii) for the maximum duration provided
61
- by applicable law or treaty (including future time extensions), (iii) in any
62
- current or future medium and for any number of copies, and (iv) for any purpose
63
- whatsoever, including without limitation commercial, advertising or promotional
64
- purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
65
- member of the public at large and to the detriment of Affirmer's heirs and
66
- successors, fully intending that such Waiver shall not be subject to revocation,
67
- rescission, cancellation, termination, or any other legal or equitable action to
68
- disrupt the quiet enjoyment of the Work by the public as contemplated by
69
- Affirmer's express Statement of Purpose.
70
-
71
- 3. Public License Fallback. Should any part of the Waiver for any reason be
72
- judged legally invalid or ineffective under applicable law, then the Waiver shall
73
- be preserved to the maximum extent permitted taking into account Affirmer's
74
- express Statement of Purpose. In addition, to the extent the Waiver is so judged
75
- Affirmer hereby grants to each affected person a royalty-free, non transferable,
76
- non sublicensable, non exclusive, irrevocable and unconditional license to
77
- exercise Affirmer's Copyright and Related Rights in the Work (i) in all
78
- territories worldwide, (ii) for the maximum duration provided by applicable law
79
- or treaty (including future time extensions), (iii) in any current or future
80
- medium and for any number of copies, and (iv) for any purpose whatsoever,
81
- including without limitation commercial, advertising or promotional purposes (the
82
- "License"). The License shall be deemed effective as of the date CC0 was applied
83
- by Affirmer to the Work. Should any part of the License for any reason be judged
84
- legally invalid or ineffective under applicable law, such partial invalidity or
85
- ineffectiveness shall not invalidate the remainder of the License, and in such
86
- case Affirmer hereby affirms that he or she will not (i) exercise any of his or
87
- her remaining Copyright and Related Rights in the Work or (ii) assert any
88
- associated claims and causes of action with respect to the Work, in either case
89
- contrary to Affirmer's express Statement of Purpose.
90
-
91
- 4. Limitations and Disclaimers.
92
-
93
- a. No trademark or patent rights held by Affirmer are waived, abandoned,
94
- surrendered, licensed or otherwise affected by this document.
95
-
96
- b. Affirmer offers the Work as-is and makes no representations or warranties of
97
- any kind concerning the Work, express, implied, statutory or otherwise, including
98
- without limitation warranties of title, merchantability, fitness for a particular
99
- purpose, non infringement, or the absence of latent or other defects, accuracy,
100
- or the presence or absence of errors, whether or not discoverable, all to the
101
- greatest extent permissible under applicable law.
102
-
103
- c. Affirmer disclaims responsibility for clearing rights of other persons that
104
- may apply to the Work or any use thereof, including without limitation any
105
- person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
106
- responsibility for obtaining any necessary consents, permissions or other rights
107
- required for any use of the Work.
108
-
109
- d. Affirmer understands and acknowledges that Creative Commons is not a party to
110
- this document and has no duty or obligation with respect to this CC0 or use of
111
- the Work.
1
+ CC0 1.0 Universal
2
+
3
+ Statement of Purpose
4
+
5
+ The laws of most jurisdictions throughout the world automatically confer
6
+ exclusive Copyright and Related Rights upon the creator and subsequent owner(s)
7
+ (each and all, an "owner") of an original work of authorship and/or a database
8
+ (each, a "Work").
9
+
10
+ Certain owners wish to permanently relinquish those rights to a Work for the
11
+ purpose of contributing to a commons of creative, cultural and scientific works
12
+ ("Commons") that the public can reliably and without fear of later claims of
13
+ infringement build upon, modify, incorporate in other works, reuse and
14
+ redistribute as freely as possible in any form whatsoever and for any purposes,
15
+ including without limitation commercial purposes. These owners may contribute to
16
+ the Commons to promote the ideal of a free culture and the further production of
17
+ creative, cultural and scientific works, or to gain reputation or greater
18
+ distribution for their Work in part through the use and efforts of others.
19
+
20
+ For these and/or other purposes and motivations, and without any expectation of
21
+ additional consideration or compensation, the person associating CC0 with a Work
22
+ (the "Affirmer"), to the extent that he or she is an owner of Copyright and
23
+ Related Rights in the Work, voluntarily elects to apply CC0 to the Work and
24
+ publicly distribute the Work under its terms, with knowledge of his or her
25
+ Copyright and Related Rights in the Work and the meaning and intended legal
26
+ effect of CC0 on those rights.
27
+
28
+ 1. Copyright and Related Rights. A Work made available under CC0 may be
29
+ protected by copyright and related or neighboring rights ("Copyright and Related
30
+ Rights"). Copyright and Related Rights include, but are not limited to, the
31
+ following:
32
+
33
+ i. the right to reproduce, adapt, distribute, perform, display, communicate, and
34
+ translate a Work;
35
+
36
+ ii. moral rights retained by the original author(s) and/or performer(s);
37
+
38
+ iii. publicity and privacy rights pertaining to a person's image or likeness
39
+ depicted in a Work;
40
+
41
+ iv. rights protecting against unfair competition in regards to a Work, subject to
42
+ the limitations in paragraph 4(a), below;
43
+
44
+ v. rights protecting the extraction, dissemination, use and reuse of data in a
45
+ Work;
46
+
47
+ vi. database rights (such as those arising under Directive 96/9/EC of the
48
+ European Parliament and of the Council of 11 March 1996 on the legal protection
49
+ of databases, and under any national implementation thereof, including any
50
+ amended or successor version of such directive); and
51
+
52
+ vii. other similar, equivalent or corresponding rights throughout the world based
53
+ on applicable law or treaty, and any national implementations thereof.
54
+
55
+ 2. Waiver. To the greatest extent permitted by, but not in contravention of,
56
+ applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
57
+ unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and
58
+ Related Rights and associated claims and causes of action, whether now known or
59
+ unknown (including existing as well as future claims and causes of action), in
60
+ the Work (i) in all territories worldwide, (ii) for the maximum duration provided
61
+ by applicable law or treaty (including future time extensions), (iii) in any
62
+ current or future medium and for any number of copies, and (iv) for any purpose
63
+ whatsoever, including without limitation commercial, advertising or promotional
64
+ purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
65
+ member of the public at large and to the detriment of Affirmer's heirs and
66
+ successors, fully intending that such Waiver shall not be subject to revocation,
67
+ rescission, cancellation, termination, or any other legal or equitable action to
68
+ disrupt the quiet enjoyment of the Work by the public as contemplated by
69
+ Affirmer's express Statement of Purpose.
70
+
71
+ 3. Public License Fallback. Should any part of the Waiver for any reason be
72
+ judged legally invalid or ineffective under applicable law, then the Waiver shall
73
+ be preserved to the maximum extent permitted taking into account Affirmer's
74
+ express Statement of Purpose. In addition, to the extent the Waiver is so judged
75
+ Affirmer hereby grants to each affected person a royalty-free, non transferable,
76
+ non sublicensable, non exclusive, irrevocable and unconditional license to
77
+ exercise Affirmer's Copyright and Related Rights in the Work (i) in all
78
+ territories worldwide, (ii) for the maximum duration provided by applicable law
79
+ or treaty (including future time extensions), (iii) in any current or future
80
+ medium and for any number of copies, and (iv) for any purpose whatsoever,
81
+ including without limitation commercial, advertising or promotional purposes (the
82
+ "License"). The License shall be deemed effective as of the date CC0 was applied
83
+ by Affirmer to the Work. Should any part of the License for any reason be judged
84
+ legally invalid or ineffective under applicable law, such partial invalidity or
85
+ ineffectiveness shall not invalidate the remainder of the License, and in such
86
+ case Affirmer hereby affirms that he or she will not (i) exercise any of his or
87
+ her remaining Copyright and Related Rights in the Work or (ii) assert any
88
+ associated claims and causes of action with respect to the Work, in either case
89
+ contrary to Affirmer's express Statement of Purpose.
90
+
91
+ 4. Limitations and Disclaimers.
92
+
93
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
94
+ surrendered, licensed or otherwise affected by this document.
95
+
96
+ b. Affirmer offers the Work as-is and makes no representations or warranties of
97
+ any kind concerning the Work, express, implied, statutory or otherwise, including
98
+ without limitation warranties of title, merchantability, fitness for a particular
99
+ purpose, non infringement, or the absence of latent or other defects, accuracy,
100
+ or the presence or absence of errors, whether or not discoverable, all to the
101
+ greatest extent permissible under applicable law.
102
+
103
+ c. Affirmer disclaims responsibility for clearing rights of other persons that
104
+ may apply to the Work or any use thereof, including without limitation any
105
+ person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
106
+ responsibility for obtaining any necessary consents, permissions or other rights
107
+ required for any use of the Work.
108
+
109
+ d. Affirmer understands and acknowledges that Creative Commons is not a party to
110
+ this document and has no duty or obligation with respect to this CC0 or use of
111
+ the Work.
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.4
2
+ Name: fivefury
3
+ Version: 0.2.7
4
+ Summary: Python library for GTA V asset workflows including YMAP, YTYP, RPF, YTD and GameFileCache utilities.
5
+ Author: Codex
6
+ License-Expression: CC0-1.0
7
+ Requires-Python: >=3.11
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: miniaudio>=1.71
11
+ Dynamic: license-file
12
+
13
+ # FiveFury
14
+
15
+ FiveFury is a Python library for reading, writing, and packaging GTA V asset files: drawables, collisions, map metadata, animations, navigation data, texture dictionaries, text tables, audio containers, cutscenes, DLC metadata, and RPF archives.
16
+
17
+ It targets practical modding workflows — declarative high-level helpers for common authoring tasks, with access to the underlying binary and resource layers when you need them. Heavy operations (vertex packing, collision generation, hashing, crypto, resource layout, archive scanning) run in a bundled native extension.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ pip install fivefury
23
+ ```
24
+
25
+ Python 3.11+ is required.
26
+
27
+ The Assimp-backed import helpers (`assimp_to_ydr`, `obj_to_ydr`, `fbx_to_ydr`, `obj_to_nav`) additionally require the `impasse` package and a native `assimp` library reachable through the environment (usually via `PATH`).
28
+
29
+ ## Format support
30
+
31
+ | Format | Status | Scope |
32
+ | --- | --- | --- |
33
+ | `YDR` | Full | Drawables: models, LODs, materials, shaders, lights, embedded textures and bounds, skeletons, skinning |
34
+ | `CDR` | Read | PS3 drawables: materials, LODs, QB/EDGE geometry, compressed indices, skeletons and skinning |
35
+ | `YDD` | Full | Drawable dictionaries, creation from named drawables, ped-component rigging helpers |
36
+ | `YBN` | Full | Primitive, composite, geometry, and BVH bounds; collision generation from triangle meshes |
37
+ | `YCD` | Full | Clip dictionaries: skeletal, object, UV, camera, and root-motion tracks |
38
+ | `YMAP` | Full | Entities, car generators, occluders, timecycle modifiers, LOD/distant lights |
39
+ | `YTYP` | Full | Base/time/MLO archetypes, extensions, rooms, portals, entity sets |
40
+ | `YMF` | Full | Map manifests, IMAP/ITYP dependencies, generation from YMAP sets |
41
+ | `YTD` | Full | Texture dictionaries: read/write, extraction, embedded-asset helpers |
42
+ | `YND` | Full | Path nodes, links, area partitioning, junction heightmaps |
43
+ | `YNV` | Full | Navmeshes: sectors, polys, portals, validation, basic OBJ partitioning |
44
+ | `CUT` | Full | Cutscenes, plus the readable `.cuts` script format for round-trip authoring |
45
+ | `GXT2` | Full | Hashed text tables with binary read/write and text import/export |
46
+ | `AWC` | Full | Audio containers: PCM/WAV extraction, authoring from WAV/MP3/OGG/FLAC |
47
+ | `RPF` | Full | RPF7 archives: nested archives, folder/ZIP conversion, encrypted archive reading |
48
+ | DLC metadata | Full | `setup2.xml`, `content.xml`, `dlclist.xml`, title-update patch overlays |
49
+ | `GTXD` | Full | Parent texture dictionary metadata (XML and binary RBF) |
50
+ | `YFT` | Partial | Fragment read/write: drawables, physics LODs/groups/children, composite bounds |
51
+ | `REL` | Partial | Audio metadata banks; typed models for synths, curves, categories, and common sound graphs |
52
+ | `YED` | Partial | Expression dictionaries: inspection, spring editing, small dictionaries from scratch |
53
+ | `YMT` | Partial | META/PSO/RBF read/write with typed helpers for known roots; unknown payloads preserved |
54
+ | `YPT` | Partial | Embedded texture dictionary discovery/extraction only |
55
+ | `YWR`, `YVR` | Indexed | Detected by `GameFileCache` and RPF tooling; no dedicated parser yet |
56
+ | `YFD`, `YPDB`, `MRF` | — | Not implemented |
57
+
58
+ `YDR` and `CDR` expose the same format-neutral drawable interface for LODs, models, meshes, materials, parameters, textures, and shader metadata. Their binary layouts remain isolated: PC/Enhanced authoring stays in `ydr`, while PS3 resource pages, QB/EDGE geometry, and console shader additions stay in `cdr`.
59
+
60
+ ## Quick start
61
+
62
+ ### Create a YMAP and pack it into an RPF
63
+
64
+ ```python
65
+ from fivefury import Ymap, create_rpf
66
+
67
+ ymap = Ymap(name="example_map")
68
+ ymap.entity("prop_tree_pine_01", position=(100, 200, 0), lod_dist=150.0)
69
+ ymap.car_gen("sultan", (110, 205, 0), heading=90)
70
+ ymap.save("example_map.ymap", auto_extents=True)
71
+
72
+ archive = create_rpf("mods.rpf")
73
+ archive.add("stream/example_map.ymap", ymap)
74
+ archive.save("mods.rpf")
75
+ ```
76
+
77
+ ### Build a drawable
78
+
79
+ ```python
80
+ from fivefury import YdrMeshInput, create_ydr
81
+
82
+ ydr = create_ydr(
83
+ meshes=[
84
+ YdrMeshInput(
85
+ positions=[(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)],
86
+ indices=[0, 1, 2],
87
+ texcoords=[[(0.0, 0.0), (1.0, 0.0), (0.0, 1.0)]],
88
+ )
89
+ ],
90
+ material_textures={"DiffuseSampler": "example_diffuse"},
91
+ name="example_drawable",
92
+ )
93
+ ydr.save("example_drawable.ydr")
94
+ ```
95
+
96
+ Existing drawables can be read with `read_ydr(...)`, then edited through `update_material(...)`, `add_embedded_texture(...)`, `set_bound(...)`, skeleton and skinning helpers, and saved back. `assimp_to_ydr(...)` imports any mesh format Assimp can read.
97
+
98
+ ### Generate collision
99
+
100
+ ```python
101
+ from fivefury import BoundMaterial, BoundMaterialType, build_bound_from_triangles, save_ybn
102
+
103
+ triangles = [
104
+ ((0.0, 0.0, 0.0), (4.0, 0.0, 0.0), (0.0, 4.0, 0.0)),
105
+ ((4.0, 0.0, 0.0), (4.0, 4.0, 0.0), (0.0, 4.0, 0.0)),
106
+ ]
107
+
108
+ bound = build_bound_from_triangles(
109
+ triangles,
110
+ material=BoundMaterial(type=BoundMaterialType.CONCRETE),
111
+ )
112
+ save_ybn(bound, "floor_collision.ybn")
113
+ ```
114
+
115
+ Generated geometry is chunked as needed and gets BVH and octant data. The same bounds model backs standalone `YBN` files, embedded `YDR` collisions, and `YFT` physics — a drawable's render mesh can also be converted directly with `ydr.ensure_bound_from_render_geometry()`.
116
+
117
+ ### Convert audio to AWC
118
+
119
+ ```python
120
+ from fivefury import convert_audio_to_awc
121
+
122
+ convert_audio_to_awc("music/song.flac", "stream/song.awc", channels=2)
123
+ ```
124
+
125
+ ### Work with RPF archives
126
+
127
+ ```python
128
+ from fivefury import RpfArchive, RpfExportMode, rpf_to_zip, zip_to_rpf
129
+
130
+ zip_to_rpf("unpacked_mod_folder", "packed_mod.rpf")
131
+ rpf_to_zip("packed_mod.rpf", "packed_mod.zip", mode=RpfExportMode.STANDALONE)
132
+
133
+ with RpfArchive.from_path("packed_mod.rpf") as archive:
134
+ archive.to_folder("out", mode=RpfExportMode.STANDALONE)
135
+ ```
136
+
137
+ Encrypted standalone archives open directly; FiveFury initializes the bundled crypto context automatically. Export modes: `STORED` (raw bytes), `STANDALONE` (valid standalone files with `RSC7` containers), `LOGICAL` (inner payloads).
138
+
139
+ ### Index a game installation
140
+
141
+ ```python
142
+ from fivefury import GameFileCache
143
+
144
+ cache = GameFileCache(r"C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V")
145
+ cache.scan_game(use_index_cache=True)
146
+
147
+ asset = cache.get_asset("prop_tree_pine_01", kind=".ydr")
148
+ cache.extract_asset(asset, "prop_tree_pine_01.ydr")
149
+ cache.extract_asset_textures("prop_tree_pine_01.ydr", "textures")
150
+ ```
151
+
152
+ `GameFileCache` indexes loose files and archives, loads supported formats lazily, exposes typed lookups by name/hash/kind, resolves textures through `YTD`, `GTXD` parent chains, and embedded dictionaries, and can generate `YMF` manifests for custom maps. Scan scope is configurable (`dlc_level`, `exclude_folders`, `load_audio`, `load_vehicles`, `load_peds`).
153
+
154
+ ### Author DLC metadata
155
+
156
+ ```python
157
+ from fivefury import write_dlc_folder_metadata
158
+
159
+ write_dlc_folder_metadata("build/my_pack", pack_name="my_pack", order=60)
160
+ ```
161
+
162
+ Scans the extracted DLC folder, infers common entries (nested `.rpf`, `.ityp` requests, audio data, text metadata), and writes `setup2.xml` and `content.xml`. `DlcPatch` builds `update.rpf` title-update overlays.
163
+
164
+ ## API conventions
165
+
166
+ High-level objects follow a consistent shape: `add_*` for collections, `set_*` for single assignments, `build()` to normalize derived state, and `validate()` to collect consistency issues before writing. Formats with stable game-side names expose typed enums (shaders, LODs, render masks, archetype asset types, bound materials, track formats).
167
+
168
+ ## License
169
+
170
+ FiveFury is released under the `CC0-1.0` public domain dedication. See [LICENSE](LICENSE).
171
+
172
+ Release notes live in [CHANGELOG.md](CHANGELOG.md).
@@ -0,0 +1,160 @@
1
+ # FiveFury
2
+
3
+ FiveFury is a Python library for reading, writing, and packaging GTA V asset files: drawables, collisions, map metadata, animations, navigation data, texture dictionaries, text tables, audio containers, cutscenes, DLC metadata, and RPF archives.
4
+
5
+ It targets practical modding workflows — declarative high-level helpers for common authoring tasks, with access to the underlying binary and resource layers when you need them. Heavy operations (vertex packing, collision generation, hashing, crypto, resource layout, archive scanning) run in a bundled native extension.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install fivefury
11
+ ```
12
+
13
+ Python 3.11+ is required.
14
+
15
+ The Assimp-backed import helpers (`assimp_to_ydr`, `obj_to_ydr`, `fbx_to_ydr`, `obj_to_nav`) additionally require the `impasse` package and a native `assimp` library reachable through the environment (usually via `PATH`).
16
+
17
+ ## Format support
18
+
19
+ | Format | Status | Scope |
20
+ | --- | --- | --- |
21
+ | `YDR` | Full | Drawables: models, LODs, materials, shaders, lights, embedded textures and bounds, skeletons, skinning |
22
+ | `CDR` | Read | PS3 drawables: materials, LODs, QB/EDGE geometry, compressed indices, skeletons and skinning |
23
+ | `YDD` | Full | Drawable dictionaries, creation from named drawables, ped-component rigging helpers |
24
+ | `YBN` | Full | Primitive, composite, geometry, and BVH bounds; collision generation from triangle meshes |
25
+ | `YCD` | Full | Clip dictionaries: skeletal, object, UV, camera, and root-motion tracks |
26
+ | `YMAP` | Full | Entities, car generators, occluders, timecycle modifiers, LOD/distant lights |
27
+ | `YTYP` | Full | Base/time/MLO archetypes, extensions, rooms, portals, entity sets |
28
+ | `YMF` | Full | Map manifests, IMAP/ITYP dependencies, generation from YMAP sets |
29
+ | `YTD` | Full | Texture dictionaries: read/write, extraction, embedded-asset helpers |
30
+ | `YND` | Full | Path nodes, links, area partitioning, junction heightmaps |
31
+ | `YNV` | Full | Navmeshes: sectors, polys, portals, validation, basic OBJ partitioning |
32
+ | `CUT` | Full | Cutscenes, plus the readable `.cuts` script format for round-trip authoring |
33
+ | `GXT2` | Full | Hashed text tables with binary read/write and text import/export |
34
+ | `AWC` | Full | Audio containers: PCM/WAV extraction, authoring from WAV/MP3/OGG/FLAC |
35
+ | `RPF` | Full | RPF7 archives: nested archives, folder/ZIP conversion, encrypted archive reading |
36
+ | DLC metadata | Full | `setup2.xml`, `content.xml`, `dlclist.xml`, title-update patch overlays |
37
+ | `GTXD` | Full | Parent texture dictionary metadata (XML and binary RBF) |
38
+ | `YFT` | Partial | Fragment read/write: drawables, physics LODs/groups/children, composite bounds |
39
+ | `REL` | Partial | Audio metadata banks; typed models for synths, curves, categories, and common sound graphs |
40
+ | `YED` | Partial | Expression dictionaries: inspection, spring editing, small dictionaries from scratch |
41
+ | `YMT` | Partial | META/PSO/RBF read/write with typed helpers for known roots; unknown payloads preserved |
42
+ | `YPT` | Partial | Embedded texture dictionary discovery/extraction only |
43
+ | `YWR`, `YVR` | Indexed | Detected by `GameFileCache` and RPF tooling; no dedicated parser yet |
44
+ | `YFD`, `YPDB`, `MRF` | — | Not implemented |
45
+
46
+ `YDR` and `CDR` expose the same format-neutral drawable interface for LODs, models, meshes, materials, parameters, textures, and shader metadata. Their binary layouts remain isolated: PC/Enhanced authoring stays in `ydr`, while PS3 resource pages, QB/EDGE geometry, and console shader additions stay in `cdr`.
47
+
48
+ ## Quick start
49
+
50
+ ### Create a YMAP and pack it into an RPF
51
+
52
+ ```python
53
+ from fivefury import Ymap, create_rpf
54
+
55
+ ymap = Ymap(name="example_map")
56
+ ymap.entity("prop_tree_pine_01", position=(100, 200, 0), lod_dist=150.0)
57
+ ymap.car_gen("sultan", (110, 205, 0), heading=90)
58
+ ymap.save("example_map.ymap", auto_extents=True)
59
+
60
+ archive = create_rpf("mods.rpf")
61
+ archive.add("stream/example_map.ymap", ymap)
62
+ archive.save("mods.rpf")
63
+ ```
64
+
65
+ ### Build a drawable
66
+
67
+ ```python
68
+ from fivefury import YdrMeshInput, create_ydr
69
+
70
+ ydr = create_ydr(
71
+ meshes=[
72
+ YdrMeshInput(
73
+ positions=[(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)],
74
+ indices=[0, 1, 2],
75
+ texcoords=[[(0.0, 0.0), (1.0, 0.0), (0.0, 1.0)]],
76
+ )
77
+ ],
78
+ material_textures={"DiffuseSampler": "example_diffuse"},
79
+ name="example_drawable",
80
+ )
81
+ ydr.save("example_drawable.ydr")
82
+ ```
83
+
84
+ Existing drawables can be read with `read_ydr(...)`, then edited through `update_material(...)`, `add_embedded_texture(...)`, `set_bound(...)`, skeleton and skinning helpers, and saved back. `assimp_to_ydr(...)` imports any mesh format Assimp can read.
85
+
86
+ ### Generate collision
87
+
88
+ ```python
89
+ from fivefury import BoundMaterial, BoundMaterialType, build_bound_from_triangles, save_ybn
90
+
91
+ triangles = [
92
+ ((0.0, 0.0, 0.0), (4.0, 0.0, 0.0), (0.0, 4.0, 0.0)),
93
+ ((4.0, 0.0, 0.0), (4.0, 4.0, 0.0), (0.0, 4.0, 0.0)),
94
+ ]
95
+
96
+ bound = build_bound_from_triangles(
97
+ triangles,
98
+ material=BoundMaterial(type=BoundMaterialType.CONCRETE),
99
+ )
100
+ save_ybn(bound, "floor_collision.ybn")
101
+ ```
102
+
103
+ Generated geometry is chunked as needed and gets BVH and octant data. The same bounds model backs standalone `YBN` files, embedded `YDR` collisions, and `YFT` physics — a drawable's render mesh can also be converted directly with `ydr.ensure_bound_from_render_geometry()`.
104
+
105
+ ### Convert audio to AWC
106
+
107
+ ```python
108
+ from fivefury import convert_audio_to_awc
109
+
110
+ convert_audio_to_awc("music/song.flac", "stream/song.awc", channels=2)
111
+ ```
112
+
113
+ ### Work with RPF archives
114
+
115
+ ```python
116
+ from fivefury import RpfArchive, RpfExportMode, rpf_to_zip, zip_to_rpf
117
+
118
+ zip_to_rpf("unpacked_mod_folder", "packed_mod.rpf")
119
+ rpf_to_zip("packed_mod.rpf", "packed_mod.zip", mode=RpfExportMode.STANDALONE)
120
+
121
+ with RpfArchive.from_path("packed_mod.rpf") as archive:
122
+ archive.to_folder("out", mode=RpfExportMode.STANDALONE)
123
+ ```
124
+
125
+ Encrypted standalone archives open directly; FiveFury initializes the bundled crypto context automatically. Export modes: `STORED` (raw bytes), `STANDALONE` (valid standalone files with `RSC7` containers), `LOGICAL` (inner payloads).
126
+
127
+ ### Index a game installation
128
+
129
+ ```python
130
+ from fivefury import GameFileCache
131
+
132
+ cache = GameFileCache(r"C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V")
133
+ cache.scan_game(use_index_cache=True)
134
+
135
+ asset = cache.get_asset("prop_tree_pine_01", kind=".ydr")
136
+ cache.extract_asset(asset, "prop_tree_pine_01.ydr")
137
+ cache.extract_asset_textures("prop_tree_pine_01.ydr", "textures")
138
+ ```
139
+
140
+ `GameFileCache` indexes loose files and archives, loads supported formats lazily, exposes typed lookups by name/hash/kind, resolves textures through `YTD`, `GTXD` parent chains, and embedded dictionaries, and can generate `YMF` manifests for custom maps. Scan scope is configurable (`dlc_level`, `exclude_folders`, `load_audio`, `load_vehicles`, `load_peds`).
141
+
142
+ ### Author DLC metadata
143
+
144
+ ```python
145
+ from fivefury import write_dlc_folder_metadata
146
+
147
+ write_dlc_folder_metadata("build/my_pack", pack_name="my_pack", order=60)
148
+ ```
149
+
150
+ Scans the extracted DLC folder, infers common entries (nested `.rpf`, `.ityp` requests, audio data, text metadata), and writes `setup2.xml` and `content.xml`. `DlcPatch` builds `update.rpf` title-update overlays.
151
+
152
+ ## API conventions
153
+
154
+ High-level objects follow a consistent shape: `add_*` for collections, `set_*` for single assignments, `build()` to normalize derived state, and `validate()` to collect consistency issues before writing. Formats with stable game-side names expose typed enums (shaders, LODs, render masks, archetype asset types, bound materials, track formats).
155
+
156
+ ## License
157
+
158
+ FiveFury is released under the `CC0-1.0` public domain dedication. See [LICENSE](LICENSE).
159
+
160
+ Release notes live in [CHANGELOG.md](CHANGELOG.md).