mirror of
https://github.com/sal063/AC6_recomp
synced 2026-05-23 15:02:02 -04:00
233 lines
6.7 KiB
Plaintext
233 lines
6.7 KiB
Plaintext
Texture Swap Modding Guide
|
|
|
|
This guide is for modders who want to replace in-game textures without digging
|
|
through the renderer code.
|
|
|
|
What the system does
|
|
|
|
The game can dump textures it sees at runtime as DDS files. You can edit those
|
|
DDS files and place replacements in the override folders. The game will load
|
|
your replacements the next time those textures are used.
|
|
|
|
The texture swap system now supports:
|
|
- session-based dump browsing, so you can work from a small fresh folder
|
|
- exact one-file replacements with <stable_key>.dds
|
|
- manifest rules, so one DDS can replace multiple dumped textures
|
|
|
|
Where dumps go
|
|
|
|
Global dump history:
|
|
|
|
%USERPROFILE%\Documents\ac6recomp\texture_dumps\
|
|
|
|
Current session pointer:
|
|
|
|
%USERPROFILE%\Documents\ac6recomp\texture_dumps\current_session.txt
|
|
|
|
Current session folder:
|
|
|
|
%USERPROFILE%\Documents\ac6recomp\texture_dumps\sessions\<session_id>\
|
|
|
|
The session folder is the main quality-of-life feature for modding. If you boot
|
|
the game fresh and only visit one menu, that session folder should stay much
|
|
smaller than the full dump history.
|
|
|
|
Basic workflow
|
|
|
|
1. Start with a clean target
|
|
Launch the game fresh if possible.
|
|
Go straight to the menu, HUD, or screen you want to mod.
|
|
|
|
2. Open the current session folder
|
|
Read current_session.txt.
|
|
Open the session_path listed there.
|
|
|
|
3. Identify the texture you want
|
|
Look through the DDS files in the current session folder.
|
|
Each DDS has a matching JSON file with the same stable key.
|
|
|
|
4. Edit the DDS
|
|
Keep the same:
|
|
- format
|
|
- width and height
|
|
- array size or depth
|
|
- mip count
|
|
|
|
5. Install the replacement
|
|
Put the edited DDS in one of these locations:
|
|
|
|
override/textures/<stable_key>.dds
|
|
|
|
or
|
|
|
|
mods/<mod_name>/textures/<stable_key>.dds
|
|
|
|
6. Reload the texture
|
|
Restart the game or otherwise make the texture reload.
|
|
|
|
Recommended folder layout
|
|
|
|
For a loose override:
|
|
|
|
Documents\ac6recomp\
|
|
override\
|
|
textures\
|
|
tex_....dds
|
|
|
|
For a mod:
|
|
|
|
Documents\ac6recomp\
|
|
mods\
|
|
my_ui_mod\
|
|
textures\
|
|
tex_....dds
|
|
|
|
Override priority
|
|
|
|
Priority is:
|
|
- override/textures first
|
|
- then mods/<mod_name>/textures
|
|
- among mods, later folder names win
|
|
|
|
That means a loose override is best for testing, while a mod folder is better
|
|
for packaging and sharing.
|
|
|
|
Using one DDS for many textures
|
|
|
|
Some UI assets exist in several menu-specific variants. Instead of copying the
|
|
same replacement to many stable keys, you can use a manifest.
|
|
|
|
Create:
|
|
|
|
override/textures/manifest.toml
|
|
|
|
or:
|
|
|
|
mods/<mod_name>/textures/manifest.toml
|
|
|
|
Example with exact keys:
|
|
|
|
[[swap]]
|
|
source = "shared/playstation_buttons.dds"
|
|
stable_keys = [
|
|
"tex_1111111111111111_bp00000000_mp00000000_2d_512x256x1_m1_fmt18_e0_t1_p0_s0_r0",
|
|
"tex_2222222222222222_bp00000000_mp00000000_2d_512x256x1_m1_fmt18_e0_t1_p0_s0_r0",
|
|
]
|
|
|
|
Example with wildcard matching:
|
|
|
|
[[swap]]
|
|
source = "shared/common_ui_256.dds"
|
|
stable_key_globs = [
|
|
"tex_*_2d_256x256x1_m1_fmt6_*",
|
|
]
|
|
|
|
Manifest behavior
|
|
|
|
- source is relative to the textures folder that contains manifest.toml
|
|
- exact <stable_key>.dds files still beat manifest rules in the same folder
|
|
- if more than one manifest rule matches, the later rule wins
|
|
- later mod folders still beat earlier mod folders
|
|
|
|
Example mod layout with a manifest
|
|
|
|
Documents\ac6recomp\
|
|
mods\
|
|
playstation_buttons\
|
|
textures\
|
|
manifest.toml
|
|
shared\
|
|
playstation_buttons.dds
|
|
|
|
How to use the JSON sidecars
|
|
|
|
Each dumped texture has a matching JSON file. The JSON is useful when the DDS
|
|
preview alone is not enough.
|
|
|
|
Useful fields include:
|
|
- stable_key
|
|
- width
|
|
- height
|
|
- guest_format
|
|
- dxgi_format
|
|
- signature_tags
|
|
- active_vertex_shader_hash
|
|
- active_pixel_shader_hash
|
|
|
|
You do not need to edit the JSON. It is there to help you identify and group
|
|
textures.
|
|
|
|
Good workflow for menu mods
|
|
|
|
If you are replacing UI prompts, button art, or menu icons:
|
|
|
|
1. Start a fresh session.
|
|
2. Open only the target menu.
|
|
3. Inspect the current session folder.
|
|
4. Find the relevant DDS files.
|
|
5. If several files are really the same logical art, create one shared DDS and
|
|
bind them together with manifest.toml.
|
|
|
|
This is much faster than browsing the entire dump history every time.
|
|
|
|
Troubleshooting
|
|
|
|
Problem: The session folder exists but is empty.
|
|
Cause: The textures you hit may already exist in the global dump history, or
|
|
the relevant texture was never encountered.
|
|
What to do: Trigger the texture again. Existing global dumps should now also be
|
|
mirrored into the current session folder when they are encountered.
|
|
|
|
Problem: My replacement does not load.
|
|
Cause: The DDS does not match the original texture layout, or the stable key is
|
|
wrong, or a higher-priority override is winning.
|
|
What to do:
|
|
- confirm the filename or manifest rule matches the dumped stable key
|
|
- keep the same format, size, array/depth, and mip count
|
|
- for uncompressed replacements, prefer DX10 DDS with 8.8.8.8 RGBA
|
|
- for specular-style replacements, BC1 has been the most reliable format so far
|
|
- if you use a manifest, place it directly in override/textures or
|
|
mods/<mod_name>/textures and use [[swap]] entries with source paths
|
|
relative to that textures folder
|
|
- test with override/textures first
|
|
|
|
Problem: The wrong texture is replaced.
|
|
Cause: A wildcard manifest rule is too broad.
|
|
What to do: Narrow the stable_key_globs rule or switch to exact stable_keys.
|
|
|
|
Problem: Auto reload works, but the result flips between skins or looks stale.
|
|
Cause: Texture cache reuse is currently best-effort for hot reload, and AC6 can
|
|
reuse texture layouts across appearances.
|
|
What to do:
|
|
- treat full game restart as the reliable validation path
|
|
- use exact stable_keys before trying wildcard manifest rules
|
|
- if a result looks "50/50", verify with a cold launch before assuming the
|
|
dump or replacement is wrong
|
|
|
|
Current AC6 authoring notes
|
|
|
|
These are not hard engine guarantees, but they match the current round of AC6
|
|
experiments:
|
|
|
|
- DX10 DDS plus 8.8.8.8 RGBA has been the safest choice for general texture
|
|
replacements
|
|
- BC1 has been the most reliable choice for specular replacements
|
|
- hangar and in-mission variants may not always use the same dumped texture,
|
|
even when the art looks related
|
|
- some captured textures may still need more investigation if the dump looks
|
|
incomplete or visibly corrupted
|
|
|
|
Practical advice
|
|
|
|
- Use the current session folder first, not the full dump folder.
|
|
- Use loose overrides for quick testing.
|
|
- Use mod folders plus a manifest for cleaner releases.
|
|
- Prefer one shared DDS plus manifest rules when the game has several
|
|
duplicates of the same art.
|
|
|
|
Reference
|
|
|
|
For the lower-level technical reference, see:
|
|
|
|
docs/TEXTURE_SWAPS.txt
|