FixRaidenBoss2 4.3.0__tar.gz → 4.3.2__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 (189) hide show
  1. {fixraidenboss2-4.3.0/src/FixRaidenBoss2.egg-info → fixraidenboss2-4.3.2}/PKG-INFO +4 -3
  2. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/README.md +3 -2
  3. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/pyproject.toml +1 -1
  4. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/__init__.py +3 -1
  5. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ImgFormats.py +5 -0
  6. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/Packages.py +4 -0
  7. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/CommandBuilder.py +14 -5
  8. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/enums/CommandOpts.py +1 -0
  9. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/enums/ShortCommandOpts.py +1 -0
  10. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/IniFixBuilderData.py +6 -4
  11. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/IniParseBuilderData.py +15 -17
  12. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/main.py +2 -1
  13. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/IniSectionGraph.py +2 -2
  14. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/Mod.py +12 -2
  15. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/IniFile.py +20 -7
  16. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iftemplate/IfContentPart.py +21 -23
  17. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniParsers/GIMIParser.py +7 -5
  18. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/BaseTexFilter.py +2 -2
  19. fixraidenboss2-4.3.2/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/ColourReplaceFilter.py +145 -0
  20. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/GammaFilter.py +10 -0
  21. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/HueAdjust.py +10 -0
  22. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/InvertAlphaFilter.py +10 -0
  23. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/PixelFilter.py +11 -1
  24. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/TexMetadataFilter.py +10 -0
  25. fixraidenboss2-4.3.2/src/FixRaidenBoss2/model/strategies/texEditors/texFilters/TransparencyAdjustFilter.py +65 -0
  26. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/textures/Colour.py +28 -1
  27. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/remapService.py +57 -11
  28. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2/src/FixRaidenBoss2.egg-info}/PKG-INFO +4 -3
  29. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2.egg-info/SOURCES.txt +2 -0
  30. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/LICENSE +0 -0
  31. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/setup.cfg +0 -0
  32. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/__main__.py +0 -0
  33. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/BufDataTypes.py +0 -0
  34. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/BufElementTypes.py +0 -0
  35. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/BufFormatNames.py +0 -0
  36. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/BufTypeNames.py +0 -0
  37. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ByteSize.py +0 -0
  38. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ColourConsts.py +0 -0
  39. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/Colours.py +0 -0
  40. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FileEncodings.py +0 -0
  41. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FileExt.py +0 -0
  42. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FilePathConsts.py +0 -0
  43. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FilePrefixes.py +0 -0
  44. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FileSuffixes.py +0 -0
  45. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/FileTypes.py +0 -0
  46. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/GIBuilder.py +0 -0
  47. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/GenericTypes.py +0 -0
  48. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/GlobalIniClassifiers.py +0 -0
  49. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/GlobalIniRemoveBuilders.py +0 -0
  50. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/IfPredPartType.py +0 -0
  51. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/IniConsts.py +0 -0
  52. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ModTypeBuilder.py +0 -0
  53. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ModTypeNames.py +0 -0
  54. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/ModTypes.py +0 -0
  55. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/TexConsts.py +0 -0
  56. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/constants/__init__.py +0 -0
  57. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/CommandFormatter.py +0 -0
  58. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/__init__.py +0 -0
  59. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/controller/enums/__init__.py +0 -0
  60. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/HashData.py +0 -0
  61. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/IndexData.py +0 -0
  62. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/ModData.py +0 -0
  63. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/PositionEditorData.py +0 -0
  64. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/VGRemapData.py +0 -0
  65. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/data/__init__.py +0 -0
  66. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/BadBufData.py +0 -0
  67. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/BufFileNotRecognized.py +0 -0
  68. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/ConflictingOptions.py +0 -0
  69. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/DuplicateFileException.py +0 -0
  70. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/Error.py +0 -0
  71. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/FileException.py +0 -0
  72. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/InvalidModType.py +0 -0
  73. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/MissingFileException.py +0 -0
  74. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/NoModType.py +0 -0
  75. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/RemapMissingBlendFile.py +0 -0
  76. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/exceptions/__init__.py +0 -0
  77. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/FileStats.py +0 -0
  78. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/Model.py +0 -0
  79. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/VGRemap.py +0 -0
  80. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/Version.py +0 -0
  81. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/__init__.py +0 -0
  82. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/Hashes.py +0 -0
  83. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/Indices.py +0 -0
  84. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/IniFixBuilderArgs.py +0 -0
  85. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/IniParseBuilderArgs.py +0 -0
  86. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/ModAssets.py +0 -0
  87. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/ModDictAssets.py +0 -0
  88. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/ModDoubleDictAssets.py +0 -0
  89. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/ModIdAssets.py +0 -0
  90. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/ModMappedAssets.py +0 -0
  91. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/PositionEditors.py +0 -0
  92. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/VGRemaps.py +0 -0
  93. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/assets/__init__.py +0 -0
  94. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufDataType.py +0 -0
  95. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufElementType.py +0 -0
  96. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufFloat.py +0 -0
  97. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufInt.py +0 -0
  98. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufType.py +0 -0
  99. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/buffers/BufUnorm.py +0 -0
  100. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/BinaryFile.py +0 -0
  101. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/BlendFile.py +0 -0
  102. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/BufFile.py +0 -0
  103. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/File.py +0 -0
  104. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/PositionFile.py +0 -0
  105. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/files/TextureFile.py +0 -0
  106. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iftemplate/IfPredPart.py +0 -0
  107. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iftemplate/IfTemplate.py +0 -0
  108. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iftemplate/IfTemplatePart.py +0 -0
  109. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iniparserdicts/KeepAllDict.py +0 -0
  110. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iniparserdicts/KeepFirstDict.py +0 -0
  111. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iniparserdicts/__init__.py +0 -0
  112. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iniresources/IniResourceModel.py +0 -0
  113. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/iniresources/IniTexModel.py +0 -0
  114. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/ModType.py +0 -0
  115. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/bufEditors/BaseBufEditor.py +0 -0
  116. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/bufEditors/BufEditor.py +0 -0
  117. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/BaseIniClassifier.py +0 -0
  118. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/BaseIniClassifierBuilder.py +0 -0
  119. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/IniClassifier.py +0 -0
  120. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/IniClassifierBuilder.py +0 -0
  121. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/IniClassifyStats.py +0 -0
  122. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/states/IniClsAction.py +0 -0
  123. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/states/IniClsActionArgs.py +0 -0
  124. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/states/IniClsCond.py +0 -0
  125. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniClassifiers/states/IniClsTransitionVals.py +0 -0
  126. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/BaseIniFixer.py +0 -0
  127. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/GIMIFixer.py +0 -0
  128. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/GIMIObjMergeFixer.py +0 -0
  129. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/GIMIObjRegEditFixer.py +0 -0
  130. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/GIMIObjReplaceFixer.py +0 -0
  131. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/GIMIObjSplitFixer.py +0 -0
  132. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/IniFixBuilder.py +0 -0
  133. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/MultiModFixer.py +0 -0
  134. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/BaseRegEditFilter.py +0 -0
  135. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegEditFilter.py +0 -0
  136. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegNewVals.py +0 -0
  137. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegRemap.py +0 -0
  138. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegRemove.py +0 -0
  139. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegTexAdd.py +0 -0
  140. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniFixers/regEditFilters/RegTexEdit.py +0 -0
  141. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniParsers/BaseIniParser.py +0 -0
  142. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniParsers/GIMIObjParser.py +0 -0
  143. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniParsers/IniParseBuilder.py +0 -0
  144. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniRemovers/BaseIniRemover.py +0 -0
  145. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniRemovers/IniRemoveBuilder.py +0 -0
  146. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/iniRemovers/IniRemover.py +0 -0
  147. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/BaseTexEditor.py +0 -0
  148. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/TexCreator.py +0 -0
  149. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/TexEditor.py +0 -0
  150. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/BasePixelTransform.py +0 -0
  151. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/ColourReplace.py +0 -0
  152. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/CorrectGamma.py +0 -0
  153. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/HighlightShadow.py +0 -0
  154. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/InvertAlpha.py +0 -0
  155. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/TempControl.py +0 -0
  156. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/TintTransform.py +0 -0
  157. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/strategies/texEditors/pixelTransforms/Transparency.py +0 -0
  158. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/model/textures/ColourRange.py +0 -0
  159. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/Algo.py +0 -0
  160. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/Builder.py +0 -0
  161. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/DFA.py +0 -0
  162. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/DictTools.py +0 -0
  163. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/FlyweightBuilder.py +0 -0
  164. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/Heading.py +0 -0
  165. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/HeapNode.py +0 -0
  166. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/ListTools.py +0 -0
  167. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/Node.py +0 -0
  168. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/PackageData.py +0 -0
  169. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/PackageManager.py +0 -0
  170. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/TextTools.py +0 -0
  171. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/__init__.py +0 -0
  172. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/caches/Cache.py +0 -0
  173. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/caches/LRUCache.py +0 -0
  174. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/caches/__init__.py +0 -0
  175. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/concurrency/ConcurrentManager.py +0 -0
  176. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/concurrency/ProcessManager.py +0 -0
  177. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/concurrency/ThreadManager.py +0 -0
  178. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/files/FilePath.py +0 -0
  179. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/files/FileService.py +0 -0
  180. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/files/__init__.py +0 -0
  181. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/tries/AhoCorasicDFA.py +0 -0
  182. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/tries/AhoCorasickBuilder.py +0 -0
  183. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/tries/BaseAhoCorasickDFA.py +0 -0
  184. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/tries/FastAhoCorasickDFA.py +0 -0
  185. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/tools/tries/Trie.py +0 -0
  186. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/view/Logger.py +0 -0
  187. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2/view/__init__.py +0 -0
  188. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2.egg-info/dependency_links.txt +0 -0
  189. {fixraidenboss2-4.3.0 → fixraidenboss2-4.3.2}/src/FixRaidenBoss2.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: FixRaidenBoss2
