fivefury 0.2.6__tar.gz → 0.2.8__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 (360) hide show
  1. {fivefury-0.2.6 → fivefury-0.2.8}/LICENSE +111 -111
  2. fivefury-0.2.8/PKG-INFO +198 -0
  3. fivefury-0.2.8/README.md +185 -0
  4. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/__init__.py +1781 -1542
  5. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/__init__.py +71 -71
  6. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/base.py +120 -120
  7. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/ydd.py +23 -23
  8. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/ydr.py +20 -20
  9. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/yft.py +48 -46
  10. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/assets/ypt.py +20 -20
  11. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/__init__.py +16 -16
  12. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/audio.py +39 -39
  13. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/conversion.py +127 -127
  14. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/structures.py +289 -289
  15. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/binary.py +176 -176
  16. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/__init__.py +128 -128
  17. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/geometry.py +294 -227
  18. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/materials.py +158 -158
  19. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/model.py +1296 -1296
  20. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/reader.py +517 -517
  21. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/bounds/writer.py +838 -838
  22. fivefury-0.2.8/fivefury/buckets.py +38 -0
  23. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/assets.py +108 -108
  24. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/core.py +43 -3
  25. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/io.py +389 -362
  26. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/kinds.py +28 -28
  27. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/paths.py +28 -28
  28. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/scan.py +10 -2
  29. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/views.py +67 -67
  30. fivefury-0.2.8/fivefury/cdr/__init__.py +69 -0
  31. fivefury-0.2.8/fivefury/cdr/model.py +319 -0
  32. fivefury-0.2.8/fivefury/cdr/reader.py +629 -0
  33. fivefury-0.2.8/fivefury/cdr/resource.py +131 -0
  34. fivefury-0.2.8/fivefury/cdr/shaders.py +69 -0
  35. fivefury-0.2.8/fivefury/cdr/vertices.py +349 -0
  36. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/colors.py +208 -208
  37. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/common.py +49 -49
  38. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/crypto/__init__.py +315 -313
  39. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/crypto/backends.py +200 -200
  40. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/crypto/keys.py +151 -151
  41. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/__init__.py +183 -183
  42. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/analysis.py +19 -19
  43. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/dsl.py +1704 -1669
  44. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/events.py +797 -797
  45. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/flags.py +76 -76
  46. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/lights.py +163 -163
  47. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/model.py +147 -147
  48. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/names.py +209 -209
  49. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/payloads.py +295 -295
  50. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/pso.py +127 -127
  51. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/__init__.py +79 -79
  52. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/base.py +511 -511
  53. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/bindings.py +639 -639
  54. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/core.py +186 -186
  55. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/event_api.py +510 -510
  56. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/io.py +443 -443
  57. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/shared.py +261 -261
  58. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/subtitles.py +136 -136
  59. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/timeline.py +257 -257
  60. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/scene/validation.py +353 -353
  61. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/schema.py +531 -531
  62. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/write.py +486 -486
  63. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cut/xml.py +100 -100
  64. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/dlc/__init__.py +74 -74
  65. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/dlc/enums.py +243 -243
  66. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/dlc/highlevel.py +306 -306
  67. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/dlc/model.py +570 -570
  68. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/dlc/xml.py +51 -51
  69. {fivefury-0.2.6/fivefury/ydr → fivefury-0.2.8/fivefury/drawable}/Shaders.xml +8940 -8940
  70. fivefury-0.2.8/fivefury/drawable/__init__.py +41 -0
  71. fivefury-0.2.8/fivefury/drawable/lod.py +41 -0
  72. fivefury-0.2.8/fivefury/drawable/model.py +268 -0
  73. {fivefury-0.2.6/fivefury/ydr → fivefury-0.2.8/fivefury/drawable}/shaders.py +248 -304
  74. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/game_target.py +25 -25
  75. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/gamefile.py +19 -3
  76. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/gtxd.py +227 -227
  77. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/gxt2.py +286 -286
  78. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/hashing.py +24 -24
  79. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/__init__.py +71 -71
  80. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/backed.py +57 -57
  81. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/builder.py +216 -214
  82. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/defs.py +738 -738
  83. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/read.py +29 -19
  84. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/resource.py +107 -107
  85. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/meta/utils.py +38 -38
  86. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/__init__.py +120 -120
  87. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/codec.py +104 -104
  88. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/model.py +150 -150
  89. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/reader.py +315 -315
  90. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/schema.py +40 -40
  91. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/pso/writer.py +101 -101
  92. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rbf.py +197 -197
  93. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rel/__init__.py +117 -117
  94. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rel/enums.py +78 -78
  95. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rel/io.py +987 -987
  96. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rel/model.py +1226 -1226
  97. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/resolver.py +177 -177
  98. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/resource.py +510 -510
  99. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/resource_textures.py +25 -25
  100. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rpf/__init__.py +1165 -858
  101. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rpf/convert.py +211 -165
  102. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rpf/entries.py +29 -18
  103. fivefury-0.2.8/fivefury/rpf/modes.py +66 -0
  104. fivefury-0.2.8/fivefury/rpf/ps3.py +59 -0
  105. fivefury-0.2.8/fivefury/rpf/streaming.py +98 -0
  106. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/rpf/utils.py +119 -115
  107. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/texture.py +20 -20
  108. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/vector.py +183 -150
  109. fivefury-0.2.8/fivefury/vehiclemeta/__init__.py +139 -0
  110. fivefury-0.2.8/fivefury/vehiclemeta/carcols.py +757 -0
  111. fivefury-0.2.8/fivefury/vehiclemeta/common.py +115 -0
  112. fivefury-0.2.8/fivefury/vehiclemeta/enums.py +235 -0
  113. fivefury-0.2.8/fivefury/vehiclemeta/handling.py +372 -0
  114. fivefury-0.2.8/fivefury/vehiclemeta/resource.py +222 -0
  115. fivefury-0.2.8/fivefury/vehiclemeta/variations.py +121 -0
  116. fivefury-0.2.8/fivefury/vehiclemeta/vehicles.py +651 -0
  117. fivefury-0.2.8/fivefury/water/__init__.py +30 -0
  118. fivefury-0.2.8/fivefury/water/geometry.py +99 -0
  119. fivefury-0.2.8/fivefury/water/io.py +195 -0
  120. fivefury-0.2.8/fivefury/water/model.py +573 -0
  121. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/xml.py +185 -185
  122. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ybn/__init__.py +152 -132
  123. fivefury-0.2.8/fivefury/ybn/mlo.py +86 -0
  124. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/__init__.py +92 -92
  125. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/cutscene.py +753 -753
  126. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/model.py +1082 -1117
  127. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/reader.py +514 -514
  128. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/sequence_channels.py +324 -324
  129. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/sequence_codec.py +818 -818
  130. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/sequence_tracks.py +239 -239
  131. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/sequences.py +66 -66
  132. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ycd/write.py +677 -712
  133. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydd/__init__.py +26 -26
  134. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydd/model.py +152 -152
  135. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydd/reader.py +101 -101
  136. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydd/rigging.py +223 -223
  137. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydd/writer.py +228 -228
  138. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/ShadersGen9Conversion.xml +7045 -7045
  139. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/__init__.py +158 -158
  140. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/assimp.py +553 -553
  141. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/build_types.py +231 -231
  142. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/builder.py +402 -399
  143. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/collision.py +100 -100
  144. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/defs.py +193 -197
  145. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/gen9.py +444 -444
  146. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/gen9_shader_info.py +188 -188
  147. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/materials.py +165 -165
  148. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/model.py +1785 -1888
  149. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/prepare.py +857 -790
  150. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/read_joints.py +157 -157
  151. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/read_lights.py +137 -112
  152. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/read_materials.py +405 -415
  153. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/read_skeleton.py +145 -145
  154. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/reader.py +532 -525
  155. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/rigging.py +263 -263
  156. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/shader_enums.py +316 -316
  157. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/shader_info.py +237 -237
  158. fivefury-0.2.8/fivefury/ydr/shaders.py +48 -0
  159. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_buffers.py +198 -198
  160. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_drawable.py +177 -174
  161. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_geometry.py +93 -93
  162. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_joints.py +108 -108
  163. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_lights.py +68 -68
  164. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_materials.py +494 -494
  165. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_models.py +218 -218
  166. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/write_skeleton.py +279 -314
  167. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/__init__.py +37 -37
  168. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/audit.py +97 -97
  169. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/constants.py +17 -17
  170. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/enums.py +77 -77
  171. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/instructions.py +310 -310
  172. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/model.py +618 -618
  173. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/ped.py +72 -72
  174. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/reader.py +200 -200
  175. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yed/writer.py +192 -192
  176. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/__init__.py +145 -91
  177. fivefury-0.2.8/fivefury/yft/cloth.py +175 -0
  178. fivefury-0.2.8/fivefury/yft/cloth_reader.py +295 -0
  179. fivefury-0.2.8/fivefury/yft/cloth_writer.py +355 -0
  180. fivefury-0.2.8/fivefury/yft/constants.py +84 -0
  181. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/corpus.py +66 -66
  182. fivefury-0.2.8/fivefury/yft/drawable_reader.py +148 -0
  183. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/drawables.py +27 -26
  184. fivefury-0.2.8/fivefury/yft/events.py +145 -0
  185. fivefury-0.2.8/fivefury/yft/events_reader.py +47 -0
  186. fivefury-0.2.8/fivefury/yft/events_writer.py +87 -0
  187. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/fields_reader.py +110 -84
  188. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/fragment.py +352 -309
  189. fivefury-0.2.8/fivefury/yft/fragment_drawable.py +71 -0
  190. fivefury-0.2.8/fivefury/yft/glass.py +206 -0
  191. fivefury-0.2.8/fivefury/yft/glass_reader.py +190 -0
  192. fivefury-0.2.8/fivefury/yft/glass_writer.py +170 -0
  193. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/io_helpers.py +91 -91
  194. fivefury-0.2.8/fivefury/yft/matrices.py +80 -0
  195. fivefury-0.2.8/fivefury/yft/matrices_reader.py +39 -0
  196. fivefury-0.2.8/fivefury/yft/matrices_writer.py +26 -0
  197. fivefury-0.2.8/fivefury/yft/model.py +118 -0
  198. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/physics.py +794 -805
  199. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/physics_authoring.py +285 -259
  200. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/physics_reader.py +811 -680
  201. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/physics_writer.py +525 -407
  202. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/pointers.py +73 -66
  203. fivefury-0.2.8/fivefury/yft/reader.py +250 -0
  204. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/stats.py +20 -20
  205. fivefury-0.2.8/fivefury/yft/validation.py +762 -0
  206. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/yft/writer.py +631 -406
  207. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/__init__.py +131 -131
  208. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/base.py +92 -92
  209. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/blocks.py +15 -15
  210. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/cargens.py +126 -126
  211. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/defs.py +292 -290
  212. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/entities.py +161 -151
  213. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/enums.py +173 -173
  214. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/extension_defs.py +132 -132
  215. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/extensions.py +188 -188
  216. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/grass.py +265 -265
  217. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/io.py +35 -23
  218. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/lights.py +318 -318
  219. fivefury-0.2.8/fivefury/ymap/mlo_validation.py +170 -0
  220. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/model.py +652 -578
  221. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/occluders.py +294 -273
  222. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/packing.py +38 -38
  223. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/surfaces.py +54 -54
  224. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/timecycle.py +113 -113
  225. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymap/utils.py +71 -71
  226. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/__init__.py +15 -4
  227. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/builder.py +270 -192
  228. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/model.py +56 -17
  229. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/pso.py +25 -13
  230. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/resource.py +7 -4
  231. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/schema.py +6 -2
  232. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/utils.py +1 -1
  233. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymt/__init__.py +328 -328
  234. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymt/ped_metadata.py +131 -131
  235. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymt/ped_variation.py +227 -227
  236. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymt/scenario.py +139 -139
  237. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymt/streaming.py +133 -133
  238. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/__init__.py +69 -69
  239. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/heightmaps.py +240 -240
  240. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/model.py +628 -628
  241. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/network.py +78 -78
  242. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/reader.py +176 -176
  243. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/regions.py +65 -65
  244. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynd/writer.py +202 -202
  245. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynv/__init__.py +52 -49
  246. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynv/assimp.py +368 -368
  247. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynv/model.py +842 -724
  248. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ynv/reader.py +431 -346
  249. fivefury-0.2.8/fivefury/ynv/writer.py +502 -0
  250. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytd/__init__.py +408 -408
  251. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytd/defs.py +389 -389
  252. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytd/model.py +158 -158
  253. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/__init__.py +135 -135
  254. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/archetypes.py +16 -16
  255. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/asset_types.py +20 -20
  256. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/base_archetype.py +105 -105
  257. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/defs.py +187 -187
  258. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/extension_defs.py +132 -132
  259. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/extensions.py +188 -188
  260. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/flags.py +140 -140
  261. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/helpers.py +234 -234
  262. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/lod.py +66 -66
  263. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/mlo.py +314 -214
  264. fivefury-0.2.8/fivefury/ytyp/mlo_validation.py +208 -0
  265. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/model.py +280 -259
  266. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ytyp/timed_archetype.py +52 -52
  267. fivefury-0.2.8/fivefury.egg-info/PKG-INFO +198 -0
  268. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury.egg-info/SOURCES.txt +50 -12
  269. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury.egg-info/requires.txt +1 -0
  270. {fivefury-0.2.6 → fivefury-0.2.8}/native/bounds_algorithms.cpp +492 -492
  271. {fivefury-0.2.6 → fivefury-0.2.8}/native/bounds_algorithms.h +43 -43
  272. {fivefury-0.2.6 → fivefury-0.2.8}/native/bounds_python.cpp +333 -333
  273. {fivefury-0.2.6 → fivefury-0.2.8}/native/bounds_python.h +22 -22
  274. {fivefury-0.2.6 → fivefury-0.2.8}/native/bounds_types.h +96 -96
  275. {fivefury-0.2.6 → fivefury-0.2.8}/native/crypto_magic.cpp +90 -90
  276. {fivefury-0.2.6 → fivefury-0.2.8}/native/crypto_magic.h +11 -11
  277. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_bindings.h +1 -0
  278. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_bounds.cpp +377 -377
  279. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_crypto.cpp +33 -33
  280. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_index.cpp +109 -109
  281. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_resource.cpp +214 -214
  282. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_vertex.cpp +515 -515
  283. {fivefury-0.2.6 → fivefury-0.2.8}/native/resource_layout.cpp +386 -385
  284. {fivefury-0.2.6 → fivefury-0.2.8}/native/resource_layout.h +48 -48
  285. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_archive.cpp +35 -7
  286. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_crypto.cpp +15 -4
  287. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_index.cpp +281 -281
  288. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_index.h +97 -97
  289. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_scan.h +5 -5
  290. {fivefury-0.2.6 → fivefury-0.2.8}/pyproject.toml +33 -30
  291. {fivefury-0.2.6 → fivefury-0.2.8}/setup.py +42 -42
  292. fivefury-0.2.8/tests/test_cdr.py +183 -0
  293. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_cut.py +746 -746
  294. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_cut_dsl.py +437 -437
  295. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_cut_no_template.py +224 -224
  296. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_dlc.py +228 -228
  297. fivefury-0.2.8/tests/test_drawable.py +103 -0
  298. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_gtxd.py +252 -252
  299. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_hashing.py +357 -357
  300. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_meta_rpf_contracts.py +566 -513
  301. fivefury-0.2.8/tests/test_mlo.py +248 -0
  302. fivefury-0.2.8/tests/test_rpf_ps3.py +96 -0
  303. fivefury-0.2.8/tests/test_rpf_streaming_folder.py +184 -0
  304. fivefury-0.2.8/tests/test_vehiclemeta.py +234 -0
  305. fivefury-0.2.8/tests/test_water.py +317 -0
  306. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ybn.py +1012 -971
  307. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ycd.py +1039 -1039
  308. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ycd_cutscene_builder.py +194 -194
  309. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ydd.py +101 -101
  310. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ydr.py +533 -537
  311. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ydr_builder.py +2170 -2116
  312. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ydr_shaders.py +52 -52
  313. fivefury-0.2.8/tests/test_yft.py +900 -0
  314. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ymf.py +211 -175
  315. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ynd.py +213 -213
  316. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ynv.py +392 -297
  317. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ynv_assimp.py +58 -58
  318. {fivefury-0.2.6 → fivefury-0.2.8}/tests/test_ytyp_flags.py +113 -113
  319. fivefury-0.2.6/PKG-INFO +0 -1106
  320. fivefury-0.2.6/README.md +0 -1094
  321. fivefury-0.2.6/fivefury/ydr/_helpers.py +0 -39
  322. fivefury-0.2.6/fivefury/yft/constants.py +0 -47
  323. fivefury-0.2.6/fivefury/yft/drawable_reader.py +0 -48
  324. fivefury-0.2.6/fivefury/yft/model.py +0 -66
  325. fivefury-0.2.6/fivefury/yft/reader.py +0 -175
  326. fivefury-0.2.6/fivefury/yft/validation.py +0 -331
  327. fivefury-0.2.6/fivefury/ynv/writer.py +0 -353
  328. fivefury-0.2.6/fivefury.egg-info/PKG-INFO +0 -1106
  329. fivefury-0.2.6/tests/test_awc.py +0 -133
  330. fivefury-0.2.6/tests/test_cut_ycd.py +0 -159
  331. fivefury-0.2.6/tests/test_gxt2.py +0 -75
  332. fivefury-0.2.6/tests/test_high_level_api_consistency.py +0 -316
  333. fivefury-0.2.6/tests/test_pso.py +0 -75
  334. fivefury-0.2.6/tests/test_rel.py +0 -602
  335. fivefury-0.2.6/tests/test_ydr_rigging.py +0 -70
  336. fivefury-0.2.6/tests/test_yed.py +0 -233
  337. fivefury-0.2.6/tests/test_yft.py +0 -412
  338. fivefury-0.2.6/tests/test_ymt_ped_variation.py +0 -103
  339. fivefury-0.2.6/tests/test_ymt_ymf.py +0 -65
  340. {fivefury-0.2.6 → fivefury-0.2.8}/MANIFEST.in +0 -0
  341. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/_native.py +0 -0
  342. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/constants.py +0 -0
  343. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/crypto.py +0 -0
  344. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/awc/io.py +0 -0
  345. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/cache/__init__.py +0 -0
  346. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/data/lut.dat +0 -0
  347. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/data/magic.dat +0 -0
  348. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/data/ng.dat +0 -0
  349. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/metahash.py +0 -0
  350. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ydr/gen9_shader_enums.py +0 -0
  351. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury/ymf/enums.py +0 -0
  352. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury.egg-info/dependency_links.txt +0 -0
  353. {fivefury-0.2.6 → fivefury-0.2.8}/fivefury.egg-info/top_level.txt +0 -0
  354. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_bindings.cpp +0 -0
  355. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_module.cpp +0 -0
  356. {fivefury-0.2.6 → fivefury-0.2.8}/native/py_rpf.cpp +0 -0
  357. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_archive.h +0 -0
  358. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_read.cpp +0 -0
  359. {fivefury-0.2.6 → fivefury-0.2.8}/native/rpf_scan.cpp +0 -0
  360. {fivefury-0.2.6 → fivefury-0.2.8}/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,198 @@
