OS Protocols — SHD.build admin

OPERATING SYSTEM MODIFICATION REGISTRY

OS PROTOCOLS

Configure shared secondary profiles, unique level-scaled primary stats, and five-stage talents.

SHARED ATTRIBUTE PROFILESONE PROFILE PER QUALITY + ATTRIBUTE TYPE · REUSED BY EVERY MATCHING PROTOCOL
{data.profiles.filter((profile) => profile.effects.length === 3).length} / 12 CONFIGURED
{#each data.profiles as profile} {/each}
{#if profileEditing}

SHARED PROFILE

{profileEditing.quality.toUpperCase()} · {profileEditing.primary_attribute_type.toUpperCase()}

These values apply to every {profileEditing.quality} {profileEditing.primary_attribute_type} OS Protocol. They do not scale with an individual protocol’s level.

{#each secondaryRoles as role}{/each}
{#if form?.profileError}

{form.profileError}

{/if}
{/if} {#if editing}

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

{editing.id ? editing.name : 'OS PROTOCOL DEFINITION'}

({ statId: effect.stat_attribute_id, baseValue: effect.base_value })))} />
QUALITY
{#each qualities as quality}{/each}
TYPE
{#each attributeTypes as type}{/each}
{@const selectedProfile = profileFor(editing.quality, editing.primary_attribute_type)}
INHERITED PROFILE{editing.quality.toUpperCase()} · {editing.primary_attribute_type.toUpperCase()}
{#if configuredProfile()}
{#each secondaryRoles as role}{@const effect = profileEffect(selectedProfile, role)}{secondaryNames(editing.primary_attribute_type)[role]}{format(effect.value, effect.stat_attribute_id)}{/each}
{:else}

Configure this quality and type combination in Shared Secondary Attribute Profiles before saving.

{/if}
UNIQUE PRIMARY ATTRIBUTELEVEL 1 BASE VALUE · LINEAR TO 2× AT LEVEL 50
LEVEL {protocolLevel}
0150
LEVEL {protocolLevel} PREVIEW{format(levelValue(editing.primaryEffect.base_value, protocolLevel), editing.primaryEffect.stat_attribute_id)}LEVEL 50 · {format(levelValue(editing.primaryEffect.base_value, 50), editing.primaryEffect.stat_attribute_id)}
UNIQUE PROTOCOL TALENTOWNED EXCLUSIVELY BY THIS PROTOCOL · FIVE LINEAR UPGRADES
{editing.talent.id ? 'LINKED RECORD' : 'NEW RECORD'}
{#each [1, 2, 3, 4, 5] as upgrade}{/each}
UPGRADE {talentUpgrade} / 5 · {talentUpgrade === 5 ? '2× EFFECT VALUE' : `${Math.round((1 + talentUpgrade / 5) * 100)}% EFFECT VALUE`}

{talentPreview(talentUpgrade) || 'Talent description preview'}

ACTIVATION TRIGGERSREUSABLE TRIGGER DEFINITIONS
{editing.talent.triggerIds.length}
TALENT EFFECTSBASE VALUE AT ZERO UPGRADES
{#each editing.talent.effects as effect, index}
{index + 1}{format(upgradeValue(effect.base_value, 5), effect.stat_attribute_id)} AT +5
{/each}
{#if form?.protocolError}

{form.protocolError}

{/if}
{#if editing.id}{/if}
{/if}
OS PROTOCOLQUALITYTYPEUNIQUE PRIMARYUNIQUE TALENTSTATE
{#each data.protocols as protocol}
{protocol.name}LEVEL 1–50 · PRIMARY 2× MAX
{protocol.quality}{protocol.primary_attribute_type}{protocol.primaryEffect ? `${stat(protocol.primaryEffect.stat_attribute_id)?.name ?? 'UNKNOWN'} · ${format(protocol.primaryEffect.base_value, protocol.primaryEffect.stat_attribute_id)} → ${format(levelValue(protocol.primaryEffect.base_value, 50), protocol.primaryEffect.stat_attribute_id)}` : 'NOT CONFIGURED'}
{protocol.talent?.name ?? 'NOT CONFIGURED'}◆◆◆◆◆ 5 UPGRADES · 2× MAX
{Number(protocol.active) === 1 ? 'ACTIVE' : 'ARCHIVED'}
{:else}
NO OS PROTOCOLS REGISTEREDConfigure shared secondary profiles, then add the first protocol.
{/each}