3
- Version: 4.3.0
3
+ Version: 4.3.2
4
4
  Summary: A library to help remap the mods installed on a character onto the skins of the character
5
5
  Author-email: NK <qqqqaaaapppp0000@gmail.com>, Albert Gold <AlexXianZhenYuAu@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/nhok0169/Anime-Game-Remap
@@ -450,8 +450,9 @@ print("The Raiden Mod is fixed!")
450
450
  | -u, --undo | Undo the previous runs of the script |
451
451
  | -ho, --hideOriginal | Show only the mod on the remapped character and do not show the mod on the original character |
452
452
  | -l str, --log str | The folder location to log the printed out text into a seperate .txt file. If this option is not specified, then will not log the printed out text. |
453
- | -a, --all | Parses all *.ini files that the program encounters. This option supersedes the --types option<br><br>Note: Usually, you would also need to specify what particular mod you want to fix using the --defaultType option. Otherwise, you will be defaulted to fixing 'raiden' mods. |
454
- | -dt str, --defaultType str | The default mod type to use if the *.ini file belongs to some unknown mod <br> If the --all option is set to True, then this argument will be 'raiden'. <br> Otherwise, if this value is not specified, then any mods with unknown types will be skipped <br> <br> See below for the different names/aliases of the supported types of mods. |
453
+ | -a, --all | Parses all *.ini files that the program encounters. This option supersedes the --types option<br><br>For *.ini file where a mod cannot be identified, usually, you would also need to specify what particular mod the *.ini file defaults to using the --defaultType option. <br> Otherwise, you will be defaulted to fixing 'raiden' mods. |
454
+ | -dt str, --defaultType str | The default mod type to use if the *.ini file belongs to some unknown mod. <br> <br> - If --forceType is set to True, this option has not effect <br> - If the --all is set to True and no values are specified for this option, the default argument for this option is set to 'raiden' <br> - Otherwise, this option has not effect and any unknown mods will be skipped <br> <br> See below for the different names/aliases of the supported types of mods. |
455
+ | -ft str, --forceType str | Forcibly assumes the mod type for all *.ini file parsed. <br> <br> This option supersedes the --types option and the --all option. <br> <br> See below for the different names/aliases of the supported types of mods. |
455
456
  | -t str, --types str | Parses *.ini files that the program encounters for only specific types of mods. If the --all option has been specified, this option has no effect. <br> By default, if this option is not specified, will parse the *.ini files for all the supported types of mods. <br> <br> Please specify the types of mods using the the mod type's name or alias, then seperate each name/alias with a comma(,) <br> &nbsp; &nbsp; &nbsp; *eg. raiden,arlecchino,ayaya* |
