Weapons — SHD.build admin

ARMAMENT DEFINITION REGISTRY

WEAPONS

Configure fixed handling, tier progression, talent pools, and tactical augmentations.

{#snippet weaponEditor()}

{editing.id ? 'MODIFY WEAPON' : 'NEW WEAPON'}

{editing.id ? editing.name : 'WEAPON DEFINITION'}

setCategory(values[0])} required/>
{#if Number(editing.is_exotic)}
DEDICATED EXOTIC TALENTOWNED EXCLUSIVELY BY THIS WEAPON · TIER II VALUES REQUIRED
{editing.exoticTalent.id ? 'LINKED RECORD' : 'NEW RECORD'}

DESCRIPTION EXPRESSIONS · {'{duration}'} and {'{max_stacks}'} render the defined mechanics. Cooldown is displayed separately as a standardized Talent Cooldown line.

TIER I PREVIEW

{exoticPreview('I') || 'Description preview'}

TIER II PREVIEW

{exoticPreview('II') || 'Description preview'}

{/if}
FIXED WEAPON ATTRIBUTESUNCHANGED ACROSS TIERS
BASE HANDLING
BASE ATTRIBUTE BONUSESFIXED BONUSES PROVIDED BY THIS WEAPON
{#each editing.baseBonuses as bonus: any, index}
{String(index + 1).padStart(2, '0')}
ATTRIBUTE
{/each}
TIER PROGRESSIONDAMAGE RANGES · CORE ATTRIBUTES USE GLOBAL CONFIGURATION
3 TIERS REQUIRED
{#each [0, 1, 2] as tier} {@const slotConfig = modSlotsAt(tier)}
TIER {tier} {#if tier < Number(editing.native_tier)}

BELOW NATIVE TIER · NOT AVAILABLE

{/if}
DMG{editing.damage_type.toUpperCase()} DAMAGE
WEAPON MOD SLOTS{tier === 0 ? 'EXACTLY FOUR SLOTS' : 'EXACTLY FIVE SLOTS'}
{slotConfig.slots.length} / {tier === 0 ? 4 : 5}
{/each}
TALENT 1 · TOP POOLGLOBALLY CLASSIFIED FOR FIRST SLOT
{editing.talent1Ids.length}
TALENT 2 · BOTTOM POOLGLOBALLY CLASSIFIED FOR SECOND SLOT
{editing.talent2Ids.length}
TACTICAL AUGMENTATION 01ONE OR TWO UNIQUE ATTRIBUTE UPGRADES
{#each editing.augmentEffects as effect: any, index}
0{index + 1}
ATTRIBUTE
{#if index > 0}{/if}
{/each}
02+20% DAMAGE
03+40% DAMAGE
04+60% DAMAGE
05+80% DAMAGE
{#if Number(editing.is_exotic)}
06EXOTIC TALENT → TIER II
{/if}
{#if data.talent1Options.length === 0 || data.talent2Options.length === 0}

Create and classify at least one active Talent 1 and Talent 2 weapon talent before adding weapons.

{/if} {#if data.stats.length === 0}

Create an active attribute before configuring tactical augmentation 01.

{/if} {#if form?.weaponError}

{form.weaponError}

{/if}
{#if editing.id}{/if}
{/snippet} {#if editing && !editing.id} {@render weaponEditor()} {/if}
{#each data.weapons as weapon}
{weapon.name}{#if weapon.pending}PROPOSED BY {weapon.proposerName}{:else}{Number(weapon.is_exotic) ? 'EXOTIC · ' : ''}{weapon.damage_type.toUpperCase()} DAMAGE · {weapon.baseBonuses.length} BASE BONUSES{/if}
{#if Number(weapon.is_exotic)}{/if}{weapon.category} · T{weapon.native_tier}{weapon.rpm} RPM · {weapon.magazine} MAG · {weapon.reload_speed} RELOAD{weapon.tiers.length}/{3 - Number(weapon.native_tier)} CONFIGURED · {weapon.modSlots.reduce((total: number,row: any) => total + row.slots.length,0)} MOD SLOTS{weapon.talent1Ids.length} / {weapon.talent2Ids.length} `${statLabel(String(effect.stat_attribute_id))} +${effect.value}`).join(', ')}>{Number(weapon.is_exotic) ? '6' : '5'} SLOTS{weapon.pending ? 'PENDING' : Number(weapon.active) === 1 ? 'ACTIVE' : 'ARCHIVED'}{#if weapon.pending}{:else}{/if}
{#if editing?.id === weapon.id} {@render weaponEditor()} {/if} {:else}
NO WEAPONS REGISTEREDAdd active weapon talents and attributes, then create the first armament definition.
{/each}