Commit graph

238 commits

Author SHA1 Message Date
ae1e7e5aa6
dtmt: Add word extraction algorithm for paths 2024-07-17 09:29:41 +02:00
6ada4c1c43
sdk: Add additional brute force prefixes 2024-07-17 09:29:39 +02:00
6449354714
sdk: Reimplement logging current word 2024-07-17 09:29:37 +02:00
b366185a63
sdk: Implement worker pool for word generation
Massive speed improvement. The index generation is really fast,
and it appears that even worker numbers way higher than the core/thread
count still increase the throughput slightly.

The only missing part is the info output. That's broken, currently.
2024-07-17 09:29:21 +02:00
951a7f82c0
sdk: Improve word generation 2024-07-17 09:28:01 +02:00
4480144d92
sdk: Implement guessing a list of hashes
While the approach to generate and store a list of strings does allow
for this list to be re-used in the future, the I/O involved turned out
to be quite costly.

While the generation can run at up to 500 MiB/s, even compressing that
on the fly doesn't reach fast enough write speeds on a HDD.
And compression is also necessary to store this amount of data
(generation reached two TB of raw data with a word length of just three,
which is still 600 GB compressed).
But compression also makes working with that data a lot harder.

So this instead combines both the generation and search into a single
step. The intermediate result of the generation is therefore lost,
but the overall pipeline is much faster.
2024-07-17 09:27:59 +02:00
0d1193a126
sdk: Improve word generation throughput
It seems that the simple `println!()` is really bad when the goal
is to write a lot of data to stdout.
Presumably because it's unbuffered, but also because it required the
preceding code to do a lot of allocations.

This was replaced with a buffered writer on stdout, as well as an extra
`Vec<u8>` that I can write everything to directly from the word and
delimiter iterators, without allocating a single new structure.
2024-07-17 09:27:57 +02:00
6485dae27b
experiment: Add command to create word permutations
This creates candidate values to brute force dictionary entries with,
by building combinations from a word list and delimiters.
2024-07-17 09:27:46 +02:00
94347d57f9
dtmt: Add command to extract words from file
As part of trying to brute force values for the dictionary,
this allows extracting candidate words from a file.
2024-07-17 09:20:54 +02:00
2daff544a5
Add subcommand for experimental operations
These may be temporary ones that help during analyzing and developing
file formats, or or long term experiments.
2024-07-17 09:18:56 +02:00
a4e78f1c6b
Log deployment data
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Closes #168
2024-07-12 14:35:43 +02:00
1020efe53d
Add version field to mod loader logging
Ref: #168
2024-07-12 14:34:55 +02:00
ba31d51098
Align Crashify property with Fatshark
They recently submitted a PR to DML with their preferred property names,
so we should match that.

Ref: #168
2024-07-12 13:41:29 +02:00
0539b6b456
Strip block whitespace in templates
Ref: #168
2024-07-12 13:41:19 +02:00
84606814fd
Add application icon
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
2024-07-10 23:27:43 +02:00
e6f1e7c117
Fix load order verification
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
With `.enumerate()` after `.filter()`, the resulting indices didn't
properly map back to the overall mod list anymore. But the checks
afterwards relied on that.
Moving the `.enumerate()` before the `.filter()` makes sure that the
indices are correct.
2024-07-10 21:54:51 +02:00
91651a8467
Apply linter fixes in mod_main.lua
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
2024-07-10 20:02:27 +02:00
05df72635a
dtmm: Pull ModLoader in
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/linux Build for the target platform: linux
build/msvc Build for the target platform: msvc
Closes #155.
2024-07-10 19:49:00 +02:00
0f14834e2d
Remove string_template
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/linux Build for the target platform: linux
build/msvc Build for the target platform: msvc
Use minijinja for all templates
2024-07-10 18:41:38 +02:00
ef4c2a1d94
Update interprocess 2024-07-09 16:16:46 +02:00
189c3199a0
Update bitflags 2024-07-09 16:16:42 +02:00
b8ac80562a
Update zip 2024-07-09 16:16:37 +02:00
4bc5777a4b
Update notify 2024-05-15 20:04:47 +02:00
ae30499a49
Remove unused dependency 2024-05-15 19:19:54 +02:00
bac75e1c9a
Update confy 2024-05-15 18:58:08 +02:00
dfd51513da
Update strip-ansi-escapes
Removes duplicate dependency of arrayvec.
2024-05-15 16:32:45 +02:00
535a30a7ca
Add simpler shell parser
This obsoletes `shlex`. The quoting turned out unnecessary, and the
splitting supported a lot more than we need. It also forced
unncessary allocations: The splitting doesn't add any characters and
keeps UTF-8 intact, so returning slices from the input is perfectly
possible.
Though this particular implementation will only come to use in the
future, as `CmdLine` still requires that the slices are cloned.

Still, the custom implementation performs about 3x faster.
2024-05-15 16:32:44 +02:00
86ed5c327f
Update crates
All checks were successful
build/msvc Build for the target platform: msvc
lint/clippy Checking for common mistakes and opportunities for code improvement
build/linux Build for the target platform: linux
`steamlocate` changed its API again.
`shlex` deprecated `quote`, but that will be addressed later.
2024-05-15 13:41:44 +02:00
cfee6d9121
Fix clippy lints 2024-05-15 13:41:42 +02:00
103775e032
dtmm: Replace icon for mod update notification
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Closes #158.
2023-12-05 14:28:12 +01:00
1bc0fe28fb Merge pull request 'dtmm: Extend NexusInfo' (#163) from feat/nexus-info into master
All checks were successful
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Reviewed-on: #163
2023-12-05 13:15:33 +01:00
169f4deea9 Merge pull request 'dtmm: Enforce skipping packages for non-bundled mods' (#162) from issue/non-bundled-packages into master
All checks were successful
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Reviewed-on: #162
2023-12-05 10:45:17 +01:00
a0791cba41
dtmm: Extend NexusInfo
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
This provides forward compatibility, in case I ever want to use those
fields. If I only added them at the time when they are needed, I would
need to come up with a process to load the `nexus.sjson` with missing
fields.

Closes #130.
2023-12-05 10:40:29 +01:00
5f5d46ffa7 Merge pull request 'Add link to open mod on Nexus' (#160) from feat/nexus-link into master
All checks were successful
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Reviewed-on: #160
2023-12-05 10:13:06 +01:00
0fb10d9d69
dtmm: Enforce skipping packages for non-bundled mods
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Fixes #161.
2023-12-05 10:11:51 +01:00
57771617ff
dtmm: Add link to open mod on Nexus
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Closes #157.
2023-12-04 16:48:18 +01:00
5278041ddb
Use Nexus mod name when available
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Fixes #154.
2023-12-04 13:40:00 +01:00
4c6ad1aaed
Reduce debug verbosity
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Prevent binary buffers inflating the log output.
2023-11-30 18:11:53 +01:00
031c03480d
dtmm: Add .desktop file
A basic Desktop Entry file for the Linux, which includes the
configuration for the `nxm://` scheme handling.
2023-11-30 17:50:48 +01:00
6f848bb837
dtmm: Implement NXM URI handler
Closes #31.
2023-11-30 17:50:07 +01:00
5bcc4b8c70
Merge branch 'master' into feat/nexus-file-version
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
* master:
  dtmm: Fix writing Nexus image to disk
  dtmm: Fix importing from `.mod` file
  ci: Combine Dockerfiles into multi-stage build
  ci: Rework MSVC image building
  ci: Fix base pipeline
  ci: Improve caching setup for image building
  ci: Create build artifacts for commits on master
  ci: Fix undefined variable
  Add changelog entry
  dtmm: Fetch mod image from Nexus
2023-11-29 15:42:00 +01:00
2ad3fd0fc1
dtmm: Fix importing from .mod file 2023-11-29 15:31:05 +01:00
61e78e9718
dtmm: Fix writing Nexus image to disk
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
2023-11-29 15:21:34 +01:00
b3305e87b8
dtmm: Fix importing from .mod file 2023-11-29 15:21:07 +01:00
246564d00f
Fetch file version from Nexus
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
When importing an archive file downloaded from Nexus, the file name does
include a version field. But, presumably for compatibility reasons,
Nexus replaces special characters with `-`, so that this field doesn't
match common schemes like `1.0.0`.
So instead we use the also included update timestamp to find the
corresponding file info from Nexus and use the version data from that.

Closes #131.
2023-11-24 13:54:19 +01:00
0b3c92d19e
dtmm: Fetch mod image from Nexus
All checks were successful
lint/clippy Checking for common mistakes and opportunities for code improvement
build/msvc Build for the target platform: msvc
build/linux Build for the target platform: linux
Closes #129.
2023-11-24 13:06:55 +01:00
8ecca087de dtmm: Use dtmt.cfg for non-bundled mods
Closes #144.
2023-11-24 11:52:47 +01:00
845b0114bb Delay mod loading
The initial implementation of DML ended up loading mods quite late,
which did give it the benefit of all `Manager`s being available.
This change therefore moves mod loading until after those are
initialized.

But contrary to old DML, we still create a separate game state to make
sure the game doesn't advance until mods are loaded. This avoids race
conditions like the one where LogMeIn needs to come early in the load
order.
2023-11-24 11:52:47 +01:00
7a9b3aa561 Prevent excessive debug logs 2023-11-24 11:52:47 +01:00
3cbf383b18 Use version number from Nexus import
Non-bundled mods come without a `dtmt.cfg`, and therefore without a
version number. But we need a version number at import to compare to
for the Nexus update check.
2023-11-24 11:52:47 +01:00