456
457
  | -rt str, --remappedTypes str | From all the mods to fix, specified by the --types option, will specifically remap those mods to the mods specified by this option. <br> For a mod specified by the --types option, if none of its corresponding remapped mods are specified by this option, then the mod specified by the --types option will be remapped to all its corresponding mods. <br> <br> ------------------- <br> eg. <br> If this program was ran with the following options: <br> --types kequeen,jean <br> --remappedTypes jeanSea <br> <br> the program will do the following remap: <br> keqing --> keqingOpulent <br> Jean --> JeanSea <br> <br> Note that Jean will not remap to JeanCN <br> ------------------- <br> <br> By default, if this option is not specified, will remap all the mods specified in --types to their corresponding remapped mods. <br> <br> Please specify the types of mods using the the mod type's name or alias, then seperate each name/alias with a comma(,) <br> eg. raiden,arlecchino,ayaya <br> <br> See below for the different names/aliases of the supported types of mods. |
457
458
 
@@ -435,8 +435,9 @@ print("The Raiden Mod is fixed!")
435
435
  | -u, --undo | Undo the previous runs of the script |
436
436
  | -ho, --hideOriginal | Show only the mod on the remapped character and do not show the mod on the original character |
437
437
  | -l str, --log str | The folder location to log the printed out text into a seperate .txt file. If this option is not specified, then will not log the printed out text. |
438
- | -a, --all | Parses all *.ini files that the program encounters. This option supersedes the --types option<br><br>Note: Usually, you would also need to specify what particular mod you want to fix using the --defaultType option. Otherwise, you will be defaulted to fixing 'raiden' mods. |
439
- | -dt str, --defaultType str | The default mod type to use if the *.ini file belongs to some unknown mod <br> If the --all option is set to True, then this argument will be 'raiden'. <br> Otherwise, if this value is not specified, then any mods with unknown types will be skipped <br> <br> See below for the different names/aliases of the supported types of mods. |
438
+ | -a, --all | Parses all *.ini files that the program encounters. This option supersedes the --types option<br><br>For *.ini file where a mod cannot be identified, usually, you would also need to specify what particular mod the *.ini file defaults to using the --defaultType option. <br> Otherwise, you will be defaulted to fixing 'raiden' mods. |
439
+ | -dt str, --defaultType str | The default mod type to use if the *.ini file belongs to some unknown mod. <br> <br> - If --forceType is set to True, this option has not effect <br> - If the --all is set to True and no values are specified for this option, the default argument for this option is set to 'raiden' <br> - Otherwise, this option has not effect and any unknown mods will be skipped <br> <br> See below for the different names/aliases of the supported types of mods. |
440
+ | -ft str, --forceType str | Forcibly assumes the mod type for all *.ini file parsed. <br> <br> This option supersedes the --types option and the --all option. <br> <br> See below for the different names/aliases of the supported types of mods. |
440
441
  | -t str, --types str | Parses *.ini files that the program encounters for only specific types of mods. If the --all option has been specified, this option has no effect. <br> By default, if this option is not specified, will parse the *.ini files for all the supported types of mods. <br> <br> Please specify the types of mods using the the mod type's name or alias, then seperate each name/alias with a comma(,) <br> &nbsp; &nbsp; &nbsp; *eg. raiden,arlecchino,ayaya* |
441
442
  | -rt str, --remappedTypes str | From all the mods to fix, specified by the --types option, will specifically remap those mods to the mods specified by this option. <br> For a mod specified by the --types option, if none of its corresponding remapped mods are specified by this option, then the mod specified by the --types option will be remapped to all its corresponding mods. <br> <br> ------------------- <br> eg. <br> If this program was ran with the following options: <br> --types kequeen,jean <br> --remappedTypes jeanSea <br> <br> the program will do the following remap: <br> keqing --> keqingOpulent <br> Jean --> JeanSea <br> <br> Note that Jean will not remap to JeanCN <br> ------------------- <br> <br> By default, if this option is not specified, will remap all the mods specified in --types to their corresponding remapped mods. <br> <br> Please specify the types of mods using the the mod type's name or alias, then seperate each name/alias with a comma(,) <br> eg. raiden,arlecchino,ayaya <br> <br> See below for the different names/aliases of the supported types of mods. |
