Files
roll20-character-sheets/Stars_Without_Number_Revised/Source/pug/character.pug
T

996 lines
55 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-
const attributes = ["strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma"];
const customSkills = {
culture_alien: "Culture/Alien/",
culture_one: "Culture/",
culture_two: "Culture/",
culture_three: "Culture/",
profession: "Profession/"
};
const skills = {
revised: ["administer", "connect", "exert", "fix", "heal", "know", "lead",
"notice", "perform", "pilot", "program", "punch", "shoot", "sneak", "stab",
"survive", "talk", "trade", "work"],
first: ["artist", "athletics", "bureaucracy", "business", "combat_energy", "combat_gunnery",
"combat_primitive", "combat_projectile", "combat_psitech", "combat_unarmed", "computer",
"culture_alien", "culture_criminal", "culture_spacer", "culture_traveller", "culture_one",
"culture_two", "culture_three", "exosuit", "gambling", "history", "instructor", "language",
"leadership", "navigation", "perception", "persuade", "profession", "religion", "science",
"security", "stealth", "steward", "survival", "tactics", "tech_astronautic", "tech_maltech",
"tech_medical", "tech_postech", "tech_pretech", "tech_psitech", "vehicle_air", "vehicle_grav",
"vehicle_land", "vehicle_space", "vehicle_water", "dummy"],
psionic: ["biopsionics", "metapsionics", "precognition", "telekinesis", "telepathy", "teleportation"],
magic: ["know_magic", "use_magic", "sunblade"],
wwn: ["administer", "connect", "convince", "craft", "exert", "heal", "know", "lead", "magic", "notice", "perform", "pray", "punch", "ride", "sail", "shoot", "sneak", "stab", "survive", "trade", "work"],
};
//- We have foci in two locations, so they are outsourced to this mixin
mixin foci
+sectionheader("show_foci", "FOCI")
.foci.grey-box.simple-repsection
input(type="hidden", name="attr_show_focus_details", value="1").input-details
.class-ability
button.display.invisible-button(type="roll", name="roll_Class_ability", value!="&{template:swn-default} {{charname=@{character_name}}} {{title=^{CLASS_ABILITY}}} {{desc=@{class_ability}}}")
.display
.name.flex
div #[span(data-i18n="CLASS_ABILITY")]: #[span(name="attr_class")]
label.details-button
input(type="checkbox", name="attr_show_focus_details", value="1", checked)
span(data-i18n="EXPAND")
.details
span(name="attr_class_ability")
.edit
.name.flex
div #[span(data-i18n="CLASS_ABILITY")]: #[span(name="attr_class")]
label.details-button
input(type="checkbox", name="attr_show_focus_details", value="1", checked)
span(data-i18n="EXPAND")
.details
textarea.details(name="attr_class_ability")
.generate.flex-start.edit
select(name="attr_generate_foci_source").generate-source
option(value="", data-i18n="CHOOSE_FOCUS", selected)
option(value="alert", data-i18n="ALERT")
option(value="armsman", data-i18n="ARMSMAN")
option(value="assassin", data-i18n="ASSASSIN")
option(value="authority", data-i18n="AUTHORITY")
option(value="close_combatant", data-i18n="CLOSE_COMBATANT")
option(value="connected", data-i18n="CONNECTED")
option(value="die_hard", data-i18n="DIE_HARD")
option(value="diplomat", data-i18n="DIPLOMAT")
option(value="gunslinger", data-i18n="GUNSLINGER")
option(value="hacker", data-i18n="HACKER")
option(value="healer", data-i18n="HEALER")
option(value="henchkeeper", data-i18n="HENCHKEEPER")
option(value="ironhide", data-i18n="IRONHIDE")
option(value="psychic_training", data-i18n="PSYCHIC_TRAINING")
option(value="savage_fray", data-i18n="SAVAGE_FRAY")
option(value="shocking_assault", data-i18n="SHOCKING_ASSAULT")
option(value="sniper", data-i18n="SNIPER")
option(value="specialist", data-i18n="SPECIALIST")
option(value="star_captain", data-i18n="STAR_CAPTAIN")
option(value="starfarer", data-i18n="STARFARER")
option(value="tinker", data-i18n="TINKER")
option(value="unarmed_combatant", data-i18n="UNARMED_COMBATANT")
option(value="unique_gift", data-i18n="UNIQUE_GIFT")
option(value="wanderer", data-i18n="WANDERER")
option(value="wild_psychic_talent", data-i18n="WILD_PSYCHIC_TALENT")
span(name="attr_generate_foci_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_foci_button")
span(data-i18n="ADD")
fieldset.repeating_foci
button.display.invisible-button(type="roll", name="roll_Focus", value!="&{template:swn-default} {{charname=@{character_name}}} {{info=^{FOCUS}}} {{title=@{focus_name}}} {{desc=@{focus_description}}}")
.display
.name.flex
span(name="attr_focus_name")
span.level #[span(data-i18n="LEVEL")]-#[span(name="attr_focus_level")]
.details
span(name="attr_focus_description")
.edit.flex-wrap
input.name(type="text", name="attr_focus_name", data-i18n-placeholder="FOCUS")
input.level(type="number", min="0", value="1", name="attr_focus_level", data-i18n-placeholder="LEVEL")
textarea.details(name="attr_focus_description", data-i18n-placeholder="DESCRIPTION")
input(type="hidden", name="attr_homebrew_skill_list", value="revised").skills-type
input(type="hidden", name="attr_setting_super_type", value="psionics").super-type
input(type="hidden", name="attr_setting_foci_location", value="left").foci-loc
input(type="hidden", name="attr_setting_skill_query", value="hover").skills-query
input(type="hidden", name="attr_magic_type", value="arcanist").magic-type
input(type="hidden", name="attr_setting_ai_enable", value="").ai-setting
input(type="hidden", name="attr_setting_transhuman_enable", value="").transhuman-setting
//- Core
.core.core-info.cols-2
.info.flex.core-box-text
+text-input("character_name", "NAME").important
+text-input("level", "LEVEL", "no-spinners")(type="number", min="1", value="1").level.center
+text-input("class", "CLASS")(list="character-class-datalist").level-rest
datalist(id="character-class-datalist")
option Expert
option Warrior
option Psychic
option Adventurer (Expert/Psychic)
option Adventurer (Expert/Warrior)
option Adventurer (Psychic/Warrior)
+text-input("background", "BACKGROUND").col25
+text-input("species_gender", "SPECIES_GENDER").col25
+text-input("faction", "FACTION").col25
+text-input("homeworld", "HOMEWORLD").col25
.saves.core-box
h3(data-i18n="SAVING_THROWS")
.flex-between
+makeSave("physical")
+makeSave("mental")
+makeSave("evasion")
input(type="hidden", name="attr_homebrew_luck_save", value="0").hider
+makeSave("luck")
.menus.core-box
h3(data-i18n="QUICK_MENUS")
.menus-content
button(type="roll", name="roll_Initiative", data-i18n="INITIATIVE_FIXED", value=`&{template:swn-default} {{charname="@{character_name}"}} {{title=^{INITIATIVE_FIXED}}} {{ =[[1d8+@{dexterity_mod} &{tracker}]]}}`).unstyled-button
input(type="hidden", name="attr_macro_saves", value="[^{PHYSICAL} (v@{save_physical}),](~save_physical) [^{MENTAL} (v@{save_mental}),](~save_mental) [^{EVASION} (v@{save_evasion})](~save_evasion)")
button(type="roll", name="roll_Saves_macro", data-i18n="SAVES", value=`/w "@{character_name}" &{template:swn-default} {{charname=@{character_name}}} {{title=^{SAVING_THROWS}}} {{buttons=@{macro_saves}}}`).unstyled-button
input(type="hidden", name="attr_macro_skills" value="[^{ADMINISTER} (-1),](~skill_administer) [^{CONNECT} (-1),](~skill_connect) [^{EXERT} (-1),](~skill_exert) [^{FIX} (-1),](~skill_fix) [^{HEAL} (-1),](~skill_heal) [^{KNOW} (-1),](~skill_know) [^{LEAD} (-1),](~skill_lead) [^{NOTICE} (-1),](~skill_notice) [^{PERFORM} (-1),](~skill_perform) [^{PILOT} (-1),](~skill_pilot) [^{PROGRAM} (-1),](~skill_program) [^{PUNCH} (-1),](~skill_punch) [^{SHOOT} (-1),](~skill_shoot) [^{SNEAK} (-1),](~skill_sneak) [^{STAB} (-1),](~skill_stab) [^{SURVIVE} (-1),](~skill_survive) [^{TALK} (-1),](~skill_talk) [^{TRADE} (-1),](~skill_trade) [^{WORK} (-1)](~skill_work)")
button(type="roll", name="roll_Skills_macro", data-i18n="SKILLS", value=`/w "@{character_name}" &{template:swn-default} {{charname=@{character_name}}} {{title=^{SKILLS}}} {{buttons=@{macro_skills}}}`).unstyled-button
input(type="hidden", name="attr_macro_weapons")
button(type="roll", name="roll_Weapons_macro", data-i18n="WEAPONS", value=`/w "@{character_name}" &{template:swn-default} {{charname=@{character_name}}} {{title=^{WEAPONS}}} {{buttons=@{macro_weapons}}}`).unstyled-button
input(type="hidden", name="attr_macro_psionics" value="").hider
button(type="roll", name="roll_Psionics_macro", data-i18n="PSIONICS", value=`/w "@{character_name}" &{template:swn-default} {{charname=@{character_name}}} {{title=^{PSYCHIC_SKILLS_TECHNIQUES}}} {{buttons=@{macro_psionics}}}`).unstyled-button.super-psionics.super
input(type="hidden", name="attr_macro_magic")
button(type="roll", name="roll_Magic_macro", data-i18n="MAGIC", value=`/w "@{character_name}" &{template:swn-default} {{charname=@{character_name}}} {{title=^{SPACE_MAGIC}}} {{buttons=@{macro_magic}}}`).unstyled-button.super-magic.super
//- Stats
.core.core-stats.cols-2
.main.core-box-text
h3(data-i18n="CORE_STATISTICS")
.main-content
+text-input-duo("HP", "HP_max", false, {value: "0"}).important
.label
button.unstyled-button.dice-icon(type="roll", name="roll_HP", data-i18n="HIT_POINTS" value!="&{template:swn-default} {{charname=@{character_name}}} {{title=^{HIT_POINTS}}} {{=[[{abs(@{setting_heroic_enable}-1)*@{level}d6 + @{level}*@{constitution_mod}[CON] + @{level}*@{extra_hp_query}, abs(@{setting_heroic_enable}-1)*@{hp|max} + 1d1, 0d0 + @{setting_heroic_enable}*ceil(([[6*@{level}]] [Level] + [[@{level}*@{constitution_mod}]] [Con] + [[@{level}*@{extra_hp_query}]] [Bonus])/2)}kh1]]}} {{info=^{MAXIMUM_HP_1} @{level}d6 + @{level}*[[@{constitution_mod}[CON] + @{extra_hp_query}]] ^{MAXIMUM_HP_2} [[@{hp|max} + 1]]}}")
+text-input-duo("strain_permanent_extra", "cyberware_strain_total", "PERMANENT_STRAIN", {readonly: true, "data-i18n-title": "TOTAL_CYBERWARE_STRAIN"}, "", "+", "+")(type="number", min="0", value="0", data-i18n-title="PERMANENT_STRAIN_EXTRA").center
input(type="hidden" name="attr_strain_above_max", value="0").strain-above-max
+text-input-trio("strain_extra", "strain", "strain_max", "SYSTEM_STRAIN_/_MAX", {readonly: true, title: "Total Strain", "data-i18n-title": "TOTAL_STRAIN", class: "total-strain"}, {value: "10", readonly: true, "data-i18n-title": "CONSTITUTION"}, "", "=")(min="0", value="0", data-i18n-title="STRAIN_EXTRA", title: "Strain Extra") System Strain / Max
+text-input-duo("xp", "xp_next", "XP_NEXT_LEVEL", {min: "0", value: "3"})(min="0", value="0")
+text-input("AC", "ARMOR_CLASS")(type="number", value="10", readonly, data-i18n-title="AC_DESC").center
+text-input("attack_bonus", "ATTACK_BONUS")(type="number", min="0", value="0").center
input(type="hidden", name="attr_setting_heroic_enable", value="0").hider
+text-input("hp_doom")(type="number").center
button.unstyled-button(type="roll", name="roll_Doom", data-i18n="DOOM_DAMAGE", data-i18n-title="DEFY_DOOM", value!="&{template:swn-default} {{charname=@{character_name}}} {{title=^{DEFYING_DOOM}}} {{^{DOOM_DAMAGE}=[[@{level}d@{doom_size}]]}}")
.attributes.core-box
table
thead
tr
th
th(data-i18n="BASE").edit
th(data-i18n="BOOSTS").edit
th(data-i18n="ATTR").edit
th(data-i18n="ATTRIBUTE").display
th(data-i18n="BONUS")
th.edit
span(data-i18n="MOD") Mod
th(data-i18n="MODIFIER").display
tbody
input(type="hidden", name="attr_str_dex_mod", value="0")
each attr in attributes
tr
td(data-i18n=attr.toUpperCase(), data-i18n-title=`${attr.toUpperCase()}_DESC`)
td.edit
if ["strength", "dexterity", "constitution"].includes(attr)
input(type="number", name=`attr_${attr}_base`, value="10").ai-disabled.transhuman-disabled
else
input(type="number", name=`attr_${attr}_base`, value="10")
//span(name=`attr_${attr}`).display
td.edit
if ["strength", "dexterity", "constitution"].includes(attr)
input(type="number", name=`attr_${attr}_boosts`, value="0").ai-disabled.transhuman-disabled
else
input(type="number", name=`attr_${attr}_boosts`, value="0")
//span(name=`attr_${attr}_boosts`).display
td
//input(type="number", name=`attr_${attr}_boosts`, value="0").edit
span(name=`attr_${attr}`)
td
input(type="number", name=`attr_${attr}_bonus`, value="0").edit
span(name=`attr_${attr}_bonus`).display
td.mod
input(type="hidden", name=`attr_${attr}_mod`, value="0").add-plus
span(name=`attr_${attr}_mod`)
.resources.core-box-text
.flex
h3(data-i18n="RESOURCES")
+text-input("credits", "CREDITS")(type="number", value="0").credits.center.col50
fieldset.repeating_resources
+text-input-duo("resource_count", "resource_count_max", "").display
.label
span(name="attr_resource_name")
.flex-center.edit
input(type="text", name="attr_resource_name")
input(type="number", name="attr_resource_count")
span.slash /
input(type="number", name="attr_resource_count_max")
.column
//- Weapons
.section
+sectionheader("show_weapons", "WEAPONS")
.weapons
label.details-button
input(type="checkbox", name="attr_show_weapon_details", value="1", checked)
span(data-i18n="EXPAND")
.generate.flex-start.edit
select(name="attr_generate_weapons_source").generate-source
option(value="", data-i18n="CHOOSE_WEAPON", selected)
optgroup(data-i18n-label="RANGED_WEAPONS")
option(value="primitive_bow", data-i18n="PRIMITIVE_BOW")
option(value="advanced_bow", data-i18n="ADVANCED_BOW")
option(value="conversion_bow", data-i18n="CONVERSION_BOW")
option(value="grenade", data-i18n="GRENADE")
option(value="crude_pistol", data-i18n="CRUDE_PISTOL")
option(value="musket", data-i18n="MUSKET")
option(value="revolver", data-i18n="REVOLVER")
option(value="rifle", data-i18n="RIFLE")
option(value="shotgun", data-i18n="SHOTGUN")
option(value="semi_auto_pistol", data-i18n="SEMI_AUTO_PISTOL")
option(value="submachine_gun", data-i18n="SUBMACHINE_GUN")
option(value="combat_rifle", data-i18n="COMBAT_RIFLE")
option(value="combat_shotgun", data-i18n="COMBAT_SHOTGUN")
option(value="sniper_rifle", data-i18n="SNIPER_RIFLE")
option(value="void_carbine", data-i18n="VOID_CARBINE")
option(value="mag_pistol", data-i18n="MAG_PISTOL")
option(value="mag_rifle", data-i18n="MAG_RIFLE")
option(value="spike_thrower", data-i18n="SPIKE_THROWER")
option(value="laser_pistol", data-i18n="LASER_PISTOL")
option(value="laser_rifle", data-i18n="LASER_RIFLE")
option(value="thermal_pistol", data-i18n="THERMAL_PISTOL")
option(value="plasma_projector", data-i18n="PLASMA_PROJECTOR")
option(value="shear_rifle", data-i18n="SHEAR_RIFLE")
option(value="thunder_gun", data-i18n="THUNDER_GUN")
option(value="distortion_cannon", data-i18n="DISTORTION_CANNON")
optgroup(data-i18n-label="MELEE_WEAPONS")
option(value="small_primitive_weapon", data-i18n="SMALL_PRIMITIVE_WEAPON")
option(value="medium_primitive_weapon", data-i18n="MEDIUM_PRIMITIVE_WEAPON")
option(value="large_primitive_weapon", data-i18n="LARGE_PRIMITIVE_WEAPON")
option(value="small_advanced_weapon", data-i18n="SMALL_ADVANCED_WEAPON")
option(value="medium_advanced_weapon", data-i18n="MEDIUM_ADVANCED_WEAPON")
option(value="large_advanced_weapon", data-i18n="LARGE_ADVANCED_WEAPON")
option(value="stun_baton", data-i18n="STUN_BATON")
option(value="suit_ripper", data-i18n="SUIT_RIPPER")
option(value="punch", data-i18n="PUNCH")
optgroup(data-i18n-label="HEAVY_WEAPONS")
option(value="heavy_machine_gun", data-i18n="HEAVY_MACHINE_GUN")
option(value="rocket_launcher", data-i18n="ROCKET_LAUNCHER")
option(value="demo_charge", data-i18n="DEMO_CHARGE")
option(value="railgun", data-i18n="RAILGUN")
option(value="anti_vehicle_laser", data-i18n="ANTI_VEHICLE_LASER")
option(value="hydra_array", data-i18n="HYDRA_ARRAY")
option(value="wheatcutter_belt", data-i18n="WHEATCUTTER_BELT")
option(value="vortex_cannon", data-i18n="VORTEX_CANNON")
span(name="attr_generate_weapons_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_weapons_button")
span(data-i18n="ADD")
input(type="hidden", name="attr_show_weapon_details", value="1").input-details
fieldset.repeating_weapons
input(type="hidden", name="attr_weapon_api", value="")
input(type="hidden", name="attr_weapon_attack_display", value="")
input(type="hidden", name="attr_weapon_damage_display", value="")
button(type="roll", name="roll_Attack", value!="&{template:swn-attack} {{charname=@{character_name}}} {{title=@{weapon_name}}} {{attack=[[1d20 + @{attack_bonus}[AB] + @{weapon_attack}[Weapon AB] + [[{{@{weapon_skill_bonus},-1}>0}*(@{weapon_skill_bonus}+2) - 2]][Skill] + @{weapon_attribute_mod}[Attribute] @{weapon_burst} @{modifier_query}]]}} {{damage=[[@{weapon_damage} + @{weapon_attribute_mod}[Attribute] + @{weapon_skill_to_damage}[Skill] @{weapon_burst}]]}} {{burst=[[0@{weapon_burst}]]}} @{weapon_shock} {{range=@{weapon_range}}} @{weapon_use_ammo} {{mod=[[0 @{modifier_query}]]}} {{desc=@{weapon_description}}} @{weapon_api}").invisible-button.display
.display
span.name.space-after
span(name="attr_weapon_name").space-after
span(name="attr_weapon_attack_display")
span
| (
span(name="attr_weapon_damage_display")
input(type="hidden", name="attr_weapon_range", value="").hide-empty
span , #[span(data-i18n="RANGE")]: #[span(name="attr_weapon_range")]
| )
input(type="hidden", name="attr_weapon_use_ammo", value="0").hider
span
| . #[span(data-i18n="AMMO")]: 
input(type="number", name="attr_weapon_ammo").inline-input
|  / 
span(name="attr_weapon_ammo_max")
.details
span(name="attr_weapon_description")
.edit.flex-wrap.grey-box-bordered
+text-input("weapon_name", "NAME").grow.name
+text-input("weapon_attack", "ATTACK_BONUS_SHORT")(type="number", value="0").ab.center
+fake-text-input("SKILL").skills-either.weapon-skill.center
select(name="attr_weapon_skill_bonus")
option.skills-revised(value="@{skill_exert}", data-i18n="EXERT")
option.skills-revised(value="@{skill_punch}", data-i18n="PUNCH")
option.skills-revised(value="@{skill_shoot}", data-i18n="SHOOT", selected)
option.skills-revised(value="@{skill_stab}", data-i18n="STAB")
option.skills-wwn(value="@{skill_exert}", data-i18n="EXERT")
option.skills-wwn(value="@{skill_punch}", data-i18n="PUNCH")
option.skills-wwn(value="@{skill_shoot}", data-i18n="SHOOT", selected)
option.skills-wwn(value="@{skill_stab}", data-i18n="STAB")
option.skills-wwn(value="@{skill_magic}", data-i18n="MAGIC")
option.skills-first(value="@{skill_combat_energy}", data-i18n="COMBAT_ENERGY")
option.skills-first(value="@{skill_combat_gunnery}", data-i18n="COMBAT_GUNNERY")
option.skills-first(value="@{skill_combat_primitive}", data-i18n="COMBAT_PRIMITIVE")
option.skills-first(value="@{skill_combat_projectile}", data-i18n="COMBAT_PROJECTILE")
option.skills-first(value="@{skill_combat_psitech}", data-i18n="COMBAT_PSITECH")
option.skills-first(value="@{skill_combat_unarmed}", data-i18n="COMBAT_UNARMED")
option.skills-psionics(value="@{skill_telekinesis}", data-i18n="TELEKINESIS")
option.skills-magic(value="@{skill_sunblade}", data-i18n="SUNBLADE")
option.skills-magic(value="@{skill_fight}", data-i18n="FIGHT")
option(value="0", data-i18n="NONE")
+text-input("weapon_skill_bonus", "SKILL_AB").weapon-skill.skills-neither.center
+fake-text-input("ATTRIBUTE").attribute.center
select(name="attr_weapon_attribute_mod")
each attr in attributes
option(value=`@{${attr}_mod}`, data-i18n=`${attr.toUpperCase()}_SHORT`)
option(value=`@{str_dex_mod}`, data-i18n=`STR_DEX`)
+fake-text-input("BURST").burst.center
select(name="attr_weapon_burst")
option(value="", data-i18n="NO", selected)
option(value="@{burst_query}", data-i18n="ASK")
option(value="+ 2[Burst]", data-i18n="ALWAYS")
+text-input("weapon_damage", "DAMAGE")(value="0").damage.grow.center
+fake-text-input("+SKILL").skill-to-damage.center
input(type="checkbox", name="attr_weapon_skill_to_damage", value="@{weapon_skill_bonus}")
.text-input.shock-damage.center
input(type="text", name="attr_weapon_shock_damage", value="0")
label.label
input(type="checkbox", name="attr_weapon_shock", value!="{{shock=[[@{weapon_shock_damage} + @{weapon_attribute_mod}[Attribute] + @{weapon_skill_to_damage}[Skill]]] ^{SHOCK_DAMAGE_AGAINST_AC_LEQ} @{weapon_shock_ac}!}}")
span(data-i18n="SHOCK")
+text-input("weapon_shock_ac", "SHOCK_AC")(type="number", value="10").shock-ac.center
+text-input("weapon_range", "RANGE").range.grow.center
+text-input-duo("weapon_ammo", "weapon_ammo_max", "", {value: "0"}).ammo.center
label.label
input(type="checkbox", name="attr_weapon_use_ammo", value!="{{ammo=[[0@{weapon_ammo} - (1 @{weapon_burst})]] / @{weapon_ammo|max}}}")
span(data-i18n="AMMO")
+text-input("weapon_encumbrance", "ENCUMBRANCE_SHORT")(type="number", value="0").enc.center
.table-header.rep-grid.details
.weapon-description(data-i18n="DESCRIPTION")
textarea(name="attr_weapon_description").details
//- Shells
.section.ai-enabled.transhuman-enabled
+sectionheader("show_shells", "SHELLS")
.shells
.grey-box
.flex-center
h3(data-i18n="SHELLS")
label.details-button
input(type="checkbox", name="attr_show_shell_details", value="1", checked)
span(data-i18n="EXPAND")
input(type="hidden", name="attr_show_shell_details", value="1").input-details
.table-header.shells-grid.rep-grid.notdetails
.active(data-i18n="ACTIVE?").notdetails
.str(data-i18n="STRENGTH_SHORT").notdetails
.dex(data-i18n="DEXTERITY_SHORT").notdetails
.con(data-i18n="CONSTITUTION_SHORT").notdetails
.affinity(data-i18n="AFFINITY?").notdetails
.name(data-i18n="NAME").notdetails
fieldset.repeating_shells
button.display.invisible-button(name="roll_Shell", type="roll", value!="&{template:swn-default} {{charname=@{character_name}}} {{info=^{SHELL} — STR @{shell_strength} - DEX @{shell_dexterity} - CON @{shell_constitution}}} {{title=@{shell_name}}} {{desc=^{BASIC_ABILITIES}:\n @{shell_ability} @{shell_affinity_active}}}")
.table-header.shells-grid.rep-grid.details.no-highlight
.active(data-i18n="ACTIVE?")
.str(data-i18n="STRENGTH_SHORT")
.dex(data-i18n="DEXTERITY_SHORT")
.con(data-i18n="CONSTITUTION_SHORT")
.affinity(data-i18n="AFFINITY?")
.name(data-i18n="NAME")
.shells-grid.rep-grid
+fake-text-input().center
input(type="checkbox", name="attr_shell_active", value="1").inline-input.rep-radio
+text-input("shell_strength")(type="number", value="0").center.inline-input
+text-input("shell_dexterity")(type="number", value="0").center.inline-input
+text-input("shell_constitution")(type="number", value="0").center.inline-input
+fake-text-input().center
input(type="checkbox", name="attr_shell_affinity_active" value="\n\n^{AFFINITY_ABILITIES}:\n @{shell_affinity}").inline-input
+text-input("shell_name").inline-input.edit
+text-input("shell_name").display
input(type="hidden", name="attr_shell_ability", value="").hide-empty
.rep-grid.details
.table-header
.shell-ability(data-i18n="BASIC_ABILITIES")
span(name="attr_shell_ability").display
textarea(name="attr_shell_ability").edit
.rep-grid.details
.table-header
.shell-affinity(data-i18n="AFFINITY_ABILITIES")
span(name="attr_shell_affinity").display
textarea(name="attr_shell_affinity").edit
//- Foci
.section.foci-left
+foci
//- Psionics and/or Space Magic
.section.super
+sectionheader("show_psionics", false)
span(data-i18n="PSYCHIC_SKILLS_TECHNIQUES").super-psionics-only
span(data-i18n="SPACE_MAGIC").super-magic-only
span(data-i18n="PSIONICS_AND_SPACE_MAGIC").super-both
div
.tabs.flex.super-both
label
input(type="radio", name="attr_tab_super", value="magic")
span(data-i18n="SPACE_MAGIC")
label
input(type="radio", name="attr_tab_super", value="psionics", checked)
span(data-i18n="PSYCHIC_SKILLS_TECHNIQUES")
input(type="hidden", name="attr_tab_super", value="psionics").tab-input
.psionics
.skills-psionic.skill-container(data-i18n-list="SKILL_ORDER_PSIONIC")
each skill in skills.psionic
+makeSkill(skill)
.skill.skill-points
.display.flex-center
span(data-i18n="UNSPENT_PSIONIC_SKILL_POINTS").name
span(name="attr_unspent_psionic_skill_points").level
.edit.flex-center
span(data-i18n="UNSPENT_PSIONIC_SKILL_POINTS").name
input(type="number", min="0", value="0", name="attr_unspent_psionic_skill_points").level
.skills-repeating
fieldset.repeating_psychic-skills
+makeSkill("", true)
.psionics-effort.grey-box
h3(data-i18n="COMMITTED_EFFORT")
+text-input("psionics_extra_effort", "BONUS")(type="number", value="0").center
+text-input("psionics_committed_effort_current", "CURRENT")(type="number", value="0", min="0").center
+text-input("psionics_committed_effort_scene", "SCENE")(type="number", value="0", min="0").center
+text-input("psionics_committed_effort_day", "DAY")(type="number", value="0", min="0").center
+text-input("psionics_total_effort", "UNCOMMITTED")(type="number", value="1", readonly, data-i18n-title="MAXIMUM_EFFORT_DESC").center
.techniques.grey-box.simple-repsection
.flex-center
h3(data-i18n="PSYCHIC_TECHNIQUES")
label.details-button
input(type="checkbox", name="attr_show_technique_details", value="1", checked)
span(data-i18n="EXPAND")
.generate.flex-start.edit
select(name="attr_generate_techniques_source").generate-source
option(data-i18n="CHOOSE_TECHNIQUE")
optgroup(data-i18n-label="BIOPSIONICS")
option(value="psychic_succor", data-i18n="PSYCHIC_SUCCOR")
option(value="mastered_succor", data-i18n="MASTERED_SUCCOR")
option(value="organic_purification_protocols", data-i18n="ORGANIC_PURIFICATION_PROTOCOLS")
option(value="remote_repair", data-i18n="REMOTE_REPAIR")
option(value="invincible_stand", data-i18n="INVINCIBLE_STAND")
option(value="major_organ_restoration", data-i18n="MAJOR_ORGAN_RESTORATION")
option(value="tissue_integrity_field", data-i18n="TISSUE_INTEGRITY_FIELD")
option(value="accelerated_succor", data-i18n="ACCELERATED_SUCCOR")
option(value="metamorph", data-i18n="METAMORPH")
option(value="teratic_overload", data-i18n="TERATIC_OVERLOAD")
option(value="holistic_optimization_patterning", data-i18n="HOLISTIC_OPTIMIZATION_PATTERNING")
option(value="quintessential_reconstruction", data-i18n="QUINTESSENTIAL_RECONSTRUCTION")
optgroup(data-i18n-label="METAPSIONICS")
option(value="psychic_refinement", data-i18n="PSYCHIC_REFINEMENT")
option(value="cloak_powers", data-i18n="CLOAK_POWERS")
option(value="mindtracing", data-i18n="MINDTRACING")
option(value="synthetic_adaptation", data-i18n="SYNTHETIC_ADAPTATION")
option(value="neural_trap", data-i18n="NEURAL_TRAP")
option(value="psychic_static", data-i18n="PSYCHIC_STATIC")
option(value="suspended_manifestation", data-i18n="SUSPENDED_MANIFESTATION")
option(value="concert_of_minds", data-i18n="CONCERT_OF_MINDS")
option(value="metadimensional_friction", data-i18n="METADIMENSIONAL_FRICTION")
option(value="psychic_tutelage", data-i18n="PSYCHIC_TUTELAGE")
option(value="surge_momentum", data-i18n="SURGE_MOMENTUM")
option(value="flawless_mastery", data-i18n="FLAWLESS_MASTERY")
option(value="impervious_pavis_of_will", data-i18n="IMPERVIOUS_PAVIS_OF_WILL")
optgroup(data-i18n-label="PRECOGNITION")
option(value="oracle", data-i18n="ORACLE")
option(value="intuitive_response", data-i18n="INTUITIVE_RESPONSE")
option(value="sense_the_need", data-i18n="SENSE_THE_NEED")
option(value="terminal_reflection", data-i18n="TERMINAL_REFLECTION")
option(value="alternate_outcome", data-i18n="ALTERNATE_OUTCOME")
option(value="destinys_shield", data-i18n="DESTINYS_SHIELD")
option(value="anguished_vision", data-i18n="ANGUISHED_VISION")
option(value="cursed_luck", data-i18n="CURSED_LUCK")
option(value="forced_outcome", data-i18n="FORCED_OUTCOME")
option(value="not_my_time", data-i18n="NOT_MY_TIME")
option(value="prophecy", data-i18n="PROPHECY")
optgroup(data-i18n-label="TELEKINESIS")
option(value="telekinetic_manipulation", data-i18n="TELEKINETIC_MANIPULATION")
option(value="kinetic_transversal", data-i18n="KINETIC_TRANSVERSAL")
option(value="pressure_field", data-i18n="PRESSURE_FIELD")
option(value="telekinetic_armory", data-i18n="TELEKINETIC_ARMORY")
option(value="impact_sump", data-i18n="IMPACT_SUMP")
option(value="slip_field", data-i18n="SLIP_FIELD")
option(value="telekinetic_expertise", data-i18n="TELEKINETIC_EXPERTISE")
option(value="thermokinesis", data-i18n="THERMOKINESIS")
option(value="tangible_force_construct", data-i18n="TANGIBLE_FORCE_CONSTRUCT")
option(value="telekinetic_ram", data-i18n="TELEKINETIC_RAM")
option(value="reactive_telekinesis", data-i18n="REACTIVE_TELEKINESIS")
option(value="force_puppetry", data-i18n="FORCE_PUPPETRY")
option(value="telekinetic_flight", data-i18n="TELEKINETIC_FLIGHT")
optgroup(data-i18n-label="TELEPATHY")
option(value="telepathic_contact", data-i18n="TELEPATHIC_CONTACT")
option(value="facile_mind", data-i18n="FACILE_MIND")
option(value="transmit_thought", data-i18n="TRANSMIT_THOUGHT")
option(value="far_thought", data-i18n="FAR_THOUGHT")
option(value="suppress_cognition", data-i18n="SUPPRESS_COGNITION")
option(value="reflex_response", data-i18n="REFLEX_RESPONSE")
option(value="telepathic_assault", data-i18n="TELEPATHIC_ASSAULT")
option(value="memory_editing", data-i18n="MEMORY_EDITING")
option(value="unity_of_thought", data-i18n="UNITY_OF_THOUGHT")
optgroup(data-i18n-label="TELEPORTATION")
option(value="personal_apportation", data-i18n="PERSONAL_APPORTATION")
option(value="proficient_apportation", data-i18n="PROFICIENT_APPORTATION")
option(value="spatial_awareness", data-i18n="SPATIAL_AWARENESS")
option(value="burdened_apportation", data-i18n="BURDENED_APPORTATION")
option(value="perceptive_dislocation", data-i18n="PERCEPTIVE_DISLOCATION")
option(value="spatial_synchrony_mandala", data-i18n="SPATIAL_SYNCHRONY_MANDALA")
option(value="effortless_apportation", data-i18n="EFFORTLESS_APPORTATION")
option(value="stutterjump", data-i18n="STUTTERJUMP")
option(value="rift_reduplication", data-i18n="RIFT_REDUPLICATION")
option(value="deep_intrusion", data-i18n="DEEP_INTRUSION")
option(value="offensive_apportation", data-i18n="OFFENSIVE_APPORTATION")
span(name="attr_generate_techniques_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_techniques_button")
span(data-i18n="ADD")
input(type="hidden", name="attr_show_technique_details", value="1").input-details
fieldset.repeating_techniques
button.display.invisible-button(name="roll_Technique", type="roll", value!="&{template:swn-default} {{charname=@{character_name}}} {{info=^{PSYCHIC_TECHNIQUE} — @{technique_discipline}}} {{title=@{technique_name}}} {{desc=@{technique_description}}}")
.display
.name.flex
span(name="attr_technique_name")
span.discipline(name="attr_technique_discipline")
.details #[span(name="attr_technique_description")]
.edit.flex-wrap
input.name.grow(type="text", name="attr_technique_name", data-i18n-placeholder="TECHNIQUE")
input.discipline(type="text", name="attr_technique_discipline", data-i18n-placeholder="DISCIPLINE")
textarea.details(name="attr_technique_description", data-i18n-placeholder="DESCRIPTION")
.magic
.skill-container
+makeSkill("know_magic")
+makeSkill("use_magic")
+makeSkill("sunblade")
+makeSkill("fight")
input(type="hidden", name="attr_skill_magic2_name", value="").empty-hider
+makeSkill("magic2", true)
.skills-repeating
fieldset.repeating_magic-skills
+makeSkill("", true)
h3(data-i18n="TYPE_OF_MAGIC")
select(name="attr_magic_type")
option(value="arcanist" data-i18n="ARCANIST")
option(value="magister" data-i18n="MAGISTER")
option(value="adept" data-i18n="ADEPT")
.adept
.magic-effort.grey-box
h3(data-i18n="MAGIC_EFFORT")
+text-input("magic_total_effort", "TOTAL")(type="number", value="0", min="0").center
+text-input("magic_committed_effort_current", "CURRENT")(type="number", value="0", min="0").center
+text-input("magic_committed_effort_scene", "SCENE")(type="number", value="0", min="0").center
+text-input("magic_committed_effort_day", "DAY")(type="number", value="0", min="0").center
+text-input("magic_uncommitted_effort", "UNCOMMITTED")(type="number", value="1", readonly).center
.spells.grey-box.simple-repsection
.flex-center
h3(data-i18n="ABILITIES")
label.details-button
input(type="checkbox", name="attr_show_spell_details", value="1", checked)
span(data-i18n="EXPAND")
input(type="hidden", name="attr_show_spell_details", value="1").input-details
.flex.edit
.name(data-i18n="NAME")
fieldset.repeating_abilities
button.display.invisible-button(type="roll", name="roll_Ability", value!="&{template:swn-default} {{charname=@{character_name}}} {{title=@{ability_name}}} {{info=^{ABILITY}}} {{desc=@{ability_description}}}")
.display
.name.flex-center
span(name="attr_ability_name")
.details #[span(name="attr_ability_description")]
.edit.flex-wrap
input.name(type="text", name="attr_ability_name")
textarea.details(name="attr_ability_description")
.spellcaster
.spell-slots.grey-box
h3(data-i18n="SPELL_SLOTS")
+text-input("spell-slots-first-level", "FIRST_LEVEL")(type="number", value="0", min="0").center
+text-input("spell-slots-second-level", "SECOND_LEVEL")(type="number", value="0", min="0").center
+text-input("spell-slots-third-level", "THIRD_LEVEL")(type="number", value="0", min="0").center
+text-input("spell-slots-fourth-level", "FOURTH_LEVEL")(type="number", value="0", min="0").center
+text-input("spell-slots-fifth-level", "FIFTH_LEVEL")(type="number", value="0", min="0").center
.spells.grey-box.simple-repsection
.flex-center
h3(data-i18n="SPELLS")
label.details-button
input(type="checkbox", name="attr_show_spell_details", value="1", checked)
span(data-i18n="EXPAND")
input(type="hidden", name="attr_show_spell_details", value="1").input-details
.flex.edit
.name(data-i18n="NAME")
.level(data-i18n="LEVEL")
.prepared.arcanist(data-i18n="PREPARED")
.damage(data-i18n="DAMAGE")
fieldset.repeating_spells
button.display.invisible-button(type="roll", name="roll_Spell", value!="&{template:swn-default} {{charname=@{character_name}}} {{title=@{spell_name}}} {{info=^{SPELL}}} {{desc=@{spell_description}}} {{damage=[[@{spell_damage}]]}}")
.display
.name.flex-center
span(name="attr_spell_name")
span(name="attr_spell_level")
span.prepared.arcanist #[span(data-i18n="PREPARED")]:
input.prepared.arcanist(type="number", name="attr_spell_prepared", value="0", min="0")
.details #[span(name="attr_spell_description")]
.edit.flex-wrap
input.name(type="text", name="attr_spell_name")
input.level(type="number", name="attr_spell_level", value="0", min="0")
input.prepared.arcanist(type="number", name="attr_spell_prepared", value="0", min="0")
input.damage(type="text", name="attr_spell_damage", value="0")
textarea.details(name="attr_spell_description")
.column
//- Skills
.section
+sectionheader("show_skills", "SKILLS")
.skills
.skills-revised.skill-container(data-i18n-list="SKILL_ORDER_REVISED")
each skill in skills.revised
+makeSkill(skill)
.skill.skill-points
.display.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
span(name="attr_unspent_skill_points").level
.edit.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
input(type="number", min="0", value="0", name="attr_unspent_skill_points").level
.skills-first.skill-container(data-i18n-list="SKILL_ORDER_FIRST")
each skill in skills.first
+makeSkill(skill, !!customSkills[skill], customSkills[skill])
.skill.skill-points
.display.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
span(name="attr_unspent_skill_points").level
.edit.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
input(type="number", min="0", value="0", name="attr_unspent_skill_points").level
.skills-wwn.skill-container(data-i18n-list="SKILL_ORDER_WWN")
each skill in skills.wwn
+makeSkill(skill, !!customSkills[skill], customSkills[skill])
.skill.skill-points
.display.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
span(name="attr_unspent_skill_points").level
.edit.flex-center
span(data-i18n="UNSPENT_SKILL_POINTS").name
input(type="number", min="0", value="0", name="attr_unspent_skill_points").level
input(type="hidden", name="attr_homebrew_extra_skills", value="0").hider
.skills-repeating
fieldset.repeating_skills
+makeSkill("", true)
.skill-blurb.edit(data-i18n="SKILL_BLURB")
//- Foci
.section.foci-right
+foci
//- AI
.section.cols-2.ai-enabled
+sectionheader("show_ai", "AI")
.ai.halfgrid
.column
.grey-box.ai-processing
h3(data-i18n="COMMITTED_PROCESSING")
+text-input("ai_extra_processing", "BONUS")(type="number", value="0").center
+text-input("ai_committed_processing_current", "CURRENT")(type="number", value="0", min="0").center
+text-input("ai_committed_processing_scene", "SCENE")(type="number", value="0", min="0").center
+text-input("ai_committed_processing_day", "DAY")(type="number", value="0", min="0").center
+text-input("ai_total_processing", "UNCOMMITTED")(type="number", value="1", readonly, data-i18n-title="MAXIMUM_EFFORT_DESC").center
.grey-box.ai-processing-nodes
h3(data-i18n="PROCESSING_NODES") Processing Nodes
.table-header.nodes-grid.rep-grid
.connected(data-i18n="CONNECTED?")
.value(data-i18n="PROCESSING")
.location(data-i18n="LOCATION")
fieldset.repeating_processing-nodes
.nodes-grid.rep-grid
+fake-text-input().center
input(type="checkbox" value="1" name="attr_node_connected")
+text-input("node_value")(type="number" value="0")
+text-input("node_location")
.column
.routines.grey-box.simple-repsection
.flex-center
h3(data-i18n="AI_ROUTINES") AI Routines
label.details-button
input(type="checkbox", name="attr_show_routines_details", value="1", checked)
span(data-i18n="EXPAND")
input(type="hidden", name="attr_show_routines_details", value="1").input-details
fieldset.repeating_routines
button.display.invisible-button(name="roll_Routine", type="roll", value!="&{template:swn-default} {{charname=@{character_name}}} {{info=^{AI_ROUTINE}}} {{title=@{routine_name}}} {{desc=@{routine_description}}}")
.display
.name.flex
span(name="attr_routine_name")
.details #[span(name="attr_routine_description")]
.edit.flex-wrap
input.name.grow(type="text", name="attr_routine_name", data-i18n-placeholder="ROUTINE")
textarea.details(name="attr_routine_description", data-i18n-placeholder="DESCRIPTION")
//- Gear
.section.cols-2
+sectionheader("show_gear", "GEAR")
.gear.halfgrid
.equipment.column
.grey-box.readied-stowed.flex-center
h3(data-i18n="EQUIPMENT")
input(type="hidden", name="attr_gear_readied_over", value="0").input-gear-over
+text-input-duo("gear_readied", "gear_readied_max", "READIED", {value: "5", readonly: true, "data-i18n-title": "STRENGTH/2"})(value="0", readonly)
input(type="hidden", name="attr_gear_stowed_over", value="0").input-gear-over
+text-input-duo("gear_stowed", "gear_stowed_max", "STOWED", {value: "10", readonly: true, "data-i18n-title": "STRENGTH"})(value="0", readonly)
+text-input("credits", "CREDITS")(value="0", min="0", type="number").center
+text-input("credits_owed", "CREDITS_OWED")(value="0", min="0", type="number").center
.grey-box
.generate.flex-start.edit
select(name="attr_generate_gear_source").generate-source
option(data-i18n="CHOOSE_GEAR")
optgroup(data-i18n-label="AMMO_AND_POWER")
option(value="ammo_20_rounds", data-i18n="AMMO_20_ROUNDS")
option(value="ammo_missile", data-i18n="AMMO_MISSILE")
option(value="power_cell_type_a", data-i18n="POWER_CELL_TYPE_A")
option(value="power_cell_type_b", data-i18n="POWER_CELL_TYPE_B")
option(value="solar_recharger", data-i18n="SOLAR_RECHARGER")
option(value="telekinetic_generator", data-i18n="TELEKINETIC_GENERATOR")
optgroup(data-i18n-label="ARTIFACT")
option(value="ai_companion", data-i18n="AI_COMPANION")
option(value="integrity_stims", data-i18n="INTEGRITY_STIMS")
option(value="juggernaut_stims", data-i18n="JUGGERNAUT_STIMS")
option(value="micropurgator_stims", data-i18n="MICROPURGATOR_STIMS")
option(value="mindwall_helmet", data-i18n="MINDWALL_HELMET")
option(value="polymorphic_nanites", data-i18n="POLYMORPHIC_NANITES")
option(value="pseudonuke", data-i18n="PSEUDONUKE")
option(value="redivivus_sheath", data-i18n="REDIVIVUS_SHEATH")
option(value="system_reset_inductor", data-i18n="SYSTEM_RESET_INDUCTOR")
option(value="wideawake_serum", data-i18n="WIDEAWAKE_SERUM")
optgroup(data-i18n-label="COMMUNICATIONS")
option(value="comm_server", data-i18n="COMM_SERVER")
option(value="compad", data-i18n="COMPAD")
option(value="field_radio", data-i18n="FIELD_RADIO")
option(value="translator_torc", data-i18n="TRANSLATOR_TORC")
optgroup(data-i18n-label="COMPUTING_GEAR")
option(value="black_slab", data-i18n="BLACK_SLAB")
option(value="data_phase_tab", data-i18n="DATA_PHASE_TAB")
option(value="data_protocol", data-i18n="DATA_PROTOCOL")
option(value="dataslab", data-i18n="DATASLAB")
option(value="line_shunt", data-i18n="LINE_SHUNT")
option(value="remote_link_unit", data-i18n="REMOTE_LINK_UNIT")
option(value="stiletto_charge", data-i18n="STILETTO_CHARGE")
option(value="storage_unit", data-i18n="STORAGE_UNIT")
option(value="tightbeam_link_unit", data-i18n="TIGHTBEAM_LINK_UNIT")
optgroup(data-i18n-label="FIELD_EQUIPMENT")
option(value="atmofilter", data-i18n="ATMOFILTER")
option(value="backpack", data-i18n="BACKPACK")
option(value="binoculars", data-i18n="BINOCULARS")
option(value="climbing_harness", data-i18n="CLIMBING_HARNESS")
option(value="glowbug", data-i18n="GLOWBUG")
option(value="grapnel_launcher", data-i18n="GRAPNEL_LAUNCHER")
option(value="grav_chute", data-i18n="GRAV_CHUTE")
option(value="grav_harness", data-i18n="GRAV_HARNESS")
option(value="instapanel", data-i18n="INSTAPANEL")
option(value="low_light_goggles", data-i18n="LOW_LIGHT_GOGGLES")
option(value="navcomp", data-i18n="NAVCOMP")
option(value="portabox", data-i18n="PORTABOX")
option(value="pressure_tent", data-i18n="PRESSURE_TENT")
option(value="rations_1_day", data-i18n="RATIONS_1_DAY")
option(value="rope_20_meters", data-i18n="ROPE_20_METERS")
option(value="scout_report", data-i18n="SCOUT_REPORT")
option(value="survey_scanner", data-i18n="SURVEY_SCANNER")
option(value="survival_kit", data-i18n="SURVIVAL_KIT")
option(value="telescoping_pole", data-i18n="TELESCOPING_POLE")
option(value="thermal_flare", data-i18n="THERMAL_FLARE")
option(value="trade_goods", data-i18n="TRADE_GOODS")
option(value="trade_metals", data-i18n="TRADE_METALS")
option(value="vacc_fresher", data-i18n="VACC_FRESHER")
option(value="vacc_skin", data-i18n="VACC_SKIN")
option(value="vacc_suit", data-i18n="VACC_SUIT")
optgroup(data-i18n-label="PHARMACEUTICALS")
option(value="bezoar", data-i18n="BEZOAR")
option(value="brainwave", data-i18n="BRAINWAVE")
option(value="hush", data-i18n="HUSH")
option(value="lift", data-i18n="LIFT")
option(value="psych", data-i18n="PSYCH")
option(value="pretech_cosmetic", data-i18n="PRETECH_COSMETIC")
option(value="reverie", data-i18n="REVERIE")
option(value="squeal", data-i18n="SQUEAL")
option(value="tsunami", data-i18n="TSUNAMI")
optgroup(data-i18n-label="TOOLS_AND_MEDICAL")
option(value="bioscanner", data-i18n="BIOSCANNER")
option(value="lazarus_patch", data-i18n="LAZARUS_PATCH")
option(value="medkit", data-i18n="MEDKIT")
option(value="metatool", data-i18n="METATOOL")
option(value="spare_parts", data-i18n="SPARE_PARTS")
option(value="tailored_antiallergens", data-i18n="TAILORED_ANTIALLERGENS")
option(value="toolkit_postech", data-i18n="TOOLKIT_POSTECH")
option(value="toolkit_pretech", data-i18n="TOOLKIT_PRETECH")
span(name="attr_generate_gear_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_gear_button")
span(data-i18n="ADD")
.table-header.gear-grid.rep-grid
.amount #
.name(data-i18n="NAME")
.details(data-i18n="DESCRIPTION")
.enc(data-i18n="ENCUMBRANCE_SHORT" data-i18n-title="ENCUMBRANCE")
.status(data-i18n="STATUS")
.bundled(data-i18n="BUNDLED")
Bundled
fieldset.repeating_weapons
input(type="hidden", name="attr_weapon_encumbrance", value="0").hider
.gear-grid.rep-grid
.amount
+text-input("weapon_name")(readonly)
+fake-text-input()
textarea(name="attr_weapon_description")
+text-input("weapon_encumbrance")(type="number", value="0").center
+fake-text-input()
select.status(name="attr_weapon_status")
option(value="", data-i18n="OTHER", selected)
option(value="READIED", data-i18n="READIED")
option(value="STOWED", data-i18n="STOWED")
fieldset.repeating_gear
.gear-grid.rep-grid
+text-input("gear_amount")(type="number", value="1", min="0")
+text-input("gear_name")(data-i18n-placeholder="ITEM")
+fake-text-input()
textarea(name="attr_gear_description")
+text-input("gear_encumbrance")(type="number", value="0", step="any").center
+fake-text-input()
select.status(name="attr_gear_status")
option(value="", data-i18n="OTHER", selected)
option(value="READIED", data-i18n="READIED")
option(value="STOWED", data-i18n="STOWED")
+fake-text-input()
input(name="attr_gear_bundled" type="checkbox" value="on")
.grey-box.other
h3(data-i18n="OTHER_EQUIPMENT")
textarea(name="attr_gear_other").other-gear
.column
.armor.grey-box
.flex-center
h3
| #[span(data-i18n="ARMOR")] #[span(data-i18n="AC")] #[span(name="attr_AC")]
label.details-button
input(type="checkbox", name="attr_show_armor_details", value="1", checked)
span(data-i18n="EXPAND")
.generate.flex-start.edit
select(name="attr_generate_armor_source").generate-source
option(value="", data-i18n="CHOOSE_ARMOR", selected)
optgroup(data-i18n-label="PRIMITIVE")
option(value="shield", data-i18n="SHIELD")
option(value="leather_jacks_thick_hides_quilted_armor", data-i18n="LEATHER_JACKS_THICK_HIDES_QUILTED_ARMOR")
option(value="cuirass_brigandine_linothorax_half_plate", data-i18n="CUIRASS_BRIGANDINE_LINOTHORAX_HALF_PLATE")
option(value="full_plate_layered_mail", data-i18n="FULL_PLATE_LAYERED_MAIL")
optgroup(data-i18n-label="STREET")
option(value="warpaint", data-i18n="WARPAINT")
option(value="armored_undersuit", data-i18n="ARMORED_UNDERSUIT")
option(value="secure_clothing", data-i18n="SECURE_CLOTHING")
option(value="armored_vacc_suit", data-i18n="ARMORED_VACC_SUIT")
option(value="deflector_array", data-i18n="DEFLECTOR_ARRAY")
optgroup(data-i18n-label="COMBAT")
option(value="force_pavis", data-i18n="FORCE_PAVIS")
option(value="security_armor", data-i18n="SECURITY_ARMOR")
option(value="woven_body_armor", data-i18n="WOVEN_BODY_ARMOR")
option(value="combat_field_uniform", data-i18n="COMBAT_FIELD_UNIFORM")
option(value="icarus_harness", data-i18n="ICARUS_HARNESS")
optgroup(data-i18n-label="POWERED")
option(value="vestimentum", data-i18n="VESTIMENTUM")
option(value="assault_suit", data-i18n="ASSAULT_SUIT")
option(value="storm_armor", data-i18n="STORM_ARMOR")
option(value="field_emitter_panoply", data-i18n="FIELD_EMITTER_PANOPLY")
optgroup(data-i18n-label="ARTIFACT")
option(value="executive_security_suit", data-i18n="EXECUTIVE_SECURITY_SUIT")
option(value="ghost_mantle", data-i18n="GHOST_MANTLE")
option(value="polyplast_carapace", data-i18n="POLYPLAST_CARAPACE")
option(value="psitech_combat_suit", data-i18n="PSITECH_COMBAT_SUIT")
option(value="stutterjump_suit", data-i18n="STUTTERJUMP_SUIT")
option(value="titan_powered_armor", data-i18n="TITAN_POWERED_ARMOR")
option(value="tempest_assault_array", data-i18n="TEMPEST_ASSAULT_ARRAY")
span(name="attr_generate_armor_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_armor_button")
span(data-i18n="ADD")
.table-header.armor-grid.rep-grid
.active.center(data-i18n="ACTIVE?")
.name(data-i18n="NAME")
.ac(data-i18n="AC")
.type(data-i18n="TYPE")
.enc(data-i18n="ENCUMBRANCE_SHORT")
.enc-bonus(data-i18n="+STR")
.status(data-i18n="STATUS")
.armor-grid.rep-grid.edit
+text-input("innate_ac_name")(value="Innate AC", data-i18n="INNATE_AC").col-2
+text-input("innate_ac")(type="number", value="10").center
input(type="hidden", name="attr_show_armor_details", value="1").input-details
fieldset.repeating_armor
.armor-grid.rep-grid
+fake-text-input().center
input(type="checkbox", name="attr_armor_active", value="1")
+text-input("armor_name")
+text-input("armor_ac")(type="number", value="0").center
+fake-text-input()
select(name="attr_armor_type")
option(value="none", data-i18n="NONE")
option(value="PRIMITIVE", data-i18n="PRIMITIVE")
option(value="STREET", data-i18n="STREET", selected)
option(value="COMBAT", data-i18n="COMBAT")
option(value="POWERED", data-i18n="POWERED")
option(value="SHIELD", data-i18n="SHIELD")
option(value="ARTIFACT", data-i18n="ARTIFACT")
+text-input("armor_encumbrance")(type="number", value="0").center
+text-input("armor_encumbrance_bonus")(type="number", value="0").center
+fake-text-input()
select(name="attr_armor_status")
option(value="", data-i18n="OTHER", selected)
option(value="READIED", data-i18n="READIED")
option(value="STOWED", data-i18n="STOWED")
input(type="hidden", name="attr_armor_description", value="").hide-empty
.armor-grid.rep-grid.details
.display
span(name="attr_armor_description")
+fake-text-input().edit
textarea(name="attr_armor_description")
.cyberware.simple-repsection.grey-box
.flex-center
h3
| #[span(data-i18n="CYBERWARE")] #[span(data-i18n="TOTAL_CYBERWARE_STRAIN")] #[span(name="attr_cyberware_strain_total")]
label.details-button
input(type="checkbox", name="attr_show_cyberware_details", value="1", checked)
span(data-i18n="EXPAND")
.generate.flex-start.edit
select(name="attr_generate_cyberware_source").generate-source
option(value="", data-i18n="CHOOSE_CYBERWARE", selected)
option(value="adrenal_suppression_pump", data-i18n="ADRENAL_SUPPRESSION_PUMP")
option(value="bioadaptation_augments", data-i18n="BIOADAPTATION_AUGMENTS")
option(value="body_arsenal_array", data-i18n="BODY_ARSENAL_ARRAY")
option(value="body_sculpting", data-i18n="BODY_SCULPTING")
option(value="dermal_armor", data-i18n="DERMAL_ARMOR")
option(value="drone_control_link", data-i18n="DRONE_CONTROL_LINK")
option(value="eelskin_capacitor_mesh", data-i18n="EELSKIN_CAPACITOR_MESH")
option(value="gecko_anchors", data-i18n="GECKO_ANCHORS")
option(value="ghost_talker_transceiver", data-i18n="GHOST_TALKER_TRANSCEIVER")
option(value="holdout_cavity", data-i18n="HOLDOUT_CAVITY")
option(value="holoskin_emitter", data-i18n="HOLOSKIN_EMITTER")
option(value="identity_submersion_trigger", data-i18n="IDENTITY_SUBMERSION_TRIGGER")
option(value="immunofiltration_systems", data-i18n="IMMUNOFILTRATION_SYSTEMS")
option(value="induced_coma_trigger", data-i18n="INDUCED_COMA_TRIGGER")
option(value="neurointruder_alert", data-i18n="NEUROINTRUDER_ALERT")
option(value="panspectral_optics", data-i18n="PANSPECTRAL_OPTICS")
option(value="pressure_sheathing", data-i18n="PRESSURE_SHEATHING")
option(value="prosthetic_limb", data-i18n="PROSTHETIC_LIMB")
option(value="revenant_wiring", data-i18n="REVENANT_WIRING")
option(value="slowtime_window", data-i18n="SLOWTIME_WINDOW")
option(value="stabilization_overrides", data-i18n="STABILIZATION_OVERRIDES")
option(value="tagger_nanites", data-i18n="TAGGER_NANITES")
option(value="toxin_injector", data-i18n="TOXIN_INJECTOR")
option(value="twitchlock_actuators", data-i18n="TWITCHLOCK_ACTUATORS")
span(name="attr_generate_cyberware_info").generate-info
label.generate-button
input(type="checkbox", name="attr_generate_cyberware_button")
span(data-i18n="ADD")
input(type="hidden", name="attr_show_cyberware_details", value="1").input-details
fieldset.repeating_cyberware
button.display.invisible-button(name="roll_Cyberware", type="roll", value!="&{template:swn-default} {{charname=@{character_name}}} {{title=@{cyberware_name}}} {{info=^{CYBERWARE}; @{cyberware_strain} ^{STRAIN}}} {{desc=@{cyberware_description}}}")
.display
.name.flex-between
span(name="attr_cyberware_name")
span #[span(name="attr_cyberware_strain")] #[span(data-i18n="STRAIN").lower]
.details #[span(name="attr_cyberware_description")]
.edit.flex-center
input(type="text", name="attr_cyberware_name").name
span #[span(data-i18n="STRAIN_COST")]:
input(type="number", name="attr_cyberware_strain", value="0").strain
textarea(name="attr_cyberware_description", data-i18n-placeholder="DESCRIPTION").details
//- Misc
.section.cols-2
+sectionheader("show_misc", "MISCELLANEOUS")
.misc
.thirdsgrid.repeating-flex-row
.goals.grey-box.cols-2
h3(data-i18n="GOALS")
fieldset.repeating_goals
.flex
+text-input("goal_name").name.grow
+text-input("goal_xp")(type="number", min="0", data-i18n-placeholder="XP").xp.center
.languages.grey-box
h3(data-i18n="LANGUAGES")
fieldset.repeating_languages
+text-input("language")
.halfgrid.notes
textarea(name="attr_notes", data-i18n-placeholder="NOTES")
textarea(name="attr_other_notes", data-i18n-placeholder="NOTES")