Compare commits

...

220 Commits

Author SHA1 Message Date
Jan
c4a7c8c9b7
Merge pull request #450 from Laupetin/dependabot/submodules/thirdparty/lz4-2bc386d
chore(deps): bump thirdparty/lz4 from `351fc61` to `2bc386d`
2025-06-07 13:51:50 +02:00
Jan
2aa8d4e3dc
Merge pull request #449 from Laupetin/dependabot/submodules/thirdparty/catch2-3013cb8
chore(deps): bump thirdparty/catch2 from `74fcff6` to `3013cb8`
2025-06-07 13:51:38 +02:00
Jan
4e37ab860b
Merge pull request #448 from Laupetin/dependabot/submodules/thirdparty/json-c633693
chore(deps): bump thirdparty/json from `68c25ae` to `c633693`
2025-06-07 13:51:27 +02:00
Jan
2973704db4
Merge pull request #447 from Laupetin/dependabot/submodules/thirdparty/eigen-cda19a6
chore(deps): bump thirdparty/eigen from `4fdf87b` to `cda19a6`
2025-06-07 13:51:16 +02:00
dependabot[bot]
8a85ee776b
chore(deps): bump thirdparty/lz4 from 351fc61 to 2bc386d
Bumps [thirdparty/lz4](https://github.com/lz4/lz4) from `351fc61` to `2bc386d`.
- [Release notes](https://github.com/lz4/lz4/releases)
- [Commits](351fc6197d...2bc386d57c)

---
updated-dependencies:
- dependency-name: thirdparty/lz4
  dependency-version: 2bc386d57cd9c36780366acead0054fd49dcd36b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 22:17:27 +00:00
dependabot[bot]
a379d5db07
chore(deps): bump thirdparty/catch2 from 74fcff6 to 3013cb8
Bumps [thirdparty/catch2](https://github.com/catchorg/Catch2) from `74fcff6` to `3013cb8`.
- [Release notes](https://github.com/catchorg/Catch2/releases)
- [Commits](74fcff6e5b...3013cb897b)

---
updated-dependencies:
- dependency-name: thirdparty/catch2
  dependency-version: 3013cb897b5706e8532507cb2b6ac33e1fc35d93
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 22:17:25 +00:00
dependabot[bot]
2cc63c6a0a
chore(deps): bump thirdparty/json from 68c25ae to c633693
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `68c25ae` to `c633693`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](68c25aec60...c633693d3e)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: c633693d3e2ab81fa186c691c452c47ced107845
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 22:17:22 +00:00
dependabot[bot]
c7132546d4
chore(deps): bump thirdparty/eigen from 4fdf87b to cda19a6
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `4fdf87b` to `cda19a6`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](4fdf87bbf5...cda19a6255)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: cda19a6255d25c3b834d142d74490b720425c49b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 22:17:19 +00:00
Jan
a5e34d7081
Merge pull request #444 from Laupetin/dependabot/submodules/thirdparty/lz4-351fc61
chore(deps): bump thirdparty/lz4 from `836decd` to `351fc61`
2025-05-31 09:15:05 +02:00
Jan
7f4d582fbd
Merge pull request #443 from Laupetin/dependabot/submodules/thirdparty/eigen-4fdf87b
chore(deps): bump thirdparty/eigen from `d81aa18` to `4fdf87b`
2025-05-31 09:14:53 +02:00
Jan
f462520c83
Merge pull request #442 from Laupetin/dependabot/submodules/thirdparty/json-68c25ae
chore(deps): bump thirdparty/json from `281d1e9` to `68c25ae`
2025-05-31 09:14:40 +02:00
dependabot[bot]
518bf1fba2
chore(deps): bump thirdparty/lz4 from 836decd to 351fc61
Bumps [thirdparty/lz4](https://github.com/lz4/lz4) from `836decd` to `351fc61`.
- [Release notes](https://github.com/lz4/lz4/releases)
- [Commits](836decd8a8...351fc6197d)

---
updated-dependencies:
- dependency-name: thirdparty/lz4
  dependency-version: 351fc6197d25a4d8ebce25fb5d2c32ab97c826b1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 22:13:27 +00:00
dependabot[bot]
b19bb4d55a
chore(deps): bump thirdparty/eigen from d81aa18 to 4fdf87b
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `d81aa18` to `4fdf87b`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](d81aa18f4d...4fdf87bbf5)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 4fdf87bbf57e392bbf2c1bdf71d305ea3d037d33
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 22:13:25 +00:00
dependabot[bot]
54c72af9a0
chore(deps): bump thirdparty/json from 281d1e9 to 68c25ae
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `281d1e9` to `68c25ae`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](281d1e929b...68c25aec60)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 68c25aec608db272fd62f8eae2c34fb5e73a1af5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 22:13:24 +00:00
Jan
da1c3956e5
Merge pull request #441 from LJW-Dev/fix-iwi-header-writing
Fix BO2 IWI files saving cube textures incorrectly.
2025-05-30 20:06:05 +02:00
Jan Laupetin
49867a3474
fix: accidentally dumping iwi cubemaps as 2D 2025-05-30 19:41:25 +02:00
LJW-Dev
dc43671930 Changed structure of IWI header writing so 2D images are last. 2025-05-30 17:22:09 +08:00
Jan
a8cf9b79fa
Merge pull request #440 from Laupetin/dependabot/submodules/thirdparty/eigen-d81aa18
chore(deps): bump thirdparty/eigen from `171bd08` to `d81aa18`
2025-05-24 08:53:53 +02:00
Jan
e67d3a8040
Merge pull request #439 from Laupetin/dependabot/submodules/thirdparty/json-281d1e9
chore(deps): bump thirdparty/json from `3cca3ad` to `281d1e9`
2025-05-24 08:53:40 +02:00
dependabot[bot]
200479e319
chore(deps): bump thirdparty/eigen from 171bd08 to d81aa18
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `171bd08` to `d81aa18`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](171bd08ca9...d81aa18f4d)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: d81aa18f4dc56264b2cd7e2f230807d776a2d385
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-23 22:02:41 +00:00
dependabot[bot]
fa1b99a28a
chore(deps): bump thirdparty/json from 3cca3ad to 281d1e9
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `3cca3ad` to `281d1e9`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](3cca3ad210...281d1e929b)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 281d1e929bd7c4b694d8c193526bfb0b6577108f
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-23 22:02:40 +00:00
Jan
f47c0c5074
Merge pull request #438 from Laupetin/dependabot/submodules/thirdparty/eigen-171bd08
chore(deps): bump thirdparty/eigen from `434a2fc` to `171bd08`
2025-05-17 08:11:44 +02:00
Jan
5d107bd7f6
Merge pull request #437 from Laupetin/dependabot/submodules/thirdparty/json-3cca3ad
chore(deps): bump thirdparty/json from `e9391dc` to `3cca3ad`
2025-05-17 08:11:31 +02:00
dependabot[bot]
302206b4de
chore(deps): bump thirdparty/eigen from 434a2fc to 171bd08
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `434a2fc` to `171bd08`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](434a2fc4a4...171bd08ca9)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 171bd08ca987987c3c50f0fa5dd8914bdd42dd3b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-16 22:47:45 +00:00
dependabot[bot]
bf9094db2d
chore(deps): bump thirdparty/json from e9391dc to 3cca3ad
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `e9391dc` to `3cca3ad`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](e9391dc5bc...3cca3ad210)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 3cca3ad21012e289d34970e2e3060d255494c548
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-16 22:47:43 +00:00
Jan
450bd46902
Merge pull request #436 from Laupetin/fix/gltf-without-bones
fix: dumping xmodels with multiple surfaces and no bones
2025-05-11 22:20:46 +02:00
Jan
2a4c0dcb43
fix: dumping xmodels with multiple surfaces and no bones 2025-05-11 20:55:52 +01:00
Jan
c28d1f6000
Merge pull request #435 from Laupetin/dependabot/submodules/thirdparty/lz4-836decd
chore(deps): bump thirdparty/lz4 from `c99038d` to `836decd`
2025-05-10 10:18:51 +02:00
Jan
d7e7726f76
Merge pull request #434 from Laupetin/dependabot/submodules/thirdparty/eigen-434a2fc
chore(deps): bump thirdparty/eigen from `fb2fca9` to `434a2fc`
2025-05-10 10:18:38 +02:00
Jan
2c45942d13
Merge pull request #433 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-d448df1
chore(deps): bump thirdparty/libtomcrypt from `3905c28` to `d448df1`
2025-05-10 10:18:27 +02:00
Jan
23ece27d07
Merge pull request #432 from Laupetin/dependabot/submodules/thirdparty/json-e9391dc
chore(deps): bump thirdparty/json from `dff2b47` to `e9391dc`
2025-05-10 10:18:15 +02:00
dependabot[bot]
11d01763d6
chore(deps): bump thirdparty/lz4 from c99038d to 836decd
Bumps [thirdparty/lz4](https://github.com/lz4/lz4) from `c99038d` to `836decd`.
- [Release notes](https://github.com/lz4/lz4/releases)
- [Commits](c99038d1bb...836decd8a8)

---
updated-dependencies:
- dependency-name: thirdparty/lz4
  dependency-version: 836decd8a898475dcd21ed46768157f4420c9dd2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-09 22:42:23 +00:00
dependabot[bot]
404bba6142
chore(deps): bump thirdparty/eigen from fb2fca9 to 434a2fc
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `fb2fca9` to `434a2fc`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](fb2fca90be...434a2fc4a4)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 434a2fc4a41682b90275426097653b07a37286d7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-09 22:42:22 +00:00
dependabot[bot]
efeffe9e90
chore(deps): bump thirdparty/libtomcrypt from 3905c28 to d448df1
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `3905c28` to `d448df1`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](3905c28913...d448df1938)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-version: d448df1938e8988bcdb0eed6591387e82b26874b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-09 22:42:20 +00:00
dependabot[bot]
a1b48ceeeb
chore(deps): bump thirdparty/json from dff2b47 to e9391dc
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `dff2b47` to `e9391dc`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](dff2b4756c...e9391dc5bc)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: e9391dc5bc36514fa1e8a4e2267e9006f168dc9a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-09 22:42:18 +00:00
Jan
f802b4e130
Merge pull request #431 from Laupetin/dependabot/submodules/thirdparty/json-dff2b47
chore(deps): bump thirdparty/json from `51a77f1` to `dff2b47`
2025-05-03 01:07:05 +02:00
Jan
38dd7eecad
Merge pull request #430 from Laupetin/dependabot/submodules/thirdparty/catch2-74fcff6
chore(deps): bump thirdparty/catch2 from `4c8671c` to `74fcff6`
2025-05-03 01:06:57 +02:00
Jan
4798a20699
Merge pull request #429 from Laupetin/dependabot/submodules/thirdparty/eigen-fb2fca9
chore(deps): bump thirdparty/eigen from `7294434` to `fb2fca9`
2025-05-03 01:06:48 +02:00
Jan
e7d9d9a845
Merge pull request #428 from Laupetin/dependabot/submodules/thirdparty/lz4-c99038d
chore(deps): bump thirdparty/lz4 from `df6b19d` to `c99038d`
2025-05-03 01:06:41 +02:00
dependabot[bot]
182b0b2530
chore(deps): bump thirdparty/json from 51a77f1 to dff2b47
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `51a77f1` to `dff2b47`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](51a77f1dca...dff2b4756c)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: dff2b4756cedca462721dc9666a2fbc05d47b486
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-02 22:31:50 +00:00
dependabot[bot]
dc4956c077
chore(deps): bump thirdparty/catch2 from 4c8671c to 74fcff6
Bumps [thirdparty/catch2](https://github.com/catchorg/Catch2) from `4c8671c` to `74fcff6`.
- [Release notes](https://github.com/catchorg/Catch2/releases)
- [Commits](4c8671cfbb...74fcff6e5b)

---
updated-dependencies:
- dependency-name: thirdparty/catch2
  dependency-version: 74fcff6e5b190fb833a231b7f7c1829e3c3ac54d
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-02 22:31:48 +00:00
dependabot[bot]
9b7f384a3d
chore(deps): bump thirdparty/eigen from 7294434 to fb2fca9
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `7294434` to `fb2fca9`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](7294434099...fb2fca90be)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: fb2fca90be39783f76ba05b521360afeeda265f2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-02 22:31:45 +00:00
dependabot[bot]
5b97cbf3f8
chore(deps): bump thirdparty/lz4 from df6b19d to c99038d
Bumps [thirdparty/lz4](https://github.com/lz4/lz4) from `df6b19d` to `c99038d`.
- [Release notes](https://github.com/lz4/lz4/releases)
- [Commits](df6b19dfc2...c99038d1bb)

---
updated-dependencies:
- dependency-name: thirdparty/lz4
  dependency-version: c99038d1bb46d9621f0c9e3ac6f0004a109eb67a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-02 22:31:43 +00:00
Jan
0dde2478a7
Merge pull request #427 from Laupetin/refactor/zone-loading-code-style
refactor: zone loading code style
2025-05-02 23:52:49 +02:00
Jan Laupetin
35cb6636a1
fix: linux build 2025-05-02 23:26:12 +02:00
Jan
b92e85dc14
refactor: hide implementation of loading steps inside file 2025-05-02 22:08:08 +01:00
Jan
955df98279
refactor: hide implementation details of zone loading processors 2025-05-02 22:08:07 +01:00
Jan
eb16dfcd00
refactor: merge ZoneInputStream interface with only implementation 2025-05-02 22:08:07 +01:00
Jan
4ce82ad63c
refactor: update ZoneLoading classes codestyle 2025-05-02 22:08:07 +01:00
Jan Laupetin
446c38d8ee
refactor: reorder members of zcg generated classes 2025-05-02 22:08:06 +01:00
Jan
ed029bc24d
refactor: adjust template const modifiers 2025-05-02 22:08:06 +01:00
Jan
8b85cadb77
refactor: make memory from zone a reference instead of ptr 2025-05-02 22:08:06 +01:00
Jan
9e940a6f53
refactor: use zone reference in AssetLoader 2025-05-02 22:08:06 +01:00
Jan
50612d117e
refactor: update zcg generate file headers 2025-04-30 17:01:52 +01:00
Jan
115765ad86
Merge pull request #424 from Laupetin/refactor/remaining-get-name-zcg
refactor: remove remaining GetName functionality in ZoneCodeGenerator
2025-04-28 17:56:08 +02:00
Jan Laupetin
1b579b1bc3
refactor: remove usages of name sequence in game commands 2025-04-28 17:30:30 +02:00
Jan Laupetin
68ee502c72
refactor: remove name sequence from zcg commands 2025-04-28 17:23:39 +02:00
Jan Laupetin
0103e4631f
refactor: remove GetAssetName method from ZoneMark template 2025-04-28 17:18:09 +02:00
Jan Laupetin
7f59d35e87
refactor: replace GetAssetName method in ZoneLoad template 2025-04-28 17:09:40 +02:00
Jan
f4870de1a7
Merge pull request #423 from Laupetin/refactor/asset-struct-for-zcg
refactor: asset struct for zcg
2025-04-28 14:24:03 +02:00
Jan
547da3fdf9
refactor: remove GetName method of ZoneWrite zcg template 2025-04-28 12:53:14 +01:00
Jan Laupetin
1fe1b30831
chore: use Asset definition instead of enum entry for zcg 2025-04-28 12:53:02 +01:00
Jan
3adbe5a275
refactor: fix additional zcg x64 warnings 2025-04-28 12:07:41 +01:00
Jan Laupetin
d938f91541
fix: crash on trying to generate for specific asset 2025-04-28 11:55:47 +01:00
Jan Laupetin
2eefad105e
chore: small code adjustments for generation code in zcg 2025-04-28 11:55:46 +01:00
Jan
d94a004433
Merge pull request #422 from Laupetin/refactor/oat-64
refactor: fix compilation warnings for x64
2025-04-27 22:08:34 +02:00
Jan Laupetin
4ccd0a55cf
chore: adjust game structs to have custom alignment when they are
platform independent
2025-04-27 21:05:22 +02:00
Jan Laupetin
4e9599aabf
chore: detect structs that differ on different architectures
* and exclude them from assetstructtests
2025-04-27 21:04:41 +02:00
Jan Laupetin
088d14f894
chore: add x64 build to ci 2025-04-27 19:30:39 +02:00
Jan
365b627523
refactor: fix remaining x64 compilation issues 2025-04-27 19:30:36 +02:00
Jan Laupetin
a6107e24a2
chore: disable type alignment on x64 for x86 games 2025-04-26 19:48:03 +02:00
Jan
3b00c1d45b
refactor: fix x64 compilation for ZoneLoading 2025-04-26 19:48:03 +02:00
Jan
de43e33dcd
refactor: fix x64 compilation for ObjWriting 2025-04-26 19:48:03 +02:00
Jan
5d0c94e430
refactor: fix x64 compilation for ObjLoading 2025-04-26 19:48:03 +02:00
Jan
ee4301952a
refactor: fix x64 compilation issues in Common,ObjCommon,ObjCompiling,ObjImage components 2025-04-26 19:08:16 +02:00
Jan
5635470b6e
refactor: cryptography component 2025-04-26 19:08:15 +02:00
Jan
60f5c1a18f
refactor: adjust zcg code for working in x64 2025-04-26 19:08:15 +02:00
Jan
c61dddf0e2
Merge pull request #421 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-3905c28
chore(deps): bump thirdparty/libtomcrypt from `a6b9aff` to `3905c28`
2025-04-26 09:36:32 +02:00
Jan
2271f350f1
Merge pull request #420 from Laupetin/dependabot/submodules/thirdparty/json-51a77f1
chore(deps): bump thirdparty/json from `c67d538` to `51a77f1`
2025-04-26 09:36:23 +02:00
Jan
a8c6620c1f
Merge pull request #419 from Laupetin/dependabot/submodules/thirdparty/eigen-7294434
chore(deps): bump thirdparty/eigen from `33f5f59` to `7294434`
2025-04-26 09:36:15 +02:00
Jan
7cf9804117
Merge pull request #418 from Laupetin/dependabot/submodules/thirdparty/lz4-df6b19d
chore(deps): bump thirdparty/lz4 from `fa1634e` to `df6b19d`
2025-04-26 09:36:08 +02:00
dependabot[bot]
70a1a4aba2
chore(deps): bump thirdparty/libtomcrypt from a6b9aff to 3905c28
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `a6b9aff` to `3905c28`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](a6b9aff7aa...3905c28913)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-version: 3905c28913232d6e82a2a381cc2b71b0af7aa791
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-25 22:28:25 +00:00
dependabot[bot]
8d171a2e9e
chore(deps): bump thirdparty/json from c67d538 to 51a77f1
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `c67d538` to `51a77f1`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](c67d538274...51a77f1dca)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 51a77f1dcac97f917db2621a5945f4305ff1bf9f
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-25 22:28:23 +00:00
dependabot[bot]
8dbba71944
chore(deps): bump thirdparty/eigen from 33f5f59 to 7294434
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `33f5f59` to `7294434`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](33f5f59614...7294434099)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 729443409942a1816ddf74b95224003b83f4925c
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-25 22:28:21 +00:00
dependabot[bot]
41dcabf145
chore(deps): bump thirdparty/lz4 from fa1634e to df6b19d
Bumps [thirdparty/lz4](https://github.com/lz4/lz4) from `fa1634e` to `df6b19d`.
- [Release notes](https://github.com/lz4/lz4/releases)
- [Commits](fa1634e2cc...df6b19dfc2)

---
updated-dependencies:
- dependency-name: thirdparty/lz4
  dependency-version: df6b19dfc2b86b792d175ea9a17a19f04d2f141f
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-25 22:28:19 +00:00
Jan
cf8969c1a6
Merge pull request #417 from Laupetin/chore/formatting-for-zcg-templates
chore: use std::format for zcg templates
2025-04-24 23:34:20 +02:00
Jan
10cbd47bdc
chore: use std::format for zcg templates 2025-04-24 21:37:43 +01:00
Jan
f7af6e4480
Merge pull request #404 from GoastcraftHD/main
Added XModelBin Export
2025-04-23 18:43:57 +02:00
Jan
76c22ffce2
chore: adjust include path for lz4 dependency 2025-04-23 17:17:24 +01:00
Jan
dc282170bc
chore: small code style adjustments for XModelBinWriter 2025-04-23 17:17:24 +01:00
Jan
82d38ab710
Merge pull request #416 from Laupetin/fix/t6-stringtable-cell-indices
fix: ignoring last element in t6 stringtable cell index sorting
2025-04-23 08:08:33 +02:00
Jan
0fbfb860c0
fix: ignoring last element in t6 stringtable cell index sorting 2025-04-23 07:44:43 +02:00
Jan
e14f0743da
Merge pull request #411 from diamante0018/debug-regression
fix: wrong "bin" directory when using executable from $PATH
2025-04-23 02:14:12 +02:00
Jan
fb20cbf81c
fix: use platform specific calls to get executable dir 2025-04-23 00:50:30 +01:00
Simon Ickler
101487d869 Fixed Memory leak + other small fixes 2025-04-22 11:31:40 +02:00
Jan
1cccfe352b
Merge pull request #415 from Laupetin/fix/redownload-premake-on-update
fix: redownload premake when version is outdated
2025-04-21 18:58:21 +02:00
Jan
dbcf7d86af
fix: redownload premake when version is outdated 2025-04-21 18:34:46 +02:00
Jan
f888d7a5d4
Merge pull request #414 from Laupetin/fix/generate-with-git-worktree
fix: make generate.sh work with git worktrees
2025-04-21 00:18:19 +02:00
Jan
74b9f7b010
Merge pull request #409 from diamante0018/chore/premake5
chore: update Premake5
2025-04-21 00:14:35 +02:00
Jan
ba4cb85639
fix: make generate.sh work with git worktrees 2025-04-20 23:54:11 +02:00
Jan
da90bbd356
Merge pull request #412 from Laupetin/chore/better-build-scripts
chore: replace x64 build scripts with generic ones
2025-04-20 17:54:29 +02:00
Jan
13b07c0fe4
chore: replace x64 build scripts with generic ones 2025-04-20 17:30:55 +02:00
Giulia Sanguineti
199446b09f
fix: make LinkerPaths use weakly_canonical to make path prefered 2025-04-20 17:09:06 +02:00
Giulia Sanguineti
37fe6b6a5c fix: min version for Premake5 2025-04-20 15:25:45 +02:00
Giulia Sanguineti
ea5d27a7f9 chore: update Premake5 2025-04-20 14:55:34 +02:00
Jan
38d948ebdd
Merge pull request #408 from Laupetin/refactor/zcg-code-style
refactor: zcg code style
2025-04-20 13:51:43 +02:00
Jan
9f8a933277
chore: update ZoneCodeGenerator code style 2025-04-20 09:45:37 +02:00
Jan
9f738da517
chore: remove duplicated alignment utility method 2025-04-20 09:45:36 +02:00
Jan
785cf8c025
chore: update code style in ZoneCodeGenerator entrypoint 2025-04-20 09:45:32 +02:00
Simon Ickler
8946c28eab Fixed Code Style 2025-04-19 15:58:37 +02:00
Simon
b0f89e5842
Merge branch 'Laupetin:main' into main 2025-04-19 13:11:43 +02:00
Jan
0f3ee1fa79
Merge pull request #407 from Laupetin/dependabot/submodules/thirdparty/eigen-33f5f59
chore(deps): bump thirdparty/eigen from `11fd34c` to `33f5f59`
2025-04-19 11:54:54 +02:00
Jan
c8cd6826c1
Merge pull request #406 from Laupetin/dependabot/submodules/thirdparty/json-c67d538
chore(deps): bump thirdparty/json from `7ddea26` to `c67d538`
2025-04-19 11:54:41 +02:00
Jan
5afc24fd89
Merge pull request #405 from Laupetin/dependabot/submodules/thirdparty/catch2-4c8671c
chore(deps): bump thirdparty/catch2 from `2b60af8` to `4c8671c`
2025-04-19 11:54:28 +02:00
dependabot[bot]
598abe095b
chore(deps): bump thirdparty/eigen from 11fd34c to 33f5f59
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `11fd34c` to `33f5f59`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](11fd34cc1c...33f5f59614)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 33f5f596143d0fce32316ec6fa4bd9f23b4dd9d2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-18 22:43:27 +00:00
dependabot[bot]
d6eee273ff
chore(deps): bump thirdparty/json from 7ddea26 to c67d538
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `7ddea26` to `c67d538`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](7ddea2686f...c67d538274)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: c67d538274502163b55e8fb54b5c27c17764722d
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-18 22:43:25 +00:00
dependabot[bot]
7edbe7378b
chore(deps): bump thirdparty/catch2 from 2b60af8 to 4c8671c
Bumps [thirdparty/catch2](https://github.com/catchorg/Catch2) from `2b60af8` to `4c8671c`.
- [Release notes](https://github.com/catchorg/Catch2/releases)
- [Commits](2b60af89e2...4c8671cfbb)

---
updated-dependencies:
- dependency-name: thirdparty/catch2
  dependency-version: 4c8671cfbbf0019d3827305d4d1c82a74eeb029a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-18 22:43:23 +00:00
GoastcraftHD
2aeeccd492
Update .gitmodules 2025-04-13 17:48:52 +02:00
GoastcraftHD
2a45357d5c Added Comments 2025-04-13 14:50:11 +02:00
GoastcraftHD
b1666ad1da
Merge branch 'Laupetin:main' into main 2025-04-13 13:27:13 +02:00
Jan
b83bafb0f8
Merge pull request #403 from Laupetin/dependabot/submodules/thirdparty/catch2-2b60af8
chore(deps): bump thirdparty/catch2 from `76f70b1` to `2b60af8`
2025-04-12 23:24:00 +02:00
Jan
e750e3ffd9
Merge pull request #402 from Laupetin/dependabot/submodules/thirdparty/json-7ddea26
chore(deps): bump thirdparty/json from `11aa5f9` to `7ddea26`
2025-04-12 23:23:44 +02:00
Jan
d5b6c6e9c2
Merge pull request #401 from Laupetin/dependabot/submodules/thirdparty/eigen-11fd34c
chore(deps): bump thirdparty/eigen from `b860042` to `11fd34c`
2025-04-12 23:23:32 +02:00
dependabot[bot]
d6c1ef775e
chore(deps): bump thirdparty/catch2 from 76f70b1 to 2b60af8
Bumps [thirdparty/catch2](https://github.com/catchorg/Catch2) from `76f70b1` to `2b60af8`.
- [Release notes](https://github.com/catchorg/Catch2/releases)
- [Commits](76f70b1403...2b60af89e2)

---
updated-dependencies:
- dependency-name: thirdparty/catch2
  dependency-version: 2b60af89e23d28eefc081bc930831ee9d45ea58b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 22:49:13 +00:00
dependabot[bot]
c05d4ea34e
chore(deps): bump thirdparty/json from 11aa5f9 to 7ddea26
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `11aa5f9` to `7ddea26`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](11aa5f944d...7ddea2686f)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 7ddea2686f091ea77a3f731ab74c59535db9f684
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 22:49:10 +00:00
dependabot[bot]
b2d9bf416d
chore(deps): bump thirdparty/eigen from b860042 to 11fd34c
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `b860042` to `11fd34c`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](b860042263...11fd34cc1c)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: 11fd34cc1c398f2c2311339ed3b008b1114544eb
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 22:49:08 +00:00
GoastcraftHD
7aebe085b3 Fixed More Int Literals Not Working On Linux 2025-04-11 23:39:39 +02:00
GoastcraftHD
ef79504e71 Fixed Int Literals Not Working On Linux 2025-04-11 23:22:54 +02:00
GoastcraftHD
812f7e1f91 Fixed Precision Issue 2025-04-11 22:57:09 +02:00
GoastcraftHD
f2501fdc0b Fixed Compilation Issue on Linux 2025-04-11 19:17:46 +02:00
GoastcraftHD
eff80a0318 Improved XModelBin Hash Readability 2025-04-11 19:03:41 +02:00
GoastcraftHD
8ac276f3f6 Added XMODEL_BIN Export 2025-04-09 17:45:37 +02:00
Jan
3134ec5a37
Merge pull request #400 from GoastcraftHD/main
Added MapEnts dumping for T6
2025-04-07 23:40:52 +02:00
Jan
0d35696940
chore: make map ents dumping add ents extension instead of replacing 2025-04-07 22:16:08 +01:00
GoastcraftHD
b215b22018 Fixed MapEnts dumping in wrong folder 2025-04-07 22:34:21 +02:00
GoastcraftHD
a447dd29fa
Fixed include order 2025-04-07 20:05:01 +02:00
GoastcraftHD
985996975b
Update SupportedAssetTypes.md 2025-04-07 12:05:56 +02:00
Simon Ickler
f235798cf6 Added MapEnts dumping for T6 2025-04-07 12:05:03 +02:00
Jan
0228e86980
Merge pull request #399 from Laupetin/fix/64-bit-compilation
fix: 64 bit compilation
2025-04-06 19:27:06 +02:00
Jan
01302cf061
fix: too large obj files for x64 on windows 2025-04-06 18:02:48 +01:00
Jan
6f31e8cc29
chore: fix compilation issues with x64 2025-04-06 18:02:47 +01:00
Jan
37d52ae8da
chore: add compilation scripts for x64 2025-04-06 17:44:26 +02:00
Jan
481d301545
chore: change c++ version to c++23 2025-04-06 17:43:50 +02:00
Jan
d3bb99e92c
Merge pull request #395 from Laupetin/fix/bad-xmodel-loading
fix: bad xmodel loading
2025-04-05 17:59:45 +02:00
Jan
cec70e783f
fix: not using lookup to common vertices when writing rigid bone data
no more pizza cheese problem
2025-04-05 17:36:29 +02:00
Jan
a2c8129a13
fix: messed up reordering of vertices for bone count 2025-04-05 16:30:58 +02:00
Jan
e13eb256bb
chore: update code style 2025-04-05 16:30:54 +02:00
Jan
aab510c917
Merge pull request #398 from Laupetin/fix/linux-folder-file-capitalization
fix: linux folder file capitalization
2025-04-05 13:07:14 +02:00
Jan
820fe47473
fix: always use lowercase extensions for xmodels 2025-04-05 12:42:55 +02:00
Jan
0366b24bd7
fix: game name in linker paths must be lowercase for linux 2025-04-05 12:42:52 +02:00
Jan
49f0794545
Merge pull request #397 from Laupetin/dependabot/submodules/thirdparty/json-11aa5f9
chore(deps): bump thirdparty/json from `11a835d` to `11aa5f9`
2025-04-05 08:51:42 +02:00
Jan
20911d552d
Merge pull request #396 from Laupetin/dependabot/submodules/thirdparty/eigen-b860042
chore(deps): bump thirdparty/eigen from `e0c99a8` to `b860042`
2025-04-05 08:51:27 +02:00
dependabot[bot]
1748f9e1a5
chore(deps): bump thirdparty/json from 11a835d to 11aa5f9
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `11a835d` to `11aa5f9`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](11a835df85...11aa5f944d)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-version: 11aa5f944d17ed5b96250ca133bf33c5ca8b0161
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-04 23:00:25 +00:00
dependabot[bot]
a37b5fee8c
chore(deps): bump thirdparty/eigen from e0c99a8 to b860042
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `e0c99a8` to `b860042`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](e0c99a8dd6...b860042263)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-version: b86004226361882ea6c9308c0a940007a049d1d5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-04 23:00:23 +00:00
Jan
42e2eb80b3
Merge pull request #394 from Laupetin/dependabot/submodules/thirdparty/eigen-e0c99a8
chore(deps): bump thirdparty/eigen from `6579e36` to `e0c99a8`
2025-03-29 00:27:10 +01:00
dependabot[bot]
885c57bfa5
chore(deps): bump thirdparty/eigen from 6579e36 to e0c99a8
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `6579e36` to `e0c99a8`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](6579e36eb4...e0c99a8dd6)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-28 22:45:27 +00:00
Jan
fa88b135f9
Merge pull request #393 from Laupetin/fix/rename-clipmap-asset-iw3-iw4-t5
fix: set clipmap asset name of non-pvs clipmap to clipmap_unused in IW3,IW4,T5
2025-03-27 17:43:53 +01:00
Jan
56c4eeb5cd
fix: set clipmap asset name of non-pvs clipmap to clipmap_unused in IW3,IW4,T5 2025-03-27 17:16:28 +01:00
Jan
0fcae6a55a
Merge pull request #391 from LJW-Dev/fix/T6-clipmap-asset
Update T6 asset loading code to use ASSET_TYPE_CLIPMAP_PVS.
2025-03-27 17:14:14 +01:00
LJW-Dev
f97f38dc31
Merge branch 'Laupetin:main' into fix/T6-clipmap-asset 2025-03-27 12:33:05 +08:00
LJW-Dev
95f5dca5e0 Updated zone loading code to only use ASSET_TYPE_CLIPMAP_PVS. 2025-03-27 12:32:43 +08:00
Jan
f2723255f5
Merge pull request #390 from Laupetin/dependabot/submodules/thirdparty/json-11a835d
chore(deps): bump thirdparty/json from `8215dba` to `11a835d`
2025-03-25 20:31:53 +01:00
dependabot[bot]
11cb93f736
chore(deps): bump thirdparty/json from 8215dba to 11a835d
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `8215dba` to `11a835d`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](8215dbafbd...11a835df85)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 18:54:35 +00:00
Jan
e40d688e11
Merge pull request #389 from Laupetin/dependabot/submodules/thirdparty/libtommath-e823b0c
chore(deps): bump thirdparty/libtommath from `5938524` to `e823b0c`
2025-03-25 19:53:42 +01:00
dependabot[bot]
2eeb20d1cd
chore(deps): bump thirdparty/libtommath from 5938524 to e823b0c
Bumps [thirdparty/libtommath](https://github.com/libtom/libtommath) from `5938524` to `e823b0c`.
- [Release notes](https://github.com/libtom/libtommath/releases)
- [Commits](5938524c60...e823b0c34c)

---
updated-dependencies:
- dependency-name: thirdparty/libtommath
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 18:25:18 +00:00
Jan
7b79504477
Merge pull request #388 from Laupetin/dependabot/submodules/thirdparty/eigen-ac2165c
chore(deps): bump thirdparty/eigen from `5fc6fc9` to `ac2165c`
2025-03-25 19:24:21 +01:00
dependabot[bot]
4cc7ab77d5
chore(deps): bump thirdparty/eigen from 5fc6fc9 to ac2165c
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `5fc6fc9` to `ac2165c`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](5fc6fc9881...ac2165c11f)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 18:00:47 +00:00
Jan
08fb6b0496
Merge pull request #386 from Laupetin/dependabot/submodules/thirdparty/catch2-76f70b1
chore(deps): bump thirdparty/catch2 from `914aeec` to `76f70b1`
2025-03-25 18:59:43 +01:00
dependabot[bot]
a871889c13
chore(deps): bump thirdparty/catch2 from 914aeec to 76f70b1
Bumps [thirdparty/catch2](https://github.com/catchorg/Catch2) from `914aeec` to `76f70b1`.
- [Release notes](https://github.com/catchorg/Catch2/releases)
- [Commits](914aeecfe2...76f70b1403)

---
updated-dependencies:
- dependency-name: thirdparty/catch2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 17:36:11 +00:00
Jan
81bc21eacf
Merge pull request #384 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-a6b9aff
chore(deps): bump thirdparty/libtomcrypt from `d032686` to `a6b9aff`
2025-03-25 18:35:04 +01:00
dependabot[bot]
aec779dae5
chore(deps): bump thirdparty/libtomcrypt from d032686 to a6b9aff
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `d032686` to `a6b9aff`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](d032686639...a6b9aff7aa)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 17:11:32 +00:00
Jan
97c4a23d5e
Merge pull request #392 from Laupetin/fix/compilation-on-windows
fix: compilation on msvc
2025-03-25 18:09:57 +01:00
Jan
0c587e5e5f
fix: compilation on msvc 2025-03-25 17:38:07 +01:00
Jan
4ac38bfc66
Merge pull request #376 from Laupetin/dependabot/submodules/thirdparty/json-8215dba
chore(deps): bump thirdparty/json from `606b634` to `8215dba`
2025-02-22 17:31:01 +01:00
Jan
34a0bd4f4f
Merge pull request #377 from Laupetin/dependabot/submodules/thirdparty/zlib-5a82f71
chore(deps): bump thirdparty/zlib from `7108497` to `5a82f71`
2025-02-22 17:30:53 +01:00
Jan
047e8aa125
Merge pull request #378 from Laupetin/dependabot/submodules/thirdparty/eigen-5fc6fc9
chore(deps): bump thirdparty/eigen from `9c21143` to `5fc6fc9`
2025-02-22 17:30:45 +01:00
Jan
b5303475d9
Merge pull request #379 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-d032686
chore(deps): bump thirdparty/libtomcrypt from `54f0456` to `d032686`
2025-02-22 17:30:38 +01:00
dependabot[bot]
4adc9115b2
chore(deps): bump thirdparty/libtomcrypt from 54f0456 to d032686
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `54f0456` to `d032686`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](54f0456559...d032686639)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-21 22:39:15 +00:00
dependabot[bot]
a4347b0b0d
chore(deps): bump thirdparty/zlib from 7108497 to 5a82f71
Bumps [thirdparty/zlib](https://github.com/madler/zlib) from `7108497` to `5a82f71`.
- [Release notes](https://github.com/madler/zlib/releases)
- [Commits](7108497fda...5a82f71ed1)

---
updated-dependencies:
- dependency-name: thirdparty/zlib
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-21 22:39:13 +00:00
dependabot[bot]
4e5c72d79a
chore(deps): bump thirdparty/eigen from 9c21143 to 5fc6fc9
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `9c21143` to `5fc6fc9`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](9c211430b5...5fc6fc9881)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-21 22:39:12 +00:00
dependabot[bot]
58f5f66dcf
chore(deps): bump thirdparty/json from 606b634 to 8215dba
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `606b634` to `8215dba`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](606b6347ed...8215dbafbd)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-21 22:39:10 +00:00
Jan
54d19dcc8a
Merge pull request #373 from Laupetin/dependabot/submodules/thirdparty/eigen-9c21143
chore(deps): bump thirdparty/eigen from `715deac` to `9c21143`
2025-02-14 23:23:02 +01:00
Jan
f05a21984a
Merge pull request #374 from Laupetin/dependabot/submodules/thirdparty/zlib-7108497
chore(deps): bump thirdparty/zlib from `8a844d4` to `7108497`
2025-02-14 23:22:40 +01:00
dependabot[bot]
b071beea3f
chore(deps): bump thirdparty/zlib from 8a844d4 to 7108497
Bumps [thirdparty/zlib](https://github.com/madler/zlib) from `8a844d4` to `7108497`.
- [Release notes](https://github.com/madler/zlib/releases)
- [Commits](8a844d434f...7108497fda)

---
updated-dependencies:
- dependency-name: thirdparty/zlib
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 22:01:47 +00:00
dependabot[bot]
548c0c23bf
chore(deps): bump thirdparty/eigen from 715deac to 9c21143
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `715deac` to `9c21143`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](715deac188...9c211430b5)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 22:01:45 +00:00
Jan
6d186bc09c
Merge pull request #372 from Laupetin/dependabot/submodules/thirdparty/eigen-715deac
chore(deps): bump thirdparty/eigen from `9589cc4` to `715deac`
2025-02-08 17:57:32 +01:00
Jan
96dc2c9318
Merge pull request #371 from Laupetin/dependabot/submodules/thirdparty/zlib-8a844d4
chore(deps): bump thirdparty/zlib from `ef24c4c` to `8a844d4`
2025-02-08 17:57:20 +01:00
dependabot[bot]
e4c08e1372
chore(deps): bump thirdparty/eigen from 9589cc4 to 715deac
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `9589cc4` to `715deac`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](9589cc4e7f...715deac188)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-07 22:44:15 +00:00
dependabot[bot]
1b6824f2bd
chore(deps): bump thirdparty/zlib from ef24c4c to 8a844d4
Bumps [thirdparty/zlib](https://github.com/madler/zlib) from `ef24c4c` to `8a844d4`.
- [Release notes](https://github.com/madler/zlib/releases)
- [Commits](ef24c4c750...8a844d434f)

---
updated-dependencies:
- dependency-name: thirdparty/zlib
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-07 22:44:14 +00:00
Jan
0eb0383051
Merge pull request #370 from Laupetin/dependabot/submodules/thirdparty/eigen-9589cc4
chore(deps): bump thirdparty/eigen from `4a6ac97` to `9589cc4`
2025-02-01 17:18:26 +01:00
Jan
222d96a923
Merge pull request #369 from Laupetin/dependabot/submodules/thirdparty/json-606b634
chore(deps): bump thirdparty/json from `d0789e3` to `606b634`
2025-02-01 17:18:07 +01:00
Jan
07dccbf2f8
Merge pull request #368 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-54f0456
chore(deps): bump thirdparty/libtomcrypt from `427e055` to `54f0456`
2025-02-01 17:17:45 +01:00
Jan
b24b6b1979
Merge pull request #367 from Laupetin/dependabot/submodules/thirdparty/libtommath-5938524
chore(deps): bump thirdparty/libtommath from `5809141` to `5938524`
2025-02-01 17:17:22 +01:00
dependabot[bot]
a220142e86
chore(deps): bump thirdparty/eigen from 4a6ac97 to 9589cc4
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `4a6ac97` to `9589cc4`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](4a6ac97d13...9589cc4e7f)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-31 22:38:54 +00:00
dependabot[bot]
4c30bd129a
chore(deps): bump thirdparty/json from d0789e3 to 606b634
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `d0789e3` to `606b634`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](d0789e365d...606b6347ed)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-31 22:38:51 +00:00
dependabot[bot]
3d3a0ca565
chore(deps): bump thirdparty/libtomcrypt from 427e055 to 54f0456
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `427e055` to `54f0456`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](427e0551c0...54f0456559)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-31 22:38:49 +00:00
dependabot[bot]
903bd5a960
chore(deps): bump thirdparty/libtommath from 5809141 to 5938524
Bumps [thirdparty/libtommath](https://github.com/libtom/libtommath) from `5809141` to `5938524`.
- [Release notes](https://github.com/libtom/libtommath/releases)
- [Commits](5809141a3a...5938524c60)

---
updated-dependencies:
- dependency-name: thirdparty/libtommath
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-31 22:38:47 +00:00
Jan
2402d4f9c7
Merge pull request #364 from Laupetin/dependabot/submodules/thirdparty/json-d0789e3
chore(deps): bump thirdparty/json from `e72046e` to `d0789e3`
2025-01-25 00:30:50 +01:00
Jan
a21b410fd7
Merge pull request #363 from Laupetin/dependabot/submodules/thirdparty/libtomcrypt-427e055
chore(deps): bump thirdparty/libtomcrypt from `2e9f2b5` to `427e055`
2025-01-25 00:30:38 +01:00
Jan
2b1ade2b5a
Merge pull request #362 from Laupetin/dependabot/submodules/thirdparty/eigen-4a6ac97
chore(deps): bump thirdparty/eigen from `abac563` to `4a6ac97`
2025-01-25 00:30:24 +01:00
dependabot[bot]
d869de5881
chore(deps): bump thirdparty/json from e72046e to d0789e3
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `e72046e` to `d0789e3`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](e72046ef9f...d0789e365d)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 22:12:59 +00:00
dependabot[bot]
2ce1a4e050
chore(deps): bump thirdparty/libtomcrypt from 2e9f2b5 to 427e055
Bumps [thirdparty/libtomcrypt](https://github.com/libtom/libtomcrypt) from `2e9f2b5` to `427e055`.
- [Release notes](https://github.com/libtom/libtomcrypt/releases)
- [Commits](2e9f2b5e44...427e0551c0)

---
updated-dependencies:
- dependency-name: thirdparty/libtomcrypt
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 22:12:57 +00:00
dependabot[bot]
89e22329f8
chore(deps): bump thirdparty/eigen from abac563 to 4a6ac97
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `abac563` to `4a6ac97`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](abac563f5d...4a6ac97d13)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 22:12:55 +00:00
Jan
bea601d932
Merge pull request #360 from Laupetin/fix/gltf-multiple-mesh-loading
fix: loading of gltf with multiple meshes
2025-01-23 23:47:50 +01:00
Jan
826c1d2f2d
fix: loading of gltf with multiple meshes 2025-01-23 22:25:38 +00:00
Jan
0b91eeb932
Merge pull request #359 from Laupetin/fix/load-gltf-base64
fix: loading of base64 data from gltf files
2025-01-23 22:40:44 +01:00
Jan
94ca0ab79e
fix: loading of base64 data from gltf files 2025-01-23 21:17:51 +00:00
Jan
f6d36b2d6e
Merge pull request #358 from Laupetin/feature/gltf-separate-meshes
feat: separate objects into gltf meshes instead of primitives
2025-01-23 19:12:04 +01:00
Jan
140eb7b7a4
feat: dump objects into gltf meshes instead of primitives 2025-01-23 17:47:30 +00:00
Jan
708e759f8c
chore: update code style of gltf writer 2025-01-23 17:23:33 +00:00
Jan
80fa61b45c
chore: update xmodel dumper code style 2025-01-23 17:09:09 +00:00
Jan
f436cd6caa
Merge pull request #357 from Laupetin/fix/load-non-reference-assets
fix: load non reference assets
2025-01-21 23:42:31 +01:00
Jan
4d0b0651eb
fix: formatting 2025-01-21 23:20:55 +01:00
Jan
7a639a359c
fix: not being able to ignore assets of type attachment,attachmentunique 2025-01-21 22:17:06 +00:00
Jan
990bfe27df
chore: add force loading of assets 2025-01-21 22:16:55 +00:00
Jan
b4194eff28
chore: always use dynamic asset pools and remove static implementation 2025-01-21 22:14:24 +00:00
Jan
8ace49b715
Merge pull request #353 from Laupetin/dependabot/submodules/thirdparty/json-e72046e
chore(deps): bump thirdparty/json from `2d42229` to `e72046e`
2025-01-18 11:45:17 +01:00
Jan
b623ed49a0
Merge pull request #352 from Laupetin/dependabot/submodules/thirdparty/eigen-abac563
chore(deps): bump thirdparty/eigen from `9836e8d` to `abac563`
2025-01-18 11:45:07 +01:00
dependabot[bot]
0ffbdf5b73
chore(deps): bump thirdparty/json from 2d42229 to e72046e
Bumps [thirdparty/json](https://github.com/nlohmann/json) from `2d42229` to `e72046e`.
- [Release notes](https://github.com/nlohmann/json/releases)
- [Commits](2d42229f4d...e72046ef9f)

---
updated-dependencies:
- dependency-name: thirdparty/json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:48:29 +00:00
dependabot[bot]
f930c874b8
chore(deps): bump thirdparty/eigen from 9836e8d to abac563
Bumps [thirdparty/eigen](https://gitlab.com/libeigen/eigen) from `9836e8d` to `abac563`.
- [Release notes](https://gitlab.com/libeigen/eigen/tags)
- [Commits](9836e8d035...abac563f5d)

---
updated-dependencies:
- dependency-name: thirdparty/eigen
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:48:27 +00:00
664 changed files with 9853 additions and 9755 deletions

View File

@ -10,6 +10,9 @@ on:
jobs:
build-test-linux:
strategy:
matrix:
build_arch: [x86, x64]
runs-on: ubuntu-latest
container: ubuntu:24.04
steps:
@ -35,10 +38,10 @@ jobs:
- name: Build
working-directory: ${{ github.workspace }}
run: make -C build -j$(nproc) config=release_x86 all
run: make -C build -j$(nproc) config=release_${{ matrix.build_arch }} all
- name: Test
working-directory: ${{ github.workspace }}/build/lib/Release_x86/tests
working-directory: ${{ github.workspace }}/build/lib/Release_${{ matrix.build_arch }}/tests
run: |
./ObjCommonTests
./ObjCompilingTests
@ -48,6 +51,14 @@ jobs:
./ZoneCommonTests
build-test-windows:
strategy:
matrix:
build_arch: [x86, x64]
include:
- build_arch: x86
msbuild_config: Win32
- build_arch: x64
msbuild_config: x64
runs-on: windows-latest
steps:
- name: Checkout repository
@ -66,10 +77,10 @@ jobs:
- name: Build
working-directory: ${{ github.workspace }}
run: msbuild /m /p:Configuration=Release /p:Platform=Win32 build
run: msbuild /m /p:Configuration=Release /p:Platform=${{ matrix.msbuild_config }} build
- name: Test
working-directory: ${{ github.workspace }}/build/lib/Release_x86/tests
working-directory: ${{ github.workspace }}/build/lib/Release_${{ matrix.build_arch }}/tests
run: |
$combinedExitCode = 0
./ObjCommonTests

3
.gitmodules vendored
View File

@ -16,3 +16,6 @@
[submodule "thirdparty/eigen"]
path = thirdparty/eigen
url = https://gitlab.com/libeigen/eigen.git
[submodule "thirdparty/lz4"]
path = thirdparty/lz4
url = https://github.com/lz4/lz4.git

View File

@ -13,7 +13,7 @@ The following section specify which assets are supported to be dumped to disk (u
| -------------------- | --------------- | --------------- | ----------------------------------------------------------------- |
| PhysPreset | ❌ | ❌ | |
| XAnimParts | ❌ | ❌ | |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT`, `OBJ`, `GLB/GLTF`. |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. |
| Material | ❌ | ❌ | |
| MaterialTechniqueSet | ❌ | ❌ | |
| GfxImage | ✅ | ✅ | |
@ -44,7 +44,7 @@ The following section specify which assets are supported to be dumped to disk (u
| PhysPreset | ✅ | ✅ | |
| PhysCollmap | ❌ | ❌ | |
| XAnimParts | ❌ | ❌ | |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT`, `OBJ`, `GLB/GLTF`. |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. |
| Material | ❌ | ❌ | |
| MaterialPixelShader | ✅ | ✅ | Shaders are compiled. Only dumps/loads shader bytecode. |
| MaterialVertexShader | ✅ | ✅ | Shaders are compiled. Only dumps/loads shader bytecode. |
@ -85,7 +85,7 @@ The following section specify which assets are supported to be dumped to disk (u
| PhysCollmap | ❌ | ❌ | |
| XAnimParts | ❌ | ❌ | |
| XModelSurfs | ❌ | ❌ | |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT`, `OBJ`, `GLB/GLTF`. |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. |
| Material | ❌ | ❌ | |
| MaterialPixelShader | ❌ | ❌ | |
| MaterialVertexShader | ❌ | ❌ | |
@ -130,7 +130,7 @@ The following section specify which assets are supported to be dumped to disk (u
| PhysConstraints | ❌ | ❌ | |
| DestructibleDef | ❌ | ❌ | |
| XAnimParts | ❌ | ❌ | |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT`, `OBJ`, `GLB/GLTF`. |
| XModel | ⁉️ | ❌ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. |
| Material | ❌ | ❌ | |
| MaterialTechniqueSet | ❌ | ❌ | |
| GfxImage | ✅ | ❌ | A few special image encodings are not yet supported. |
@ -167,7 +167,7 @@ The following section specify which assets are supported to be dumped to disk (u
| PhysConstraints | ✅ | ✅ | |
| DestructibleDef | ❌ | ❌ | |
| XAnimParts | ❌ | ❌ | |
| XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT`, `OBJ`, `GLB/GLTF`. |
| XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. |
| Material | ⁉️ | ⁉️ | Dumping/Loading is currently possible for materials in their compiled form. There is currently no material pipeline. |
| MaterialTechniqueSet | ⁉️ | ❌ | Only dumps compiled shaders. |
| GfxImage | ✅ | ✅ | A few special image encodings are not yet supported. |
@ -177,7 +177,7 @@ The following section specify which assets are supported to be dumped to disk (u
| ComWorld | ❌ | ❌ | |
| GameWorldSp | ❌ | ❌ | |
| GameWorldMp | ❌ | ❌ | |
| MapEnts | | ❌ | |
| MapEnts | | ❌ | |
| GfxWorld | ❌ | ❌ | |
| GfxLightDef | ❌ | ❌ | |
| Font_s | ❌ | ❌ | |

View File

@ -1,7 +1,7 @@
@echo off
set PREMAKE_URL="https://github.com/premake/premake-core/releases/download/v5.0.0-beta4/premake-5.0.0-beta4-windows.zip"
set PREMAKE_HASH="12d741d3b70445b025c03e26148e2d129801041fa5ddde61b4ac888a76017395"
set PREMAKE_URL="https://github.com/premake/premake-core/releases/download/v5.0.0-beta6/premake-5.0.0-beta6-windows.zip"
set PREMAKE_HASH="c34a6e0b15f119f6284886298fdd8df543af87ad16f3ce5f4d0a847be2a88343"
@REM The following variables can be set:
@REM PREMAKE_NO_GLOBAL - Ignore premake5 executable from path
@ -28,7 +28,7 @@ IF ERRORLEVEL 1 (
)
echo Extracting...
%POWERSHELL_BIN% -NoProfile -NonInteractive -Command "Expand-Archive -LiteralPath build/premake.zip -DestinationPath build"
%POWERSHELL_BIN% -NoProfile -NonInteractive -Command "Expand-Archive -LiteralPath build/premake.zip -DestinationPath build -Force"
IF ERRORLEVEL 1 (
echo Extraction failed >&2
exit 2
@ -59,8 +59,11 @@ IF "%PREMAKE_NO_GLOBAL%" EQU "" (
)
IF EXIST build/premake5.exe (
build\premake5.exe --version >NUL
IF NOT ERRORLEVEL 1 (
set PREMAKE_BIN="build/premake5.exe"
goto runpremake
)
)
if "%PREMAKE_NO_PROMPT%" NEQ "" (

View File

@ -1,7 +1,7 @@
#!/bin/bash
PREMAKE_URL='https://github.com/premake/premake-core/releases/download/v5.0.0-beta4/premake-5.0.0-beta4-linux.tar.gz'
PREMAKE_HASH='4356ab7cdec6085183d68fb240089376eacdc2fb751ffbd8063d797ae43abeb3'
PREMAKE_URL='https://github.com/premake/premake-core/releases/download/v5.0.0-beta6/premake-5.0.0-beta6-linux.tar.gz'
PREMAKE_HASH='fade2839ace1a2953556693e6f3d8f9b8b2897894b5a1f2ad477cdf8e9af042a'
# The following variables can be set:
# PREMAKE_NO_GLOBAL - Ignore premake5 executable from path
@ -46,18 +46,23 @@ function install_premake {
chmod +x build/premake5
}
function expect_inside_git_repository {
inside_git_repo="$(git rev-parse --is-inside-work-tree 2>/dev/null)"
if [ ! -d ".git" ] && [ ! "$inside_git_repo" ]; then
echo "You must clone the OpenAssetTools repository using 'git clone'. Please read README.md." >&2
exit 1
fi
}
# Go to repository root
cd "$(dirname "$0")" || exit 2
if [[ ! -d ".git" ]]; then
echo "You must clone the OpenAssetTools repository using 'git clone'. Please read README.md." >&2
exit 1
fi
expect_inside_git_repository
PREMAKE_BIN=''
if [[ -z "$PREMAKE_NO_GLOBAL" ]] && [[ -x "$(command -v premake5)" ]]; then
PREMAKE_BIN='premake5'
elif [[ -x "$(command -v build/premake5)" ]]; then
elif [[ -x "$(command -v build/premake5)" ]] && [[ ! -z "$(build/premake5 --version)" ]]; then
PREMAKE_BIN='build/premake5'
else
echo "Could not find premake5. You can either install it yourself or this script download it for you."
@ -72,4 +77,4 @@ else
fi
git submodule update --init --recursive
$PREMAKE_BIN $@ gmake2
$PREMAKE_BIN $@ gmake

View File

@ -1,4 +1,4 @@
require("premake", ">=5.0.0-beta4")
require("premake", ">=5.0.0-beta5")
include "tools/scripts/folders.lua"
include "tools/scripts/including.lua"
@ -16,7 +16,7 @@ workspace "OpenAssetTools"
objdir "%{wks.location}/obj"
symbols "On"
systemversion "latest"
cppdialect "C++20"
cppdialect "C++23"
largeaddressaware "on"
flags {
@ -54,6 +54,10 @@ workspace "OpenAssetTools"
symbols "On"
filter {}
filter {"system:windows", "configurations:Debug" }
buildoptions { "/bigobj" }
filter {}
filter "configurations:Release"
defines "NDEBUG"
optimize "Full"
@ -93,6 +97,7 @@ include "thirdparty/minilzo.lua"
include "thirdparty/minizip.lua"
include "thirdparty/salsa20.lua"
include "thirdparty/zlib.lua"
include "thirdparty/lz4.lua"
-- ThirdParty group: All projects that are external dependencies
group "ThirdParty"
@ -105,13 +110,14 @@ group "ThirdParty"
minizip:project()
salsa20:project()
zlib:project()
lz4:project()
group ""
-- ========================
-- Projects
-- ========================
include "src/Common.lua"
include "src/Crypto.lua"
include "src/Cryptography.lua"
include "src/ImageConverter.lua"
include "src/Linker.lua"
include "src/Parser.lua"
@ -135,7 +141,7 @@ include "tools/scripts/raw.lua"
-- Components group: All projects assist or are part of a tool
group "Components"
Common:project()
Crypto:project()
Cryptography:project()
Parser:project()
Utils:project()
ZoneCode:project()

23
scripts/build.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
# Go to repository root
cd "$(dirname "$0")/.." || exit 2
TARGET='all'
ARCHITECTURE='x86'
CONFIG='debug'
for var in "$@"
do
if [ "$var" == "debug" ] || [ "$var" == "release" ]; then
CONFIG="$var"
elif [ "$var" == "x86" ] || [ "$var" == "x64" ]; then
ARCHITECTURE="$var"
else
TARGET="$var"
fi
done
echo "Building config=${CONFIG} architecture=${ARCHITECTURE} target=${TARGET}"
make -C build -j$(nproc) config=${CONFIG}_${ARCHITECTURE} "${TARGET}"

View File

@ -5,3 +5,5 @@ cd "$(dirname "$0")/.." || exit 2
make -C build -j$(nproc) config=debug_x86 clean
make -C build -j$(nproc) config=release_x86 clean
make -C build -j$(nproc) config=debug_x64 clean
make -C build -j$(nproc) config=release_x64 clean

View File

@ -135,7 +135,7 @@ namespace IW3
typedef float vec2_t[2];
typedef float vec3_t[3];
typedef float vec4_t[4];
typedef tdef_align(128) unsigned int raw_uint128;
typedef tdef_align32(128) unsigned int raw_uint128;
struct XModelPiece
{
@ -179,7 +179,7 @@ namespace IW3
};
typedef unsigned char ByteVec[3];
typedef tdef_align(4) unsigned short UShortVec[3];
typedef tdef_align32(4) unsigned short UShortVec[3];
union XAnimDynamicIndicesTrans
{
@ -214,7 +214,7 @@ namespace IW3
XAnimPartTransData u;
};
typedef tdef_align(4) short XQuat[2];
typedef tdef_align32(4) short XQuat[2];
union XAnimDynamicIndicesQuat
{
@ -360,7 +360,7 @@ namespace IW3
uint16_t* vertsBlend;
};
typedef tdef_align(16) uint16_t r_index16_t;
typedef tdef_align32(16) uint16_t r_index16_t;
struct XSurface
{
@ -709,7 +709,7 @@ namespace IW3
MaterialTextureDefInfo u;
};
struct gcc_align(8) GfxDrawSurfFields
struct gcc_align32(8) GfxDrawSurfFields
{
uint64_t objectId : 16;
uint64_t reflectionProbeIndex : 8;
@ -724,8 +724,8 @@ namespace IW3
union GfxDrawSurf
{
gcc_align(8) GfxDrawSurfFields fields;
gcc_align(8) uint64_t packed;
gcc_align32(8) GfxDrawSurfFields fields;
gcc_align32(8) uint64_t packed;
};
enum materialSurfType_t
@ -1314,9 +1314,9 @@ namespace IW3
{
char levelCount;
char flags;
int16_t dimensions[3];
uint16_t dimensions[3];
int format;
int resourceSize;
unsigned int resourceSize;
char data[1];
};
@ -1605,7 +1605,7 @@ namespace IW3
cLeaf_t leaf;
};
struct type_align(16) cbrush_t
struct type_align32(16) cbrush_t
{
float mins[3];
int contents;
@ -1671,7 +1671,7 @@ namespace IW3
typedef unsigned short LeafBrush;
typedef tdef_align(16) cbrush_t cbrush_array_t;
typedef tdef_align32(16) cbrush_t cbrush_array_t;
struct clipMap_t
{
@ -2265,7 +2265,7 @@ namespace IW3
char pad;
};
typedef tdef_align(4) GfxSceneDynModel GfxSceneDynModel4;
typedef tdef_align32(4) GfxSceneDynModel GfxSceneDynModel4;
struct GfxWorld
{

View File

@ -155,10 +155,10 @@ namespace IW4
void* data;
};
typedef tdef_align(16) char raw_byte16;
typedef tdef_align(16) float raw_float16;
typedef tdef_align32(16) char raw_byte16;
typedef tdef_align32(16) float raw_float16;
typedef unsigned int raw_uint;
typedef tdef_align(128) unsigned int raw_uint128;
typedef tdef_align32(128) unsigned int raw_uint128;
typedef unsigned char cbrushedge_t;
typedef unsigned short r_index_t;
typedef float vec2_t[2];
@ -289,7 +289,7 @@ namespace IW4
};
typedef unsigned char ByteVec[3];
typedef tdef_align(4) unsigned short UShortVec[3];
typedef tdef_align32(4) unsigned short UShortVec[3];
union XAnimDynamicFrames
{
@ -303,7 +303,7 @@ namespace IW4
uint16_t _2[1];
};
struct type_align(4) XAnimPartTransFrames
struct type_align32(4) XAnimPartTransFrames
{
float mins[3];
float size[3];
@ -330,9 +330,9 @@ namespace IW4
uint16_t _2[1];
};
typedef tdef_align(4) short XQuat2[2];
typedef tdef_align32(4) short XQuat2[2];
struct type_align(4) XAnimDeltaPartQuatDataFrames2
struct type_align32(4) XAnimDeltaPartQuatDataFrames2
{
XQuat2* frames;
XAnimDynamicIndicesQuat2 indices;
@ -356,7 +356,7 @@ namespace IW4
uint16_t _2[1];
};
typedef tdef_align(4) short XQuat[4];
typedef tdef_align32(4) short XQuat[4];
struct XAnimDeltaPartQuatDataFrames
{
@ -489,7 +489,7 @@ namespace IW4
XSurfaceCollisionTree* collisionTree;
};
typedef tdef_align(16) uint16_t r_index16_t;
typedef tdef_align32(16) uint16_t r_index16_t;
struct XSurface
{
@ -843,7 +843,7 @@ namespace IW4
unsigned int toolFlags;
};
struct gcc_align(8) GfxDrawSurfFields
struct gcc_align32(8) GfxDrawSurfFields
{
uint64_t objectId : 16;
uint64_t reflectionProbeIndex : 8;
@ -860,8 +860,8 @@ namespace IW4
union GfxDrawSurf
{
gcc_align(8) GfxDrawSurfFields fields;
gcc_align(8) uint64_t packed;
gcc_align32(8) GfxDrawSurfFields fields;
gcc_align32(8) uint64_t packed;
};
// The sort key is translated to a numeric value inside the material templates
@ -993,7 +993,7 @@ namespace IW4
GfxStateBits* stateBitsTable;
};
struct type_align(4) GfxImageLoadDef
struct type_align32(4) GfxImageLoadDef
{
char levelCount;
char pad[3];
@ -2918,8 +2918,8 @@ namespace IW4
float linkMaxs[2];
};
typedef tdef_align(128) cbrush_t cbrush_array_t;
typedef tdef_align(128) Bounds BoundsArray;
typedef tdef_align32(128) cbrush_t cbrush_array_t;
typedef tdef_align32(128) Bounds BoundsArray;
struct clipMap_t
{
@ -3539,7 +3539,7 @@ namespace IW4
Bounds bounds;
};
struct type_align(4) GfxBrushModel
struct type_align32(4) GfxBrushModel
{
GfxBrushModelWritable writable;
Bounds bounds;
@ -3744,8 +3744,8 @@ namespace IW4
int exponent;
};
typedef tdef_align(128) GfxCellTree GfxCellTree128;
typedef tdef_align(4) GfxSceneDynModel GfxSceneDynModel4;
typedef tdef_align32(128) GfxCellTree GfxCellTree128;
typedef tdef_align32(4) GfxSceneDynModel GfxSceneDynModel4;
struct GfxWorld
{

View File

@ -221,9 +221,9 @@ namespace IW5
};
};
typedef tdef_align(16) char raw_byte16;
typedef tdef_align(16) float raw_float16;
typedef tdef_align(128) unsigned int raw_uint128;
typedef tdef_align32(16) char raw_byte16;
typedef tdef_align32(16) float raw_float16;
typedef tdef_align32(128) unsigned int raw_uint128;
typedef unsigned char raw_byte;
typedef unsigned int raw_uint;
typedef unsigned short r_index_t;
@ -338,7 +338,7 @@ namespace IW5
};
typedef unsigned char ByteVec[3];
typedef tdef_align(4) unsigned short UShortVec[3];
typedef tdef_align32(4) unsigned short UShortVec[3];
union XAnimDynamicFrames
{
@ -352,7 +352,7 @@ namespace IW5
uint16_t _2[1];
};
struct type_align(4) XAnimPartTransFrames
struct type_align32(4) XAnimPartTransFrames
{
float mins[3];
float size[3];
@ -379,9 +379,9 @@ namespace IW5
uint16_t _2[1];
};
typedef tdef_align(4) short XQuat2[2];
typedef tdef_align32(4) short XQuat2[2];
struct type_align(4) XAnimDeltaPartQuatDataFrames2
struct type_align32(4) XAnimDeltaPartQuatDataFrames2
{
XQuat2* frames;
XAnimDynamicIndicesQuat2 indices;
@ -405,7 +405,7 @@ namespace IW5
uint16_t _2[1];
};
typedef tdef_align(4) short XQuat[4];
typedef tdef_align32(4) short XQuat[4];
struct XAnimDeltaPartQuatDataFrames
{
@ -543,7 +543,7 @@ namespace IW5
uint16_t i[3];
};
typedef tdef_align(16) XSurfaceTri XSurfaceTri16;
typedef tdef_align32(16) XSurfaceTri XSurfaceTri16;
struct XSurface
{
@ -653,7 +653,7 @@ namespace IW5
float quantization;
};
struct gcc_align(8) GfxDrawSurfFields
struct gcc_align32(8) GfxDrawSurfFields
{
uint64_t unused : 1;
uint64_t primarySortKey : 6;
@ -671,8 +671,8 @@ namespace IW5
union GfxDrawSurf
{
gcc_align(8) GfxDrawSurfFields fields;
gcc_align(8) uint64_t packed;
gcc_align32(8) GfxDrawSurfFields fields;
gcc_align32(8) uint64_t packed;
};
enum MaterialGameFlags
@ -1127,7 +1127,7 @@ namespace IW5
MaterialTechnique* techniques[54];
};
struct type_align(4) GfxImageLoadDef
struct type_align32(4) GfxImageLoadDef
{
char levelCount;
char pad[3];
@ -1339,8 +1339,8 @@ namespace IW5
unsigned char edgeCount[2][3];
};
typedef tdef_align(128) cbrush_t cbrush_array_t;
typedef tdef_align(128) Bounds BoundsArray;
typedef tdef_align32(128) cbrush_t cbrush_array_t;
typedef tdef_align32(128) Bounds BoundsArray;
struct ClipInfo
{
@ -2190,7 +2190,7 @@ namespace IW5
Bounds bounds;
};
struct type_align(4) GfxBrushModel
struct type_align32(4) GfxBrushModel
{
GfxBrushModelWritable writable;
Bounds bounds;
@ -2396,7 +2396,7 @@ namespace IW5
int exponent;
};
typedef tdef_align(128) GfxCellTree GfxCellTree128;
typedef tdef_align32(128) GfxCellTree GfxCellTree128;
struct GfxWorld
{
@ -3446,7 +3446,7 @@ namespace IW5
SndAliasCustom projIgnitionSound;
};
typedef tdef_align(4) AttSight AttSight4;
typedef tdef_align32(4) AttSight AttSight4;
struct WeaponAttachment
{

View File

@ -193,20 +193,20 @@ namespace T5
void* data;
};
typedef tdef_align(16) char char16;
typedef tdef_align(32) char byte32;
typedef tdef_align(128) char byte128;
typedef tdef_align32(16) char char16;
typedef tdef_align32(32) char byte32;
typedef tdef_align32(128) char byte128;
typedef tdef_align(4) char char_align4;
typedef tdef_align(128) char char_align128;
typedef tdef_align32(4) char char_align4;
typedef tdef_align32(128) char char_align128;
typedef tdef_align(16) char raw_byte16;
typedef tdef_align(128) char raw_byte128;
typedef tdef_align32(16) char raw_byte16;
typedef tdef_align32(128) char raw_byte128;
typedef tdef_align(128) float float_align128;
typedef tdef_align32(128) float float_align128;
typedef char cbrushedge_t;
typedef tdef_align(128) unsigned int raw_uint128;
typedef tdef_align32(128) unsigned int raw_uint128;
typedef uint16_t ScriptString;
@ -350,7 +350,7 @@ namespace T5
};
typedef unsigned char ByteVec[3];
typedef tdef_align(4) unsigned short UShortVec[3];
typedef tdef_align32(4) unsigned short UShortVec[3];
union XAnimDynamicFrames
{
@ -385,7 +385,7 @@ namespace T5
XAnimPartTransData u;
};
typedef tdef_align(4) short XQuat[2];
typedef tdef_align32(4) short XQuat[2];
union XAnimDynamicIndicesQuat
{
@ -542,7 +542,7 @@ namespace T5
uint16_t i[3];
};
typedef tdef_align(16) XSurfaceTri XSurfaceTri16;
typedef tdef_align32(16) XSurfaceTri XSurfaceTri16;
struct XSurface
{
@ -627,7 +627,7 @@ namespace T5
int sflags;
};
struct type_align(16) BrushWrapper
struct type_align32(16) BrushWrapper
{
vec3_t mins;
int contents;
@ -650,7 +650,7 @@ namespace T5
vec3_t halfLengths;
};
typedef tdef_align(16) PhysGeomInfo PhysGeomInfo16;
typedef tdef_align32(16) PhysGeomInfo PhysGeomInfo16;
struct PhysGeomList
{
@ -713,7 +713,7 @@ namespace T5
PhysConstraints* physConstraints;
};
struct gcc_align(8) GfxDrawSurfFields
struct gcc_align32(8) GfxDrawSurfFields
{
uint64_t objectId : 16;
uint64_t fade : 4;
@ -732,8 +732,8 @@ namespace T5
union GfxDrawSurf
{
gcc_align(8) GfxDrawSurfFields fields;
gcc_align(8) uint64_t packed;
gcc_align32(8) GfxDrawSurfFields fields;
gcc_align32(8) uint64_t packed;
};
struct MaterialInfo
@ -1138,7 +1138,7 @@ namespace T5
SND_ASSET_FLAG_PAD_LOOP_BUFFER = 0x2,
};
typedef tdef_align(2048) char snd_align_char;
typedef tdef_align32(2048) char snd_align_char;
struct snd_asset
{
@ -1164,7 +1164,7 @@ namespace T5
snd_asset sound;
};
typedef tdef_align(2048) char char_align_2048;
typedef tdef_align32(2048) char char_align_2048;
struct PrimedSound
{
@ -1426,7 +1426,7 @@ namespace T5
cLeaf_s leaf;
};
struct type_align(16) cbrush_t
struct type_align32(16) cbrush_t
{
float mins[3];
int contents;
@ -1935,7 +1935,7 @@ namespace T5
};
};
struct type_align(16) GfxLight
struct type_align32(16) GfxLight
{
char type;
char canUseShadowMap;
@ -2142,7 +2142,7 @@ namespace T5
char rgb[56][3];
};
typedef tdef_align(4) char aligned_byte_pointer;
typedef tdef_align32(4) char aligned_byte_pointer;
struct GfxLightGrid
{
@ -2220,7 +2220,7 @@ namespace T5
uint16_t dynEntId;
};
typedef tdef_align(4) GfxSceneDynModel GfxSceneDynModel4;
typedef tdef_align32(4) GfxSceneDynModel GfxSceneDynModel4;
struct BModelDrawInfo
{
@ -2283,7 +2283,7 @@ namespace T5
int stream2ByteOffset;
};
struct type_align(16) GfxSurface
struct type_align32(16) GfxSurface
{
srfTriangles_t tris;
Material* material;
@ -2935,7 +2935,7 @@ namespace T5
ITEM_TYPE_MENUMODEL = 0x27
};
struct type_align(8) itemDef_s
struct type_align32(8) itemDef_s
{
windowDef_t window;
int type;
@ -2949,15 +2949,15 @@ namespace T5
menuDef_t* parent;
rectData_s* rectExpData;
ExpressionStatement visibleExp;
gcc_align(8) uint64_t showBits;
gcc_align(8) uint64_t hideBits;
gcc_align32(8) uint64_t showBits;
gcc_align32(8) uint64_t hideBits;
ExpressionStatement forecolorAExp;
int ui3dWindowId;
GenericEventHandler* onEvent;
UIAnimInfo* animInfo;
};
struct type_align(8) menuDef_t
struct type_align32(8) menuDef_t
{
windowDef_t window;
const char* font;
@ -2984,8 +2984,8 @@ namespace T5
GenericEventHandler* onEvent;
ItemKeyHandler* onKey;
ExpressionStatement visibleExp;
gcc_align(8) uint64_t showBits;
gcc_align(8) uint64_t hideBits;
gcc_align32(8) uint64_t showBits;
gcc_align32(8) uint64_t hideBits;
const char* allowedBinding;
const char* soundName;
int imageTrack;

View File

@ -10,17 +10,17 @@ namespace T6
{
#endif
typedef tdef_align(16) char char16;
typedef tdef_align(32) char byte32;
typedef tdef_align(128) char byte128;
typedef tdef_align32(16) char char16;
typedef tdef_align32(32) char byte32;
typedef tdef_align32(128) char byte128;
typedef tdef_align(4) char char_align4;
typedef tdef_align(128) char char_align128;
typedef tdef_align32(4) char char_align4;
typedef tdef_align32(128) char char_align128;
typedef tdef_align(16) char raw_byte16;
typedef tdef_align(128) char raw_byte128;
typedef tdef_align32(16) char raw_byte16;
typedef tdef_align32(128) char raw_byte128;
typedef tdef_align(128) float float_align128;
typedef tdef_align32(128) float float_align128;
typedef uint16_t ScriptString;
@ -643,7 +643,7 @@ namespace T6
float lightingOriginRange;
};
struct gcc_align(8) GfxDrawSurfFields
struct gcc_align32(8) GfxDrawSurfFields
{
uint64_t objectId : 16;
uint64_t customIndex : 9;
@ -658,8 +658,8 @@ namespace T6
union GfxDrawSurf
{
gcc_align(8) GfxDrawSurfFields fields;
gcc_align(8) uint64_t packed;
gcc_align32(8) GfxDrawSurfFields fields;
gcc_align32(8) uint64_t packed;
};
// The sort key is translated to a numeric value inside the material templates
@ -702,7 +702,7 @@ namespace T6
MTL_GAMEFLAG_1000 = 0x1000,
};
struct type_align(8) MaterialInfo
struct type_align32(8) MaterialInfo
{
const char* name;
unsigned int gameFlags;
@ -735,7 +735,7 @@ namespace T6
CAMERA_REGION_NONE = CAMERA_REGION_COUNT,
};
typedef tdef_align(8) GfxStateBits GfxStateBitsTable;
typedef tdef_align32(8) GfxStateBits GfxStateBitsTable;
struct Material
{
@ -960,9 +960,9 @@ namespace T6
unsigned int entryCount;
unsigned int dependencyCount;
unsigned int pad32;
gcc_align(8) int64_t fileSize;
gcc_align(8) int64_t entryOffset;
gcc_align(8) int64_t checksumOffset;
gcc_align32(8) int64_t fileSize;
gcc_align32(8) int64_t entryOffset;
gcc_align32(8) int64_t checksumOffset;
char checksumChecksum[16];
char dependencies[512];
char padding[1464];
@ -970,7 +970,7 @@ namespace T6
#pragma pack(push, 1)
struct type_align(2) SndRuntimeAssetBank
struct type_align32(2) SndRuntimeAssetBank
{
const char* zone;
const char* language;
@ -985,7 +985,7 @@ namespace T6
#pragma pack(pop)
typedef tdef_align(2048) char SndChar2048;
typedef tdef_align32(2048) char SndChar2048;
struct SndLoadedAssets
{
@ -1041,8 +1041,8 @@ namespace T6
};
typedef unsigned short LeafBrush;
typedef tdef_align(128) cbrush_t cbrush_array_t;
typedef tdef_align(128) Bounds BoundsArray;
typedef tdef_align32(128) cbrush_t cbrush_array_t;
typedef tdef_align32(128) Bounds BoundsArray;
struct ClipInfo
{
@ -1066,7 +1066,7 @@ namespace T6
int* brushContents;
};
struct type_align(4) cLeaf_s
struct type_align32(4) cLeaf_s
{
uint16_t firstCollAabbIndex;
uint16_t collAabbCount;
@ -1273,8 +1273,8 @@ namespace T6
void /*ID3D11Buffer*/* indexBuffer;
};
typedef tdef_align(4) char aligned_byte_pointer;
typedef tdef_align(4) GfxCompressedLightGridCoeffs GfxCompressedLightGridCoeffs_align4;
typedef tdef_align32(4) char aligned_byte_pointer;
typedef tdef_align32(4) GfxCompressedLightGridCoeffs GfxCompressedLightGridCoeffs_align4;
struct GfxLightGrid
{
@ -1323,7 +1323,7 @@ namespace T6
vec3_t sunFxPosition;
};
typedef tdef_align(4) GfxDrawSurf GfxDrawSurf_align4;
typedef tdef_align32(4) GfxDrawSurf GfxDrawSurf_align4;
struct GfxWorldDpvsStatic
{
@ -1449,7 +1449,7 @@ namespace T6
int lightingQuality;
};
struct type_align(4) GfxLightImage
struct type_align32(4) GfxLightImage
{
GfxImage* image;
char samplerState;
@ -1478,8 +1478,8 @@ namespace T6
struct FontIcon
{
const char* name;
int numEntries;
int numAliasEntries;
unsigned int numEntries;
unsigned int numAliasEntries;
FontIconEntry* fontIconEntry;
FontIconAlias* fontIconAlias;
};
@ -1535,7 +1535,7 @@ namespace T6
expressionRpn* rpn;
};
struct type_align(8) menuDef_t
struct type_align32(8) menuDef_t
{
windowDef_t window;
const char* font;
@ -1562,8 +1562,8 @@ namespace T6
GenericEventHandler* onEvent;
ItemKeyHandler* onKey;
ExpressionStatement visibleExp;
gcc_align(8) uint64_t showBits;
gcc_align(8) uint64_t hideBits;
gcc_align32(8) uint64_t showBits;
gcc_align32(8) uint64_t hideBits;
const char* allowedBinding;
const char* soundName;
int imageTrack;
@ -1942,7 +1942,7 @@ namespace T6
int columnCount;
int rowCount;
StringTableCell* values;
int16_t* cellIndex;
uint16_t* cellIndex;
};
enum LbUpdateType
@ -2753,9 +2753,9 @@ namespace T6
uint16_t i[3];
};
typedef tdef_align(16) XSurfaceTri XSurfaceTri16;
typedef tdef_align32(16) XSurfaceTri XSurfaceTri16;
struct type_align(16) XSurface
struct type_align32(16) XSurface
{
char tileMode;
unsigned char vertListCount;
@ -2783,7 +2783,7 @@ namespace T6
int surfFlags;
};
struct type_align(4) XBoneInfo
struct type_align32(4) XBoneInfo
{
vec3_t bounds[2];
vec3_t offset;
@ -3058,7 +3058,7 @@ namespace T6
{
};*/
struct type_align(4) GfxImageLoadDef
struct type_align32(4) GfxImageLoadDef
{
char levelCount;
char flags;
@ -3104,7 +3104,7 @@ namespace T6
float returnHighpass;
};
typedef tdef_align(16) float SndFloatAlign16;
typedef tdef_align32(16) float SndFloatAlign16;
struct SndDuck
{
@ -3206,7 +3206,7 @@ namespace T6
cLeafBrushNodeData_t data;
};
struct type_align(16) cbrush_t
struct type_align32(16) cbrush_t
{
vec3_t mins;
int contents;
@ -3352,7 +3352,7 @@ namespace T6
ROPE_CENTITY_CONSTRAINT = 0x3,
};
struct type_align(4) constraint_t
struct type_align32(4) constraint_t
{
vec3_t p;
rope_constraint_e type;
@ -3374,7 +3374,7 @@ namespace T6
unsigned int frame_index;
};
struct type_align(4) rope_t
struct type_align32(4) rope_t
{
par_t m_particles[25];
constraint_t m_constraints[30];
@ -3489,7 +3489,7 @@ namespace T6
uint16_t infoIndex;
};
struct type_align(4) pathnode_dynamic_t
struct type_align32(4) pathnode_dynamic_t
{
SentientHandle pOwner;
int iFreeTime;
@ -3595,7 +3595,7 @@ namespace T6
};
};
struct type_align(16) GfxLight
struct type_align32(16) GfxLight
{
char type;
char canUseShadowMap;
@ -3814,7 +3814,8 @@ namespace T6
uint16_t dynEntId;
};
union gcc_align(8) __m128
// Usually __m128, but that is not portable
union gcc_align32(8) custom_m128
{
float m128_f32[4];
uint64_t m128_u64[2];
@ -3827,22 +3828,15 @@ namespace T6
unsigned int m128_u32[4];
};
struct vector3
{
__m128 x;
__m128 y;
__m128 z;
};
struct vector4
{
__m128 x;
__m128 y;
__m128 z;
__m128 w;
custom_m128 x;
custom_m128 y;
custom_m128 z;
custom_m128 w;
};
struct type_align(16) SSkinInstance
struct type_align32(16) SSkinInstance
{
union
{
@ -3894,7 +3888,7 @@ namespace T6
int baseIndex;
};
struct type_align(16) GfxSurface
struct type_align32(16) GfxSurface
{
srfTriangles_t tris;
Material* material;
@ -3919,7 +3913,7 @@ namespace T6
uint16_t V2[4];
};
struct type_align(4) GfxStaticModelLmapVertexInfo
struct type_align32(4) GfxStaticModelLmapVertexInfo
{
unsigned int* lmapVertexColors;
void /*ID3D11Buffer*/* lmapVertexColorsVB;
@ -4119,7 +4113,7 @@ namespace T6
void* data;
};
struct type_align(8) itemDef_s
struct type_align32(8) itemDef_s
{
windowDef_t window;
int type;
@ -5593,7 +5587,7 @@ namespace T6
LOCAL_CLIENT_COUNT = 0x1,
};
struct type_align(4) DevGraph
struct type_align32(4) DevGraph
{
vec2_t* knots;
int* knotCount;
@ -5615,7 +5609,7 @@ namespace T6
};
typedef char ByteVec[3];
typedef tdef_align(4) uint16_t UShortVec[3];
typedef tdef_align32(4) uint16_t UShortVec[3];
union XAnimDynamicFrames
{
@ -5629,7 +5623,7 @@ namespace T6
uint16_t _2[1];
};
struct type_align(4) XAnimPartTransFrames
struct type_align32(4) XAnimPartTransFrames
{
vec3_t mins;
vec3_t size;
@ -5656,9 +5650,9 @@ namespace T6
uint16_t _2[1];
};
typedef tdef_align(4) int16_t XQuat2[2];
typedef tdef_align32(4) int16_t XQuat2[2];
struct type_align(4) XAnimDeltaPartQuatDataFrames2
struct type_align32(4) XAnimDeltaPartQuatDataFrames2
{
XQuat2* frames;
XAnimDynamicIndicesDeltaQuat2 indices;
@ -5682,9 +5676,9 @@ namespace T6
uint16_t _2[1];
};
typedef tdef_align(4) int16_t XQuat[4];
typedef tdef_align32(4) int16_t XQuat[4];
struct type_align(4) XAnimDeltaPartQuatDataFrames
struct type_align32(4) XAnimDeltaPartQuatDataFrames
{
XQuat* frames;
XAnimDynamicIndicesDeltaQuat indices;
@ -5744,7 +5738,7 @@ namespace T6
vec4_t tvec;
};
typedef tdef_align(16) PhysGeomInfo PhysGeomInfo16;
typedef tdef_align32(16) PhysGeomInfo PhysGeomInfo16;
struct PhysGeomList
{
@ -6301,7 +6295,7 @@ namespace T6
static_assert(sizeof(SndAliasFlags) == 8);
#endif
struct type_align(4) pathlink_s
struct type_align32(4) pathlink_s
{
float fDist;
uint16_t nodeNum;
@ -6410,7 +6404,7 @@ namespace T6
unsigned int v;
};
struct type_align(4) SSkinVert
struct type_align32(4) SSkinVert
{
half4 pos_bone;
PackedUnitVec normal;
@ -6501,7 +6495,7 @@ namespace T6
} vector;
};
struct type_align(8) dvar_t
struct type_align32(8) dvar_t
{
const char* name;
const char* description;
@ -7012,7 +7006,7 @@ namespace T6
uint16_t triangleBeginIndex;
};
struct type_align(16) BrushWrapper
struct type_align32(16) BrushWrapper
{
vec3_t mins;
int contents;

View File

@ -7,9 +7,6 @@
#ifdef tdef_align
#undef tdef_align
#endif
#ifdef memb_align
#undef memb_align
#endif
#ifdef gcc_align
#undef gcc_align
#endif
@ -17,25 +14,44 @@
#ifdef __zonecodegenerator
#define type_align(x) alignas(x)
#define tdef_align(x) alignas(x)
#define memb_align(x) alignas(x)
#define gcc_align(x)
#else
#ifdef __ida
#define type_align(x) __declspec(align(x))
#define tdef_align(x) __declspec(align(x))
#define memb_align(x) __declspec(align(x))
#define gcc_align(x)
#else
#ifdef _MSVC_LANG
#define type_align(x) __declspec(align(x))
#define tdef_align(x) __declspec(align(x))
#define memb_align(x) __declspec(align(x))
#define gcc_align(x)
#else
#define type_align(x) __attribute__((__aligned__(x)))
#define tdef_align(x)
#define memb_align(x) __attribute__((__aligned__(x)))
#define gcc_align(x) __attribute__((__aligned__(x)))
#endif
#endif
#endif
#if defined(__zonecodegenerator) || defined(__ida)
#define type_align32(x) type_align(x)
#define tdef_align32(x) tdef_align(x)
#define gcc_align32(x) gcc_align(x)
#define type_align64(x) type_align(x)
#define tdef_align64(x) tdef_align(x)
#define gcc_align64(x) gcc_align(x)
#elif defined(ARCH_x86)
#define type_align32(x) type_align(x)
#define tdef_align32(x) tdef_align(x)
#define gcc_align32(x) gcc_align(x)
#define type_align64(x)
#define tdef_align64(x)
#define gcc_align64(x)
#elif defined(ARCH_x64)
#define type_align32(x)
#define tdef_align32(x)
#define gcc_align32(x)
#define type_align64(x) type_align(x)
#define tdef_align64(x) tdef_align(x)
#define gcc_align64(x) gcc_align(x)
#endif

View File

@ -1,5 +1,6 @@
#pragma once
#include <cstdint>
#include <limits>
struct ZoneHeader
{
@ -7,22 +8,12 @@ struct ZoneHeader
uint32_t m_version;
};
#ifdef ARCH_x64
typedef uint32_t scr_string_t;
typedef uint64_t xchunk_size_t;
typedef uint64_t xblock_size_t;
typedef uint64_t zone_pointer_t;
constexpr uint16_t SCR_STRING_MAX = UINT32_MAX;
#elif ARCH_x86
typedef uint16_t scr_string_t;
typedef uint32_t xchunk_size_t;
typedef uint32_t xblock_size_t;
typedef uint32_t zone_pointer_t;
constexpr uint16_t SCR_STRING_MAX = UINT16_MAX;
#endif
constexpr uint16_t SCR_STRING_MAX = std::numeric_limits<scr_string_t>::max();
typedef int block_t;
typedef int asset_type_t;
typedef unsigned block_t;
typedef unsigned asset_type_t;
typedef unsigned int zone_priority_t;

View File

@ -1,32 +0,0 @@
#include "Crypto.h"
#include "Impl/AlgorithmMD5.h"
#include "Impl/AlgorithmRSA.h"
#include "Impl/AlgorithmSHA1.h"
#include "Impl/AlgorithmSHA256.h"
#include "Impl/AlgorithmSalsa20.h"
std::unique_ptr<IHashFunction> Crypto::CreateMD5()
{
return std::make_unique<AlgorithmMD5>();
}
std::unique_ptr<IHashFunction> Crypto::CreateSHA1()
{
return std::make_unique<AlgorithmSHA1>();
}
std::unique_ptr<IHashFunction> Crypto::CreateSHA256()
{
return std::make_unique<AlgorithmSHA256>();
}
std::unique_ptr<IStreamCipher> Crypto::CreateSalsa20(const uint8_t* keyBytes, const size_t keySize)
{
return std::make_unique<AlgorithmSalsa20>(keyBytes, keySize);
}
std::unique_ptr<IPublicKeyAlgorithm> Crypto::CreateRSA(const IPublicKeyAlgorithm::HashingAlgorithm hashingAlgorithm, const RSAPaddingMode paddingMode)
{
return std::make_unique<AlgorithmRSA>(hashingAlgorithm, paddingMode);
}

View File

@ -1,27 +0,0 @@
#pragma once
#include "IHashFunction.h"
#include "IPublicKeyAlgorithm.h"
#include "IStreamCipher.h"
#include <cstddef>
#include <memory>
class Crypto
{
public:
enum class RSAPaddingMode
{
RSA_PADDING_PKS1,
RSA_PADDING_PSS,
};
static std::unique_ptr<IHashFunction> CreateMD5();
static std::unique_ptr<IHashFunction> CreateSHA1();
static std::unique_ptr<IHashFunction> CreateSHA256();
static std::unique_ptr<IStreamCipher> CreateSalsa20(const uint8_t* keyBytes, size_t keySize);
static std::unique_ptr<IPublicKeyAlgorithm> CreateRSA(IPublicKeyAlgorithm::HashingAlgorithm hashingAlgorithm, RSAPaddingMode paddingMode);
};

View File

@ -1,14 +0,0 @@
#pragma once
#include <cstddef>
class IHashFunction
{
public:
virtual ~IHashFunction() = default;
virtual size_t GetHashSize() = 0;
virtual void Init() = 0;
virtual void Process(const void* input, size_t inputSize) = 0;
virtual void Finish(void* hashBuffer) = 0;
};

View File

@ -1,22 +0,0 @@
#pragma once
#include <cstddef>
#include <cstdint>
class IPublicKeyAlgorithm
{
public:
enum class HashingAlgorithm
{
RSA_HASH_SHA256,
RSA_HASH_SHA512
};
virtual ~IPublicKeyAlgorithm() = default;
virtual bool SetKey(const uint8_t* keyData, size_t keySize) = 0;
// If needed add a signing method
virtual bool Verify(const uint8_t* signedData, size_t signedDataSize, const uint8_t* signature, size_t signatureSize) = 0;
};

View File

@ -1,14 +0,0 @@
#pragma once
#include <cstddef>
#include <cstdint>
class IStreamCipher
{
public:
virtual ~IStreamCipher() = default;
virtual void SetIV(const uint8_t* iv, size_t ivSize) = 0;
virtual void Process(const void* plainText, void* cipherText, size_t amount) = 0;
};

View File

@ -1,64 +0,0 @@
#include "AlgorithmMD5.h"
#include "CryptoLibrary.h"
#include <cstdint>
class AlgorithmMD5::AlgorithmMD5Impl
{
hash_state m_state{};
public:
AlgorithmMD5Impl()
{
CryptoLibrary::Init();
Init();
}
void Init()
{
md5_init(&m_state);
}
void Process(const void* input, const size_t inputSize)
{
md5_process(&m_state, static_cast<const uint8_t*>(input), inputSize);
}
void Finish(void* hashBuffer)
{
md5_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
};
AlgorithmMD5::AlgorithmMD5()
{
m_impl = new AlgorithmMD5Impl();
}
AlgorithmMD5::~AlgorithmMD5()
{
delete m_impl;
m_impl = nullptr;
}
size_t AlgorithmMD5::GetHashSize()
{
return HASH_SIZE;
}
void AlgorithmMD5::Init()
{
m_impl->Init();
}
void AlgorithmMD5::Process(const void* input, const size_t inputSize)
{
m_impl->Process(input, inputSize);
}
void AlgorithmMD5::Finish(void* hashBuffer)
{
m_impl->Finish(hashBuffer);
}

View File

@ -1,20 +0,0 @@
#pragma once
#include "IHashFunction.h"
class AlgorithmMD5 : public IHashFunction
{
class AlgorithmMD5Impl;
AlgorithmMD5Impl* m_impl;
public:
static const int HASH_SIZE = 16;
AlgorithmMD5();
~AlgorithmMD5() override;
size_t GetHashSize() override;
void Init() override;
void Process(const void* input, size_t inputSize) override;
void Finish(void* hashBuffer) override;
};

View File

@ -1,119 +0,0 @@
#include "AlgorithmRSA.h"
#include "CryptoLibrary.h"
#include <cstring>
class AlgorithmRSA::AlgorithmRSAImpl
{
rsa_key m_key{};
HashingAlgorithm m_hash;
Crypto::RSAPaddingMode m_padding;
const ltc_hash_descriptor* GetHashDescriptor() const
{
switch (m_hash)
{
case HashingAlgorithm::RSA_HASH_SHA256:
return &sha256_desc;
default:
case HashingAlgorithm::RSA_HASH_SHA512:
return &sha512_desc;
}
}
int GetPaddingMode() const
{
switch (m_padding)
{
case Crypto::RSAPaddingMode::RSA_PADDING_PKS1:
return LTC_PKCS_1_V1_5;
default:
case Crypto::RSAPaddingMode::RSA_PADDING_PSS:
return LTC_PKCS_1_PSS;
}
}
public:
AlgorithmRSAImpl(const HashingAlgorithm hash, const Crypto::RSAPaddingMode padding)
{
m_hash = hash;
m_padding = padding;
CryptoLibrary::Init();
}
~AlgorithmRSAImpl() = default;
AlgorithmRSAImpl(AlgorithmRSAImpl& other) = default;
AlgorithmRSAImpl(AlgorithmRSAImpl&& other) = delete;
AlgorithmRSAImpl& operator=(AlgorithmRSAImpl const& other) = default;
AlgorithmRSAImpl& operator=(AlgorithmRSAImpl&& other) = delete;
bool SetKey(const uint8_t* keyData, const size_t keySize)
{
return rsa_import(keyData, keySize, &m_key) == CRYPT_OK;
}
bool Verify(const uint8_t* signedData, const size_t signedDataSize, const uint8_t* signature, const size_t signatureSize)
{
const ltc_hash_descriptor* hashDesc = GetHashDescriptor();
const int hashId = register_hash(hashDesc);
const int padding = GetPaddingMode();
int result;
rsa_verify_hash_ex(signature, signatureSize, signedData, signedDataSize, padding, hashId, 8, &result, &m_key);
return result == 1;
}
};
AlgorithmRSA::AlgorithmRSA(const HashingAlgorithm hash, const Crypto::RSAPaddingMode padding)
{
m_impl = new AlgorithmRSAImpl(hash, padding);
}
AlgorithmRSA::~AlgorithmRSA()
{
delete m_impl;
m_impl = nullptr;
}
AlgorithmRSA::AlgorithmRSA(AlgorithmRSA& other)
{
m_impl = new AlgorithmRSAImpl(*other.m_impl);
}
AlgorithmRSA::AlgorithmRSA(AlgorithmRSA&& other) noexcept
{
m_impl = other.m_impl;
other.m_impl = nullptr;
}
AlgorithmRSA& AlgorithmRSA::operator=(AlgorithmRSA const& other)
{
m_impl = new AlgorithmRSAImpl(*other.m_impl);
return *this;
}
AlgorithmRSA& AlgorithmRSA::operator=(AlgorithmRSA&& other) noexcept
{
m_impl = other.m_impl;
other.m_impl = nullptr;
return *this;
}
bool AlgorithmRSA::SetKey(const uint8_t* keyData, size_t keySize)
{
return m_impl->SetKey(keyData, keySize);
}
bool AlgorithmRSA::Verify(const uint8_t* signedData, const size_t signedDataSize, const uint8_t* signature, const size_t signatureSize)
{
return m_impl->Verify(signedData, signedDataSize, signature, signatureSize);
}

View File

@ -1,25 +0,0 @@
#pragma once
#include "Crypto.h"
#include "IPublicKeyAlgorithm.h"
#include <cstdint>
class AlgorithmRSA final : public IPublicKeyAlgorithm
{
class AlgorithmRSAImpl;
AlgorithmRSAImpl* m_impl;
public:
AlgorithmRSA(HashingAlgorithm hash, Crypto::RSAPaddingMode padding);
~AlgorithmRSA() override;
AlgorithmRSA(AlgorithmRSA& other);
AlgorithmRSA(AlgorithmRSA&& other) noexcept;
AlgorithmRSA& operator=(AlgorithmRSA const& other);
AlgorithmRSA& operator=(AlgorithmRSA&& other) noexcept;
bool SetKey(const uint8_t* keyData, size_t keySize) override;
bool Verify(const uint8_t* signedData, size_t signedDataSize, const uint8_t* signature, size_t signatureSize) override;
};

View File

@ -1,64 +0,0 @@
#include "AlgorithmSHA1.h"
#include "CryptoLibrary.h"
#include <cstdint>
class AlgorithmSHA1::AlgorithmSHA1Impl
{
hash_state m_state{};
public:
AlgorithmSHA1Impl()
{
CryptoLibrary::Init();
Init();
}
void Init()
{
sha1_init(&m_state);
}
void Process(const void* input, const size_t inputSize)
{
sha1_process(&m_state, static_cast<const uint8_t*>(input), inputSize);
}
void Finish(void* hashBuffer)
{
sha1_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
};
AlgorithmSHA1::AlgorithmSHA1()
{
m_impl = new AlgorithmSHA1Impl();
}
AlgorithmSHA1::~AlgorithmSHA1()
{
delete m_impl;
m_impl = nullptr;
}
size_t AlgorithmSHA1::GetHashSize()
{
return HASH_SIZE;
}
void AlgorithmSHA1::Init()
{
m_impl->Init();
}
void AlgorithmSHA1::Process(const void* input, const size_t inputSize)
{
m_impl->Process(input, inputSize);
}
void AlgorithmSHA1::Finish(void* hashBuffer)
{
m_impl->Finish(hashBuffer);
}

View File

@ -1,20 +0,0 @@
#pragma once
#include "IHashFunction.h"
class AlgorithmSHA1 : public IHashFunction
{
class AlgorithmSHA1Impl;
AlgorithmSHA1Impl* m_impl;
public:
static const int HASH_SIZE = 20;
AlgorithmSHA1();
~AlgorithmSHA1() override;
size_t GetHashSize() override;
void Init() override;
void Process(const void* input, size_t inputSize) override;
void Finish(void* hashBuffer) override;
};

View File

@ -1,64 +0,0 @@
#include "AlgorithmSHA256.h"
#include "CryptoLibrary.h"
#include <cstdint>
class AlgorithmSHA256::Impl
{
hash_state m_state{};
public:
Impl()
{
CryptoLibrary::Init();
Init();
}
void Init()
{
sha256_init(&m_state);
}
void Process(const void* input, const size_t inputSize)
{
sha256_process(&m_state, static_cast<const uint8_t*>(input), inputSize);
}
void Finish(void* hashBuffer)
{
sha256_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
};
AlgorithmSHA256::AlgorithmSHA256()
{
m_impl = new Impl();
}
AlgorithmSHA256::~AlgorithmSHA256()
{
delete m_impl;
m_impl = nullptr;
}
size_t AlgorithmSHA256::GetHashSize()
{
return HASH_SIZE;
}
void AlgorithmSHA256::Init()
{
m_impl->Init();
}
void AlgorithmSHA256::Process(const void* input, const size_t inputSize)
{
m_impl->Process(input, inputSize);
}
void AlgorithmSHA256::Finish(void* hashBuffer)
{
m_impl->Finish(hashBuffer);
}

View File

@ -1,20 +0,0 @@
#pragma once
#include "IHashFunction.h"
class AlgorithmSHA256 : public IHashFunction
{
class Impl;
Impl* m_impl;
public:
static const int HASH_SIZE = 32;
AlgorithmSHA256();
~AlgorithmSHA256() override;
size_t GetHashSize() override;
void Init() override;
void Process(const void* input, size_t inputSize) override;
void Finish(void* hashBuffer) override;
};

View File

@ -1,89 +0,0 @@
#include "AlgorithmSalsa20.h"
#include "salsa20.h"
#include <cassert>
#include <stdexcept>
class AlgorithmSalsa20::AlgorithmSalsa20Impl
{
salsa20_ctx m_context{};
public:
AlgorithmSalsa20Impl(const uint8_t* keyBytes, const size_t keySize)
{
Salsa20_KeySetup(&m_context, keyBytes, keySize * 8);
}
~AlgorithmSalsa20Impl() = default;
AlgorithmSalsa20Impl(AlgorithmSalsa20Impl& other) = default;
AlgorithmSalsa20Impl(AlgorithmSalsa20Impl&& other) = delete;
AlgorithmSalsa20Impl& operator=(AlgorithmSalsa20Impl const& other) = default;
AlgorithmSalsa20Impl& operator=(AlgorithmSalsa20Impl&& other) = delete;
void SetIV(const uint8_t* iv, const size_t ivSize)
{
assert(ivSize == 8);
if (ivSize != 8)
{
throw std::invalid_argument("Salsa20 IV size must be 8");
}
Salsa20_IVSetup(&m_context, iv);
}
void Process(const void* plainText, void* cipherText, const size_t amount)
{
Salsa20_Encrypt_Bytes(&m_context, static_cast<const uint8_t*>(plainText), static_cast<uint8_t*>(cipherText), amount);
}
};
AlgorithmSalsa20::AlgorithmSalsa20(const uint8_t* keyBytes, const size_t keySize)
{
m_impl = new AlgorithmSalsa20Impl(keyBytes, keySize);
}
AlgorithmSalsa20::~AlgorithmSalsa20()
{
delete m_impl;
m_impl = nullptr;
}
AlgorithmSalsa20::AlgorithmSalsa20(AlgorithmSalsa20& other)
{
m_impl = new AlgorithmSalsa20Impl(*other.m_impl);
}
AlgorithmSalsa20::AlgorithmSalsa20(AlgorithmSalsa20&& other) noexcept
{
m_impl = other.m_impl;
other.m_impl = nullptr;
}
AlgorithmSalsa20& AlgorithmSalsa20::operator=(AlgorithmSalsa20 const& other)
{
m_impl = new AlgorithmSalsa20Impl(*other.m_impl);
return *this;
}
AlgorithmSalsa20& AlgorithmSalsa20::operator=(AlgorithmSalsa20&& other) noexcept
{
m_impl = other.m_impl;
other.m_impl = nullptr;
return *this;
}
void AlgorithmSalsa20::SetIV(const uint8_t* iv, const size_t ivSize)
{
m_impl->SetIV(iv, ivSize);
}
void AlgorithmSalsa20::Process(const void* plainText, void* cipherText, const size_t amount)
{
m_impl->Process(plainText, cipherText, amount);
}

View File

@ -1,21 +0,0 @@
#pragma once
#include "IStreamCipher.h"
class AlgorithmSalsa20 final : public IStreamCipher
{
class AlgorithmSalsa20Impl;
AlgorithmSalsa20Impl* m_impl;
public:
AlgorithmSalsa20(const uint8_t* keyBytes, size_t keySize);
~AlgorithmSalsa20() override;
AlgorithmSalsa20(AlgorithmSalsa20& other);
AlgorithmSalsa20(AlgorithmSalsa20&& other) noexcept;
AlgorithmSalsa20& operator=(AlgorithmSalsa20 const& other);
AlgorithmSalsa20& operator=(AlgorithmSalsa20&& other) noexcept;
void SetIV(const uint8_t* iv, size_t ivSize) override;
void Process(const void* plainText, void* cipherText, size_t amount) override;
};

View File

@ -1,49 +0,0 @@
#include "Base64.h"
#define LTC_NO_PROTOTYPES
#include <tomcrypt.h>
namespace base64
{
std::string EncodeBase64(const void* inputData, const size_t inputLength)
{
const auto base64BufferSize = GetBase64EncodeOutputLength(inputLength);
std::string output(base64BufferSize, '\0');
const auto outLength = base64BufferSize + 1u;
const auto result = EncodeBase64(inputData, inputLength, output.data(), outLength);
assert(result);
return output;
}
bool EncodeBase64(const void* inputData, const size_t inputLength, void* outputBuffer, const size_t outputBufferSize)
{
unsigned long outLength = outputBufferSize;
const auto result = base64_encode(static_cast<const unsigned char*>(inputData), inputLength, static_cast<char*>(outputBuffer), &outLength);
return result == CRYPT_OK;
}
size_t GetBase64EncodeOutputLength(const size_t inputLength)
{
return 4u * ((inputLength + 2u) / 3u);
}
size_t DecodeBase64(const void* base64Data, const size_t inputLength, void* outputBuffer, const size_t outputBufferSize)
{
unsigned long outLength = GetBase64DecodeOutputLength(inputLength);
if (outLength > outputBufferSize)
return 0u;
const auto result = base64_decode(static_cast<const char*>(base64Data), inputLength, static_cast<unsigned char*>(outputBuffer), &outLength);
assert(result == CRYPT_OK);
return static_cast<size_t>(outLength);
}
size_t GetBase64DecodeOutputLength(const size_t inputLength)
{
return inputLength / 4u;
}
} // namespace base64

View File

@ -1,15 +0,0 @@
#include "CryptoLibrary.h"
#include "tommath.h"
void CryptoLibrary::Init()
{
static bool initialized = false;
if (!initialized)
{
initialized = true;
ltc_mp = ltm_desc;
}
}

View File

@ -1,10 +0,0 @@
#pragma once
#define LTC_NO_PROTOTYPES
#include "tomcrypt.h"
class CryptoLibrary
{
public:
static void Init();
};

View File

@ -1,29 +1,29 @@
Crypto = {}
Cryptography = {}
function Crypto:include(includes)
function Cryptography:include(includes)
if includes:handle(self:name()) then
includedirs {
path.join(ProjectFolder(), "Crypto")
path.join(ProjectFolder(), "Cryptography")
}
end
end
function Crypto:link(links)
function Cryptography:link(links)
links:add(self:name())
links:linkto(libtomcrypt)
links:linkto(libtommath)
links:linkto(salsa20)
end
function Crypto:use()
function Cryptography:use()
end
function Crypto:name()
return "Crypto"
function Cryptography:name()
return "Cryptography"
end
function Crypto:project()
function Cryptography:project()
local folder = ProjectFolder()
local includes = Includes:create()
@ -34,8 +34,8 @@ function Crypto:project()
language "C++"
files {
path.join(folder, "Crypto/**.h"),
path.join(folder, "Crypto/**.cpp")
path.join(folder, "Cryptography/**.h"),
path.join(folder, "Cryptography/**.cpp")
}
self:include(includes)

View File

@ -0,0 +1,54 @@
#include "AlgorithmMd5.h"
#include "Internal/CryptoLibrary.h"
#include <cstdint>
using namespace cryptography;
namespace
{
constexpr int HASH_SIZE = 16;
class AlgorithmMd5 final : public IHashFunction
{
public:
AlgorithmMd5()
{
internal::CryptoLibrary::Init();
Init();
}
size_t GetHashSize() override
{
return HASH_SIZE;
}
void Init() override
{
md5_init(&m_state);
}
void Process(const void* input, const size_t inputSize) override
{
md5_process(&m_state, static_cast<const uint8_t*>(input), static_cast<unsigned long>(inputSize));
}
void Finish(void* hashBuffer) override
{
md5_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
private:
hash_state m_state{};
};
} // namespace
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateMd5()
{
return std::make_unique<AlgorithmMd5>();
}
} // namespace cryptography

View File

@ -0,0 +1,10 @@
#pragma once
#include "IHashFunction.h"
#include <memory>
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateMd5();
}

View File

@ -0,0 +1,84 @@
#include "AlgorithmRsa.h"
#include "Internal/CryptoLibrary.h"
using namespace cryptography;
namespace
{
class AlgorithmRsa final : public IPublicKeyAlgorithm
{
public:
AlgorithmRsa(const HashingAlgorithm hash, const RsaPaddingMode padding)
{
m_hash = hash;
m_padding = padding;
internal::CryptoLibrary::Init();
}
bool SetKey(const uint8_t* keyData, const size_t keySize) override
{
return rsa_import(keyData, static_cast<unsigned long>(keySize), &m_key) == CRYPT_OK;
}
bool Verify(const uint8_t* signedData, const size_t signedDataSize, const uint8_t* signature, const size_t signatureSize) override
{
const ltc_hash_descriptor* hashDesc = GetHashDescriptor();
const int hashId = register_hash(hashDesc);
const int padding = GetPaddingMode();
int result;
rsa_verify_hash_ex(signature,
static_cast<unsigned long>(signatureSize),
signedData,
static_cast<unsigned long>(signedDataSize),
padding,
hashId,
8,
&result,
&m_key);
return result == 1;
}
private:
[[nodiscard]] const ltc_hash_descriptor* GetHashDescriptor() const
{
switch (m_hash)
{
case HashingAlgorithm::RSA_HASH_SHA256:
return &sha256_desc;
default:
case HashingAlgorithm::RSA_HASH_SHA512:
return &sha512_desc;
}
}
[[nodiscard]] int GetPaddingMode() const
{
switch (m_padding)
{
case RsaPaddingMode::RSA_PADDING_PKS1:
return LTC_PKCS_1_V1_5;
default:
case RsaPaddingMode::RSA_PADDING_PSS:
return LTC_PKCS_1_PSS;
}
}
rsa_key m_key{};
HashingAlgorithm m_hash;
RsaPaddingMode m_padding;
};
} // namespace
namespace cryptography
{
std::unique_ptr<IPublicKeyAlgorithm> CreateRsa(const HashingAlgorithm hashingAlgorithm, const RsaPaddingMode paddingMode)
{
return std::make_unique<AlgorithmRsa>(hashingAlgorithm, paddingMode);
}
} // namespace cryptography

View File

@ -0,0 +1,17 @@
#pragma once
#include "IPublicKeyAlgorithm.h"
#include <cstdint>
#include <memory>
namespace cryptography
{
enum class RsaPaddingMode : std::uint8_t
{
RSA_PADDING_PKS1,
RSA_PADDING_PSS,
};
std::unique_ptr<IPublicKeyAlgorithm> CreateRsa(HashingAlgorithm hashingAlgorithm, RsaPaddingMode paddingMode);
} // namespace cryptography

View File

@ -0,0 +1,46 @@
#include "AlgorithmSalsa20.h"
#include "salsa20.h"
#include <cassert>
#include <stdexcept>
using namespace cryptography;
namespace
{
class AlgorithmSalsa20 final : public IStreamCipher
{
public:
AlgorithmSalsa20(const uint8_t* keyBytes, const size_t keySize)
{
Salsa20_KeySetup(&m_context, keyBytes, static_cast<uint32_t>(keySize * 8uz));
}
void SetIv(const uint8_t* iv, const size_t ivSize) override
{
assert(ivSize == 8);
if (ivSize != 8)
throw std::invalid_argument("Salsa20 IV size must be 8");
Salsa20_IVSetup(&m_context, iv);
}
void Process(const void* plainText, void* cipherText, const size_t amount) override
{
Salsa20_Encrypt_Bytes(&m_context, static_cast<const uint8_t*>(plainText), static_cast<uint8_t*>(cipherText), static_cast<uint32_t>(amount));
}
private:
salsa20_ctx m_context{};
};
} // namespace
namespace cryptography
{
std::unique_ptr<IStreamCipher> CreateSalsa20(const uint8_t* keyBytes, const size_t keySize)
{
return std::make_unique<AlgorithmSalsa20>(keyBytes, keySize);
}
} // namespace cryptography

View File

@ -0,0 +1,10 @@
#pragma once
#include "IStreamCipher.h"
#include <memory>
namespace cryptography
{
std::unique_ptr<IStreamCipher> CreateSalsa20(const uint8_t* keyBytes, size_t keySize);
}

View File

@ -0,0 +1,54 @@
#include "AlgorithmSha1.h"
#include "Internal/CryptoLibrary.h"
#include <cstdint>
using namespace cryptography;
namespace
{
constexpr int HASH_SIZE = 20;
class AlgorithmSha1 final : public IHashFunction
{
public:
AlgorithmSha1()
{
internal::CryptoLibrary::Init();
Init();
}
size_t GetHashSize() override
{
return HASH_SIZE;
}
void Init() override
{
sha1_init(&m_state);
}
void Process(const void* input, const size_t inputSize) override
{
sha1_process(&m_state, static_cast<const uint8_t*>(input), static_cast<unsigned long>(inputSize));
}
void Finish(void* hashBuffer) override
{
sha1_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
private:
hash_state m_state{};
};
} // namespace
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateSha1()
{
return std::make_unique<AlgorithmSha1>();
}
} // namespace cryptography

View File

@ -0,0 +1,10 @@
#pragma once
#include "IHashFunction.h"
#include <memory>
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateSha1();
}

View File

@ -0,0 +1,54 @@
#include "AlgorithmSha256.h"
#include "Internal/CryptoLibrary.h"
#include <cstdint>
using namespace cryptography;
namespace
{
constexpr int HASH_SIZE = 32;
class AlgorithmSha256 final : public IHashFunction
{
public:
AlgorithmSha256()
{
internal::CryptoLibrary::Init();
Init();
}
size_t GetHashSize() override
{
return HASH_SIZE;
}
void Init() override
{
sha256_init(&m_state);
}
void Process(const void* input, const size_t inputSize) override
{
sha256_process(&m_state, static_cast<const uint8_t*>(input), static_cast<unsigned long>(inputSize));
}
void Finish(void* hashBuffer) override
{
sha256_done(&m_state, static_cast<uint8_t*>(hashBuffer));
}
private:
hash_state m_state{};
};
} // namespace
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateSha256()
{
return std::make_unique<AlgorithmSha256>();
}
} // namespace cryptography

View File

@ -0,0 +1,10 @@
#pragma once
#include "IHashFunction.h"
#include <memory>
namespace cryptography
{
std::unique_ptr<IHashFunction> CreateSha256();
}

View File

@ -0,0 +1,72 @@
#include "Base64.h"
#define LTC_NO_PROTOTYPES
#include <tomcrypt.h>
namespace base64
{
std::string EncodeBase64(const void* inputData, const size_t inputLength)
{
const auto base64BufferSize = GetBase64EncodeOutputLength(inputLength);
std::string output(base64BufferSize, '\0');
const auto outLength = base64BufferSize + 1u;
const auto result = EncodeBase64(inputData, inputLength, output.data(), outLength);
assert(result);
return output;
}
bool EncodeBase64(const void* inputData, const size_t inputLength, void* outputBuffer, const size_t outputBufferSize)
{
unsigned long outLength = static_cast<unsigned long>(outputBufferSize);
const auto result =
base64_encode(static_cast<const unsigned char*>(inputData), static_cast<unsigned long>(inputLength), static_cast<char*>(outputBuffer), &outLength);
return result == CRYPT_OK;
}
size_t GetBase64EncodeOutputLength(const size_t inputLength)
{
return 4u * ((inputLength + 2u) / 3u);
}
size_t DecodeBase64(const void* base64Data, const size_t inputLength, void* outputBuffer, const size_t outputBufferSize)
{
auto outLength = static_cast<unsigned long>(GetBase64DecodeOutputLength(base64Data, inputLength));
assert(outLength <= outputBufferSize);
if (outLength > outputBufferSize)
return 0u;
const auto result =
base64_decode(static_cast<const char*>(base64Data), static_cast<unsigned long>(inputLength), static_cast<unsigned char*>(outputBuffer), &outLength);
assert(result == CRYPT_OK);
return static_cast<size_t>(outLength);
}
size_t GetBase64DecodeOutputLength(const void* base64Data, const size_t inputLength)
{
assert(base64Data);
assert(inputLength);
if (!base64Data || inputLength == 0u)
return 0u;
auto padding = 0u;
if (inputLength >= 1 && static_cast<const char*>(base64Data)[inputLength - 1] == '=')
{
if (inputLength >= 2 && static_cast<const char*>(base64Data)[inputLength - 2] == '=')
padding = 2u;
else
padding = 1u;
}
return ((inputLength / 4u) * 3u) - padding;
}
size_t GetBase64DecodeOutputLength(const size_t inputLength)
{
return (inputLength / 4u) * 3u;
}
} // namespace base64

View File

@ -8,5 +8,6 @@ namespace base64
size_t GetBase64EncodeOutputLength(size_t inputLength);
size_t DecodeBase64(const void* base64Data, size_t inputLength, void* outputBuffer, size_t outputBufferSize);
size_t GetBase64DecodeOutputLength(const void* base64Data, size_t inputLength);
size_t GetBase64DecodeOutputLength(size_t inputLength);
} // namespace base64

View File

@ -0,0 +1,7 @@
#pragma once
#include "Algorithms/AlgorithmMd5.h"
#include "Algorithms/AlgorithmRsa.h"
#include "Algorithms/AlgorithmSalsa20.h"
#include "Algorithms/AlgorithmSha1.h"
#include "Algorithms/AlgorithmSha256.h"

View File

@ -0,0 +1,22 @@
#pragma once
#include <cstdlib>
namespace cryptography
{
class IHashFunction
{
public:
IHashFunction() = default;
virtual ~IHashFunction() = default;
IHashFunction(const IHashFunction& other) = default;
IHashFunction(IHashFunction&& other) noexcept = default;
IHashFunction& operator=(const IHashFunction& other) = default;
IHashFunction& operator=(IHashFunction&& other) noexcept = default;
virtual size_t GetHashSize() = 0;
virtual void Init() = 0;
virtual void Process(const void* input, size_t inputSize) = 0;
virtual void Finish(void* hashBuffer) = 0;
};
} // namespace cryptography

View File

@ -0,0 +1,30 @@
#pragma once
#include <cstdint>
#include <cstdlib>
namespace cryptography
{
enum class HashingAlgorithm : std::uint8_t
{
RSA_HASH_SHA256,
RSA_HASH_SHA512
};
class IPublicKeyAlgorithm
{
public:
IPublicKeyAlgorithm() = default;
virtual ~IPublicKeyAlgorithm() = default;
IPublicKeyAlgorithm(const IPublicKeyAlgorithm& other) = default;
IPublicKeyAlgorithm(IPublicKeyAlgorithm&& other) noexcept = default;
IPublicKeyAlgorithm& operator=(const IPublicKeyAlgorithm& other) = default;
IPublicKeyAlgorithm& operator=(IPublicKeyAlgorithm&& other) noexcept = default;
virtual bool SetKey(const uint8_t* keyData, size_t keySize) = 0;
// If needed, add a signing method
virtual bool Verify(const uint8_t* signedData, size_t signedDataSize, const uint8_t* signature, size_t signatureSize) = 0;
};
} // namespace cryptography

View File

@ -0,0 +1,21 @@
#pragma once
#include <cstdint>
#include <cstdlib>
namespace cryptography
{
class IStreamCipher
{
public:
IStreamCipher() = default;
virtual ~IStreamCipher() = default;
IStreamCipher(const IStreamCipher& other) = default;
IStreamCipher(IStreamCipher&& other) noexcept = default;
IStreamCipher& operator=(const IStreamCipher& other) = default;
IStreamCipher& operator=(IStreamCipher&& other) noexcept = default;
virtual void SetIv(const uint8_t* iv, size_t ivSize) = 0;
virtual void Process(const void* plainText, void* cipherText, size_t amount) = 0;
};
} // namespace cryptography

View File

@ -0,0 +1,18 @@
#include "CryptoLibrary.h"
#include "tommath.h"
namespace cryptography::internal
{
void CryptoLibrary::Init()
{
static bool initialized = false;
if (!initialized)
{
initialized = true;
ltc_mp = ltm_desc;
}
}
} // namespace cryptography::internal

View File

@ -0,0 +1,13 @@
#pragma once
#define LTC_NO_PROTOTYPES
#include "tomcrypt.h"
namespace cryptography::internal
{
class CryptoLibrary
{
public:
static void Init();
};
} // namespace cryptography::internal

View File

@ -5,6 +5,7 @@
#include "ObjWriting.h"
#include "Utils/Arguments/UsageInformation.h"
#include "Utils/FileUtils.h"
#include "Utils/PathUtils.h"
#include <filesystem>
#include <format>
@ -152,9 +153,9 @@ void LinkerArgs::PrintVersion()
std::cout << std::format("OpenAssetTools Linker {}\n", GIT_VERSION);
}
void LinkerArgs::SetBinFolder(const char* argv0)
void LinkerArgs::SetBinFolder()
{
const fs::path path(argv0);
const fs::path path(utils::GetExecutablePath());
m_bin_folder = path.parent_path().string();
}
@ -190,7 +191,7 @@ bool LinkerArgs::ParseArgs(const int argc, const char** argv, bool& shouldContin
return true;
}
SetBinFolder(argv[0]);
SetBinFolder();
m_project_specifiers_to_build = m_argument_parser.GetArguments();
if (m_project_specifiers_to_build.empty())

View File

@ -37,7 +37,7 @@ private:
void PrintUsage() const;
static void PrintVersion();
void SetBinFolder(const char* argv0);
void SetBinFolder();
void SetVerbose(bool isVerbose);
ArgumentParser m_argument_parser;

View File

@ -3,6 +3,7 @@
#include "SearchPath/IWD.h"
#include "SearchPath/SearchPathFilesystem.h"
#include "SearchPath/SearchPaths.h"
#include "Utils/StringUtils.h"
#include <cassert>
#include <cstdint>
@ -55,8 +56,8 @@ namespace
void CreateFromString(const std::string& templateString)
{
const auto templateStringLength = templateString.size();
auto partStart = 0u;
for (auto i = 0u; i < templateStringLength; i++)
auto partStart = 0uz;
for (auto i = 0uz; i < templateStringLength; i++)
{
if (templateString[i] != '?')
continue;
@ -215,7 +216,10 @@ namespace
{
if (!curTemplate.CanRender(PROJECT_MASK) && curTemplate.CanRender(GAME_MASK))
{
auto renderedTemplate = curTemplate.Render(m_bin_dir, m_base_dir, projectName, GameId_Names[static_cast<unsigned>(game)]);
std::string gameName(GameId_Names[static_cast<unsigned>(game)]);
utils::MakeStringLowerCase(gameName);
auto renderedTemplate = curTemplate.Render(m_bin_dir, m_base_dir, projectName, gameName);
if (AddSearchPath(addedSearchPaths, searchPaths, renderedTemplate))
hasSearchPath = true;
}
@ -310,8 +314,8 @@ namespace
std::unique_ptr<ILinkerPaths> ILinkerPaths::FromArgs(const LinkerArgs& args)
{
std::string normalizedBinPath = fs::canonical(args.m_bin_folder).make_preferred().string();
std::string normalizedBasePath = fs::canonical(args.m_base_folder).make_preferred().string();
std::string normalizedBinPath = fs::weakly_canonical(args.m_bin_folder).make_preferred().string();
std::string normalizedBasePath = fs::weakly_canonical(args.m_base_folder).make_preferred().string();
LinkerSearchPathBuilder assetSearchPaths("asset", normalizedBinPath, normalizedBasePath);
assetSearchPaths.BuildFromArgs(args.m_asset_search_paths);

View File

@ -21,7 +21,7 @@ bool CsvHeaderRow::RequireIndexForHeader(const std::string& headerName, unsigned
if (existingHeader == m_header_row.end())
return false;
out = std::distance(m_header_row.begin(), existingHeader);
out = static_cast<unsigned>(std::distance(m_header_row.begin(), existingHeader));
return true;
}

View File

@ -13,7 +13,7 @@ public:
bool Read(const CsvInputStream& inputStream);
const std::string& HeaderNameForColumn(unsigned columnIndex) const;
[[nodiscard]] const std::string& HeaderNameForColumn(unsigned columnIndex) const;
bool RequireIndexForHeader(const std::string& headerName, unsigned& out) const;
[[nodiscard]] std::optional<unsigned> GetIndexForHeader(const std::string& headerName) const;

View File

@ -16,7 +16,7 @@ namespace ipak_consts
static constexpr size_t IPAK_CHUNK_SIZE = 0x8000;
static constexpr size_t IPAK_CHUNK_COUNT_PER_READ = 0x8;
static constexpr uint32_t IPAK_COMMAND_DEFAULT_SIZE = 0x7F00;
static constexpr size_t IPAK_COMMAND_DEFAULT_SIZE = 0x7F00;
static constexpr uint32_t IPAK_COMMAND_UNCOMPRESSED = 0;
static constexpr uint32_t IPAK_COMMAND_COMPRESSED = 1;
static constexpr uint32_t IPAK_COMMAND_SKIP = 0xCF;

View File

@ -68,7 +68,7 @@ namespace
T result;
} data{};
const auto byteCount = utils::Align(bitCount, 8u) / 8u;
const auto byteCount = utils::Align(bitCount, 8uz) / 8uz;
assert(byteCount <= sizeof(T));
const auto shiftCount = (8u - bitCount % 8) % 8;
@ -83,7 +83,7 @@ namespace
while (remainingBits > 0)
{
const auto curBits = static_cast<uint8_t>(std::min(remainingBits, 8u));
const auto curBits = static_cast<uint8_t>(std::min(remainingBits, 8uz));
if (m_remaining_bits_last_byte > 0)
{

View File

@ -42,14 +42,14 @@ uint32_t CommonStructuredDataEnum::CalculateChecksum(const uint32_t initialValue
{
auto checksum = initialValue;
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(m_name.c_str()), m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(m_name.c_str()), static_cast<unsigned>(m_name.size() + 1u));
const auto littleEndianElementCount = endianness::ToLittleEndian(ElementCount());
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(&littleEndianElementCount), sizeof(littleEndianElementCount));
for (const auto& entry : m_entries)
{
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(entry.m_name.c_str()), entry.m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(entry.m_name.c_str()), static_cast<unsigned>(entry.m_name.size() + 1));
const auto littleEndianValue = endianness::ToLittleEndian(entry.m_value);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(&littleEndianValue), sizeof(littleEndianValue));

View File

@ -41,10 +41,10 @@ uint32_t CommonStructuredDataStruct::CalculateChecksum(const CommonStructuredDat
{
auto checksum = initialValue;
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(m_name.c_str()), m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(m_name.c_str()), static_cast<unsigned>(m_name.size() + 1u));
for (const auto& property : m_properties)
{
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(property.m_name.c_str()), property.m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(property.m_name.c_str()), static_cast<unsigned>(property.m_name.size() + 1u));
const auto littleEndianOffset = endianness::ToLittleEndian(property.m_offset_in_bits);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(&littleEndianOffset), sizeof(littleEndianOffset));
@ -68,7 +68,7 @@ uint32_t CommonStructuredDataStruct::CalculateChecksum(const CommonStructuredDat
if (currentType.m_info.type_index < def.m_enums.size())
{
const auto& _enum = *def.m_enums[currentType.m_info.type_index];
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_enum.m_name.c_str()), _enum.m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_enum.m_name.c_str()), static_cast<unsigned>(_enum.m_name.size() + 1u));
currentType = CommonStructuredDataType(CommonStructuredDataTypeCategory::UNKNOWN);
}
break;
@ -76,7 +76,7 @@ uint32_t CommonStructuredDataStruct::CalculateChecksum(const CommonStructuredDat
if (currentType.m_info.type_index < def.m_structs.size())
{
const auto& _struct = *def.m_structs[currentType.m_info.type_index];
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_struct.m_name.c_str()), _struct.m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_struct.m_name.c_str()), static_cast<unsigned>(_struct.m_name.size() + 1u));
currentType = CommonStructuredDataType(CommonStructuredDataTypeCategory::UNKNOWN);
}
break;
@ -99,7 +99,7 @@ uint32_t CommonStructuredDataStruct::CalculateChecksum(const CommonStructuredDat
if (enumedArray.m_enum_index < def.m_enums.size())
{
const auto& _enum = *def.m_enums[enumedArray.m_enum_index];
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_enum.m_name.c_str()), _enum.m_name.size() + 1);
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(_enum.m_name.c_str()), static_cast<unsigned>(_enum.m_name.size() + 1u));
}
currentType = enumedArray.m_array_type;
}

View File

@ -1,6 +1,6 @@
#pragma once
#include "CommonStructuredDataTypes.h"
#include "Utils/ClassUtils.h"
#include <cstdint>
#include <string>
@ -8,29 +8,29 @@
struct CommonStructuredDataStructProperty
{
std::string m_name;
CommonStructuredDataType m_type;
size_t m_offset_in_bits;
CommonStructuredDataStructProperty();
explicit CommonStructuredDataStructProperty(std::string name);
CommonStructuredDataStructProperty(std::string name, CommonStructuredDataType type, size_t offsetInBits);
std::string m_name;
CommonStructuredDataType m_type;
size_t m_offset_in_bits;
};
class CommonStructuredDataDef;
struct CommonStructuredDataStruct
{
CommonStructuredDataStruct();
explicit CommonStructuredDataStruct(std::string name);
[[nodiscard]] uint32_t CalculateChecksum(const CommonStructuredDataDef& def, uint32_t initialValue) const;
void SortPropertiesByOffset();
void SortPropertiesByName();
std::string m_name;
std::vector<CommonStructuredDataStructProperty> m_properties;
size_t m_bit_offset;
size_t m_size_in_byte;
CommonStructuredDataStruct();
explicit CommonStructuredDataStruct(std::string name);
_NODISCARD uint32_t CalculateChecksum(const CommonStructuredDataDef& def, uint32_t initialValue) const;
void SortPropertiesByOffset();
void SortPropertiesByName();
};

View File

@ -59,7 +59,7 @@ size_t CommonStructuredDataType::GetSizeInBits(const CommonStructuredDataDef& de
return 0u;
}
const auto& indexedArray = def.m_indexed_arrays[m_info.type_index];
return utils::Align(indexedArray.m_element_size_in_bits * indexedArray.m_element_count, 8u);
return utils::Align(indexedArray.m_element_size_in_bits * indexedArray.m_element_count, 8uz);
}
case CommonStructuredDataTypeCategory::ENUM_ARRAY:
{
@ -69,7 +69,7 @@ size_t CommonStructuredDataType::GetSizeInBits(const CommonStructuredDataDef& de
return 0u;
}
const auto& enumedArray = def.m_enumed_arrays[m_info.type_index];
return utils::Align(enumedArray.m_element_size_in_bits * enumedArray.m_element_count, 8u);
return utils::Align(enumedArray.m_element_size_in_bits * enumedArray.m_element_count, 8uz);
}
case CommonStructuredDataTypeCategory::UNKNOWN:

View File

@ -11,7 +11,7 @@ namespace
{
void ConfigureCompilers(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// No compilers yet
}
@ -23,7 +23,7 @@ namespace
ZoneAssetCreationStateContainer& zoneStates,
IOutputPath& outDir)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));

View File

@ -11,7 +11,7 @@ namespace
{
void ConfigureCompilers(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// No compilers yet
}
@ -23,7 +23,7 @@ namespace
ZoneAssetCreationStateContainer& zoneStates,
IOutputPath& outDir)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));

View File

@ -11,7 +11,7 @@ namespace
{
void ConfigureCompilers(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// No compilers yet
}
@ -23,7 +23,7 @@ namespace
ZoneAssetCreationStateContainer& zoneStates,
IOutputPath& outDir)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));

View File

@ -11,7 +11,7 @@ namespace
{
void ConfigureCompilers(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// No compilers yet
}
@ -23,7 +23,7 @@ namespace
ZoneAssetCreationStateContainer& zoneStates,
IOutputPath& outDir)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));

View File

@ -6,7 +6,6 @@
#include <cassert>
#include <format>
#include <iostream>
using namespace T6;
@ -42,7 +41,7 @@ namespace
auto* gameKvps = m_memory.Alloc<KeyValuePairs>();
gameKvps->name = m_memory.Dup(m_zone.m_name.c_str());
gameKvps->numVariables = commonKvps.size();
gameKvps->numVariables = static_cast<unsigned>(commonKvps.size());
gameKvps->keyValuePairs = m_memory.Alloc<KeyValuePair>(commonKvps.size());
const auto namespaceHash = Common::Com_HashKey(m_zone.m_name.c_str(), 64);

View File

@ -17,7 +17,7 @@ namespace
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
collection.AddAssetCreator(CreateKeyValuePairsCompiler(memory, zone, zoneDefinition.m_zone_definition, zoneStates));
}
@ -29,7 +29,7 @@ namespace
ZoneAssetCreationStateContainer& zoneStates,
IOutputPath& outDir)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
if (ImageIPakPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIPakPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));

View File

@ -1,7 +1,6 @@
#include "IPakCreator.h"
#include "Game/T6/CommonT6.h"
#include "Game/T6/GameT6.h"
#include "GitVersion.h"
#include "ObjContainer/IPak/IPakTypes.h"
#include "Utils/Alignment.h"
@ -23,7 +22,7 @@ namespace
static constexpr char BRANDING[] = "Created with OpenAssetTools " GIT_VERSION;
static constexpr auto SECTION_COUNT = 3; // Index + Data + Branding
inline static const std::string PAD_DATA = std::string(256, '\xA7');
inline static const auto PAD_DATA = std::string(256, '\xA7');
public:
IPakWriter(std::ostream& stream, ISearchPath& searchPath, const std::vector<std::string>& images)
@ -70,8 +69,8 @@ namespace
void Write(const void* data, const size_t dataSize)
{
m_stream.write(static_cast<const char*>(data), dataSize);
m_current_offset += dataSize;
m_stream.write(static_cast<const char*>(data), static_cast<std::streamsize>(dataSize));
m_current_offset += static_cast<int64_t>(dataSize);
}
void Pad(const size_t paddingSize)
@ -100,27 +99,30 @@ namespace
{
GoTo(0);
const IPakHeader header{ipak_consts::IPAK_MAGIC, ipak_consts::IPAK_VERSION, static_cast<uint32_t>(m_total_size), SECTION_COUNT};
const IPakHeader header{.magic = ipak_consts::IPAK_MAGIC,
.version = ipak_consts::IPAK_VERSION,
.size = static_cast<uint32_t>(m_total_size),
.sectionCount = SECTION_COUNT};
const IPakSection dataSection{
ipak_consts::IPAK_DATA_SECTION,
static_cast<uint32_t>(m_data_section_offset),
static_cast<uint32_t>(m_data_section_size),
static_cast<uint32_t>(m_index_entries.size()),
.type = ipak_consts::IPAK_DATA_SECTION,
.offset = static_cast<uint32_t>(m_data_section_offset),
.size = static_cast<uint32_t>(m_data_section_size),
.itemCount = static_cast<uint32_t>(m_index_entries.size()),
};
const IPakSection indexSection{
ipak_consts::IPAK_INDEX_SECTION,
static_cast<uint32_t>(m_index_section_offset),
static_cast<uint32_t>(sizeof(IPakIndexEntry) * m_index_entries.size()),
static_cast<uint32_t>(m_index_entries.size()),
.type = ipak_consts::IPAK_INDEX_SECTION,
.offset = static_cast<uint32_t>(m_index_section_offset),
.size = static_cast<uint32_t>(sizeof(IPakIndexEntry) * m_index_entries.size()),
.itemCount = static_cast<uint32_t>(m_index_entries.size()),
};
const IPakSection brandingSection{
ipak_consts::IPAK_BRANDING_SECTION,
static_cast<uint32_t>(m_branding_section_offset),
std::extent_v<decltype(BRANDING)>,
1,
.type = ipak_consts::IPAK_BRANDING_SECTION,
.offset = static_cast<uint32_t>(m_branding_section_offset),
.size = std::extent_v<decltype(BRANDING)>,
.itemCount = 1,
};
Write(&header, sizeof(header));
@ -147,7 +149,7 @@ namespace
imageSize = static_cast<size_t>(openFile.m_length);
auto imageData = std::make_unique<char[]>(imageSize);
openFile.m_stream->read(imageData.get(), imageSize);
openFile.m_stream->read(imageData.get(), static_cast<std::streamsize>(imageSize));
return imageData;
}
@ -177,7 +179,7 @@ namespace
IPakDataBlockHeader skipBlockHeader{};
skipBlockHeader.countAndOffset.count = 1;
skipBlockHeader.commands[0].compressed = ipak_consts::IPAK_COMMAND_SKIP;
skipBlockHeader.commands[0].size = sizeToSkip - sizeof(IPakDataBlockHeader);
skipBlockHeader.commands[0].size = static_cast<uint32_t>(sizeToSkip - sizeof(IPakDataBlockHeader));
Write(&skipBlockHeader, sizeof(skipBlockHeader));
}
@ -199,12 +201,12 @@ namespace
m_current_block.countAndOffset.offset = static_cast<uint32_t>(m_file_offset);
// Reserve space to later write actual block header data
GoTo(m_current_offset + sizeof(IPakDataBlockHeader));
GoTo(static_cast<int64_t>(m_current_offset + sizeof(IPakDataBlockHeader)));
}
void WriteChunkData(const void* data, const size_t dataSize)
{
auto dataOffset = 0u;
auto dataOffset = 0uz;
while (dataOffset < dataSize)
{
if (m_current_block.countAndOffset.count >= std::extent_v<decltype(IPakDataBlockHeader::commands)>)
@ -216,7 +218,7 @@ namespace
const auto remainingSize = dataSize - dataOffset;
const auto remainingChunkBufferWindowSize = std::max((ipak_consts::IPAK_CHUNK_COUNT_PER_READ * ipak_consts::IPAK_CHUNK_SIZE)
- static_cast<size_t>(m_current_offset - m_chunk_buffer_window_start),
0u);
0uz);
if (remainingChunkBufferWindowSize == 0)
{
@ -225,7 +227,7 @@ namespace
continue;
}
const auto commandSize = std::min(std::min(remainingSize, ipak_consts::IPAK_COMMAND_DEFAULT_SIZE), remainingChunkBufferWindowSize);
const auto commandSize = std::min({remainingSize, ipak_consts::IPAK_COMMAND_DEFAULT_SIZE, remainingChunkBufferWindowSize});
auto writeUncompressed = true;
if (USE_IPAK_COMPRESSION)
@ -254,7 +256,7 @@ namespace
Write(&static_cast<const char*>(data)[dataOffset], commandSize);
const auto currentCommand = m_current_block.countAndOffset.count;
m_current_block.commands[currentCommand].size = commandSize;
m_current_block.commands[currentCommand].size = static_cast<uint32_t>(commandSize);
m_current_block.commands[currentCommand].compressed = ipak_consts::IPAK_COMMAND_UNCOMPRESSED;
m_current_block.countAndOffset.count = currentCommand + 1u;
}
@ -281,7 +283,7 @@ namespace
return;
const auto nameHash = T6::Common::R_HashString(imageName.c_str(), 0);
const auto dataHash = static_cast<unsigned>(crc32(0u, reinterpret_cast<const Bytef*>(imageData.get()), imageSize));
const auto dataHash = static_cast<unsigned>(crc32(0u, reinterpret_cast<const Bytef*>(imageData.get()), static_cast<unsigned>(imageSize)));
StartNewFile();
const auto startOffset = m_current_block_header_offset;
@ -294,7 +296,7 @@ namespace
WriteChunkData(imageData.get(), imageSize);
const auto writtenImageSize = static_cast<size_t>(m_current_offset - startOffset);
indexEntry.size = writtenImageSize;
indexEntry.size = static_cast<uint32_t>(writtenImageSize);
m_index_entries.emplace_back(indexEntry);
}

View File

@ -14,16 +14,28 @@ namespace dds
{
static constexpr auto DDS_MAGIC = FileUtils::MakeMagic32('D', 'D', 'S', ' ');
std::istream& m_stream;
public:
explicit DdsLoaderInternal(std::istream& stream)
: m_stream(stream),
m_texture_type(TextureType::T_2D),
m_has_mip_maps(false),
m_width(0u),
m_height(0u),
m_depth(0u),
m_format(nullptr)
{
}
TextureType m_texture_type;
bool m_has_mip_maps;
size_t m_width;
size_t m_height;
size_t m_depth;
const ImageFormat* m_format;
std::unique_ptr<Texture> LoadDds()
{
if (!ReadMagic() || !ReadHeader())
return nullptr;
_NODISCARD bool ReadMagic() const
return ReadTextureData();
}
private:
[[nodiscard]] bool ReadMagic() const
{
uint32_t magic;
m_stream.read(reinterpret_cast<char*>(&magic), sizeof(magic));
@ -42,7 +54,7 @@ namespace dds
return true;
}
_NODISCARD bool ReadDxt10Header()
[[nodiscard]] bool ReadDxt10Header()
{
DDS_HEADER_DXT10 headerDx10{};
m_stream.read(reinterpret_cast<char*>(&headerDx10), sizeof(headerDx10));
@ -86,7 +98,7 @@ namespace dds
return false;
}
_NODISCARD bool ReadPixelFormatFourCc(DDS_PIXELFORMAT& pf)
[[nodiscard]] bool ReadPixelFormatFourCc(DDS_PIXELFORMAT& pf)
{
switch (pf.dwFourCC)
{
@ -132,7 +144,7 @@ namespace dds
}
}
_NODISCARD bool ReadPixelFormatUnsigned(DDS_PIXELFORMAT& pf)
[[nodiscard]] bool ReadPixelFormatUnsigned(DDS_PIXELFORMAT& pf)
{
unsigned rOffset, rSize, gOffset, gSize, bOffset, bSize, aOffset, aSize;
@ -163,7 +175,7 @@ namespace dds
return false;
}
_NODISCARD bool ReadPixelFormat(DDS_PIXELFORMAT& pf)
[[nodiscard]] bool ReadPixelFormat(DDS_PIXELFORMAT& pf)
{
if (pf.dwFlags & DDPF_FOURCC)
return ReadPixelFormatFourCc(pf);
@ -200,7 +212,7 @@ namespace dds
return ReadPixelFormat(header.ddspf);
}
_NODISCARD std::unique_ptr<Texture> ReadTextureData() const
[[nodiscard]] std::unique_ptr<Texture> ReadTextureData() const
{
std::unique_ptr<Texture> result;
@ -229,7 +241,7 @@ namespace dds
for (auto mipLevel = 0; mipLevel < mipMapCount; mipLevel++)
{
const auto mipSize = result->GetSizeOfMipLevel(mipLevel);
const auto mipSize = static_cast<std::streamsize>(result->GetSizeOfMipLevel(mipLevel));
for (auto face = 0; face < faceCount; face++)
{
@ -246,25 +258,14 @@ namespace dds
return result;
}
public:
explicit DdsLoaderInternal(std::istream& stream)
: m_stream(stream),
m_texture_type(TextureType::T_2D),
m_has_mip_maps(false),
m_width(0u),
m_height(0u),
m_depth(0u),
m_format(nullptr)
{
}
std::istream& m_stream;
std::unique_ptr<Texture> LoadDds()
{
if (!ReadMagic() || !ReadHeader())
return nullptr;
return ReadTextureData();
}
TextureType m_texture_type;
bool m_has_mip_maps;
unsigned m_width;
unsigned m_height;
unsigned m_depth;
const ImageFormat* m_format;
};
std::unique_ptr<Texture> LoadDds(std::istream& stream)

View File

@ -55,7 +55,7 @@ public:
{
const auto* buffer = m_texture->GetBufferForMipLevel(mipLevel);
const auto mipLevelSize = m_texture->GetSizeOfMipLevel(mipLevel) * m_texture->GetFaceCount();
m_stream.write(reinterpret_cast<const char*>(buffer), mipLevelSize);
m_stream.write(reinterpret_cast<const char*>(buffer), static_cast<std::streamsize>(mipLevelSize));
}
}
@ -153,7 +153,7 @@ public:
header.dwHeight = m_texture->GetHeight();
header.dwWidth = m_texture->GetWidth();
header.dwDepth = m_texture->GetDepth();
header.dwPitchOrLinearSize = m_texture->GetFormat()->GetPitch(0, m_texture->GetWidth());
header.dwPitchOrLinearSize = static_cast<uint32_t>(m_texture->GetFormat()->GetPitch(0, m_texture->GetWidth()));
header.dwMipMapCount = m_texture->HasMipMaps() ? m_texture->GetMipMapCount() : 1;
PopulatePixelFormat(header.ddspf);

View File

@ -14,7 +14,7 @@ Dx12TextureLoader::Dx12TextureLoader()
const ImageFormat* Dx12TextureLoader::GetFormatForDx12Format() const
{
for (auto i : ImageFormat::ALL_FORMATS)
for (const auto* i : ImageFormat::ALL_FORMATS)
{
if (i->GetDxgiFormat() == m_format)
return i;
@ -41,19 +41,19 @@ Dx12TextureLoader& Dx12TextureLoader::HasMipMaps(const bool hasMipMaps)
return *this;
}
Dx12TextureLoader& Dx12TextureLoader::Width(const size_t width)
Dx12TextureLoader& Dx12TextureLoader::Width(const unsigned width)
{
m_width = width;
return *this;
}
Dx12TextureLoader& Dx12TextureLoader::Height(const size_t height)
Dx12TextureLoader& Dx12TextureLoader::Height(const unsigned height)
{
m_height = height;
return *this;
}
Dx12TextureLoader& Dx12TextureLoader::Depth(const size_t depth)
Dx12TextureLoader& Dx12TextureLoader::Depth(const unsigned depth)
{
m_depth = depth;
return *this;

View File

@ -2,8 +2,6 @@
#include "Image/DxgiFormat.h"
#include "Image/Texture.h"
#include "Utils/ClassUtils.h"
#include "Utils/MemoryManager.h"
#include <memory>
#include <unordered_map>
@ -16,21 +14,21 @@ public:
Dx12TextureLoader& Format(oat::DXGI_FORMAT format);
Dx12TextureLoader& Type(TextureType textureType);
Dx12TextureLoader& HasMipMaps(bool hasMipMaps);
Dx12TextureLoader& Width(size_t width);
Dx12TextureLoader& Height(size_t height);
Dx12TextureLoader& Depth(size_t depth);
Dx12TextureLoader& Width(unsigned width);
Dx12TextureLoader& Height(unsigned height);
Dx12TextureLoader& Depth(unsigned depth);
std::unique_ptr<Texture> LoadTexture(const void* data);
private:
_NODISCARD const ImageFormat* GetFormatForDx12Format() const;
[[nodiscard]] const ImageFormat* GetFormatForDx12Format() const;
static std::unordered_map<ImageFormatId, ImageFormatId> m_conversion_table;
oat::DXGI_FORMAT m_format;
TextureType m_type;
bool m_has_mip_maps;
size_t m_width;
size_t m_height;
size_t m_depth;
unsigned m_width;
unsigned m_height;
unsigned m_depth;
};

View File

@ -41,19 +41,19 @@ Dx9TextureLoader& Dx9TextureLoader::HasMipMaps(const bool hasMipMaps)
return *this;
}
Dx9TextureLoader& Dx9TextureLoader::Width(const size_t width)
Dx9TextureLoader& Dx9TextureLoader::Width(const unsigned width)
{
m_width = width;
return *this;
}
Dx9TextureLoader& Dx9TextureLoader::Height(const size_t height)
Dx9TextureLoader& Dx9TextureLoader::Height(const unsigned height)
{
m_height = height;
return *this;
}
Dx9TextureLoader& Dx9TextureLoader::Depth(const size_t depth)
Dx9TextureLoader& Dx9TextureLoader::Depth(const unsigned depth)
{
m_depth = depth;
return *this;

View File

@ -2,11 +2,8 @@
#include "Image/D3DFormat.h"
#include "Image/Texture.h"
#include "Utils/ClassUtils.h"
#include "Utils/MemoryManager.h"
#include <memory>
#include <unordered_map>
class Dx9TextureLoader
{
@ -16,19 +13,19 @@ public:
Dx9TextureLoader& Format(oat::D3DFORMAT format);
Dx9TextureLoader& Type(TextureType textureType);
Dx9TextureLoader& HasMipMaps(bool hasMipMaps);
Dx9TextureLoader& Width(size_t width);
Dx9TextureLoader& Height(size_t height);
Dx9TextureLoader& Depth(size_t depth);
Dx9TextureLoader& Width(unsigned width);
Dx9TextureLoader& Height(unsigned height);
Dx9TextureLoader& Depth(unsigned depth);
std::unique_ptr<Texture> LoadTexture(const void* data);
private:
_NODISCARD const ImageFormat* GetFormatForDx9Format() const;
[[nodiscard]] const ImageFormat* GetFormatForDx9Format() const;
oat::D3DFORMAT m_format;
TextureType m_type;
bool m_has_mip_maps;
size_t m_width;
size_t m_height;
size_t m_depth;
unsigned m_width;
unsigned m_height;
unsigned m_depth;
};

View File

@ -48,13 +48,13 @@ protected:
public:
virtual ~ImageFormat() = default;
ImageFormatId GetId() const;
oat::D3DFORMAT GetD3DFormat() const;
oat::DXGI_FORMAT GetDxgiFormat() const;
[[nodiscard]] ImageFormatId GetId() const;
[[nodiscard]] oat::D3DFORMAT GetD3DFormat() const;
[[nodiscard]] oat::DXGI_FORMAT GetDxgiFormat() const;
virtual ImageFormatType GetType() const = 0;
virtual size_t GetPitch(unsigned mipLevel, unsigned width) const = 0;
virtual size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const = 0;
[[nodiscard]] virtual ImageFormatType GetType() const = 0;
[[nodiscard]] virtual size_t GetPitch(unsigned mipLevel, unsigned width) const = 0;
[[nodiscard]] virtual size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const = 0;
static const ImageFormatUnsigned FORMAT_R8_G8_B8;
static const ImageFormatUnsigned FORMAT_B8_G8_R8_X8;
@ -98,14 +98,14 @@ public:
unsigned aOffset,
unsigned aSize);
ImageFormatType GetType() const override;
size_t GetPitch(unsigned mipLevel, unsigned width) const override;
size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
[[nodiscard]] ImageFormatType GetType() const override;
[[nodiscard]] size_t GetPitch(unsigned mipLevel, unsigned width) const override;
[[nodiscard]] size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
bool HasR() const;
bool HasG() const;
bool HasB() const;
bool HasA() const;
[[nodiscard]] bool HasR() const;
[[nodiscard]] bool HasG() const;
[[nodiscard]] bool HasB() const;
[[nodiscard]] bool HasA() const;
};
class ImageFormatBlockCompressed final : public ImageFormat
@ -116,7 +116,7 @@ public:
ImageFormatBlockCompressed(ImageFormatId id, oat::D3DFORMAT d3dFormat, oat::DXGI_FORMAT dxgiFormat, unsigned blockSize, unsigned bitsPerBlock);
ImageFormatType GetType() const override;
size_t GetPitch(unsigned mipLevel, unsigned width) const override;
size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
[[nodiscard]] ImageFormatType GetType() const override;
[[nodiscard]] size_t GetPitch(unsigned mipLevel, unsigned width) const override;
[[nodiscard]] size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
};

View File

@ -110,20 +110,20 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
currentFileSize += mipLevelSize;
if (currentMipLevel < static_cast<int>(std::extent_v<decltype(IwiHeader::fileSizeForPicmip)>))
header.fileSizeForPicmip[currentMipLevel] = currentFileSize;
header.fileSizeForPicmip[currentMipLevel] = static_cast<uint32_t>(currentFileSize);
}
if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
{
FillHeader2D(header, *texture2D);
FillHeader3D(header, *texture3D);
}
else if (const auto* textureCube = dynamic_cast<const TextureCube*>(texture))
{
FillHeaderCube(header, *textureCube);
}
else if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
else if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
{
FillHeader3D(header, *texture3D);
FillHeader2D(header, *texture2D);
}
else
{

View File

@ -113,20 +113,20 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
currentFileSize += mipLevelSize;
if (currentMipLevel < static_cast<int>(std::extent_v<decltype(iwi27::IwiHeader::fileSizeForPicmip)>))
header.fileSizeForPicmip[currentMipLevel] = currentFileSize;
header.fileSizeForPicmip[currentMipLevel] = static_cast<uint32_t>(currentFileSize);
}
if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
{
FillHeader2D(header, *texture2D);
FillHeader3D(header, *texture3D);
}
else if (const auto* textureCube = dynamic_cast<const TextureCube*>(texture))
{
FillHeaderCube(header, *textureCube);
}
else if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
else if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
{
FillHeader3D(header, *texture3D);
FillHeader2D(header, *texture2D);
}
else
{

View File

@ -105,20 +105,20 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
currentFileSize += mipLevelSize;
if (currentMipLevel < static_cast<int>(std::extent_v<decltype(IwiHeader::fileSizeForPicmip)>))
header.fileSizeForPicmip[currentMipLevel] = currentFileSize;
header.fileSizeForPicmip[currentMipLevel] = static_cast<uint32_t>(currentFileSize);
}
if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
{
FillHeader2D(header, *texture2D);
FillHeader3D(header, *texture3D);
}
else if (const auto* textureCube = dynamic_cast<const TextureCube*>(texture))
{
FillHeaderCube(header, *textureCube);
}
else if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
else if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
{
FillHeader3D(header, *texture3D);
FillHeader2D(header, *texture2D);
}
else
{

View File

@ -105,20 +105,20 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
currentFileSize += mipLevelSize;
if (currentMipLevel < static_cast<int>(std::extent_v<decltype(IwiHeader::fileSizeForPicmip)>))
header.fileSizeForPicmip[currentMipLevel] = currentFileSize;
header.fileSizeForPicmip[currentMipLevel] = static_cast<uint32_t>(currentFileSize);
}
if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
{
FillHeader2D(header, *texture2D);
FillHeader3D(header, *texture3D);
}
else if (const auto* textureCube = dynamic_cast<const TextureCube*>(texture))
{
FillHeaderCube(header, *textureCube);
}
else if (const auto* texture3D = dynamic_cast<const Texture3D*>(texture))
else if (const auto* texture2D = dynamic_cast<const Texture2D*>(texture))
{
FillHeader3D(header, *texture3D);
FillHeader2D(header, *texture2D);
}
else
{

View File

@ -55,7 +55,7 @@ function ObjLoading:project()
useSourceTemplating("ObjLoading")
self:include(includes)
Crypto:include(includes)
Cryptography:include(includes)
Utils:include(includes)
minilzo:include(includes)
minizip:include(includes)

View File

@ -65,8 +65,10 @@ std::unique_ptr<XAssetInfoGeneric> GenericAssetRegistration::CreateXAssetInfo()
AssetCreationContext::AssetCreationContext(Zone& zone, const AssetCreatorCollection* creators, const IgnoredAssetLookup* ignoredAssetLookup)
: ZoneAssetCreationStateContainer(zone),
m_zone(zone),
m_forced_asset_pools(ZoneAssetPools::CreateForGame(zone.m_game->GetId(), &zone, zone.m_priority)),
m_creators(creators),
m_ignored_asset_lookup(ignoredAssetLookup)
m_ignored_asset_lookup(ignoredAssetLookup),
m_forced_load_depth(0u)
{
}
@ -78,10 +80,14 @@ XAssetInfoGeneric* AssetCreationContext::AddAssetGeneric(GenericAssetRegistratio
const auto assetType = xAssetInfo->m_type;
const auto* pAssetName = xAssetInfo->m_name.c_str();
auto* addedAsset = m_zone.m_pools->AddAsset(std::move(xAssetInfo));
XAssetInfoGeneric* addedAsset;
if (m_forced_load_depth > 0)
addedAsset = m_forced_asset_pools->AddAsset(std::move(xAssetInfo));
else
addedAsset = m_zone.m_pools->AddAsset(std::move(xAssetInfo));
if (addedAsset == nullptr)
std::cerr << std::format("Failed to add asset of type \"{}\" to pool: \"{}\"\n", *m_zone.m_pools->GetAssetTypeName(assetType), pAssetName);
return addedAsset;
}
@ -102,6 +108,16 @@ XAssetInfoGeneric* AssetCreationContext::LoadDependencyGeneric(const asset_type_
if (alreadyLoadedAsset)
return alreadyLoadedAsset;
if (m_forced_load_depth > 0)
{
alreadyLoadedAsset = m_forced_asset_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset)
return alreadyLoadedAsset;
// If we are already force loading an asset we should not load its dependencies
return LoadDefaultAssetDependency(assetType, std::format(",{}", assetName));
}
if (m_ignored_asset_lookup->IsAssetIgnored(assetType, assetName))
return LoadDefaultAssetDependency(assetType, std::format(",{}", assetName));
@ -121,9 +137,9 @@ XAssetInfoGeneric* AssetCreationContext::LoadDependencyGeneric(const asset_type_
return nullptr;
}
IndirectAssetReference AssetCreationContext::LoadIndirectAssetReferenceGeneric(asset_type_t assetType, const std::string& assetName)
IndirectAssetReference AssetCreationContext::LoadIndirectAssetReferenceGeneric(const asset_type_t assetType, const std::string& assetName)
{
auto* alreadyLoadedAsset = m_zone.m_pools->GetAssetOrAssetReference(assetType, assetName);
const auto* alreadyLoadedAsset = m_zone.m_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset)
return IndirectAssetReference(assetType, assetName);
@ -137,3 +153,44 @@ IndirectAssetReference AssetCreationContext::LoadIndirectAssetReferenceGeneric(a
}
return IndirectAssetReference(assetType, assetName);
}
XAssetInfoGeneric* AssetCreationContext::ForceLoadDependencyGeneric(const asset_type_t assetType, const std::string& assetName)
{
auto* alreadyLoadedAsset = m_zone.m_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset && !alreadyLoadedAsset->IsReference())
return alreadyLoadedAsset;
alreadyLoadedAsset = m_forced_asset_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset && !alreadyLoadedAsset->IsReference())
return alreadyLoadedAsset;
auto result = AssetCreationResult::NoAction();
if (m_ignored_asset_lookup->IsAssetIgnored(assetType, assetName))
{
// Load default asset to zone
if (!LoadDefaultAssetDependency(assetType, std::format(",{}", assetName)))
return nullptr;
++m_forced_load_depth;
result = m_creators->CreateAsset(assetType, assetName, *this);
assert(m_forced_load_depth > 0);
m_forced_load_depth = std::min(m_forced_load_depth - 1u, 0u);
}
else
result = m_creators->CreateAsset(assetType, assetName, *this);
if (result.HasTakenAction())
{
if (!result.HasFailed())
return result.GetAssetInfo();
std::cerr << std::format("Could not load asset \"{}\" of type \"{}\"\n", assetName, *m_zone.m_pools->GetAssetTypeName(assetType));
}
else
{
std::cerr << std::format("Missing asset \"{}\" of type \"{}\"\n", assetName, *m_zone.m_pools->GetAssetTypeName(assetType));
}
return nullptr;
}

View File

@ -65,12 +65,31 @@ public:
IndirectAssetReference LoadIndirectAssetReferenceGeneric(asset_type_t assetType, const std::string& assetName);
/**
* \brief Loads an asset dependency like \c LoadDependency but guarantees that the returned asset is not a reference.
* If normally a reference would be created, the actual asset is loaded but a reference is added to the zone.
* \tparam AssetType The type of the asset
* \param assetName The name of the asset
* \return XAssetInfo of the asset that is guaranteed to not be a reference or \c nullptr
*/
template<typename AssetType> XAssetInfo<typename AssetType::Type>* ForceLoadDependency(const std::string& assetName)
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
return static_cast<XAssetInfo<typename AssetType::Type>*>(ForceLoadDependencyGeneric(AssetType::EnumEntry, assetName));
}
XAssetInfoGeneric* ForceLoadDependencyGeneric(asset_type_t assetType, const std::string& assetName);
private:
[[nodiscard]] XAssetInfoGeneric* LoadDefaultAssetDependency(asset_type_t assetType, const std::string& assetName);
Zone& m_zone;
std::unique_ptr<ZoneAssetPools> m_forced_asset_pools;
const AssetCreatorCollection* m_creators;
const IgnoredAssetLookup* m_ignored_asset_lookup;
unsigned m_forced_load_depth;
};
#include "AssetCreatorCollection.h"

View File

@ -81,7 +81,7 @@ namespace
const auto mipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
const auto faceCount = texture->GetFaceCount();
size_t dataSize = 0;
auto dataSize = 0uz;
for (auto mipLevel = 0; mipLevel < mipCount; mipLevel++)
dataSize += texture->GetSizeOfMipLevel(mipLevel) * faceCount;
@ -99,7 +99,7 @@ namespace
loadDef->dimensions[1] = image->height;
loadDef->dimensions[2] = image->depth;
loadDef->format = static_cast<int>(texture->GetFormat()->GetD3DFormat());
loadDef->resourceSize = dataSize;
loadDef->resourceSize = static_cast<unsigned>(dataSize);
char* currentDataBuffer = loadDef->data;
for (auto mipLevel = 0; mipLevel < mipCount; mipLevel++)

View File

@ -21,7 +21,7 @@ namespace
{
void ConfigureDefaultCreators(AssetCreatorCollection& collection, Zone& zone)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetPhysPreset>>(memory));
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetXAnim>>(memory));
@ -85,7 +85,7 @@ namespace
void ConfigureLoaders(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// collection.AddAssetCreator(std::make_unique<AssetLoaderPhysPreset>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderXAnim>(memory));
@ -96,7 +96,6 @@ namespace
// collection.AddAssetCreator(std::make_unique<AssetLoaderSound>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderSoundCurve>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderLoadedSound>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderClipMap>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderClipMapPvs>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderComWorld>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderGameWorldSp>(memory));

View File

@ -83,7 +83,7 @@ namespace
menu::MenuAssetZoneState& zoneState,
MenuConversionZoneState& conversionState,
std::vector<menuDef_t*>& menus,
AssetRegistration<AssetMenuList>& registration)
AssetRegistration<AssetMenuList>& registration) const
{
const auto alreadyLoadedMenuFile = conversionState.m_menus_by_filename.find(menuFilePath);
if (alreadyLoadedMenuFile != conversionState.m_menus_by_filename.end())
@ -125,12 +125,12 @@ namespace
menu::MenuAssetZoneState& zoneState,
MenuConversionZoneState& conversionState,
std::vector<menuDef_t*>& menus,
AssetRegistration<AssetMenuList>& registration)
AssetRegistration<AssetMenuList>& registration) const
{
const auto menuCount = parsingResult.m_menus.size();
const auto functionCount = parsingResult.m_functions.size();
const auto menuLoadCount = parsingResult.m_menus_to_load.size();
auto totalItemCount = 0u;
auto totalItemCount = 0uz;
for (const auto& menu : parsingResult.m_menus)
totalItemCount += menu->m_items.size();
@ -182,7 +182,7 @@ namespace
return true;
}
void CreateMenuListAsset(MenuList& menuList, const std::vector<menuDef_t*>& menus)
void CreateMenuListAsset(MenuList& menuList, const std::vector<menuDef_t*>& menus) const
{
menuList.menuCount = static_cast<int>(menus.size());
@ -196,7 +196,8 @@ namespace
menuList.menus = nullptr;
}
std::unique_ptr<menu::ParsingResult> ParseMenuFile(std::istream& stream, const std::string& menuFileName, const menu::MenuAssetZoneState& zoneState)
std::unique_ptr<menu::ParsingResult>
ParseMenuFile(std::istream& stream, const std::string& menuFileName, const menu::MenuAssetZoneState& zoneState) const
{
menu::MenuFileReader reader(stream, menuFileName, menu::FeatureLevel::IW4, m_search_path);

View File

@ -12,10 +12,10 @@ MenuConversionZoneState::MenuConversionZoneState()
void MenuConversionZoneState::Inject(ZoneAssetCreationInjection& inject)
{
auto* memory = inject.m_zone.GetMemory();
auto& memory = inject.m_zone.Memory();
m_zone = &inject.m_zone;
m_supporting_data = memory->Alloc<ExpressionSupportingData>();
m_supporting_data = memory.Alloc<ExpressionSupportingData>();
}
Statement_s* MenuConversionZoneState::FindFunction(const std::string& functionName)
@ -43,10 +43,10 @@ size_t MenuConversionZoneState::AddStaticDvar(const std::string& dvarName)
if (foundDvar != m_dvars_by_name.end())
return foundDvar->second;
auto* memory = m_zone->GetMemory();
auto* staticDvar = memory->Alloc<StaticDvar>();
auto& memory = m_zone->Memory();
auto* staticDvar = memory.Alloc<StaticDvar>();
staticDvar->dvarName = memory->Dup(dvarName.c_str());
staticDvar->dvarName = memory.Dup(dvarName.c_str());
staticDvar->dvar = nullptr;
const auto staticDvarIndex = m_static_dvars.size();
@ -63,8 +63,8 @@ const char* MenuConversionZoneState::AddString(const std::string& str)
if (foundString != m_strings_by_value.end())
return foundString->second;
auto* memory = m_zone->GetMemory();
const auto* strDuped = memory->Dup(str.c_str());
auto& memory = m_zone->Memory();
const auto* strDuped = memory.Dup(str.c_str());
m_strings.push_back(strDuped);
m_strings_by_value.emplace(std::make_pair(str, strDuped));
@ -79,24 +79,24 @@ void MenuConversionZoneState::AddLoadedFile(std::string loadedFileName, std::vec
void MenuConversionZoneState::FinalizeSupportingData() const
{
auto* memory = m_zone->GetMemory();
auto& memory = m_zone->Memory();
m_supporting_data->uifunctions.totalFunctions = static_cast<int>(m_functions.size());
m_supporting_data->staticDvarList.numStaticDvars = static_cast<int>(m_static_dvars.size());
m_supporting_data->uiStrings.totalStrings = static_cast<int>(m_strings.size());
if (m_supporting_data->uifunctions.functions)
memory->Free(m_supporting_data->uifunctions.functions);
memory.Free(m_supporting_data->uifunctions.functions);
if (m_supporting_data->staticDvarList.staticDvars)
memory->Free(m_supporting_data->staticDvarList.staticDvars);
memory.Free(m_supporting_data->staticDvarList.staticDvars);
if (m_supporting_data->uiStrings.strings)
memory->Free(m_supporting_data->uiStrings.strings);
memory.Free(m_supporting_data->uiStrings.strings);
if (!m_functions.empty())
{
m_supporting_data->uifunctions.functions = memory->Alloc<Statement_s*>(m_functions.size());
m_supporting_data->uifunctions.functions = memory.Alloc<Statement_s*>(m_functions.size());
memcpy(m_supporting_data->uifunctions.functions, m_functions.data(), sizeof(void*) * m_functions.size());
}
else
@ -104,7 +104,7 @@ void MenuConversionZoneState::FinalizeSupportingData() const
if (!m_static_dvars.empty())
{
m_supporting_data->staticDvarList.staticDvars = memory->Alloc<StaticDvar*>(m_static_dvars.size());
m_supporting_data->staticDvarList.staticDvars = memory.Alloc<StaticDvar*>(m_static_dvars.size());
memcpy(m_supporting_data->staticDvarList.staticDvars, m_static_dvars.data(), sizeof(void*) * m_static_dvars.size());
}
else
@ -112,7 +112,7 @@ void MenuConversionZoneState::FinalizeSupportingData() const
if (!m_strings.empty())
{
m_supporting_data->uiStrings.strings = memory->Alloc<const char*>(m_strings.size());
m_supporting_data->uiStrings.strings = memory.Alloc<const char*>(m_strings.size());
memcpy(m_supporting_data->uiStrings.strings, m_strings.data(), sizeof(void*) * m_strings.size());
}
else

View File

@ -34,7 +34,7 @@ namespace
{
void ConfigureDefaultCreators(AssetCreatorCollection& collection, Zone& zone)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetPhysPreset>>(memory));
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetPhysCollMap>>(memory));
@ -118,7 +118,7 @@ namespace
void ConfigureLoaders(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath, IGdtQueryable& gdt)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
collection.AddAssetCreator(std::make_unique<RawLoaderPhysPreset>(memory, searchPath, zone));
collection.AddAssetCreator(std::make_unique<GdtLoaderPhysPreset>(memory, gdt, zone));
@ -135,8 +135,7 @@ namespace
// collection.AddAssetCreator(std::make_unique<AssetLoaderSound>(memory));
collection.AddAssetCreator(CreateSoundCurveLoader(memory, searchPath));
// collection.AddAssetCreator(std::make_unique<AssetLoaderLoadedSound>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderClipMapSp>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderClipMapMp>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderClipMap>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderComWorld>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderGameWorldSp>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderGameWorldMp>(memory));

View File

@ -43,7 +43,7 @@ namespace
zs.zfree = Z_NULL;
zs.opaque = Z_NULL;
zs.avail_in = static_cast<uInt>(file.m_length);
zs.avail_out = compressionBufferSize;
zs.avail_out = static_cast<unsigned>(compressionBufferSize);
zs.next_in = reinterpret_cast<const Bytef*>(uncompressedBuffer.get());
zs.next_out = reinterpret_cast<Bytef*>(compressedBuffer);

View File

@ -38,38 +38,38 @@ namespace
}
private:
StructuredDataType ConvertType(CommonStructuredDataType inputType)
static StructuredDataType ConvertType(const CommonStructuredDataType inputType)
{
switch (inputType.m_category)
{
case CommonStructuredDataTypeCategory::INT:
return {DATA_INT, {0}};
return {.type = DATA_INT, .u = {}};
case CommonStructuredDataTypeCategory::BYTE:
return {DATA_BYTE, {0}};
return {.type = DATA_BYTE, .u = {}};
case CommonStructuredDataTypeCategory::BOOL:
return {DATA_BOOL, {0}};
return {.type = DATA_BOOL, .u = {}};
case CommonStructuredDataTypeCategory::FLOAT:
return {DATA_FLOAT, {0}};
return {.type = DATA_FLOAT, .u = {}};
case CommonStructuredDataTypeCategory::SHORT:
return {DATA_SHORT, {0}};
return {.type = DATA_SHORT, .u = {}};
case CommonStructuredDataTypeCategory::STRING:
return {DATA_STRING, {inputType.m_info.string_length}};
return {.type = DATA_STRING, .u = {static_cast<unsigned>(inputType.m_info.string_length)}};
case CommonStructuredDataTypeCategory::ENUM:
return {DATA_ENUM, {inputType.m_info.type_index}};
return {.type = DATA_ENUM, .u = {static_cast<unsigned>(inputType.m_info.type_index)}};
case CommonStructuredDataTypeCategory::STRUCT:
return {DATA_STRUCT, {inputType.m_info.type_index}};
return {.type = DATA_STRUCT, .u = {static_cast<unsigned>(inputType.m_info.type_index)}};
case CommonStructuredDataTypeCategory::INDEXED_ARRAY:
return {DATA_INDEXED_ARRAY, {inputType.m_info.type_index}};
return {.type = DATA_INDEXED_ARRAY, .u = {static_cast<unsigned>(inputType.m_info.type_index)}};
case CommonStructuredDataTypeCategory::ENUM_ARRAY:
return {DATA_ENUM_ARRAY, {inputType.m_info.type_index}};
return {.type = DATA_ENUM_ARRAY, .u = {static_cast<unsigned>(inputType.m_info.type_index)}};
case CommonStructuredDataTypeCategory::UNKNOWN:
default:
assert(false);
return {DATA_INT, {0}};
return {.type = DATA_INT, .u = {0}};
}
}
void ConvertEnum(CommonStructuredDataEnum& inputEnum, StructuredDataEnum& outputEnum)
void ConvertEnum(CommonStructuredDataEnum& inputEnum, StructuredDataEnum& outputEnum) const
{
outputEnum.entryCount = static_cast<int>(inputEnum.m_entries.size());
if (inputEnum.m_reserved_entry_count <= 0)
@ -94,10 +94,10 @@ namespace
outputEnum.entries = nullptr;
}
void ConvertStruct(CommonStructuredDataStruct& inputStruct, StructuredDataStruct& outputStruct)
void ConvertStruct(CommonStructuredDataStruct& inputStruct, StructuredDataStruct& outputStruct) const
{
outputStruct.size = static_cast<int>(inputStruct.m_size_in_byte);
outputStruct.bitOffset = inputStruct.m_bit_offset;
outputStruct.bitOffset = static_cast<unsigned>(inputStruct.m_bit_offset);
outputStruct.propertyCount = static_cast<int>(inputStruct.m_properties.size());
inputStruct.SortPropertiesByName();
@ -115,34 +115,34 @@ namespace
if (outputProperty.type.type != DATA_BOOL)
{
assert(inputProperty.m_offset_in_bits % 8 == 0);
outputProperty.offset = inputProperty.m_offset_in_bits / 8;
outputProperty.offset = static_cast<unsigned>(inputProperty.m_offset_in_bits / 8uz);
}
else
outputProperty.offset = inputProperty.m_offset_in_bits;
outputProperty.offset = static_cast<unsigned>(inputProperty.m_offset_in_bits);
}
}
else
outputStruct.properties = nullptr;
}
void ConvertIndexedArray(const CommonStructuredDataIndexedArray& inputIndexedArray, StructuredDataIndexedArray& outputIndexedArray)
static void ConvertIndexedArray(const CommonStructuredDataIndexedArray& inputIndexedArray, StructuredDataIndexedArray& outputIndexedArray)
{
outputIndexedArray.arraySize = static_cast<int>(inputIndexedArray.m_element_count);
outputIndexedArray.elementType = ConvertType(inputIndexedArray.m_array_type);
outputIndexedArray.elementSize = utils::Align(inputIndexedArray.m_element_size_in_bits, 8u) / 8u;
outputIndexedArray.elementSize = static_cast<unsigned>(utils::Align(inputIndexedArray.m_element_size_in_bits, 8uz) / 8uz);
}
void ConvertEnumedArray(const CommonStructuredDataEnumedArray& inputEnumedArray, StructuredDataEnumedArray& outputEnumedArray)
{
outputEnumedArray.enumIndex = static_cast<int>(inputEnumedArray.m_enum_index);
outputEnumedArray.elementType = ConvertType(inputEnumedArray.m_array_type);
outputEnumedArray.elementSize = utils::Align(inputEnumedArray.m_element_size_in_bits, 8u) / 8u;
outputEnumedArray.elementSize = static_cast<unsigned>(utils::Align(inputEnumedArray.m_element_size_in_bits, 8uz) / 8uz);
}
void ConvertDef(const CommonStructuredDataDef& inputDef, StructuredDataDef& outputDef)
{
outputDef.version = inputDef.m_version;
outputDef.formatChecksum = inputDef.m_checksum;
outputDef.formatChecksum = static_cast<unsigned>(inputDef.m_checksum);
outputDef.enumCount = static_cast<int>(inputDef.m_enums.size());
if (!inputDef.m_enums.empty())
@ -185,7 +185,7 @@ namespace
outputDef.enumedArrays = nullptr;
outputDef.rootType = ConvertType(inputDef.m_root_type);
outputDef.size = inputDef.m_size_in_byte;
outputDef.size = static_cast<unsigned>(inputDef.m_size_in_byte);
}
StructuredDataDefSet* ConvertSet(const std::string& assetName, const std::vector<std::unique_ptr<CommonStructuredDataDef>>& commonDefs)
@ -193,7 +193,7 @@ namespace
auto* set = m_memory.Alloc<StructuredDataDefSet>();
set->name = m_memory.Dup(assetName.c_str());
set->defCount = commonDefs.size();
set->defCount = static_cast<unsigned>(commonDefs.size());
set->defs = m_memory.Alloc<StructuredDataDef>(commonDefs.size());
for (auto defIndex = 0u; defIndex < commonDefs.size(); defIndex++)

View File

@ -31,14 +31,14 @@ namespace
class LoadedTechnique
{
public:
MaterialTechnique* m_technique;
std::vector<XAssetInfoGeneric*> m_dependencies;
LoadedTechnique(MaterialTechnique* technique, std::vector<XAssetInfoGeneric*> dependencies)
: m_technique(technique),
m_dependencies(std::move(dependencies))
{
}
MaterialTechnique* m_technique;
std::vector<XAssetInfoGeneric*> m_dependencies;
};
class TechniqueZoneLoadingState final : public IZoneAssetCreationState
@ -46,8 +46,7 @@ namespace
public:
typedef const float (*literal_t)[4];
public:
_NODISCARD const LoadedTechnique* FindLoadedTechnique(const std::string& techniqueName) const
[[nodiscard]] const LoadedTechnique* FindLoadedTechnique(const std::string& techniqueName) const
{
const auto loadedTechnique = m_loaded_techniques.find(techniqueName);
if (loadedTechnique != m_loaded_techniques.end())
@ -86,8 +85,6 @@ namespace
class ShaderInfoFromFileSystemCacheState final : public IZoneAssetCreationState
{
std::unordered_map<std::string, std::unique_ptr<d3d9::ShaderInfo>> m_cached_shader_info;
public:
[[nodiscard]] const d3d9::ShaderInfo* LoadShaderInfoFromDisk(ISearchPath& searchPath, const std::string& fileName)
{
@ -108,9 +105,9 @@ namespace
}
const auto shaderData = std::make_unique<char[]>(shaderSize);
file.m_stream->read(shaderData.get(), shaderSize);
file.m_stream->read(shaderData.get(), static_cast<std::streamsize>(shaderSize));
auto shaderInfo = d3d9::ShaderAnalyser::GetShaderInfo(reinterpret_cast<const uint32_t*>(shaderData.get()), shaderSize);
auto shaderInfo = d3d9::ShaderAnalyser::GetShaderInfo(shaderData.get(), shaderSize);
if (!shaderInfo)
return nullptr;
@ -118,6 +115,9 @@ namespace
m_cached_shader_info.emplace(std::make_pair(fileName, std::move(shaderInfo)));
return result;
}
private:
std::unordered_map<std::string, std::unique_ptr<d3d9::ShaderInfo>> m_cached_shader_info;
};
class TechniqueCreator final : public techset::ITechniqueDefinitionAcceptor
@ -126,10 +126,13 @@ namespace
class PassShaderArgument
{
public:
MaterialShaderArgument m_arg;
MaterialUpdateFrequency m_update_frequency;
explicit PassShaderArgument(const MaterialShaderArgument arg)
: m_arg(arg),
m_update_frequency(GetUpdateFrequencyForArg(arg))
{
}
static MaterialUpdateFrequency GetUpdateFrequencyForArg(MaterialShaderArgument arg)
static MaterialUpdateFrequency GetUpdateFrequencyForArg(const MaterialShaderArgument arg)
{
switch (arg.type)
{
@ -160,15 +163,22 @@ namespace
}
}
explicit PassShaderArgument(const MaterialShaderArgument arg)
: m_arg(arg),
m_update_frequency(GetUpdateFrequencyForArg(arg))
{
}
MaterialShaderArgument m_arg;
MaterialUpdateFrequency m_update_frequency;
};
struct Pass
{
Pass()
: m_vertex_shader(nullptr),
m_vertex_shader_info(nullptr),
m_pixel_shader(nullptr),
m_pixel_shader_info(nullptr),
m_vertex_decl{},
m_vertex_decl_asset(nullptr)
{
}
XAssetInfo<MaterialVertexShader>* m_vertex_shader;
const d3d9::ShaderInfo* m_vertex_shader_info;
std::unique_ptr<d3d9::ShaderInfo> m_vertex_shader_info_unq;
@ -184,21 +194,8 @@ namespace
MaterialVertexDeclaration m_vertex_decl;
XAssetInfo<MaterialVertexDeclaration>* m_vertex_decl_asset;
std::vector<PassShaderArgument> m_arguments;
Pass()
: m_vertex_shader(nullptr),
m_vertex_shader_info(nullptr),
m_pixel_shader(nullptr),
m_pixel_shader_info(nullptr),
m_vertex_decl{},
m_vertex_decl_asset(nullptr)
{
}
};
std::vector<Pass> m_passes;
std::vector<XAssetInfoGeneric*> m_dependencies;
TechniqueCreator(
const std::string& techniqueName, ISearchPath& searchPath, MemoryManager& memory, AssetCreationContext& context, ITechsetCreator* techsetCreator)
: m_technique_name(techniqueName),
@ -217,10 +214,11 @@ namespace
m_passes.emplace_back();
}
static size_t RegisterCountPerElement(const d3d9::ShaderConstant& constant)
static unsigned RegisterCountPerElement(const d3d9::ShaderConstant& constant)
{
const auto valuesPerRegister =
constant.m_register_set == d3d9::RegisterSet::BOOL || constant.m_register_set == d3d9::RegisterSet::SAMPLER ? 1u : 4u;
return utils::Align(constant.m_type_columns * constant.m_type_rows, valuesPerRegister) / valuesPerRegister;
}
@ -243,7 +241,7 @@ namespace
if (shaderType == techset::ShaderSelector::VERTEX_SHADER && isSamplerArgument)
return false;
MaterialShaderArgument argument{};
MaterialShaderArgument argument;
argument.dest = static_cast<uint16_t>(shaderArgument.m_register_index + registerOffset);
unsigned arrayCount;
@ -258,7 +256,7 @@ namespace
return false;
argument.type = MTL_ARG_CODE_PIXEL_SAMPLER;
argument.u.codeSampler = samplerSource->source + elementOffset;
argument.u.codeSampler = samplerSource->source + static_cast<unsigned>(elementOffset);
arrayCount = static_cast<unsigned>(samplerSource->arrayCount);
}
@ -304,13 +302,12 @@ namespace
{
if (!AutoCreateShaderArgument(techset::ShaderSelector::VERTEX_SHADER, argument, elementIndex, registerIndex))
{
std::ostringstream ss;
ss << "Unassigned vertex shader \"" << pass.m_vertex_shader->m_name << "\" arg: " << argument.m_name;
std::string elementIndexStr;
if (argument.m_type_elements > 1)
ss << '[' << elementIndex << ']';
elementIndexStr = std::format("[{}]", elementIndex);
errorMessage = ss.str();
errorMessage =
std::format("Unassigned vertex shader \"{}\" arg: {}{}", pass.m_vertex_shader->m_name, argument.m_name, elementIndexStr);
return false;
}
}
@ -572,11 +569,11 @@ namespace
return foundSource;
}
bool FindShaderArgument(const d3d9::ShaderInfo& shaderInfo,
static bool FindShaderArgument(const d3d9::ShaderInfo& shaderInfo,
const techset::ShaderArgument& argument,
size_t& constantIndex,
size_t& registerOffset,
std::string& errorMessage) const
std::string& errorMessage)
{
const auto matchingShaderConstant = std::ranges::find_if(shaderInfo.m_constants,
[argument](const d3d9::ShaderConstant& constant)
@ -854,14 +851,14 @@ namespace
}
bool AcceptShaderLiteralArgument(const techset::ShaderSelector shader,
techset::ShaderArgument shaderArgument,
techset::ShaderArgumentLiteralSource source,
const techset::ShaderArgument shaderArgument,
const techset::ShaderArgumentLiteralSource source,
std::string& errorMessage) override
{
assert(!m_passes.empty());
auto& pass = m_passes.at(m_passes.size() - 1);
MaterialShaderArgument argument{};
MaterialShaderArgument argument;
const d3d9::ShaderInfo* shaderInfo;
if (shader == techset::ShaderSelector::VERTEX_SHADER)
@ -913,14 +910,14 @@ namespace
}
bool AcceptShaderMaterialArgument(const techset::ShaderSelector shader,
techset::ShaderArgument shaderArgument,
const techset::ShaderArgument shaderArgument,
const techset::ShaderArgumentMaterialSource source,
std::string& errorMessage) override
{
assert(!m_passes.empty());
auto& pass = m_passes.at(m_passes.size() - 1);
MaterialShaderArgument argument{};
MaterialShaderArgument argument;
const d3d9::ShaderInfo* shaderInfo;
if (shader == techset::ShaderSelector::VERTEX_SHADER)
@ -1016,6 +1013,8 @@ namespace
return true;
}
std::vector<Pass> m_passes;
private:
const std::string& m_technique_name;
ISearchPath& m_search_path;

View File

@ -1,8 +1,8 @@
#include "JsonMaterialLoader.h"
#include "Base64.h"
#include "Game/IW5/CommonIW5.h"
#include "Game/IW5/Material/JsonMaterial.h"
#include "Impl/Base64.h"
#include <format>
#include <iostream>

View File

@ -83,7 +83,7 @@ namespace
menu::MenuAssetZoneState& zoneState,
MenuConversionZoneState& conversionState,
std::vector<menuDef_t*>& menus,
AssetRegistration<AssetMenuList>& registration)
AssetRegistration<AssetMenuList>& registration) const
{
const auto alreadyLoadedMenuFile = conversionState.m_menus_by_filename.find(menuFilePath);
if (alreadyLoadedMenuFile != conversionState.m_menus_by_filename.end())
@ -125,14 +125,14 @@ namespace
menu::MenuAssetZoneState& zoneState,
MenuConversionZoneState& conversionState,
std::vector<menuDef_t*>& menus,
AssetRegistration<AssetMenuList>& registration)
AssetRegistration<AssetMenuList>& registration) const
{
const auto menuCount = parsingResult.m_menus.size();
const auto functionCount = parsingResult.m_functions.size();
const auto menuLoadCount = parsingResult.m_menus_to_load.size();
auto totalItemCount = 0u;
for (const auto& menu : parsingResult.m_menus)
totalItemCount += menu->m_items.size();
totalItemCount += static_cast<unsigned>(menu->m_items.size());
std::cout << std::format("Successfully read menu file \"{}\" ({} loads, {} menus, {} functions, {} items)\n",
fileName,
@ -152,7 +152,7 @@ namespace
// Convert all menus and add them as assets
for (auto& commonMenu : parsingResult.m_menus)
{
auto converter = IMenuConverter::Create(ObjLoading::Configuration.MenuNoOptimization, m_search_path, m_memory, context);
const auto converter = IMenuConverter::Create(ObjLoading::Configuration.MenuNoOptimization, m_search_path, m_memory, context);
auto* menuAsset = m_memory.Alloc<menuDef_t>();
AssetRegistration<AssetMenu> menuRegistration(commonMenu->m_name, menuAsset);
@ -182,7 +182,7 @@ namespace
return true;
}
void CreateMenuListAsset(MenuList& menuList, const std::vector<menuDef_t*>& menus)
void CreateMenuListAsset(MenuList& menuList, const std::vector<menuDef_t*>& menus) const
{
menuList.menuCount = static_cast<int>(menus.size());
@ -196,7 +196,8 @@ namespace
menuList.menus = nullptr;
}
std::unique_ptr<menu::ParsingResult> ParseMenuFile(std::istream& stream, const std::string& menuFileName, const menu::MenuAssetZoneState& zoneState)
std::unique_ptr<menu::ParsingResult>
ParseMenuFile(std::istream& stream, const std::string& menuFileName, const menu::MenuAssetZoneState& zoneState) const
{
menu::MenuFileReader reader(stream, menuFileName, menu::FeatureLevel::IW5, m_search_path);

View File

@ -12,10 +12,10 @@ MenuConversionZoneState::MenuConversionZoneState()
void MenuConversionZoneState::Inject(ZoneAssetCreationInjection& inject)
{
auto* memory = inject.m_zone.GetMemory();
auto& memory = inject.m_zone.Memory();
m_zone = &inject.m_zone;
m_supporting_data = memory->Alloc<ExpressionSupportingData>();
m_supporting_data = memory.Alloc<ExpressionSupportingData>();
}
Statement_s* MenuConversionZoneState::FindFunction(const std::string& functionName)
@ -43,10 +43,10 @@ size_t MenuConversionZoneState::AddStaticDvar(const std::string& dvarName)
if (foundDvar != m_dvars_by_name.end())
return foundDvar->second;
auto* memory = m_zone->GetMemory();
auto* staticDvar = memory->Alloc<StaticDvar>();
auto& memory = m_zone->Memory();
auto* staticDvar = memory.Alloc<StaticDvar>();
staticDvar->dvarName = memory->Dup(dvarName.c_str());
staticDvar->dvarName = memory.Dup(dvarName.c_str());
staticDvar->dvar = nullptr;
const auto staticDvarIndex = m_static_dvars.size();
@ -63,8 +63,8 @@ const char* MenuConversionZoneState::AddString(const std::string& str)
if (foundString != m_strings_by_value.end())
return foundString->second;
auto* memory = m_zone->GetMemory();
const auto* strDuped = memory->Dup(str.c_str());
auto& memory = m_zone->Memory();
const auto* strDuped = memory.Dup(str.c_str());
m_strings.push_back(strDuped);
m_strings_by_value.emplace(std::make_pair(str, strDuped));
@ -79,24 +79,24 @@ void MenuConversionZoneState::AddLoadedFile(std::string loadedFileName, std::vec
void MenuConversionZoneState::FinalizeSupportingData() const
{
auto* memory = m_zone->GetMemory();
auto& memory = m_zone->Memory();
m_supporting_data->uifunctions.totalFunctions = static_cast<int>(m_functions.size());
m_supporting_data->staticDvarList.numStaticDvars = static_cast<int>(m_static_dvars.size());
m_supporting_data->uiStrings.totalStrings = static_cast<int>(m_strings.size());
if (m_supporting_data->uifunctions.functions)
memory->Free(m_supporting_data->uifunctions.functions);
memory.Free(m_supporting_data->uifunctions.functions);
if (m_supporting_data->staticDvarList.staticDvars)
memory->Free(m_supporting_data->staticDvarList.staticDvars);
memory.Free(m_supporting_data->staticDvarList.staticDvars);
if (m_supporting_data->uiStrings.strings)
memory->Free(m_supporting_data->uiStrings.strings);
memory.Free(m_supporting_data->uiStrings.strings);
if (!m_functions.empty())
{
m_supporting_data->uifunctions.functions = memory->Alloc<Statement_s*>(m_functions.size());
m_supporting_data->uifunctions.functions = memory.Alloc<Statement_s*>(m_functions.size());
memcpy(m_supporting_data->uifunctions.functions, m_functions.data(), sizeof(void*) * m_functions.size());
}
else
@ -104,7 +104,7 @@ void MenuConversionZoneState::FinalizeSupportingData() const
if (!m_static_dvars.empty())
{
m_supporting_data->staticDvarList.staticDvars = memory->Alloc<StaticDvar*>(m_static_dvars.size());
m_supporting_data->staticDvarList.staticDvars = memory.Alloc<StaticDvar*>(m_static_dvars.size());
memcpy(m_supporting_data->staticDvarList.staticDvars, m_static_dvars.data(), sizeof(void*) * m_static_dvars.size());
}
else
@ -112,7 +112,7 @@ void MenuConversionZoneState::FinalizeSupportingData() const
if (!m_strings.empty())
{
m_supporting_data->uiStrings.strings = memory->Alloc<const char*>(m_strings.size());
m_supporting_data->uiStrings.strings = memory.Alloc<const char*>(m_strings.size());
memcpy(m_supporting_data->uiStrings.strings, m_strings.data(), sizeof(void*) * m_strings.size());
}
else

View File

@ -29,7 +29,7 @@ namespace
{
void ConfigureDefaultCreators(AssetCreatorCollection& collection, Zone& zone)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetPhysPreset>>(memory));
collection.AddDefaultAssetCreator(std::make_unique<DefaultAssetCreator<AssetPhysCollMap>>(memory));
@ -119,7 +119,7 @@ namespace
void ConfigureLoaders(AssetCreatorCollection& collection, Zone& zone, ISearchPath& searchPath, IGdtQueryable& gdt)
{
auto& memory = *zone.GetMemory();
auto& memory = zone.Memory();
// collection.AddAssetCreator(std::make_unique<AssetLoaderPhysPreset>(memory));
// collection.AddAssetCreator(std::make_unique<AssetLoaderPhysCollMap>(memory));

View File

@ -44,7 +44,7 @@ namespace
zs.zfree = Z_NULL;
zs.opaque = Z_NULL;
zs.avail_in = static_cast<uInt>(file.m_length);
zs.avail_out = compressionBufferSize;
zs.avail_out = static_cast<unsigned>(compressionBufferSize);
zs.next_in = reinterpret_cast<const Bytef*>(uncompressedBuffer.get());
zs.next_out = reinterpret_cast<Bytef*>(compressedBuffer);

View File

@ -57,7 +57,7 @@ namespace
return AssetCreationResult::Failure();
}
if (offset + (scriptFile->compressedLen + scriptFile->bytecodeLen) > file.m_length)
if (offset + static_cast<size_t>(scriptFile->compressedLen + scriptFile->bytecodeLen) > static_cast<size_t>(file.m_length))
{
std::cerr << std::format("Error: Specified length in {} GSC BIN structure exceeds the actual file size\n", assetName);
return AssetCreationResult::Failure();

View File

@ -232,7 +232,7 @@ namespace
}
m_weapon.weapCompleteDef.animOverrides = animOverrides;
m_weapon.weapCompleteDef.numAnimOverrides = valueArray.size();
m_weapon.weapCompleteDef.numAnimOverrides = static_cast<unsigned>(valueArray.size());
return true;
}
@ -267,7 +267,7 @@ namespace
}
m_weapon.weapCompleteDef.soundOverrides = soundOverrides;
m_weapon.weapCompleteDef.numSoundOverrides = valueArray.size();
m_weapon.weapCompleteDef.numSoundOverrides = static_cast<unsigned>(valueArray.size());
return true;
}
@ -305,7 +305,7 @@ namespace
}
m_weapon.weapCompleteDef.fxOverrides = fxOverrides;
m_weapon.weapCompleteDef.numFxOverrides = valueArray.size();
m_weapon.weapCompleteDef.numFxOverrides = static_cast<unsigned>(valueArray.size());
return true;
}
@ -339,7 +339,7 @@ namespace
}
m_weapon.weapCompleteDef.reloadOverrides = reloadOverrides;
m_weapon.weapCompleteDef.numReloadStateTimerOverrides = valueArray.size();
m_weapon.weapCompleteDef.numReloadStateTimerOverrides = static_cast<unsigned>(valueArray.size());
return true;
}
@ -392,7 +392,7 @@ namespace
m_weapon.weapCompleteDef.notetrackOverrides = m_memory.Alloc<NoteTrackToSoundEntry>(overrideVector.size());
memcpy(m_weapon.weapCompleteDef.notetrackOverrides, overrideVector.data(), sizeof(NoteTrackToSoundEntry) * overrideVector.size());
m_weapon.weapCompleteDef.numNotetrackOverrides = overrideVector.size();
m_weapon.weapCompleteDef.numNotetrackOverrides = static_cast<unsigned>(overrideVector.size());
return true;
}
@ -437,7 +437,7 @@ namespace
return false;
}
void ParseAnim(const std::string& value, const char*& animName)
void ParseAnim(const std::string& value, const char*& animName) const
{
if (value == "none")
{
@ -449,7 +449,7 @@ namespace
m_registration.AddIndirectAssetReference(m_context.LoadIndirectAssetReference<AssetXAnim>(value));
}
void ParseSoundAlias(const std::string& value, SndAliasCustom& soundAlias)
void ParseSoundAlias(const std::string& value, SndAliasCustom& soundAlias) const
{
if (value == "none")
{
@ -462,7 +462,7 @@ namespace
m_registration.AddIndirectAssetReference(m_context.LoadIndirectAssetReference<AssetSound>(value));
}
bool ParseFxEffectDef(const std::string& value, FxEffectDef*& fx)
bool ParseFxEffectDef(const std::string& value, FxEffectDef*& fx) const
{
if (value == "none")
{
@ -542,7 +542,7 @@ namespace
return true;
}
void ParseScriptString(const std::string& value, ScriptString& out)
void ParseScriptString(const std::string& value, ScriptString& out) const
{
out = m_zone_script_strings.AddOrGetScriptString(value);
m_registration.AddScriptString(out);
@ -863,7 +863,7 @@ InfoStringLoaderWeapon::InfoStringLoaderWeapon(MemoryManager& memory, ISearchPat
{
}
AssetCreationResult InfoStringLoaderWeapon::CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context)
AssetCreationResult InfoStringLoaderWeapon::CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context) const
{
auto* weaponFullDef = m_memory.Alloc<WeaponFullDef>();

View File

@ -11,7 +11,7 @@ namespace IW5
public:
InfoStringLoaderWeapon(MemoryManager& memory, ISearchPath& searchPath, Zone& zone);
AssetCreationResult CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context);
AssetCreationResult CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context) const;
private:
MemoryManager& m_memory;

Some files were not shown because too many files have changed in this diff Show More