442
443
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "FixRaidenBoss2"
7
- version = "4.3.0"
7
+ version = "4.3.2"
8
8
  authors = [
9
9
  {name="NK", email="qqqqaaaapppp0000@gmail.com"},
10
10
  {name="Albert Gold", email="AlexXianZhenYuAu@gmail.com"}
@@ -120,11 +120,13 @@ from .model.strategies.texEditors.pixelTransforms.TintTransform import TintTrans
120
120
  from .model.strategies.texEditors.pixelTransforms.Transparency import Transparency
121
121
 
122
122
  from .model.strategies.texEditors.texFilters.BaseTexFilter import BaseTexFilter
123
+ from .model.strategies.texEditors.texFilters.ColourReplaceFilter import ColourReplaceFilter
123
124
  from .model.strategies.texEditors.texFilters.GammaFilter import GammaFilter
124
125
  from .model.strategies.texEditors.texFilters.HueAdjust import HueAdjust
125
126
  from .model.strategies.texEditors.texFilters.InvertAlphaFilter import InvertAlphaFilter
126
127
  from .model.strategies.texEditors.texFilters.PixelFilter import PixelFilter
127
128
  from .model.strategies.texEditors.texFilters.TexMetadataFilter import TexMetadataFilter
129
+ from .model.strategies.texEditors.texFilters.TransparencyAdjustFilter import TransparencyAdjustFilter
128
130
 
129
131
  from .model.strategies.texEditors.BaseTexEditor import BaseTexEditor
130
132
  from .model.strategies.texEditors.TexEditor import TexEditor
@@ -201,7 +203,7 @@ __all__ = ["BufDataTypes", "BufElementTypes", "BufFormatNames", "BufDataTypeName
201
203
  "BaseIniParser", "GIMIObjParser", "GIMIParser", "IniParseBuilder",
202
204
  "BaseIniRemover", "IniRemover", "IniRemoveBuilder",
203
205
  "BasePixelTransform", "ColourReplace", "CorrectGamma", "InvertAlpha", "HighlightShadow", "TempControl", "TintTransform", "Transparency",
204
- "BaseTexFilter", "GammaFilter", "HueAdjust", "InvertAlphaFilter", "PixelFilter", "TexMetadataFilter",
206
+ "BaseTexFilter", "ColourReplaceFilter", "GammaFilter", "HueAdjust", "InvertAlphaFilter", "PixelFilter", "TexMetadataFilter", "TransparencyAdjustFilter",
205
207
  "BaseTexEditor", "TexEditor", "TexCreator",
206
208
  "ModType",
207
209
  "IfContentPart", "IfPredPart", "IfTemplate", "IfTemplatePart",
@@ -36,4 +36,9 @@ class ImgFormats(Enum):
36
36
  """
37
37
  HSV (hue, saturation, value) image
38
38
  """
39
+
40
+ Bit = "1"
41
+ """
42
+ Image with a single bit channel that has values of either 0 or 1
43
+ """
39
44
  ##### EndScript
@@ -57,6 +57,9 @@ class PackageModules(Enum):
57
57
  PIL_Image: :class:`PackageData`
58
58
  Module for PIL.Image
59
59
 
60
+ PIL_ImageChops: :class:`PackageData`
61
+ Module for PIL.ImageChops
62
+
60
63
  PIL_ImageEnhance: :class:`PackageData`
61
64
  Module for PIL.ImageEnhance
62
65
  """
@@ -64,5 +67,6 @@ class PackageModules(Enum):
64
67
  AhoCorasick = PackageData("ahocorasick", PackageInstall.PyAhoCorasick.value)
65
68
  OrderedSet = PackageData("ordered_set", PackageInstall.OrderedSet.value)
66
69
  PIL_Image = PackageData("PIL.Image", PackageInstall.Pillow.value)
70
+ PIL_ImageChops = PackageData("PIL.ImageChops", PackageInstall.Pillow.value)
67
71
  PIL_ImageEnhance = PackageData("PIL.ImageEnhance", PackageInstall.Pillow.value)
68
72
  ##### EndScript
@@ -55,13 +55,22 @@ class CommandBuilder():
55
55
  self._argParser.add_argument(ShortCommandOpts.HideOriginal.value, CommandOpts.HideOriginal.value, action = 'store_true', help="Show only the mod on the remapped character and do not show the mod on the original character")
56
56
  self._argParser.add_argument(ShortCommandOpts.Log.value, CommandOpts.Log.value, action='store', type=str, help=f'The folder location to log the printed out text into a seperate {FileExt.Txt.value} file. If this option is not specified, then will not log the printed out text.')
57
57
  self._argParser.add_argument(ShortCommandOpts.All.value, CommandOpts.All.value, action='store_true', help=f"""Parses all {FileTypes.Ini.value}s that the program encounters. This option supersedes the {CommandOpts.Types.value} option
58
-
59
- Note: Usually, you would also need to specify what particular mod you want to fix using the {CommandOpts.DefaultType.value} option. Otherwise, you will be defaulted to fixing 'raiden' mods.""")
60
- self._argParser.add_argument(ShortCommandOpts.DefaultType.value, CommandOpts.DefaultType.value, action='store', type=str, help=f'''The default mod type to use if the {FileTypes.Ini.value} belongs to some unknown mod
61
- If the {CommandOpts.All.value} is set to True, then this argument will be 'raiden'.
62
- Otherwise, if this value is not specified, then any mods with unknown types will be skipped.
58
+
59
+ For {FileTypes.Ini.value} where a mod cannot be identified, usually, you would also need to specify what particular mod the {FileTypes.Ini.value} defaults to using the {CommandOpts.DefaultType.value} option.
60
+ Otherwise, you will be defaulted to fixing 'raiden' mods.""")
61
+ self._argParser.add_argument(ShortCommandOpts.DefaultType.value, CommandOpts.DefaultType.value, action='store', type=str, help=f'''The default mod type to use if the {FileTypes.Ini.value} belongs to some unknown mod.
62
+
63
+ - If {CommandOpts.ForceType.value} is set to True, this option has not effect
64
+ - If the {CommandOpts.All.value} is set to True and no values are specified for this option, the default argument for this option is set to 'raiden'
65
+ - Otherwise, this option has not effect and any unknown mods will be skipped
63
66
 
64
67
  See below for the different names/aliases of the supported types of mods.''')
68
+
69
+ self._argParser.add_argument(ShortCommandOpts.ForceType.value, CommandOpts.ForceType.value, action='store', type=str, help=f"""Forcibly assumes the mod type for all {FileTypes.Ini.value} parsed.
70
+
71
+ This option supersedes the {CommandOpts.Types.value} option and the {CommandOpts.All.value} option.
72
+
73
+ See below for the different names/aliases of the supported types of mods.""")
65
74
 
66
75
  self._argParser.add_argument('-t', CommandOpts.Types.value, action='store', type=str, help=f'''Parses {FileTypes.Ini.value}s that the program encounters for only specific types of mods. If the {CommandOpts.Types.value} option has been specified, this option has no effect.
67
76
  By default, if this option is not specified, will parse the {FileTypes.Ini.value}s for all the supported types of mods.
@@ -26,6 +26,7 @@ class CommandOpts(Enum):
26
26
  All = '--all'
27
27
  Types = "--types"
28
28
  FixedTypes = "--remappedTypes"
29
+ ForceType = "--forceType"
29
30
  Version = "--version"
30
31
  Log = "--log"
31
32
  DefaultType = "--defaultType"
@@ -26,6 +26,7 @@ class ShortCommandOpts(Enum):
26
26
  All = '-a'
27
27
  Types = "-t"
28
28
  FixedTypes = "-rt"
29
+ ForceType = "-ft"
29
30
  Version = "-v"
30
31
  Log = "-l"
31
32
  DefaultType = "-dt"
@@ -173,12 +173,13 @@ class IniFixBuilderFuncs():
173
173
  ],
174
174
  "postRegEditFilters": [
175
175
  RegRemove(remove = {"extra": {"ps-t0", "ps-t1"}}),
176
- RegNewVals(vals = {"extra": {IniKeywords.Ib.value: "null"}, "dress": {IniKeywords.Ib.value: "null"}}),
176
+ RegNewVals(vals = {"extra": {IniKeywords.Ib.value: "null"},
177
+ "dress": {IniKeywords.Ib.value: "null"}}),
177
178
  RegTexEdit(textures = {"TransparentHeadDiffuse": ["ps-t0"]}),
178
179
  RegRemap(remap = {"head": {"ps-t0": ["ps-t0", "ps-t1"], "ps-t1": ["ps-t2"]},
179
180
  "dress": {"ps-t0": ["ps-t0", "ps-t1"], "ps-t1": ["ps-t2"]}}),
180
- RegTexAdd(textures = {"head": {"ps-t0": ("NormMap", TexCreator(1024, 1024, colour = Colours.NormalMapBlue.value))},
181
- "dress": {"ps-t0": ("NormMap", TexCreator(1024, 1024, colour = Colours.NormalMapBlue.value))}}, mustAdd = False)
181
+ RegNewVals(vals = {"head": {"ps-t0": "null"}}),
182
+ RegTexAdd(textures = {"dress": {"ps-t0": ("NormMap", TexCreator(1024, 1024, colour = Colours.NormalMapBlue.value))}}, mustAdd = False)
182
183
  ]})
183
184
 
184
185
  @classmethod
@@ -337,7 +338,8 @@ class IniFixBuilderFuncs():
337
338
  def xiangling4_0(cls) -> Tuple[BaseIniFixer, List[Any], Dict[str, Any]]:
338
339
  return (GIMIObjMergeFixer,
339
340
  [{"head": ["head", "body", "dress"], "body": ["body"]}],
340
- {"preRegEditFilters": [
341
+ {"copyPreamble": IniComments.GIMIObjMergerPreamble.value,
342
+ "preRegEditFilters": [
341
343
  RegTexEdit({"DarkDiffuse": ["ps-t0"]}),
342
344
  RegRemove(remove = {"head": {"ps-t2"},
343
345
  "body": {"ps-t2", "ps-t3"},
@@ -21,14 +21,12 @@ from ..constants.ModTypeNames import ModTypeNames
21
21
  from ..constants.TexConsts import TexMetadataNames
22
22
  from ..constants.ColourConsts import ColourConsts
23
23
  from ..model.strategies.iniParsers.BaseIniParser import BaseIniParser
24
- from ..model.strategies.iniParsers.IniParseBuilder import IniParseBuilder
25
24
  from ..model.strategies.iniParsers.GIMIParser import GIMIParser
26
25
  from ..model.strategies.iniParsers.GIMIObjParser import GIMIObjParser
27
26
  from ..model.strategies.texEditors.TexEditor import TexEditor
28
- from ..model.strategies.texEditors.texFilters.PixelFilter import PixelFilter
29
27
  from ..model.strategies.texEditors.texFilters.InvertAlphaFilter import InvertAlphaFilter
30
- from ..model.strategies.texEditors.pixelTransforms.Transparency import Transparency
31
- from ..model.strategies.texEditors.pixelTransforms.ColourReplace import ColourReplace
28
+ from ..model.strategies.texEditors.texFilters.ColourReplaceFilter import ColourReplaceFilter
29
+ from ..model.strategies.texEditors.texFilters.TransparencyAdjustFilter import TransparencyAdjustFilter
32
30
  from ..model.strategies.texEditors.texFilters.TexMetadataFilter import TexMetadataFilter
33
31
  from ..model.files.TextureFile import TextureFile
34
32
  from ..model.textures.Colour import Colour
@@ -58,7 +56,7 @@ class IniParseBuilderFuncs():
58
56
  [{"head", "body", "dress"}],
59
57
  {"texEdits": {"head": {"ps-t0": {"TransparentDiffuse": TexEditor(filters = [TexMetadataFilter(edits = {TexMetadataNames.Gamma.value: 1 / ColourConsts.StandardGamma.value}),
60
58
  cls._ayakaEditHeadDiffuse])}},
61
- "body": {"ps-t1": {"BrightLightMap": TexEditor(filters = [PixelFilter(transforms = [Transparency(-78)])])}},
59
+ "body": {"ps-t1": {"BrightLightMap": TexEditor(filters = [TransparencyAdjustFilter(-78)])}},
62
60
  "dress": {"ps-t0": {"OpaqueDiffuse": TexEditor(filters = [cls._ayakaEditDressDiffuse,
63
61
  TexMetadataFilter(edits = {TexMetadataNames.Gamma.value: 1 / ColourConsts.StandardGamma.value})])}}}})
64
62
 
@@ -71,8 +69,8 @@ class IniParseBuilderFuncs():
71
69
  return (GIMIObjParser,
72
70
  [{"head", "body"}],
73
71
  {"texEdits": {
74
- "head": {"ps-t0": {"YellowHeadDiffuse": TexEditor(filters = [PixelFilter(transforms = [ColourReplace(Colours.NormalMapYellow.value, coloursToReplace = {ColourRanges.NormalMapPurple1.value})])])}},
75
- "body": {"ps-t0": {"YellowBodyDiffuse": TexEditor(filters = [PixelFilter(transforms = [ColourReplace(Colours.NormalMapYellow.value)])])}},
72
+ "head": {"ps-t0": {"YellowHeadDiffuse": TexEditor(filters = [ColourReplaceFilter(Colours.NormalMapYellow.value, coloursToReplace = {ColourRanges.NormalMapPurple1.value})])}},
73
+ "body": {"ps-t0": {"YellowBodyDiffuse": TexEditor(filters = [ColourReplaceFilter(Colours.NormalMapYellow.value)])}},
76
74
  }})
77
75
 
78
76
  @classmethod
@@ -81,10 +79,10 @@ class IniParseBuilderFuncs():
81
79
  [{"head", "body", "dress", "extra"}],
82
80
  {"texEdits": {"body": {"ps-t0": {"TransparentBodyDiffuse": TexEditor(filters = [InvertAlphaFilter()])},
83
81
  "ps-t1": {"OpaqueBodyDiffuse": TexEditor(filters = [TexMetadataFilter(edits = {TexMetadataNames.Gamma.value: 1}),
84
- PixelFilter(transforms = [ColourReplace(Colours.LightMapGreen.value,
85
- coloursToReplace = {ColourRange(Colour(0, 120, 110, 65), Colour(255, 140, 255, 75)),
86
- ColourRange(Colour(0, 120, 0, 65), Colour(255, 140, 200, 75)),
87
- ColourRange(Colour(0, 0, 200, 65), Colour(30, 30, 255, 75))})])])}},
82
+ ColourReplaceFilter(Colours.LightMapGreen.value,
83
+ coloursToReplace = {ColourRange(Colour(0, 120, 110, 65), Colour(255, 140, 255, 75)),
84
+ ColourRange(Colour(0, 120, 0, 65), Colour(255, 140, 200, 75)),
85
+ ColourRange(Colour(0, 0, 200, 65), Colour(30, 30, 255, 75))})])}},
88
86
  "dress": {"ps-t1": {"TransparentyDressDiffuse": TexEditor(filters = [InvertAlphaFilter()])}}}})
89
87
 
90
88
  @classmethod
@@ -96,8 +94,8 @@ class IniParseBuilderFuncs():
96
94
  return (GIMIObjParser,
97
95
  [{"body", "dress"}],
98
96
  {"texEdits": {"body": {"ps-t0": {"TransparentBodyDiffuse": TexEditor(filters = [InvertAlphaFilter(),
99
- PixelFilter(transforms = [ColourReplace(Colour(0, 0, 0, 177),
100
- coloursToReplace = {ColourRange(Colour(0, 0, 0, 125), Colour(0, 0, 0, 130))})])])}},
97
+ ColourReplaceFilter(Colour(0, 0, 0, 177),
98
+ coloursToReplace = {ColourRange(Colour(0, 0, 0, 125), Colour(0, 0, 0, 130))})])}},
101
99
  "dress": {"ps-t0": {"TransparentDressDiffuse": TexEditor(filters = [InvertAlphaFilter()])}}}})
102
100
 
103
101
  @classmethod
@@ -168,7 +166,7 @@ class IniParseBuilderFuncs():
168
166
  def kirara4_0(cls) -> Tuple[BaseIniParser, List[Any], Dict[str, Any]]:
169
167
  return (GIMIObjParser,
170
168
  [{"dress"}],
171
- {"texEdits": {"dress": {"ps-t2": {"WhitenLightMap": TexEditor(filters = [PixelFilter(transforms = [ColourReplace(Colours.White.value, coloursToReplace = {ColourRanges.LightMapGreen.value}, replaceAlpha = False)])])}}}})
169
+ {"texEdits": {"dress": {"ps-t2": {"WhitenLightMap": TexEditor(filters = [ColourReplaceFilter(Colours.White.value, coloursToReplace = {ColourRanges.LightMapGreen.value}, replaceAlpha = False)])}}}})
172
170
 
173
171
  @classmethod
174
172
  def kiraraBoots4_8(cls) -> Tuple[BaseIniParser, List[Any], Dict[str, Any]]:
@@ -178,9 +176,9 @@ class IniParseBuilderFuncs():
178
176
  def klee4_0(cls) -> Tuple[BaseIniParser, List[Any], Dict[str, Any]]:
179
177
  return (GIMIObjParser,
180
178
  [{"head", "body"}],
181
- {"texEdits": {"body": {"ps-t1": {"GreenLightMap": TexEditor(filters = [PixelFilter(transforms = [ColourReplace(Colour(0, 128, 0, 177),
182
- coloursToReplace = {ColourRange(Colour(0, 0, 0, 250), Colour(0, 0, 0, 255)),
183
- ColourRange(Colour(0, 0, 0, 125), Colour(0 ,0 ,0, 130))}, replaceAlpha = True)])])}}}})
179
+ {"texEdits": {"body": {"ps-t1": {"GreenLightMap": TexEditor(filters = [ColourReplaceFilter(Colour(0, 128, 0, 177),
180
+ coloursToReplace = {ColourRange(Colour(0, 0, 0, 250), Colour(0, 0, 0, 255)),
181
+ ColourRange(Colour(0, 0, 0, 125), Colour(0 ,0 ,0, 130))}, replaceAlpha = True)])}}}})
184
182
 
185
183
  @classmethod
186
184
  def kleeBlossomingStarlight4_0(cls) -> Tuple[BaseIniParser, List[Any], Dict[str, Any]]:
@@ -30,9 +30,10 @@ def remapMain():
30
30
  args = command.parse()
31
31
  readAllInis = args.all
32
32
  defaultType = args.defaultType
33
+ forcedType = args.forceType
33
34
 
34
35
  remapService = RemapService(path = args.src, keepBackups = not args.deleteBackup, fixOnly = args.fixOnly, hideOrig = args.hideOriginal,
35
- undoOnly = args.undo, readAllInis = readAllInis, types = args.types, defaultType = defaultType,
36
+ undoOnly = args.undo, readAllInis = readAllInis, types = args.types, defaultType = defaultType, forcedType = forcedType,
36
37
  log = args.log, verbose = True, handleExceptions = True, remappedTypes = args.remappedTypes,
37
38
  version = args.version)
38
39
  remapService.fix()
@@ -217,7 +217,7 @@ class IniSectionGraph():
217
217
 
218
218
  self.construct()
219
219
  if (self.remapNameFunc is not None):
220
- self.getRemapBlendNames(newModsToFix = newModsToFix)
220
+ self.getRemapNames(newModsToFix = newModsToFix)
221
221
  else:
222
222
  self._remapNames = {}
223
223
 
@@ -323,7 +323,7 @@ class IniSectionGraph():
323
323
  self._runSequence = runSequence
324
324
  return self._sections
325
325
 
326
- def getRemapBlendNames(self, newModsToFix: Optional[Set[str]] = None) -> Dict[str, Dict[str, str]]:
326
+ def getRemapNames(self, newModsToFix: Optional[Set[str]] = None) -> Dict[str, Dict[str, str]]:
327
327
  """
328
328
  Retrieves the corresponding remap names of the sections made by this fix
329
329
 
@@ -100,6 +100,11 @@ class Mod(Model):
100
100
 
101
101
  **Default**: ``None``
102
102
 
103
+ forcedType: Optional[:class:`ModType`]
104
+ The type of mod to forcibly assume for some .ini file :raw-html:`<br />` :raw-html:`<br />`
105
+
106
+ **Default**: ``None``
107
+
103
108
  version: Optional[:class:`float`]
104
109
  The game version we want the fixed mod :raw-html:`<br />` :raw-html:`<br />`
105
110
 
@@ -128,6 +133,9 @@ class Mod(Model):
128
133
  _defaultType: Optional[:class:`ModType`]
129
134
  The type of mod to use if a mod has an unidentified type
130
135
 
136
+ _forcedType: Optional[:class:`ModType`]
137
+ The type of mod to forcibly assume for some .ini file
138
+
131
139
  logger: Optional[:class:`Logger`]
132
140
  The logger used to pretty print messages
133
141
 
@@ -149,7 +157,7 @@ class Mod(Model):
149
157
  The *remapFix*.dds files found for the mod
150
158
  """
151
159
  def __init__(self, path: Optional[str] = None, files: Optional[List[str]] = None, logger: Optional[Logger] = None, types: Optional[Set[ModType]] = None,
152
- defaultType: Optional[ModType] = None, version: Optional[float] = None, remappedTypes: Optional[Set[str]] = None):
160
+ forcedType: Optional[ModType] = None, defaultType: Optional[ModType] = None, version: Optional[float] = None, remappedTypes: Optional[Set[str]] = None):
153
161
  super().__init__(logger = logger)
154
162
  self.path = FileService.getPath(path)
155
163
  self.version = version
@@ -163,6 +171,7 @@ class Mod(Model):
163
171
  self._types = types
164
172
  self._remappedTypes = remappedTypes
165
173
  self._defaultType = defaultType
174
+ self._forcedType = forcedType
166
175
 
167
176
  self.inis = []
168
177
  self.remapBlend = []
@@ -199,7 +208,8 @@ class Mod(Model):
199
208
  iniPaths = self.inis
200
209
  self.inis = {}
201
210
  for iniPath in iniPaths:
202
- iniFile = IniFile(iniPath, logger = self.logger, modTypes = self._types, defaultModType = self._defaultType, version = self.version, modsToFix = self._remappedTypes)
211
+ iniFile = IniFile(iniPath, logger = self.logger, modTypes = self._types, defaultModType = self._defaultType,
212
+ forcedModType = self._forcedType, version = self.version, modsToFix = self._remappedTypes)
203
213
  self.inis[iniFile.file] = iniFile
204
214
 
205
215
  @classmethod
@@ -104,6 +104,11 @@ class IniFile(File):
104
104
 
105
105
  **Default**: ``None``
106
106
 
107
+ forcedModType: Optional[:class:`ModType`]
108
+ The type of mod to forcibly assume the .ini file to belong to :raw-html:`<br />` :raw-html:`<br />`
109
+
110
+ **Default**: ``None``
111
+
107
112
  version: Optional[:class:`float`]
108
113
  The game version we want the .ini file to be compatible with :raw-html:`<br />` :raw-html:`<br />`
109
114
 
@@ -137,6 +142,9 @@ class IniFile(File):
137
142
  defaultModType: Optional[:class:`ModType`]
138
143
  The type of mod to use if the .ini file has an unidentified mod type
139
144
 
145
+ forcedModType: Optional[:class:`ModType`]
146
+ The type of mod to forcibly assume the .ini file to belong to
147
+
140
148
  sectionIfTemplates: Dict[:class:`str`, :class:`IfTemplate`]
141
149
  All the `sections`_ in the .ini file that can be parsed into an :class:`IfTemplate`
142
150
 
@@ -207,7 +215,7 @@ class IniFile(File):
207
215
  _ifStructurePattern = re.compile(r"\s*(" + IfPredPartType.EndIf.value + "|" + IfPredPartType.Else.value + "|" + IfPredPartType.If.value + "|" + IfPredPartType.Elif.value + ")")
208
216
 
209
217
  def __init__(self, file: Optional[str] = None, logger: Optional["Logger"] = None, txt: str = "", modTypes: Optional[Set[ModType]] = None, defaultModType: Optional[ModType] = None,
210
- version: Optional[float] = None, modsToFix: Optional[Set[str]] = None, iniClassifier: Optional[IniClassifier] = None):
218
+ forcedModType: Optional[ModType] = None, version: Optional[float] = None, modsToFix: Optional[Set[str]] = None, iniClassifier: Optional[IniClassifier] = None):
211
219
  super().__init__(logger = logger)
212
220
 
213
221
  self._filePath: Optional[FilePath] = None
@@ -231,6 +239,7 @@ class IniFile(File):
231
239
  modsToFix = set()
232
240
 
233
241
  self.defaultModType = defaultModType
242
+ self.forcedModType = forcedModType
234
243
  self.modTypes = modTypes
235
244
  self.modsToFix = modsToFix
236
245
  self._heading = IniBoilerPlate.DefaultHeading.value.copy()
@@ -734,15 +743,19 @@ class IniFile(File):
734
743
 
735
744
  modType = classifyStats.modType
736
745
  hasModType = modType is not None and modType in self.modTypes
746
+ hasForcedModType = self.forcedModType is not None
747
+
748
+ self._isModIni = False if (self.defaultModType is None and not hasModType and self.modTypes and not hasForcedModType) else classifyStats.isMod
749
+ self._isFixed = classifyStats.isFixed
750
+
751
+ if (hasForcedModType):
752
+ modType = self.forcedModType
753
+ hasModType = True
737
754
 
738
- if (hasModType):
739
- self._setType(classifyStats.modType)
755
+ if (hasModType and self._isModIni):
756
+ self._setType(modType)
740
757
  else:
741
- classifyStats.modType = None
742
758
  self._setType(None)
743
-
744
- self._isModIni = False if (self.defaultModType is None and not hasModType and self.modTypes) else classifyStats.isMod
745
- self._isFixed = classifyStats.isFixed
746
759
 
747
760
  self._isClassified = True
748
761
  return self._isModIni
@@ -13,11 +13,13 @@
13
13
 
14
14
 
15
15
  ##### ExtImports
16
+ import copy
16
17
  from collections import defaultdict
17
18
  from typing import List, Dict, Tuple, Union, Set, Union, Callable, Any, Optional
18
19
  ##### EndExtImports
19
20
 
20
21
  ##### LocalImports
22
+ from ...tools.Algo import Algo
21
23
  from ...tools.DictTools import DictTools
22
24
  from ...tools.ListTools import ListTools
23
25
  from ...tools.Algo import Algo
@@ -462,46 +464,41 @@ class IfContentPart(IfTemplatePart):
462
464
  occurences = defaultdict(lambda: 0)
463
465
  i = 0
464
466
  orderLen = len(self._order)
465
- remappedSrc = defaultdict(lambda: [])
466
467
  keysToRemove = set()
467
468
  keysToAdd = set()
469
+ remappedSrc = defaultdict(lambda: [])
468
470
 
469
- # "ps-t0": ["ps-t0", "ps-t1"], "ps-t1": ["ps-t2"]
470
-
471
- # contruct the order
472
471
  while (i < orderLen):
473
472
  keyData = self._order[i]
474
473
  key = keyData[0]
475
- currentKeyOccurence = keyData[1]
476
- keyOccurence = occurences[key]
477
-
474
+ keyOccurence = keyData[1]
475
+ currentMaxOccurence = occurences[key]
476
+
478
477
  # update the occurence of the key
479
- if (currentKeyOccurence < keyOccurence and keyOccurence < len(self._src[key])):
480
- self._order[i] = (key, keyOccurence)
481
- occurences[key] += 1
482
- elif (currentKeyOccurence > keyOccurence):
483
- occurences[key] = currentKeyOccurence
478
+ if (keyOccurence < currentMaxOccurence):
479
+ self._order[i] = (key, currentMaxOccurence)
484
480
 
485
481
  if (key not in keyRemap):
486
482
  i += 1
483
+ occurences[key] += 1
487
484
  continue
488
485
  else:
489
486
  keysToRemove.add(key)
490
-
487
+
491
488
  newKeys = keyRemap[key]
492
489
  newKeysLen = len(newKeys)
490
+
491
+ keyValData = self.src[key][keyOccurence]
492
+ keyVal = keyValData[1]
493
493
  newKeyRefs = []
494
494
 
495
495
  # construct the remapped keys
496
496
  for j in range(newKeysLen):
497
497
  newKey = newKeys[j]
498
- newKeyOccurence = occurences[newKey]
499
- newKeyRefs.append((newKey, newKeyOccurence))
500
498
 
501
- oldValData = self.src[key][currentKeyOccurence]
502
- oldVal = oldValData[1]
499
+ newKeyRefs.append((newKey, occurences[newKey]))
500
+ remappedSrc[newKey].append((i + j, keyVal))
503
501
 
504
- remappedSrc[newKey].append((i + j, oldVal))
505
502
  keysToAdd.add(newKey)
506
503
  occurences[newKey] += 1
507
504
 
@@ -510,12 +507,13 @@ class IfContentPart(IfTemplatePart):
510
507
  newRefsLen = len(newKeyRefs)
511
508
  i += newRefsLen
512
509
  orderLen += (newRefsLen - 1)
513
-
510
+
514
511
  # remove the keys that do not appear after the remap
515
- keysToRemove = keysToRemove.difference(keysToAdd)
516
512
  for key in keysToRemove:
517
- del self.src[key]
518
-
513
+ if (key not in keysToAdd):
514
+ del self.src[key]
515
+
519
516
  # construct the new src
520
- DictTools.update(self.src, remappedSrc, lambda key, srcVals, remappedVals: remappedVals)
517
+ srcValCompare = lambda srcVal, remappedVal: srcVal[0] - remappedVal[0]
518
+ DictTools.update(self.src, remappedSrc, lambda key, srcVals, remappedVals: remappedVals if (key in keysToRemove) else Algo.merge([srcVals, remappedVals], srcValCompare))
521
519
  ##### EndScript
@@ -139,9 +139,11 @@ class GIMIParser(BaseIniParser):
139
139
 
140
140
  # _makeRemapNames(): Makes the required names used for the fix
141
141
  def _makeRemapNames(self):
142
- self.blendCommandsGraph.getRemapBlendNames(self._modsToFix)
143
- self.nonBlendHashIndexCommandsGraph.getRemapBlendNames(self._modsToFix)
144
- self.blendResourceCommandsGraph.getRemapBlendNames(self._modsToFix)
142
+ self.blendCommandsGraph.getRemapNames(self._modsToFix)
143
+ self.positionCommandsGraph.getRemapNames(self._modsToFix)
144
+ self.nonBlendHashIndexCommandsGraph.getRemapNames(self._modsToFix)
145
+ self.blendResourceCommandsGraph.getRemapNames(self._modsToFix)
146
+ self.positionResourceCommandsGraph.getRemapNames(self._modsToFix)
145
147
 
146
148
  def _makeRemapModels(self, result: Dict[str, IniResourceModel], resourceGraph: IniSectionGraph, getFixedFile: Optional[Callable[[str], str]] = None):
147
149
  """
@@ -267,8 +269,8 @@ class GIMIParser(BaseIniParser):
267
269
  self.blendCommandsGraph.remapNameFunc = self._iniFile.getRemapBlendName
268
270
  self.nonBlendHashIndexCommandsGraph.remapNameFunc = self._iniFile.getRemapFixName
269
271
  self.blendResourceCommandsGraph.remapNameFunc = self._iniFile.getRemapBlendResourceName
270
- self.positionCommandsGraph.remapNameFunc = self._iniFile.getRemapFixName
271
- self.positionResourceCommandsGraph.remapNameFunc = self._iniFile.getRemapPositionName
272
+ self.positionCommandsGraph.remapNameFunc = self._iniFile.getRemapPositionName
273
+ self.positionResourceCommandsGraph.remapNameFunc = self._iniFile.getRemapPositionResourceName
272
274
 
273
275
  self._parseBlend()
274
276
  positionSections = self._parsePosition()
@@ -34,7 +34,7 @@ class BaseTexFilter():
34
34
 
35
35
  .. describe:: x(texFile)
36
36
 
37
- Calls :meth:`BaseTexFilter.transform` for the :class:`BaseTexFilter`, ``x``
37
+ Calls :meth:`transform` for the filters, ``x``
38
38
  """
39
39
 
40
40
  def __call__(self, texFile: "TextureFile"):
@@ -47,7 +47,7 @@ class BaseTexFilter():
47
47
  Parameters
48
48
  ----------
49
49
  texFile: :class:`TextureFile`
50
- The texture to be editteds
50
+ The texture to be editted
51
51
  """
52
52
 
53
53
  pass