Skip to content

Basic implementation of Artifacts in loadouts#11851

Open
FlaminSarge wants to merge 21 commits into
masterfrom
artifact
Open

Basic implementation of Artifacts in loadouts#11851
FlaminSarge wants to merge 21 commits into
masterfrom
artifact

Conversation

@FlaminSarge

@FlaminSarge FlaminSarge commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Still needed:

  • mobile styling
  • better handling of the mod picker
  • better handling of unpicked/empty sockets
  • loadout csv
  • Update tests

Changelog: Add basic handling for using Artifacts in loadouts

Still needed: mobile styling, better handling of the mod picker, better handling of unpicked/empty sockets, loadout csv
Comment thread src/app/destiny2/d2-bucket-categories.ts
Comment thread src/app/inventory/selectors.ts Outdated
const handleRemoveArtifactUnlock = useUpdater(removeArtifactUnlock);

const artifactTitle = artifactUnlocks
const handleSyncArtifactFromEquipped = useDefsStoreUpdater(setLoadoutArtifactFromEquipped);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unsure on whether defsstoreupdater needed here

@bhollis bhollis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, logic looks good. Probably could have split this into a couple PRs just to reduce the diff by removing the artifactUnlocks stuff first.

Comment thread src/app/loadout-drawer/loadout-drawer-reducer.test.ts Outdated
Comment thread src/app/loadout-drawer/loadout-utils.ts Outdated
Comment thread src/app/loadout/LoadoutView.tsx Outdated
const RESET_SOCKET = 1383699646;
const excludedMods = [EMPTY_MOD, RESET_MOD];

export default function ArtifactPlugDrawer({

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My plan for artifact, emotes, and weapon-perks was to use the item popup, let you configure the perks/mods, then click a "Save to Loadout" button. This avoids having to build a perk picker for every type of thing, and it cleans up the mod/perk handling on the item popup to boot. Not saying you can't create a special picker for this one, but that was the idea.

const handleRemoveMod = useCallback(
(mod: ResolvedLoadoutMod) => onRemoveMod!(mod.originalModHash),
[onRemoveMod],
const artifactOverrides: ResolvedLoadoutMod[] = useMemo(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't quite tell if this is what this does, but it would be great if legacy artifact unlocks could be auto-mapped / upgraded to a real artifact item and socket overrides.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This currently only lets the component display the legacy mods if they're in the loadout and if no modern artifact is present. The item defs for the perks in the modern artifacts seem to be the same as the old item defs (unless the old items were removed from the API entirely), so it might be possible, but would be pretty janky to implement.

Now shows all perks in one bucket and automatically disables them as they are no longer eligible to be selected
Co-authored-by: Ben Hollis <ben@benhollis.net>
@FlaminSarge
FlaminSarge marked this pull request as ready for review July 16, 2026 19:04
@FlaminSarge

FlaminSarge commented Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

There's still some odd-looking mobile UI but the rest of the feature works as intended as far as I've been testing, don't know if there's a logical way to split up the changes (maybe removal of legacy artifacts -> addition of new artifacts but that's iffy as well).

Not sure if delaying for polish is needed or not.

Example mobile issue
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants