mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-31 04:02:29 +00:00
996 lines
55 KiB
Plaintext
996 lines
55 KiB
Plaintext
-
|
||
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")
|