1
+ Metadata-Version: 2.4
2
+ Name: fivefury
3
+ Version: 0.2.8
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
+ Requires-Dist: numpy>=1.26
12
+ Dynamic: license-file
13
+
14
+ # FiveFury
15
+
16
+ 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.
17
+
18
+ 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.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ pip install fivefury
24
+ ```
25
+
26
+ Python 3.11+ is required.
27
+
28
+ 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`).
29
+
30
+ ## Format support
31
+
32
+ | Format | Status | Scope |
33
+ | --- | --- | --- |
34
+ | `YDR` | Full | Drawables: models, LODs, materials, shaders, lights, embedded textures and bounds, skeletons, skinning |
35
+ | `CDR` | Read | PS3 drawables: materials, LODs, QB/EDGE geometry, compressed indices, skeletons and skinning |
36
+ | `YDD` | Full | Drawable dictionaries, creation from named drawables, ped-component rigging helpers |
37
+ | `YBN` | Full | Primitive, composite, geometry, and BVH bounds; collision generation from triangle meshes |
38
+ | `YCD` | Full | Clip dictionaries: skeletal, object, UV, camera, and root-motion tracks |
39
+ | `YMAP` | Full | Entities, car generators, occluders, timecycle modifiers, LOD/distant lights |
40
+ | `YTYP` | Full | Base/time/MLO archetypes, extensions, rooms, portals, entity sets |
41
+ | `YMF` | Full | Map manifests, IMAP/ITYP dependencies, generation from YMAP sets |
42
+ | `YTD` | Full | Texture dictionaries: read/write, extraction, embedded-asset helpers |
43
+ | `YND` | Full | Path nodes, links, area partitioning, junction heightmaps |
44
+ | `YNV` | Full | Navmeshes: sectors, polys, portals, validation, basic OBJ partitioning |
45
+ | `water.xml` | Full | Water surfaces, triangle corners, calming regions, wave amplitude and direction |
46
+ | `CUT` | Full | Cutscenes, plus the readable `.cuts` script format for round-trip authoring |
47
+ | `GXT2` | Full | Hashed text tables with binary read/write and text import/export |
48
+ | `AWC` | Full | Audio containers: PCM/WAV extraction, authoring from WAV/MP3/OGG/FLAC |
49
+ | `RPF` | Full | RPF7 archives: nested archives, folder/ZIP conversion, encrypted archive reading |
50
+ | DLC metadata | Full | `setup2.xml`, `content.xml`, `dlclist.xml`, title-update patch overlays |
51
+ | `GTXD` | Full | Parent texture dictionary metadata (XML and binary RBF) |
52
+ | `YFT` | Partial | Fragment read/write: drawables, physics LODs/groups/children, composite bounds |
53
+ | `REL` | Partial | Audio metadata banks; typed models for synths, curves, categories, and common sound graphs |
54
+ | `YED` | Partial | Expression dictionaries: inspection, spring editing, small dictionaries from scratch |
55
+ | `YMT` | Partial | META/PSO/RBF read/write with typed helpers for known roots; unknown payloads preserved |
56
+ | `YPT` | Partial | Embedded texture dictionary discovery/extraction only |
57
+ | `YWR`, `YVR` | Indexed | Detected by `GameFileCache` and RPF tooling; no dedicated parser yet |
58
+ | `YFD`, `YPDB`, `MRF` | — | Not implemented |
59
+
60
+ `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`.
61
+
62
+ ## Quick start
63
+
64
+ ### Create a YMAP and pack it into an RPF
65
+
66
+ ```python
67
+ from fivefury import Ymap, create_rpf
68
+
69
+ ymap = Ymap(name="example_map")
70
+ ymap.entity("prop_tree_pine_01", position=(100, 200, 0), lod_dist=150.0)
71
+ ymap.car_gen("sultan", (110, 205, 0), heading=90)
72
+ ymap.save("example_map.ymap", auto_extents=True)
73
+
74
+ archive = create_rpf("mods.rpf")
75
+ archive.add("stream/example_map.ymap", ymap)
76
+ archive.save("mods.rpf")
77
+ ```
78
+
79
+ ### Build a drawable
80
+
81
+ ```python
82
+ from fivefury import YdrMeshInput, create_ydr
83
+
84
+ ydr = create_ydr(
85
+ meshes=[
86
+ YdrMeshInput(
87
+ positions=[(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)],
88
+ indices=[0, 1, 2],
89
+ texcoords=[[(0.0, 0.0), (1.0, 0.0), (0.0, 1.0)]],
90
+ )
91
+ ],
92
+ material_textures={"DiffuseSampler": "example_diffuse"},
93
+ name="example_drawable",
94
+ )
95
+ ydr.save("example_drawable.ydr")
96
+ ```
97
+
98
+ 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.
99
+
100
+ ### Generate collision
101
+
102
+ ```python
103
+ from fivefury import BoundMaterial, BoundMaterialType, build_bound_from_triangles, save_ybn
104
+
105
+ triangles = [
106
+ ((0.0, 0.0, 0.0), (4.0, 0.0, 0.0), (0.0, 4.0, 0.0)),
107
+ ((4.0, 0.0, 0.0), (4.0, 4.0, 0.0), (0.0, 4.0, 0.0)),
108
+ ]
109
+
110
+ bound = build_bound_from_triangles(
111
+ triangles,
112
+ material=BoundMaterial(type=BoundMaterialType.CONCRETE),
113
+ )
114
+ save_ybn(bound, "floor_collision.ybn")
115
+ ```
116
+
117
+ 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()`.
118
+
119
+ ### Author water
120
+
121
+ ```python
122
+ from fivefury import WaterData, WaterQuad, WaterWaveQuad
123
+
124
+ water = WaterData()
125
+ water.add(
126
+ WaterQuad.rectangle(
127
+ center=(100.0, 200.0, 12.5),
128
+ size=(80.0, 40.0),
129
+ alpha=26,
130
+ limited_depth=True,
131
+ )
132
+ )
133
+ water.add(
134
+ WaterWaveQuad.from_angle(
135
+ bounds=(60, 180, 140, 220),
136
+ amplitude=1.2,
137
+ degrees=90.0,
138
+ )
139
+ )
140
+ water.translate(x=500, y=-200, z=20.0).save("water.xml")
141
+ ```
142
+
143
+ ### Convert audio to AWC
144
+
145
+ ```python
146
+ from fivefury import convert_audio_to_awc
147
+
148
+ convert_audio_to_awc("music/song.flac", "stream/song.awc", channels=2)
149
+ ```
150
+
151
+ ### Work with RPF archives
152
+
153
+ ```python
154
+ from fivefury import RpfArchive, RpfExportMode, rpf_to_zip, zip_to_rpf
155
+
156
+ zip_to_rpf("unpacked_mod_folder", "packed_mod.rpf")
157
+ rpf_to_zip("packed_mod.rpf", "packed_mod.zip", mode=RpfExportMode.STANDALONE)
158
+
159
+ with RpfArchive.from_path("packed_mod.rpf") as archive:
160
+ archive.to_folder("out", mode=RpfExportMode.STANDALONE)
161
+ ```
162
+
163
+ 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).
164
+
165
+ ### Index a game installation
166
+
167
+ ```python
168
+ from fivefury import GameFileCache
169
+
170
+ cache = GameFileCache(r"C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V")
171
+ cache.scan_game(use_index_cache=True)
172
+
173
+ asset = cache.get_asset("prop_tree_pine_01", kind=".ydr")
174
+ cache.extract_asset(asset, "prop_tree_pine_01.ydr")
175
+ cache.extract_asset_textures("prop_tree_pine_01.ydr", "textures")
176
+ ```
177
+
178
+ `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`).
179
+
180
+ ### Author DLC metadata
181
+
182
+ ```python
183
+ from fivefury import write_dlc_folder_metadata
184
+
185
+ write_dlc_folder_metadata("build/my_pack", pack_name="my_pack", order=60)
186
+ ```
187
+
188
+ 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.
189
+
190
+ ## API conventions
191
+
192
+ 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).
193
+
194
+ ## License
195
+
196
+ FiveFury is released under the `CC0-1.0` public domain dedication. See [LICENSE](LICENSE).
197
+
198
+ Release notes live in [CHANGELOG.md](CHANGELOG.md).
@@ -0,0 +1,185 @@
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
+ | `water.xml` | Full | Water surfaces, triangle corners, calming regions, wave amplitude and direction |
33
+ | `CUT` | Full | Cutscenes, plus the readable `.cuts` script format for round-trip authoring |
34
+ | `GXT2` | Full | Hashed text tables with binary read/write and text import/export |
35
+ | `AWC` | Full | Audio containers: PCM/WAV extraction, authoring from WAV/MP3/OGG/FLAC |
36
+ | `RPF` | Full | RPF7 archives: nested archives, folder/ZIP conversion, encrypted archive reading |
37
+ | DLC metadata | Full | `setup2.xml`, `content.xml`, `dlclist.xml`, title-update patch overlays |
38
+ | `GTXD` | Full | Parent texture dictionary metadata (XML and binary RBF) |
39
+ | `YFT` | Partial | Fragment read/write: drawables, physics LODs/groups/children, composite bounds |
40
+ | `REL` | Partial | Audio metadata banks; typed models for synths, curves, categories, and common sound graphs |
41
+ | `YED` | Partial | Expression dictionaries: inspection, spring editing, small dictionaries from scratch |
42
+ | `YMT` | Partial | META/PSO/RBF read/write with typed helpers for known roots; unknown payloads preserved |
43
+ | `YPT` | Partial | Embedded texture dictionary discovery/extraction only |
44
+ | `YWR`, `YVR` | Indexed | Detected by `GameFileCache` and RPF tooling; no dedicated parser yet |
45
+ | `YFD`, `YPDB`, `MRF` | — | Not implemented |
46
+
47
+ `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`.
48
+
49
+ ## Quick start
50
+
51
+ ### Create a YMAP and pack it into an RPF
52
+
53
+ ```python
54
+ from fivefury import Ymap, create_rpf
55
+
56
+ ymap = Ymap(name="example_map")
57
+ ymap.entity("prop_tree_pine_01", position=(100, 200, 0), lod_dist=150.0)
58
+ ymap.car_gen("sultan", (110, 205, 0), heading=90)
59
+ ymap.save("example_map.ymap", auto_extents=True)
60
+
61
+ archive = create_rpf("mods.rpf")
62
+ archive.add("stream/example_map.ymap", ymap)
63
+ archive.save("mods.rpf")
64
+ ```
65
+
66
+ ### Build a drawable
67
+
68
+ ```python
69
+ from fivefury import YdrMeshInput, create_ydr
70
+
71
+ ydr = create_ydr(
72
+ meshes=[
73
+ YdrMeshInput(
74
+ positions=[(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)],
75
+ indices=[0, 1, 2],
76
+ texcoords=[[(0.0, 0.0), (1.0, 0.0), (0.0, 1.0)]],
77
+ )
78
+ ],
79
+ material_textures={"DiffuseSampler": "example_diffuse"},
80
+ name="example_drawable",
81
+ )
82
+ ydr.save("example_drawable.ydr")
83
+ ```
84
+
85
+ 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.
86
+
87
+ ### Generate collision
88
+
89
+ ```python
90
+ from fivefury import BoundMaterial, BoundMaterialType, build_bound_from_triangles, save_ybn
91
+
92
+ triangles = [
93
+ ((0.0, 0.0, 0.0), (4.0, 0.0, 0.0), (0.0, 4.0, 0.0)),
94
+ ((4.0, 0.0, 0.0), (4.0, 4.0, 0.0), (0.0, 4.0, 0.0)),
95
+ ]
96
+
97
+ bound = build_bound_from_triangles(
98
+ triangles,
99
+ material=BoundMaterial(type=BoundMaterialType.CONCRETE),
100
+ )
101
+ save_ybn(bound, "floor_collision.ybn")
102
+ ```
103
+
104
+ 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()`.
105
+
106
+ ### Author water
107
+
108
+ ```python
109
+ from fivefury import WaterData, WaterQuad, WaterWaveQuad
110
+
111
+ water = WaterData()
112
+ water.add(
113
+ WaterQuad.rectangle(
114
+ center=(100.0, 200.0, 12.5),
115
+ size=(80.0, 40.0),
116
+ alpha=26,
117
+ limited_depth=True,
118
+ )
119
+ )
120
+ water.add(
121
+ WaterWaveQuad.from_angle(
122
+ bounds=(60, 180, 140, 220),
123
+ amplitude=1.2,
124
+ degrees=90.0,
125
+ )
126
+ )
127
+ water.translate(x=500, y=-200, z=20.0).save("water.xml")
128
+ ```
129
+
130
+ ### Convert audio to AWC
131
+
132
+ ```python
133
+ from fivefury import convert_audio_to_awc
134
+
135
+ convert_audio_to_awc("music/song.flac", "stream/song.awc", channels=2)
136
+ ```
137
+
138
+ ### Work with RPF archives
139
+
140
+ ```python
141
+ from fivefury import RpfArchive, RpfExportMode, rpf_to_zip, zip_to_rpf
142
+
143
+ zip_to_rpf("unpacked_mod_folder", "packed_mod.rpf")
144
+ rpf_to_zip("packed_mod.rpf", "packed_mod.zip", mode=RpfExportMode.STANDALONE)
145
+
146
+ with RpfArchive.from_path("packed_mod.rpf") as archive:
147
+ archive.to_folder("out", mode=RpfExportMode.STANDALONE)
148
+ ```
149
+
150
+ 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).
151
+
152
+ ### Index a game installation
153
+
154
+ ```python
155
+ from fivefury import GameFileCache
156
+
157
+ cache = GameFileCache(r"C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V")
158
+ cache.scan_game(use_index_cache=True)
159
+
160
+ asset = cache.get_asset("prop_tree_pine_01", kind=".ydr")
161
+ cache.extract_asset(asset, "prop_tree_pine_01.ydr")
162
+ cache.extract_asset_textures("prop_tree_pine_01.ydr", "textures")
163
+ ```
164
+
165
+ `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`).
166
+
167
+ ### Author DLC metadata
168
+
169
+ ```python
170
+ from fivefury import write_dlc_folder_metadata
171
+
172
+ write_dlc_folder_metadata("build/my_pack", pack_name="my_pack", order=60)
173
+ ```
174
+
175
+ 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.
176
+
177
+ ## API conventions
178
+
179
+ 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).
180
+
181
+ ## License
182
+
183
+ FiveFury is released under the `CC0-1.0` public domain dedication. See [LICENSE](LICENSE).
184
+
185
+ Release notes live in [CHANGELOG.md](CHANGELOG.md).