Files
2025-08-13 09:49:38 -07:00

8632 lines
400 KiB
HTML
Raw Permalink 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.
<div class="sheet-d6pp-sheet compendium-drop-target beasts">
<input accept="character_type" type="hidden" name="attr_character_type" />
<input type="hidden" name="attr_defaults_set" value="0" />
<input type="hidden" name="attr_strength_string" />
<input type="hidden" name="attr_strength_base_string" />
<input type="hidden" name="attr_strength_adjustment" />
<input type="hidden" name="attr_strength_rollcode" />
<input type="hidden" name="attr_strength_displayname" value="Strength" />
<input type="hidden" name="attr_agility_string"/>
<input type="hidden" name="attr_agility_base_string" />
<input type="hidden" name="attr_agility_adjustment"/>
<input type="hidden" name="attr_agility_rollcode" />
<input type="hidden" name="attr_agility_displayname" value="Agility" />
<input type="hidden" name="attr_health_string" />
<input type="hidden" name="attr_health_base_string" />
<input type="hidden" name="attr_health_adjustment" />
<input type="hidden" name="attr_health_rollcode" />
<input type="hidden" name="attr_health_displayname" value="Health" />
<input type="hidden" name="attr_perception_string" />
<input type="hidden" name="attr_perception_base_string" />
<input type="hidden" name="attr_perception_adjustment" />
<input type="hidden" name="attr_perception_rollcode" />
<input type="hidden" name="attr_perception_displayname" value="Perception" />
<input type="hidden" name="attr_quickness_string" />
<input type="hidden" name="attr_quickness_base_string" />
<input type="hidden" name="attr_quickness_adjustment" />
<input type="hidden" name="attr_quickness_rollcode" />
<input type="hidden" name="attr_quickness_displayname" value="Quickness" />
<input type="hidden" name="attr_willpower_string" />
<input type="hidden" name="attr_willpower_base_string" />
<input type="hidden" name="attr_willpower_adjustment" />
<input type="hidden" name="attr_willpower_rollcode" />
<input type="hidden" name="attr_willpower_displayname" value="Willpower" />
<input type="hidden" name="attr_intelligence_string" />
<input type="hidden" name="attr_intelligence_base_string" />
<input type="hidden" name="attr_intelligence_adjustment" />
<input type="hidden" name="attr_intelligence_rollcode" />
<input type="hidden" name="attr_intelligence_displayname" value="Intelligence" />
<input type="hidden" name="attr_manualdex_string" />
<input type="hidden" name="attr_manualdex_base_string" />
<input type="hidden" name="attr_manualdex_adjustment" />
<input type="hidden" name="attr_manualdex_rollcode" />
<input type="hidden" name="attr_manualdex_displayname" value="Manual Dex" />
<input type="hidden" name="attr_charisma_string" />
<input type="hidden" name="attr_charisma_base_string" />
<input type="hidden" name="attr_charisma_adjustment" />
<input type="hidden" name="attr_charisma_rollcode" />
<input type="hidden" name="attr_charisma_displayname" value="Charisma" />
<input type="hidden" name="attr_core_value" />
<input type="hidden" name="attr_core_string" />
<input type="hidden" name="attr_core_min" />
<input type="hidden" name="attr_core_cost" />
<input type="hidden" name="attr_core_refund" />
<input type="hidden" name="attr_social_value" />
<input type="hidden" name="attr_social_string" />
<input type="hidden" name="attr_social_min" />
<input type="hidden" name="attr_social_cost" />
<input type="hidden" name="attr_social_refund" />
<input type="hidden" name="attr_performance_value" />
<input type="hidden" name="attr_performance_string" />
<input type="hidden" name="attr_performance_min" />
<input type="hidden" name="attr_performance_cost" />
<input type="hidden" name="attr_performance_refund" />
<input type="hidden" name="attr_thievery_value" />
<input type="hidden" name="attr_thievery_string" />
<input type="hidden" name="attr_thievery_min" />
<input type="hidden" name="attr_thievery_cost" />
<input type="hidden" name="attr_thievery_refund" />
<input type="hidden" name="attr_cowpoke_value" />
<input type="hidden" name="attr_cowpoke_string" />
<input type="hidden" name="attr_cowpoke_min" />
<input type="hidden" name="attr_cowpoke_cost" />
<input type="hidden" name="attr_cowpoke_refund" />
<input type="hidden" name="attr_alertness_value" />
<input type="hidden" name="attr_alertness_string" />
<input type="hidden" name="attr_alertness_min" />
<input type="hidden" name="attr_alertness_cost" />
<input type="hidden" name="attr_alertness_refund" />
<input type="hidden" name="attr_survival_value" />
<input type="hidden" name="attr_survival_string" />
<input type="hidden" name="attr_survival_min" />
<input type="hidden" name="attr_survival_cost" />
<input type="hidden" name="attr_survival_refund" />
<input type="hidden" name="attr_stealth_value" />
<input type="hidden" name="attr_stealth_string" />
<input type="hidden" name="attr_stealth_min" />
<input type="hidden" name="attr_stealth_cost" />
<input type="hidden" name="attr_stealth_refund" />
<input type="hidden" name="attr_physical_value" />
<input type="hidden" name="attr_physical_string" />
<input type="hidden" name="attr_physical_min" />
<input type="hidden" name="attr_physical_cost" />
<input type="hidden" name="attr_physical_refund" />
<input type="hidden" name="attr_medical_value" />
<input type="hidden" name="attr_medical_string" />
<input type="hidden" name="attr_medical_min" />
<input type="hidden" name="attr_medical_cost" />
<input type="hidden" name="attr_medical_refund" />
<input type="hidden" name="attr_boating_value" />
<input type="hidden" name="attr_boating_string" />
<input type="hidden" name="attr_boating_min" />
<input type="hidden" name="attr_boating_cost" />
<input type="hidden" name="attr_boating_refund" />
<input type="hidden" name="attr_technical_value" />
<input type="hidden" name="attr_technical_string" />
<input type="hidden" name="attr_technical_min" />
<input type="hidden" name="attr_technical_cost" />
<input type="hidden" name="attr_technical_refund" />
<input type="hidden" name="attr_knowledge_value" />
<input type="hidden" name="attr_knowledge_string" />
<input type="hidden" name="attr_knowledge_min" />
<input type="hidden" name="attr_knowledge_cost" />
<input type="hidden" name="attr_knowledge_refund" />
<input type="hidden" name="attr_horsemanship_value" />
<input type="hidden" name="attr_horsemanship_string" />
<input type="hidden" name="attr_horsemanship_min" />
<input type="hidden" name="attr_horsemanship_cost" />
<input type="hidden" name="attr_horsemanship_refund" />
<input type="hidden" name="attr_sidearms_value" />
<input type="hidden" name="attr_sidearms_string" />
<input type="hidden" name="attr_sidearms_min" />
<input type="hidden" name="attr_sidearms_cost" />
<input type="hidden" name="attr_sidearms_refund" />
<input type="hidden" name="attr_longarms_value" />
<input type="hidden" name="attr_longarms_string" />
<input type="hidden" name="attr_longarms_min" />
<input type="hidden" name="attr_longarms_cost" />
<input type="hidden" name="attr_longarms_refund" />
<input type="hidden" name="attr_unarmed_value" />
<input type="hidden" name="attr_unarmed_string" />
<input type="hidden" name="attr_unarmed_min" />
<input type="hidden" name="attr_unarmed_cost" />
<input type="hidden" name="attr_unarmed_refund" />
<input type="hidden" name="attr_armed_value" />
<input type="hidden" name="attr_armed_string" />
<input type="hidden" name="attr_armed_min" />
<input type="hidden" name="attr_armed_cost" />
<input type="hidden" name="attr_armed_refund" />
<input type="hidden" name="attr_primitive_value" />
<input type="hidden" name="attr_primitive_string" />
<input type="hidden" name="attr_primitive_min" />
<input type="hidden" name="attr_primitive_cost" />
<input type="hidden" name="attr_primitive_refund" />
<input type="hidden" name="attr_initiative_attributes" />
<input type="hidden" name="attr_initiative_specialized" value="" />
<input type="hidden" name="attr_initiative_rollcode" />
<input type="hidden" name="attr_initiative_string" />
<input type="hidden" name="attr_initiative_skillgroup" />
<input type="hidden" name="attr_initiative_active" />
<input type="hidden" name="attr_initiative_displayname" value="Initative" />
<input type="hidden" name="attr_dodge_attributes" />
<input type="hidden" name="attr_dodge_specialized" value="" />
<input type="hidden" name="attr_dodge_rollcode" />
<input type="hidden" name="attr_dodge_string" />
<input type="hidden" name="attr_dodge_skillgroup" />
<input type="hidden" name="attr_dodge_active" />
<input type="hidden" name="attr_dodge_displayname" value="Dodge" />
<input type="hidden" name="attr_endure_attributes" />
<input type="hidden" name="attr_endure_specialized" value="" />
<input type="hidden" name="attr_endure_rollcode" />
<input type="hidden" name="attr_endure_string" />
<input type="hidden" name="attr_endure_skillgroup" />
<input type="hidden" name="attr_endure_active" />
<input type="hidden" name="attr_endure_displayname" value="Endure" />
<input type="hidden" name="attr_avoid_attributes" />
<input type="hidden" name="attr_avoid_specialized" value="" />
<input type="hidden" name="attr_avoid_rollcode" />
<input type="hidden" name="attr_avoid_string" />
<input type="hidden" name="attr_avoid_skillgroup" />
<input type="hidden" name="attr_avoid_active" />
<input type="hidden" name="attr_avoid_displayname" value="Avoid" />
<input type="hidden" name="attr_persuade_attributes" />
<input type="hidden" name="attr_persuade_specialized" value="" />
<input type="hidden" name="attr_persuade_rollcode" />
<input type="hidden" name="attr_persuade_string" />
<input type="hidden" name="attr_persuade_skillgroup" />
<input type="hidden" name="attr_persuade_active" />
<input type="hidden" name="attr_persuade_displayname" value="Persuade" />
<input type="hidden" name="attr_intimidate_attributes" />
<input type="hidden" name="attr_intimidate_specialized" value="" />
<input type="hidden" name="attr_intimidate_rollcode" />
<input type="hidden" name="attr_intimidate_string" />
<input type="hidden" name="attr_intimidate_skillgroup" />
<input type="hidden" name="attr_intimidate_active" />
<input type="hidden" name="attr_intimidate_displayname" value="Intimidate" />
<input type="hidden" name="attr_deceive_attributes" />
<input type="hidden" name="attr_deceive_specialized" value="" />
<input type="hidden" name="attr_deceive_rollcode" />
<input type="hidden" name="attr_deceive_string" />
<input type="hidden" name="attr_deceive_skillgroup" />
<input type="hidden" name="attr_deceive_active" />
<input type="hidden" name="attr_deceive_displayname" value="Deceive" />
<input type="hidden" name="attr_negotiate_attributes" />
<input type="hidden" name="attr_negotiate_specialized" value="" />
<input type="hidden" name="attr_negotiate_rollcode" />
<input type="hidden" name="attr_negotiate_string" />
<input type="hidden" name="attr_negotiate_skillgroup" />
<input type="hidden" name="attr_negotiate_active" />
<input type="hidden" name="attr_negotiate_displayname" value="Negotiate" />
<input type="hidden" name="attr_seduce_attributes" />
<input type="hidden" name="attr_seduce_specialized" value="" />
<input type="hidden" name="attr_seduce_rollcode" />
<input type="hidden" name="attr_seduce_string" />
<input type="hidden" name="attr_seduce_skillgroup" />
<input type="hidden" name="attr_seduce_active" />
<input type="hidden" name="attr_seduce_displayname" value="Seduce" />
<input type="hidden" name="attr_streetwise_attributes" />
<input type="hidden" name="attr_streetwise_specialized" value="" />
<input type="hidden" name="attr_streetwise_rollcode" />
<input type="hidden" name="attr_streetwise_string" />
<input type="hidden" name="attr_streetwise_skillgroup" />
<input type="hidden" name="attr_streetwise_active" />
<input type="hidden" name="attr_streetwise_displayname" value="Streetwise" />
<input type="hidden" name="attr_dance_attributes" />
<input type="hidden" name="attr_dance_specialized" value="" />
<input type="hidden" name="attr_dance_rollcode" />
<input type="hidden" name="attr_dance_string" />
<input type="hidden" name="attr_dance_skillgroup" />
<input type="hidden" name="attr_dance_active" />
<input type="hidden" name="attr_dance_displayname" value="Dance" />
<input type="hidden" name="attr_sing_attributes" />
<input type="hidden" name="attr_sing_specialized" value="" />
<input type="hidden" name="attr_sing_rollcode" />
<input type="hidden" name="attr_sing_string" />
<input type="hidden" name="attr_sing_skillgroup" />
<input type="hidden" name="attr_sing_active" />
<input type="hidden" name="attr_sing_displayname" value="Sing" />
<input type="hidden" name="attr_acting_attributes" />
<input type="hidden" name="attr_acting_specialized" value="" />
<input type="hidden" name="attr_acting_rollcode" />
<input type="hidden" name="attr_acting_string" />
<input type="hidden" name="attr_acting_skillgroup" />
<input type="hidden" name="attr_acting_active" />
<input type="hidden" name="attr_acting_displayname" value="Acting" />
<input type="hidden" name="attr_art_attributes" />
<input type="hidden" name="attr_art_specialized" value="" />
<input type="hidden" name="attr_art_rollcode" />
<input type="hidden" name="attr_art_string" />
<input type="hidden" name="attr_art_skillgroup" />
<input type="hidden" name="attr_art_active" />
<input type="hidden" name="attr_art_displayname" value="Art" />
<input type="hidden" name="attr_comedy_attributes" />
<input type="hidden" name="attr_comedy_specialized" value="" />
<input type="hidden" name="attr_comedy_rollcode" />
<input type="hidden" name="attr_comedy_string" />
<input type="hidden" name="attr_comedy_skillgroup" />
<input type="hidden" name="attr_comedy_active" />
<input type="hidden" name="attr_comedy_displayname" value="Comedy" />
<input type="hidden" name="attr_play_instrument_attributes" />
<input type="hidden" name="attr_play_instrument_specialized" value="" />
<input type="hidden" name="attr_play_instrument_rollcode" />
<input type="hidden" name="attr_play_instrument_string" />
<input type="hidden" name="attr_play_instrument_skillgroup" />
<input type="hidden" name="attr_play_instrument_active" />
<input type="hidden" name="attr_play_instrument_displayname" value="Play Instrument" />
<input type="hidden" name="attr_disguise_attributes" />
<input type="hidden" name="attr_disguise_specialized" value="" />
<input type="hidden" name="attr_disguise_rollcode" />
<input type="hidden" name="attr_disguise_string" />
<input type="hidden" name="attr_disguise_skillgroup" />
<input type="hidden" name="attr_disguise_active" />
<input type="hidden" name="attr_disguise_displayname" value="Disguise" />
<input type="hidden" name="attr_gambling_attributes" />
<input type="hidden" name="attr_gambling_specialized" value="" />
<input type="hidden" name="attr_gambling_rollcode" />
<input type="hidden" name="attr_gambling_string" />
<input type="hidden" name="attr_gambling_skillgroup" />
<input type="hidden" name="attr_gambling_active" />
<input type="hidden" name="attr_gambling_displayname" value="Gambling" />
<input type="hidden" name="attr_showmanship_attributes" />
<input type="hidden" name="attr_showmanship_specialized" value="" />
<input type="hidden" name="attr_showmanship_rollcode" />
<input type="hidden" name="attr_showmanship_string" />
<input type="hidden" name="attr_showmanship_skillgroup" />
<input type="hidden" name="attr_showmanship_active" />
<input type="hidden" name="attr_showmanship_displayname" value="Showmanship" />
<input type="hidden" name="attr_sleight_of_hand_attributes" />
<input type="hidden" name="attr_sleight_of_hand_specialized" value="" />
<input type="hidden" name="attr_sleight_of_hand_rollcode" />
<input type="hidden" name="attr_sleight_of_hand_string" />
<input type="hidden" name="attr_sleight_of_hand_skillgroup" />
<input type="hidden" name="attr_sleight_of_hand_active" />
<input type="hidden" name="attr_sleight_of_hand_displayname" value="Sleight of Hand" />
<input type="hidden" name="attr_lockpicking_attributes" />
<input type="hidden" name="attr_lockpicking_specialized" value="" />
<input type="hidden" name="attr_lockpicking_rollcode" />
<input type="hidden" name="attr_lockpicking_string" />
<input type="hidden" name="attr_lockpicking_skillgroup" />
<input type="hidden" name="attr_lockpicking_active" />
<input type="hidden" name="attr_lockpicking_displayname" value="Lockpicking" />
<input type="hidden" name="attr_forgery_attributes" />
<input type="hidden" name="attr_forgery_specialized" value="" />
<input type="hidden" name="attr_forgery_rollcode" />
<input type="hidden" name="attr_forgery_string" />
<input type="hidden" name="attr_forgery_skillgroup" />
<input type="hidden" name="attr_forgery_active" />
<input type="hidden" name="attr_forgery_displayname" value="Forgery" />
<input type="hidden" name="attr_cheating_attributes" />
<input type="hidden" name="attr_cheating_specialized" value="" />
<input type="hidden" name="attr_cheating_rollcode" />
<input type="hidden" name="attr_cheating_string" />
<input type="hidden" name="attr_cheating_skillgroup" />
<input type="hidden" name="attr_cheating_active" />
<input type="hidden" name="attr_cheating_displayname" value="Cheating" />
<input type="hidden" name="attr_roping_attributes" />
<input type="hidden" name="attr_roping_specialized" value="" />
<input type="hidden" name="attr_roping_rollcode" />
<input type="hidden" name="attr_roping_string" />
<input type="hidden" name="attr_roping_skillgroup" />
<input type="hidden" name="attr_roping_active" />
<input type="hidden" name="attr_roping_displayname" value="Roping" />
<input type="hidden" name="attr_cattle_handling_attributes" />
<input type="hidden" name="attr_cattle_handling_specialized" value="" />
<input type="hidden" name="attr_cattle_handling_rollcode" />
<input type="hidden" name="attr_cattle_handling_string" />
<input type="hidden" name="attr_cattle_handling_skillgroup" />
<input type="hidden" name="attr_cattle_handling_active" />
<input type="hidden" name="attr_cattle_handling_displayname" value="Cattle Handling" />
<input type="hidden" name="attr_cattle_care_attributes" />
<input type="hidden" name="attr_cattle_care_specialized" value="" />
<input type="hidden" name="attr_cattle_care_rollcode" />
<input type="hidden" name="attr_cattle_care_string" />
<input type="hidden" name="attr_cattle_care_skillgroup" />
<input type="hidden" name="attr_cattle_care_active" />
<input type="hidden" name="attr_cattle_care_displayname" value="Cattle Care" />
<input type="hidden" name="attr_cattle_empathy_attributes" />
<input type="hidden" name="attr_cattle_empathy_specialized" value="" />
<input type="hidden" name="attr_cattle_empathy_rollcode" />
<input type="hidden" name="attr_cattle_empathy_string" />
<input type="hidden" name="attr_cattle_empathy_skillgroup" />
<input type="hidden" name="attr_cattle_empathy_active" />
<input type="hidden" name="attr_cattle_empathy_displayname" value="Cattle Empathy" />
<input type="hidden" name="attr_search_attributes" />
<input type="hidden" name="attr_search_specialized" value="" />
<input type="hidden" name="attr_search_rollcode" />
<input type="hidden" name="attr_search_string" />
<input type="hidden" name="attr_search_skillgroup" />
<input type="hidden" name="attr_search_active" />
<input type="hidden" name="attr_search_displayname" value="Search" />
<input type="hidden" name="attr_insight_attributes" />
<input type="hidden" name="attr_insight_specialized" value="" />
<input type="hidden" name="attr_insight_rollcode" />
<input type="hidden" name="attr_insight_string" />
<input type="hidden" name="attr_insight_skillgroup" />
<input type="hidden" name="attr_insight_active" />
<input type="hidden" name="attr_insight_displayname" value="Insight" />
<input type="hidden" name="attr_investigate_attributes" />
<input type="hidden" name="attr_investigate_specialized" value="" />
<input type="hidden" name="attr_investigate_rollcode" />
<input type="hidden" name="attr_investigate_string" />
<input type="hidden" name="attr_investigate_skillgroup" />
<input type="hidden" name="attr_investigate_active" />
<input type="hidden" name="attr_investigate_displayname" value="Investigate" />
<input type="hidden" name="attr_empathy_attributes" />
<input type="hidden" name="attr_empathy_specialized" value="" />
<input type="hidden" name="attr_empathy_rollcode" />
<input type="hidden" name="attr_empathy_string" />
<input type="hidden" name="attr_empathy_skillgroup" />
<input type="hidden" name="attr_empathy_active" />
<input type="hidden" name="attr_empathy_displayname" value="Empathy" />
<input type="hidden" name="attr_tracking_attributes" />
<input type="hidden" name="attr_tracking_specialized" value="" />
<input type="hidden" name="attr_tracking_rollcode" />
<input type="hidden" name="attr_tracking_string" />
<input type="hidden" name="attr_tracking_skillgroup" />
<input type="hidden" name="attr_tracking_active" />
<input type="hidden" name="attr_tracking_displayname" value="Tracking" />
<input type="hidden" name="attr_hunting_attributes" />
<input type="hidden" name="attr_hunting_specialized" value="" />
<input type="hidden" name="attr_hunting_rollcode" />
<input type="hidden" name="attr_hunting_string" />
<input type="hidden" name="attr_hunting_skillgroup" />
<input type="hidden" name="attr_hunting_active" />
<input type="hidden" name="attr_hunting_displayname" value="Hunting" />
<input type="hidden" name="attr_foraging_attributes" />
<input type="hidden" name="attr_foraging_specialized" value="" />
<input type="hidden" name="attr_foraging_rollcode" />
<input type="hidden" name="attr_foraging_string" />
<input type="hidden" name="attr_foraging_skillgroup" />
<input type="hidden" name="attr_foraging_active" />
<input type="hidden" name="attr_foraging_displayname" value="Foraging" />
<input type="hidden" name="attr_scavenging_attributes" />
<input type="hidden" name="attr_scavenging_specialized" value="" />
<input type="hidden" name="attr_scavenging_rollcode" />
<input type="hidden" name="attr_scavenging_string" />
<input type="hidden" name="attr_scavenging_skillgroup" />
<input type="hidden" name="attr_scavenging_active" />
<input type="hidden" name="attr_scavenging_displayname" value="Scavenging" />
<input type="hidden" name="attr_cooking_attributes" />
<input type="hidden" name="attr_cooking_specialized" value="" />
<input type="hidden" name="attr_cooking_rollcode" />
<input type="hidden" name="attr_cooking_string" />
<input type="hidden" name="attr_cooking_skillgroup" />
<input type="hidden" name="attr_cooking_active" />
<input type="hidden" name="attr_cooking_displayname" value="Cooking" />
<input type="hidden" name="attr_fletching_attributes" />
<input type="hidden" name="attr_fletching_specialized" value="" />
<input type="hidden" name="attr_fletching_rollcode" />
<input type="hidden" name="attr_fletching_string" />
<input type="hidden" name="attr_fletching_skillgroup" />
<input type="hidden" name="attr_fletching_active" />
<input type="hidden" name="attr_fletching_displayname" value="Fletching" />
<input type="hidden" name="attr_sneak_attributes" />
<input type="hidden" name="attr_sneak_specialized" value="" />
<input type="hidden" name="attr_sneak_rollcode" />
<input type="hidden" name="attr_sneak_string" />
<input type="hidden" name="attr_sneak_skillgroup" />
<input type="hidden" name="attr_sneak_active" />
<input type="hidden" name="attr_sneak_displayname" value="Sneak" />
<input type="hidden" name="attr_subtle_attributes" />
<input type="hidden" name="attr_subtle_specialized" value="" />
<input type="hidden" name="attr_sublte_rollcode" />
<input type="hidden" name="attr_subtle_string" />
<input type="hidden" name="attr_subtle_skillgroup" />
<input type="hidden" name="attr_subtle_active" />
<input type="hidden" name="attr_subtle_displayname" value="Subtle" />
<input type="hidden" name="attr_ambush_attributes" />
<input type="hidden" name="attr_ambush_specialized" value="" />
<input type="hidden" name="attr_ambush_rollcode" />
<input type="hidden" name="attr_ambush_string" />
<input type="hidden" name="attr_ambush_skillgroup" />
<input type="hidden" name="attr_ambush_active" />
<input type="hidden" name="attr_ambush_displayname" value="Ambush" />
<input type="hidden" name="attr_hide_attributes" />
<input type="hidden" name="attr_hide_specialized" value="" />
<input type="hidden" name="attr_hide_rollcode" />
<input type="hidden" name="attr_hide_string" />
<input type="hidden" name="attr_hide_skillgroup" />
<input type="hidden" name="attr_hide_active" />
<input type="hidden" name="attr_hide_displayname" value="Hide" />
<input type="hidden" name="attr_athletics_attributes" />
<input type="hidden" name="attr_athletics_specialized" value="" />
<input type="hidden" name="attr_athletics_rollcode" />
<input type="hidden" name="attr_athletics_string" />
<input type="hidden" name="attr_athletics_skillgroup" />
<input type="hidden" name="attr_athletics_active" />
<input type="hidden" name="attr_athletics_displayname" value="Athletics" />
<input type="hidden" name="attr_acrobatics_attributes" />
<input type="hidden" name="attr_acrobatics_specialized" value="" />
<input type="hidden" name="attr_acrobatics_rollcode" />
<input type="hidden" name="attr_acrobatics_string" />
<input type="hidden" name="attr_acrobatics_skillgroup" />
<input type="hidden" name="attr_acrobatics_active" />
<input type="hidden" name="attr_acrobatics_displayname" value="Acrobatics" />
<input type="hidden" name="attr_climbing_attributes" />
<input type="hidden" name="attr_climbing_specialized" value="" />
<input type="hidden" name="attr_climbing_rollcode" />
<input type="hidden" name="attr_climbing_string" />
<input type="hidden" name="attr_climbing_skillgroup" />
<input type="hidden" name="attr_climbing_active" />
<input type="hidden" name="attr_climbing_displayname" value="Climbing" />
<input type="hidden" name="attr_swimming_attributes" />
<input type="hidden" name="attr_swimming_specialized" value="" />
<input type="hidden" name="attr_swimming_rollcode" />
<input type="hidden" name="attr_swimming_string" />
<input type="hidden" name="attr_swimming_skillgroup" />
<input type="hidden" name="attr_swimming_active" />
<input type="hidden" name="attr_swimming_displayname" value="Swimming" />
<input type="hidden" name="attr_lifting_attributes" />
<input type="hidden" name="attr_lifting_specialized" value="" />
<input type="hidden" name="attr_lifting_rollcode" />
<input type="hidden" name="attr_lifting_string" />
<input type="hidden" name="attr_lifting_skillgroup" />
<input type="hidden" name="attr_lifting_active" />
<input type="hidden" name="attr_lifting_displayname" value="Lifting" />
<input type="hidden" name="attr_jumping_attributes" />
<input type="hidden" name="attr_jumping_specialized" value="" />
<input type="hidden" name="attr_jumping_rollcode" />
<input type="hidden" name="attr_jumping_string" />
<input type="hidden" name="attr_jumping_skillgroup" />
<input type="hidden" name="attr_jumping_active" />
<input type="hidden" name="attr_jumping_displayname" value="Jumping" />
<input type="hidden" name="attr_first_aid_attributes" />
<input type="hidden" name="attr_first_aid_specialized" value="" />
<input type="hidden" name="attr_first_aid_rollcode" />
<input type="hidden" name="attr_first_aid_string" />
<input type="hidden" name="attr_first_aid_skillgroup" />
<input type="hidden" name="attr_first_aid_active" />
<input type="hidden" name="attr_first_aid_displayname" value="First Aid" />
<input type="hidden" name="attr_medical_care_attributes" />
<input type="hidden" name="attr_medical_care_specialized" value="" />
<input type="hidden" name="attr_medical_care_rollcode" />
<input type="hidden" name="attr_medical_care_string" />
<input type="hidden" name="attr_medical_care_skillgroup" />
<input type="hidden" name="attr_medical_care_active" />
<input type="hidden" name="attr_medical_care_displayname" value="Medical Care" />
<input type="hidden" name="attr_surgery_attributes" />
<input type="hidden" name="attr_surgery_specialized" value="" />
<input type="hidden" name="attr_surgery_rollcode" />
<input type="hidden" name="attr_surgery_string" />
<input type="hidden" name="attr_surgery_skillgroup" />
<input type="hidden" name="attr_surgery_active" />
<input type="hidden" name="attr_surgery_displayname" value="Surgery" />
<input type="hidden" name="attr_drive_boat_attributes" />
<input type="hidden" name="attr_drive_boat_specialized" value="" />
<input type="hidden" name="attr_drive_boat_rollcode" />
<input type="hidden" name="attr_drive_boat_string" />
<input type="hidden" name="attr_drive_boat_skillgroup" />
<input type="hidden" name="attr_drive_boat_active" />
<input type="hidden" name="attr_drive_boat_displayname" value="Drive Boat" />
<input type="hidden" name="attr_sailing_attributes" />
<input type="hidden" name="attr_sailing_specialized" value="" />
<input type="hidden" name="attr_sailing_rollcode" />
<input type="hidden" name="attr_sailing_string" />
<input type="hidden" name="attr_sailing_skillgroup" />
<input type="hidden" name="attr_sailing_active" />
<input type="hidden" name="attr_sailing_displayname" value="Sailing" />
<input type="hidden" name="attr_set_explosives_attributes" />
<input type="hidden" name="attr_set_explosives_specialized" value="" />
<input type="hidden" name="attr_set_explosives_rollcode" />
<input type="hidden" name="attr_set_explosives_string" />
<input type="hidden" name="attr_set_explosives_skillgroup" />
<input type="hidden" name="attr_set_explosives_active" />
<input type="hidden" name="attr_set_explosives_displayname" value="Set Explosives" />
<input type="hidden" name="attr_disarm_explosives_attributes" />
<input type="hidden" name="attr_disarm_explosives_specialized" value="" />
<input type="hidden" name="attr_disarm_explosives_rollcode" />
<input type="hidden" name="attr_disarm_explosives_string" />
<input type="hidden" name="attr_disarm_explosives_skillgroup" />
<input type="hidden" name="attr_disarm_explosives_active" />
<input type="hidden" name="attr_disarm_explosives_displayname" value="Disarm Explosives" />
<input type="hidden" name="attr_carpentry_attributes" />
<input type="hidden" name="attr_carpentry_specialized" value="" />
<input type="hidden" name="attr_carpentry_rollcode" />
<input type="hidden" name="attr_carpentry_string" />
<input type="hidden" name="attr_carpentry_skillgroup" />
<input type="hidden" name="attr_carpentry_active" />
<input type="hidden" name="attr_carpentry_displayname" value="Carpentry" />
<input type="hidden" name="attr_mining_attributes" />
<input type="hidden" name="attr_mining_specialized" value="" />
<input type="hidden" name="attr_mining_rollcode" />
<input type="hidden" name="attr_mining_string" />
<input type="hidden" name="attr_mining_skillgroup" />
<input type="hidden" name="attr_mining_active" />
<input type="hidden" name="attr_mining_displayname" value="Mining" />
<input type="hidden" name="attr_blacksmithing_attributes" />
<input type="hidden" name="attr_blacksmithing_specialized" value="" />
<input type="hidden" name="attr_blacksmithing_rollcode" />
<input type="hidden" name="attr_blacksmithing_string" />
<input type="hidden" name="attr_blacksmithing_skillgroup" />
<input type="hidden" name="attr_blacksmithing_active" />
<input type="hidden" name="attr_blacksmithing_displayname" value="Blacksmithing" />
<input type="hidden" name="attr_gunsmithing_attributes" />
<input type="hidden" name="attr_gunsmithing_specialized" value="" />
<input type="hidden" name="attr_gunsmithing_rollcode" />
<input type="hidden" name="attr_gunsmithing_string" />
<input type="hidden" name="attr_gunsmithing_skillgroup" />
<input type="hidden" name="attr_gunsmithing_active" />
<input type="hidden" name="attr_gunsmithing_displayname" value="Gunsmithing" />
<input type="hidden" name="attr_education_attributes" />
<input type="hidden" name="attr_education_specialized" value="" />
<input type="hidden" name="attr_education_rollcode" />
<input type="hidden" name="attr_education_string" />
<input type="hidden" name="attr_education_skillgroup" />
<input type="hidden" name="attr_education_active" />
<input type="hidden" name="attr_education_displayname" value="Education" />
<input type="hidden" name="attr_cartography_attributes" />
<input type="hidden" name="attr_cartography_specialized" value="" />
<input type="hidden" name="attr_cartography_rollcode" />
<input type="hidden" name="attr_cartography_string" />
<input type="hidden" name="attr_cartography_skillgroup" />
<input type="hidden" name="attr_cartography_active" />
<input type="hidden" name="attr_cartography_displayname" value="Cartography" />
<input type="hidden" name="attr_appraisal_attributes" />
<input type="hidden" name="attr_appraisal_specialized" value="" />
<input type="hidden" name="attr_appraisal_rollcode" />
<input type="hidden" name="attr_appraisal_string" />
<input type="hidden" name="attr_appraisal_skillgroup" />
<input type="hidden" name="attr_appraisal_active" />
<input type="hidden" name="attr_appraisal_displayname" value="Appraisal" />
<input type="hidden" name="attr_engineering_attributes" />
<input type="hidden" name="attr_engineering_specialized" value="" />
<input type="hidden" name="attr_engineering_rollcode" />
<input type="hidden" name="attr_engineering_string" />
<input type="hidden" name="attr_engineering_skillgroup" />
<input type="hidden" name="attr_engineering_active" />
<input type="hidden" name="attr_engineering_displayname" value="Engineering" />
<input type="hidden" name="attr_law_attributes" />
<input type="hidden" name="attr_law_specialized" value="" />
<input type="hidden" name="attr_law_rollcode" />
<input type="hidden" name="attr_law_string" />
<input type="hidden" name="attr_law_skillgroup" />
<input type="hidden" name="attr_law_active" />
<input type="hidden" name="attr_law_displayname" value="Law" />
<input type="hidden" name="attr_writing_attributes" />
<input type="hidden" name="attr_writing_specialized" value="" />
<input type="hidden" name="attr_writing_rollcode" />
<input type="hidden" name="attr_writing_string" />
<input type="hidden" name="attr_writing_skillgroup" />
<input type="hidden" name="attr_writing_active" />
<input type="hidden" name="attr_writing_displayname" value="Writing" />
<input type="hidden" name="attr_horse_empathy_attributes" />
<input type="hidden" name="attr_horse_empathy_specialized" value="" />
<input type="hidden" name="attr_horse_empathy_rollcode" />
<input type="hidden" name="attr_horse_empathy_string" />
<input type="hidden" name="attr_horse_empathy_skillgroup" />
<input type="hidden" name="attr_horse_empathy_active" />
<input type="hidden" name="attr_horse_empathy_displayname" value="Horse Empathy" />
<input type="hidden" name="attr_riding_attributes" />
<input type="hidden" name="attr_riding_specialized" value="" />
<input type="hidden" name="attr_riding_rollcode" />
<input type="hidden" name="attr_riding_string" />
<input type="hidden" name="attr_riding_skillgroup" />
<input type="hidden" name="attr_riding_active" />
<input type="hidden" name="attr_riding_displayname" value="Riding" />
<input type="hidden" name="attr_drive_cart_attributes" />
<input type="hidden" name="attr_drive_cart_specialized" value="" />
<input type="hidden" name="attr_drive_cart_rollcode" />
<input type="hidden" name="attr_drive_cart_string" />
<input type="hidden" name="attr_drive_cart_skillgroup" />
<input type="hidden" name="attr_drive_cart_active" />
<input type="hidden" name="attr_drive_cart_displayname" value="Drive Cart" />
<input type="hidden" name="attr_horse_care_attributes" />
<input type="hidden" name="attr_horse_care_specialized" value="" />
<input type="hidden" name="attr_horse_care_rollcode" />
<input type="hidden" name="attr_horse_care_string" />
<input type="hidden" name="attr_horse_care_skillgroup" />
<input type="hidden" name="attr_horse_care_active" />
<input type="hidden" name="attr_horse_care_displayname" value="Horse Care" />
<input type="hidden" name="attr_pistol_attributes" />
<input type="hidden" name="attr_pistol_specialized" value="" />
<input type="hidden" name="attr_pistol_rollcode" />
<input type="hidden" name="attr_pistol_string" />
<input type="hidden" name="attr_pistol_skillgroup" />
<input type="hidden" name="attr_pistol_active" />
<input type="hidden" name="attr_pistol_displayname" value="Pistol" />
<input type="hidden" name="attr_sawed_off_shotgun_attributes" />
<input type="hidden" name="attr_sawed_off_shotgun_specialized" value="" />
<input type="hidden" name="attr_sawed_off_shotgun_rollcode" />
<input type="hidden" name="attr_sawed_off_shotgun_string" />
<input type="hidden" name="attr_sawed_off_shotgun_skillgroup" />
<input type="hidden" name="attr_sawed_off_shotgun_active" />
<input type="hidden" name="attr_sawed_off_shotgun_displayname" value="Sawed-off Shotgun" />
<input type="hidden" name="attr_rifle_attributes" />
<input type="hidden" name="attr_rifle_specialized" value="" />
<input type="hidden" name="attr_rifle_rollcode" />
<input type="hidden" name="attr_rifle_string" />
<input type="hidden" name="attr_rifle_skillgroup" />
<input type="hidden" name="attr_rifle_active" />
<input type="hidden" name="attr_rifle_displayname" value="Rifle" />
<input type="hidden" name="attr_shotgun_attributes" />
<input type="hidden" name="attr_shotgun_specialized" value="" />
<input type="hidden" name="attr_shotgun_rollcode" />
<input type="hidden" name="attr_shotgun_string" />
<input type="hidden" name="attr_shotgun_skillgroup" />
<input type="hidden" name="attr_shotgun_active" />
<input type="hidden" name="attr_shotgun_displayname" value="Shotgun" />
<input type="hidden" name="attr_brawling_attributes" />
<input type="hidden" name="attr_brawling_specialized" value="" />
<input type="hidden" name="attr_brawling_rollcode" />
<input type="hidden" name="attr_brawling_string" />
<input type="hidden" name="attr_brawling_skillgroup" />
<input type="hidden" name="attr_brawling_active" />
<input type="hidden" name="attr_brawling_displayname" value="Brawling" />
<input type="hidden" name="attr_push_attributes" />
<input type="hidden" name="attr_push_specialized" value="" />
<input type="hidden" name="attr_push_rollcode" />
<input type="hidden" name="attr_push_string" />
<input type="hidden" name="attr_push_skillgroup" />
<input type="hidden" name="attr_push_active" />
<input type="hidden" name="attr_push_displayname" value="Push" />
<input type="hidden" name="attr_wrestling_attributes" />
<input type="hidden" name="attr_wrestling_specialized" value="" />
<input type="hidden" name="attr_wrestling_rollcode" />
<input type="hidden" name="attr_wrestling_string" />
<input type="hidden" name="attr_wrestling_skillgroup" />
<input type="hidden" name="attr_wrestling_active" />
<input type="hidden" name="attr_wrestling_displayname" value="Wrestling" />
<input type="hidden" name="attr_martial_arts_attributes" />
<input type="hidden" name="attr_martial_arts_specialized" value="" />
<input type="hidden" name="attr_martial_arts_rollcode" />
<input type="hidden" name="attr_martial_arts_string" />
<input type="hidden" name="attr_martial_arts_skillgroup" />
<input type="hidden" name="attr_martial_arts_active" />
<input type="hidden" name="attr_martial_arts_displayname" value="Martial Arts" />
<input type="hidden" name="attr_melee_weapon_attributes" />
<input type="hidden" name="attr_melee_weapon_specialized" value="" />
<input type="hidden" name="attr_melee_weapon_rollcode" />
<input type="hidden" name="attr_melee_weapon_string" />
<input type="hidden" name="attr_melee_weapon_skillgroup" />
<input type="hidden" name="attr_melee_weapon_active" />
<input type="hidden" name="attr_melee_weapon_displayname" value="Melee Weapon" />
<input type="hidden" name="attr_improvised_weapon_attributes" />
<input type="hidden" name="attr_improvised_weapon_specialized" value="" />
<input type="hidden" name="attr_improvised_weapon_rollcode" />
<input type="hidden" name="attr_improvised_weapon_string" />
<input type="hidden" name="attr_improvised_weapon_skillgroup" />
<input type="hidden" name="attr_improvised_weapon_active" />
<input type="hidden" name="attr_improvised_weapon_displayname" value="Improvised Weapon" />
<input type="hidden" name="attr_bow_attributes" />
<input type="hidden" name="attr_bow_specialized" value="" />
<input type="hidden" name="attr_bow_rollcode" />
<input type="hidden" name="attr_bow_string" />
<input type="hidden" name="attr_bow_skillgroup" />
<input type="hidden" name="attr_bow_active" />
<input type="hidden" name="attr_bow_displayname" value="Bow" />
<input type="hidden" name="attr_slingshot_attributes" />
<input type="hidden" name="attr_slingshot_specialized" value="" />
<input type="hidden" name="attr_slingshot_rollcode" />
<input type="hidden" name="attr_slingshot_string" />
<input type="hidden" name="attr_slingshot_skillgroup" />
<input type="hidden" name="attr_slingshot_active" />
<input type="hidden" name="attr_slingshot_displayname" value="Slingshot" />
<input type="hidden" name="attr_thrown_attributes" />
<input type="hidden" name="attr_thrown_specialized" value="" />
<input type="hidden" name="attr_thrown_rollcode" />
<input type="hidden" name="attr_thrown_string" />
<input type="hidden" name="attr_thrown_skillgroup" />
<input type="hidden" name="attr_thrown_active" />
<input type="hidden" name="attr_thrown_displayname" value="Thrown" />
<input type="hidden" name="attr_firearm1_attr" value="None" />
<input type="hidden" name="attr_firearm1_weapon" value="None" />
<input type="hidden" name="attr_firearm1_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm1_string" value="0D"/>
<input type="hidden" name="attr_firearm1_actual" value="0D"/>
<input type="hidden" name="attr_firearm1_damage" value="0D"/>
<input type="hidden" name="attr_firearm1_damage_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm1_min_damage" />
<input type="hidden" name="attr_firearm1_ammo" />
<input type="hidden" name="attr_firearm1_ammo_max" />
<input type="hidden" name="attr_firearm1_ammo_display" />
<input type="hidden" name="attr_firearm1_point_blank" />
<input type="hidden" name="attr_firearm1_short" />
<input type="hidden" name="attr_firearm1_medium" />
<input type="hidden" name="attr_firearm1_long" />
<input type="hidden" name="attr_firearm1_extreme" />
<input type="hidden" name="attr_firearm1_special" />
<input type="hidden" name="attr_firearm2_attr" value="None" />
<input type="hidden" name="attr_firearm2_weapon" value="None" />
<input type="hidden" name="attr_firearm2_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm2_string" value="0D"/>
<input type="hidden" name="attr_firearm2_actual" value="0D"/>
<input type="hidden" name="attr_firearm2_damage" value="0D"/>
<input type="hidden" name="attr_firearm2_damage_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm2_min_damage" />
<input type="hidden" name="attr_firearm2_ammo" />
<input type="hidden" name="attr_firearm2_ammo_max" />
<input type="hidden" name="attr_firearm2_ammo_display" />
<input type="hidden" name="attr_firearm2_point_blank" />
<input type="hidden" name="attr_firearm2_short" />
<input type="hidden" name="attr_firearm2_medium" />
<input type="hidden" name="attr_firearm2_long" />
<input type="hidden" name="attr_firearm2_extreme" />
<input type="hidden" name="attr_firearm2_special" />
<input type="hidden" name="attr_firearm3_attr" value="None" />
<input type="hidden" name="attr_firearm3_weapon" value="None" />
<input type="hidden" name="attr_firearm3_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm3_string" value="0D"/>
<input type="hidden" name="attr_firearm3_actual" value="0D"/>
<input type="hidden" name="attr_firearm3_damage" value="0D"/>
<input type="hidden" name="attr_firearm3_damage_rollcode" value="0d6"/>
<input type="hidden" name="attr_firearm3_min_damage" />
<input type="hidden" name="attr_firearm3_ammo" />
<input type="hidden" name="attr_firearm3_ammo_max" />
<input type="hidden" name="attr_firearm3_ammo_display" />
<input type="hidden" name="attr_firearm3_point_blank" />
<input type="hidden" name="attr_firearm3_short" />
<input type="hidden" name="attr_firearm3_medium" />
<input type="hidden" name="attr_firearm3_long" />
<input type="hidden" name="attr_firearm3_extreme" />
<input type="hidden" name="attr_firearm3_special" />
<input type="hidden" name="attr_ranged_attr" value="None" />
<input type="hidden" name="attr_ranged_weapon" value="None" />
<input type="hidden" name="attr_ranged_rollcode" value="0d6"/>
<input type="hidden" name="attr_ranged_string" value="0D"/>
<input type="hidden" name="attr_ranged_actual" value="0D"/>
<input type="hidden" name="attr_ranged_damage" value="0D"/>
<input type="hidden" name="attr_ranged_damage_rollcode" value="0d6"/>
<input type="hidden" name="attr_ranged_min_damage" />
<input type="hidden" name="attr_ranged_point_blank" />
<input type="hidden" name="attr_ranged_short" />
<input type="hidden" name="attr_ranged_medium" />
<input type="hidden" name="attr_ranged_long" />
<input type="hidden" name="attr_ranged_extreme" />
<input type="hidden" name="attr_ranged_special" />
<input type="hidden" name="attr_melee_attr" value="None" />
<input type="hidden" name="attr_melee_weapon" value="None" />
<input type="hidden" name="attr_melee_rollcode" value="0d6"/>
<input type="hidden" name="attr_melee_string" value="0D"/>
<input type="hidden" name="attr_melee_actual" value="0D"/>
<input type="hidden" name="attr_melee_damage" value="0D"/>
<input type="hidden" name="attr_melee_damage_rollcode" value="0d6"/>
<input type="hidden" name="attr_melee_min_damage" />
<input type="hidden" name="attr_melee_special" />
<input type="hidden" name="attr_base_move" value="30"/>
<input type="hidden" name="attr_base_run" value="30"/>
<input type="hidden" name="attr_encum_penalty_move" value="0"/>
<input type="hidden" name="attr_encum_penalty_run" value="0"/>
<input type="hidden" name="attr_conditions_penalty_move" value="0"/>
<input type="hidden" name="attr_conditions_penalty_run" value="0"/>
<input type="hidden" name="attr_current_move" value="30"/>
<input type="hidden" name="attr_current_run" value="30"/>
<input type="hidden" name="attr_advantage" value="0"/>
<input type="hidden" name="attr_attack_count" value="0"/>
<input type="hidden" name="attr_whisper_toggle" value="0"/>
<input type="hidden" name="attr_power_strike" value="0"/>
<input type="hidden" name="attr_status" value="Conscious"/>
<input type="hidden" name="attr_equipped_weight_total" value="0"/>
<input type="hidden" name="attr_horse_weight_total" value="0"/>
<input type="hidden" name="attr_mounted_weight_total" value="0"/>
<input type="hidden" name="attr_character_weight" value="0"/>
<input type="hidden" name="attr_encumbrance_visible" value="0"/>
<input type="hidden" name="attr_use_encumbrance" value="1"/>
<input type="hidden" name="attr_melee_attack_1_name" />
<input type="hidden" name="attr_melee_attack_1_skill" />
<input type="hidden" name="attr_melee_attack_1_damage" />
<input type="hidden" name="attr_attack_1_min_damage" />
<input type="hidden" name="attr_melee_attack_1_special" />
<input type="hidden" name="attr_melee_attack_2_name" />
<input type="hidden" name="attr_melee_attack_2_skill" />
<input type="hidden" name="attr_melee_attack_2_damage" />
<input type="hidden" name="attr_attack_2_min_damage" />
<input type="hidden" name="attr_melee_attack_2_special" />
<input type="hidden" name="attr_ready_to_advance_background" value="0" />
<input type="hidden" name="attr_ready_to_advance_training" value="0" />
<input type="hidden" name="attr_view_mode" value="character" />
<input type="hidden" name="attr_sheet_mode" class="sheet-mode-controller" value="type" />
<!-- Character Type Selection -->
<div class="sheet-step sheet-step-type sheet-mode-type">
<h1>Choose Character Type</h1>
<div class="spacer-md"></div>
<button type="action" name="act_type_continue" class="sheet-d6pp type-continue-button">Continue</button>
<div class="spacer-md"></div>
<label><input type="radio" class="sheet-tab" name="attr_character_type" value="pc" checked /> Player Character</label>
<p>The heroes of the story. Fully customizable with access to all attributes, skills, gear, and abilities.</p>
<div class="spacer-md"></div>
<label><input type="radio" class="sheet-tab" name="attr_character_type" value="major_npc" /> Major NPC [GM Only]</label>
<p>Significant allies or adversaries. Comparable to or stronger than PCs.</p>
<div class="spacer-md"></div>
<label><input type="radio" class="sheet-tab" name="attr_character_type" value="npc" /> Standard NPC [GM Only]</label>
<p>Supporting characters who influence scenes but are not central to the narrative. They get 0 skill points.</p>
<div class="spacer-md"></div>
<label><input type="radio" class="sheet-tab" name="attr_character_type" value="quick_npc" /> Quick NPC [GM Only]</label>
<p>Background characters or disposable extras. Fast to build and play with 2D in all attributes and skills.</p>
</div> <!-- End Character Type Selection -->
<!-- Background Selection -->
<div class="sheet-step sheet-step-background sheet-mode-background">
<h2>Choose a background and "Continue"</h2>
<div class="final-button-wrapper">
<input type="checkbox" name="attr_ready_to_advance_background" class="training-ready-toggle" value="1" style="display: none;" />
<button type="action" name="act_next_step" class="sheet-d6pp next-step-button">Continue</button>
</div>
<div class="spacer-md"></div>
<h3>Choose a Background</h3>
<select name="attr_background_choice" class="background-select sheet-d6pp-select" id="background_choice">
<option value="">-- Select --</option>
<option value="Army Medic">Army Medic</option>
<option value="Bounty Hunter">Bounty Hunter</option>
<option value="Cavalry">Cavalry</option>
<option value="Cowboy">Cowboy</option>
<option value="Doctor">Doctor</option>
<option value="Engineer: Blacksmithing">Engineer: Blacksmithing</option>
<option value="Engineer: Carpentry">Engineer: Carpentry</option>
<option value="Engineer: Demolitions">Engineer: Demolitions</option>
<option value="Engineer: Gunsmithing">Engineer: Gunsmithing</option>
<option value="Engineer: Mining">Engineer: Mining</option>
<option value="Celestial">Celestial</option>
<option value="Fast Draw">Fast Draw</option>
<option value="Gambler">Gambler</option>
<option value="Gunslinger">Gunslinger</option>
<option value="Hunter">Hunter</option>
<option value="Journalist">Journalist</option>
<option value="Knife Fighter">Knife Fighter</option>
<option value="Lawyer">Lawyer</option>
<option value="Mountain Man">Mountain Man</option>
<option value="Native">Native</option>
<option value="Native Wrestler">Native Wrestler</option>
<option value="Outlaw">Outlaw</option>
<option value="Outlaw Brute">Outlaw Brute</option>
<option value="Outlaw Leader">Outlaw Leader</option>
<option value="Painted Lady">Painted Lady</option>
<option value="Preacher">Preacher</option>
<option value="Pugilist">Pugilist</option>
<option value="Sheriff">Sheriff</option>
<option value="Shopkeeper">Shopkeeper</option>
<option value="Snake Oil Salesman">Snake Oil Salesman</option>
<option value="Sniper">Sniper</option>
<option value="Soldier">Soldier</option>
<option value="Street Urchin">Street Urchin</option>
<option value="Thief">Thief</option>
</select>
<div class="sheet-character-desc-grid">
<textarea name="attr_background_combined" class="sheet-d6pp" rows="4" readonly></textarea>
</div>
<label>Starting Equipment:</label>
<div class="sheet-character-desc-grid">
<textarea name="attr_background_items1" class="sheet-d6pp textarea-ten-lines" readonly rows="10"></textarea>
<textarea name="attr_background_items2" class="sheet-d6pp textarea-ten-lines" readonly rows="10"></textarea>
</div>
</div> <!-- End Background Selection -->
<!-- Skill Training Section -->
<div class="sheet-step sheet-step-training sheet-mode-training">
<h2>Training</h2>
<input type="hidden" name="attr_character_type" value="pc" />
<span class="show-if-pc">
<p>Distribute 27 points among Attributes and 60 points among Skill Groups, then click Finish.</p>
</span>
<span class="show-if-major">
<p>This major NPC is a significant character. Customize their stats as needed for story balance.</p>
</span>
<span class="show-if-npc">
<p>This standard NPC. You can adjust their attributes but they don't get any skill points.</p>
</span>
<div class="spacer-sm"></div>
<div class="finish-button-wrapper">
<input type="checkbox" name="attr_ready_to_advance_training" class="sheet-ready-toggle" value="1" style="display: none;" />
<button type="action" name="act_final_step" class="sheet-d6pp final-step-button">Finish</button>
</div>
<div class="spacer-md"></div>
<h2>Height</h2>
<select class="sheet-d6pp-select" name="attr_character_height">
<option value="5'">5'</option>
<option value="5&#39;1&quot;">5'1"</option>
<option value="5&#39;2&quot;">5'2"</option>
<option value="5&#39;3&quot;">5'3"</option>
<option value="5&#39;4&quot;">5'4"</option>
<option value="5&#39;5&quot;">5'5"</option>
<option value="5&#39;6&quot;">5'6"</option>
<option value="5&#39;7&quot;">5'7"</option>
<option value="5&#39;8&quot;" selected>5'8"</option>
<option value="5&#39;9&quot;">5'9"</option>
<option value="5&#39;10&quot;">5'10"</option>
<option value="5&#39;11&quot;">5'11"</option>
<option value="6&#39;">6'</option>
<option value="6&#39;1&quot;">6'1"</option>
<option value="6&#39;2&quot;">6'2"</option>
<option value="6&#39;3&quot;">6'3"</option>
<option value="6&#39;4&quot;">6'4"</option>
<option value="6&#39;5&quot;">6'5"</option>
<option value="6&#39;6&quot;">6'6"</option>
</select>
<span class="small-hint">You can adjust this later.</span>
<div class="spacer-sm"></div>
<h2><span name="attr_background_name"></span>:</h2>
<div class="sheet-character-desc-grid">
<textarea name="attr_background_combined" class="sheet-d6pp" rows="4" readonly></textarea>
</div>
<h2>Attributes</h2>
<div class="sheet-grid-table two-col">
<div class="grid-header">Attribute</div>
<div class="grid-header">Base</div>
<div class="grid-cell">(S)trength</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_strength" min="1" max="5" value="1" /></div>
<div class="grid-cell">(A)gility</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_agility" min="1" max="5" value="1" /></div>
<div class="grid-cell">(H)ealth</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_health" min="1" max="5" value="1" /></div>
<div class="grid-cell">(P)erception</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_perception" min="1" max="5" value="1" /></div>
<div class="grid-cell">(Q)uickness</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_quickness" min="1" max="5" value="1" /></div>
<div class="grid-cell">(W)illpower</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_willpower" min="1" max="5" value="1" /></div>
<div class="grid-cell">(I)ntelligence</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_intelligence" min="1" max="5" value="1" /></div>
<div class="grid-cell">(M)anual Dex</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_manualdex" min="1" max="5" value="1" /></div>
<div class="grid-cell">(C)harisma</div>
<div class="grid-cell"><input type="number" class="sheet-d6pp" name="attr_charisma" min="1" max="5" value="1" /></div>
<div class="grid-cell grid-total"><strong>Total Assigned</strong></div>
<div class="grid-cell grid-total"><span name="attr_attribute_total">0</span> / 27</div>
</div>
<div class="spacer-md"></div>
<div class="show-if-not-npc">
<button type="action" class="sheet-d6pp" name="act_expand_all">Expand All</button>
<button type="action" class="sheet-d6pp" name="act_collapse_all">Collapse All</button>
<div class="spacer-md"></div>
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_core_training" name="attr_toggle_core_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_core_training">Core Skill Group (can't be trained)</label>
<div class="skill-group-content">
<div class="sheet-grid-table four-col">
<!-- Header Row -->
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<!-- Row 1 -->
<div class="grid-cell"><span name="attr_avoid_displayname"></span><span name="attr_avoid_specialized"></span></div>
<div class="grid-cell"><span name="attr_avoid_attributes"></span></div>
<div class="grid-cell"><span name="attr_avoid_string"></span></div>
<div class="grid-cell">Activated</div>
<!-- Row 2 -->
<div class="grid-cell"><span name="attr_dodge_displayname"></span><span name="attr_dodge_specialized"></span></div>
<div class="grid-cell"><span name="attr_dodge_attributes"></span></div>
<div class="grid-cell"><span name="attr_dodge_string"></span></div>
<div class="grid-cell">Activated</div>
<!-- Row 3 -->
<div class="grid-cell"><span name="attr_endure_displayname"></span><span name="attr_endure_specialized"></span></div>
<div class="grid-cell"><span name="attr_endure_attributes"></span></div>
<div class="grid-cell"><span name="attr_endure_string"></span></div>
<div class="grid-cell">Activated</div>
<!-- Row 4 -->
<div class="grid-cell"><span name="attr_initiative_displayname"></span><span name="attr_initiative_specialized"></span></div>
<div class="grid-cell"><span name="attr_initiative_attributes"></span></div>
<div class="grid-cell"><span name="attr_initiative_string"></span></div>
<div class="grid-cell">Activated</div>
</div>
</div>
</div>
<h2>Trainable Skill Groups</h2>
<h3>Non-Combat Skills</h3>
<div class="spacer-md"></div>
<!-- Alertness Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_alertness_training" name="attr_toggle_alertness_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_alertness_training">Alertness Skill Group Training = <span name="attr_alertness_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_alertness" class="commit-spend-mode">Train (<span name="attr_alertness_cost"></span> skill points)</button>
<button type="action" name="act_refund_alertness" class="commit-spend-mode">Refund (<span name="attr_alertness_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_empathy_displayname"></span><span name="attr_empathy_specialized"></span></div>
<div class="grid-cell"><span name="attr_empathy_attributes"></span></div>
<div class="grid-cell"><span name="attr_empathy_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_insight_displayname"></span><span name="attr_insight_specialized"></span></div>
<div class="grid-cell"><span name="attr_insight_attributes"></span></div>
<div class="grid-cell"><span name="attr_insight_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_investigate_displayname"></span><span name="attr_investigate_specialized"></span></div>
<div class="grid-cell"><span name="attr_investigate_attributes"></span></div>
<div class="grid-cell"><span name="attr_investigate_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_search_displayname"></span><span name="attr_search_specialized"></span></div>
<div class="grid-cell"><span name="attr_search_attributes"></span></div>
<div class="grid-cell"><span name="attr_search_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Boating Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_boating_training" name="attr_toggle_boating_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_boating_training">Boating Skill Group Training = <span name="attr_boating_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_boating" class="commit-spend-mode">Train (<span name="attr_boating_cost"></span> skill points)</button>
<button type="action" name="act_refund_boating" class="commit-spend-mode">Refund (<span name="attr_boating_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_drive_boat_displayname"></span><span name="attr_drive_boat_specialized"></span></div>
<div class="grid-cell"><span name="attr_drive_boat_attributes"></span></div>
<div class="grid-cell"><span name="attr_drive_boat_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_sailing_displayname"></span><span name="attr_sailing_specialized"></span></div>
<div class="grid-cell"><span name="attr_sailing_attributes"></span></div>
<div class="grid-cell"><span name="attr_sailing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Cowpoke Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_cowpoke_training" name="attr_toggle_cowpoke_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_cowpoke_training">Cowpoke Skill Group Training = <span name="attr_cowpoke_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_cowpoke" class="commit-spend-mode">Train (<span name="attr_cowpoke_cost"></span> skill points)</button>
<button type="action" name="act_refund_cowpoke" class="commit-spend-mode">Refund (<span name="attr_cowpoke_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_cattle_care_displayname"></span><span name="attr_cattle_care_specialized"></span></div>
<div class="grid-cell"><span name="attr_cattle_care_attributes"></span></div>
<div class="grid-cell"><span name="attr_cattle_care_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_cattle_empathy_displayname"></span><span name="attr_cattle_empathy_specialized"></span></div>
<div class="grid-cell"><span name="attr_cattle_empathy_attributes"></span></div>
<div class="grid-cell"><span name="attr_cattle_empathy_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_cattle_handling_displayname"></span><span name="attr_cattle_handling_specialized"></span></div>
<div class="grid-cell"><span name="attr_cattle_handling_attributes"></span></div>
<div class="grid-cell"><span name="attr_cattle_handling_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_roping_displayname"></span><span name="attr_roping_specialized"></span></div>
<div class="grid-cell"><span name="attr_roping_attributes"></span></div>
<div class="grid-cell"><span name="attr_roping_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Horsemanship Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_horsemanship_training" name="attr_toggle_horsemanship_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_horsemanship_training">Horsemanship Skill Group Training = <span name="attr_horsemanship_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_horsemanship" class="commit-spend-mode">Train (<span name="attr_horsemanship_cost"></span> skill points)</button>
<button type="action" name="act_refund_horsemanship" class="commit-spend-mode">Refund (<span name="attr_horsemanship_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_drive_cart_displayname"></span><span name="attr_drive_cart_specialized"></span></div>
<div class="grid-cell"><span name="attr_drive_cart_attributes"></span></div>
<div class="grid-cell"><span name="attr_drive_cart_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_horse_care_displayname"></span><span name="attr_horse_care_specialized"></span></div>
<div class="grid-cell"><span name="attr_horse_care_attributes"></span></div>
<div class="grid-cell"><span name="attr_horse_care_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_horse_empathy_displayname"></span><span name="attr_horse_empathy_specialized"></span></div>
<div class="grid-cell"><span name="attr_horse_empathy_attributes"></span></div>
<div class="grid-cell"><span name="attr_horse_empathy_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_riding_displayname"></span><span name="attr_riding_specialized"></span></div>
<div class="grid-cell"><span name="attr_riding_attributes"></span></div>
<div class="grid-cell"><span name="attr_riding_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Knowledge Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_knowledge_training" name="attr_toggle_knowledge_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_knowledge_training">Knowledge Skill Group Training = <span name="attr_knowledge_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_knowledge" class="commit-spend-mode">Train (<span name="attr_knowledge_cost"></span> skill points)</button>
<button type="action" name="act_refund_knowledge" class="commit-spend-mode">Refund (<span name="attr_knowledge_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_appraisal_displayname"></span><span name="attr_appraisal_specialized"></span></div>
<div class="grid-cell"><span name="attr_appraisal_attributes"></span></div>
<div class="grid-cell"><span name="attr_appraisal_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_cartography_displayname"></span><span name="attr_cartography_specialized"></span></div>
<div class="grid-cell"><span name="attr_cartography_attributes"></span></div>
<div class="grid-cell"><span name="attr_cartography_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_education_displayname"></span><span name="attr_education_specialized"></span></div>
<div class="grid-cell"><span name="attr_education_attributes"></span></div>
<div class="grid-cell"><span name="attr_education_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_engineering_displayname"></span><span name="attr_engineering_specialized"></span></div>
<div class="grid-cell"><span name="attr_engineering_attributes"></span></div>
<div class="grid-cell"><span name="attr_engineering_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_engineering_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_engineering" class="activate-skill-button">Activate</button>
<button type="action" name="act_undo_activate_engineering" class="undo-activate-skill-button">Undo Activate</button>
<span class="activated-label">Activated</span>
</div>
</div>
<div class="grid-cell"><span name="attr_law_displayname"></span><span name="attr_law_specialized"></span></div>
<div class="grid-cell"><span name="attr_law_attributes"></span></div>
<div class="grid-cell"><span name="attr_law_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_law_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_law" class="activate-skill-button">Activate</button>
<button type="action" name="act_undo_activate_law" class="undo-activate-skill-button">Undo Activate</button>
<span class="activated-label">Activated</span>
</div>
</div>
<div class="grid-cell"><span name="attr_writing_displayname"></span><span name="attr_writing_specialized"></span></div>
<div class="grid-cell"><span name="attr_writing_attributes"></span></div>
<div class="grid-cell"><span name="attr_writing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
<span class="small-hint">Activating Law or Engineering costs 12 skill points.</span>
</div>
</div>
<!-- Medical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_medical_training" name="attr_toggle_medical_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_medical_training">Medical Skill Group Training = <span name="attr_medical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_medical" class="commit-spend-mode">Train (<span name="attr_medical_cost"></span> skill points)</button>
<button type="action" name="act_refund_medical" class="commit-spend-mode">Refund (<span name="attr_medical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_first_aid_displayname"></span><span name="attr_first_aid_specialized"></span></div>
<div class="grid-cell"><span name="attr_first_aid_attributes"></span></div>
<div class="grid-cell"><span name="attr_first_aid_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_medical_care_displayname"></span><span name="attr_medical_care_specialized"></span></div>
<div class="grid-cell"><span name="attr_medical_care_attributes"></span></div>
<div class="grid-cell"><span name="attr_medical_care_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_surgery_displayname"></span><span name="attr_surgery_specialized"></span></div>
<div class="grid-cell"><span name="attr_surgery_attributes"></span></div>
<div class="grid-cell"><span name="attr_surgery_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_surgery_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_surgery" class="activate-skill-button">Activate</button>
<button type="action" name="act_undo_activate_surgery" class="undo-activate-skill-button">Undo Activate</button>
<span class="activated-label">Activated</span>
</div>
</div>
</div>
<span class="small-hint">Activating Surgery costs 12 skill points.</span>
</div>
</div>
<!-- Performance Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_performance_training" name="attr_toggle_performance_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_performance_training">Performance Skill Group Training = <span name="attr_performance_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_performance" class="commit-spend-mode">Train (<span name="attr_performance_cost"></span> skill points)</button>
<button type="action" name="act_refund_performance" class="commit-spend-mode">Refund (<span name="attr_performance_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header"></div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header"></div>
<div class="grid-cell"><span name="attr_acting_displayname"></span><span name="attr_acting_specialized"></span></div>
<div class="grid-cell"><span name="attr_acting_attributes"></span></div>
<div class="grid-cell"><span name="attr_acting_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_art_displayname"></span><span name="attr_art_specialized"></span></div>
<div class="grid-cell"><span name="attr_art_attributes"></span></div>
<div class="grid-cell"><span name="attr_art_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_comedy_displayname"></span><span name="attr_comedy_specialized"></span></div>
<div class="grid-cell"><span name="attr_comedy_attributes"></span></div>
<div class="grid-cell"><span name="attr_comedy_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_dance_displayname"></span><span name="attr_dance_specialized"></span></div>
<div class="grid-cell"><span name="attr_dance_attributes"></span></div>
<div class="grid-cell"><span name="attr_dance_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_disguise_displayname"></span><span name="attr_disguise_specialized"></span></div>
<div class="grid-cell"><span name="attr_disguise_attributes"></span></div>
<div class="grid-cell"><span name="attr_disguise_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_gambling_displayname"></span><span name="attr_gambling_specialized"></span></div>
<div class="grid-cell"><span name="attr_gambling_attributes"></span></div>
<div class="grid-cell"><span name="attr_gambling_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_play_instrument_displayname"></span><span name="attr_play_instrument_specialized"></span></div>
<div class="grid-cell"><span name="attr_play_instrument_attributes"></span></div>
<div class="grid-cell"><span name="attr_play_instrument_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_showmanship_displayname"></span><span name="attr_showmanship_specialized"></span></div>
<div class="grid-cell"><span name="attr_showmanship_attributes"></span></div>
<div class="grid-cell"><span name="attr_showmanship_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_sing_displayname"></span><span name="attr_sing_specialized"></span></div>
<div class="grid-cell"><span name="attr_sing_attributes"></span></div>
<div class="grid-cell"><span name="attr_sing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Physical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_physical_training" name="attr_toggle_physical_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_physical_training">Physical Skill Group Training = <span name="attr_physical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_physical" class="commit-spend-mode">Train (<span name="attr_physical_cost"></span> skill points)</button>
<button type="action" name="act_refund_physical" class="commit-spend-mode">Refund (<span name="attr_physical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_acrobatics_displayname"></span><span name="attr_acrobatics_specialized"></span></div>
<div class="grid-cell"><span name="attr_acrobatics_attributes"></span></div>
<div class="grid-cell"><span name="attr_acrobatics_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_athletics_displayname"></span><span name="attr_athletics_specialized"></span></div>
<div class="grid-cell"><span name="attr_athletics_attributes"></span></div>
<div class="grid-cell"><span name="attr_athletics_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_climbing_displayname"></span><span name="attr_climbing_specialized"></span></div>
<div class="grid-cell"><span name="attr_climbing_attributes"></span></div>
<div class="grid-cell"><span name="attr_climbing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_jumping_displayname"></span><span name="attr_jumping_specialized"></span></div>
<div class="grid-cell"><span name="attr_jumping_attributes"></span></div>
<div class="grid-cell"><span name="attr_jumping_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_lifting_displayname"></span><span name="attr_lifting_specialized"></span></div>
<div class="grid-cell"><span name="attr_lifting_attributes"></span></div>
<div class="grid-cell"><span name="attr_lifting_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_swimming_displayname"></span><span name="attr_swimming_specialized"></span></div>
<div class="grid-cell"><span name="attr_swimming_attributes"></span></div>
<div class="grid-cell"><span name="attr_swimming_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
</div>
<!-- Social Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_social_training" name="attr_toggle_social_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_social_training">Social Skill Group Training = <span name="attr_social_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_social" class="commit-spend-mode">Train (<span name="attr_social_cost"></span> skill points)</button>
<button type="action" name="act_refund_social" class="commit-spend-mode">Refund (<span name="attr_social_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_persuade_displayname"></span><span name="attr_persuade_specialized"></span></div>
<div class="grid-cell"><span name="attr_persuade_attributes"></span></div>
<div class="grid-cell"><span name="attr_persuade_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_intimidate_displayname"></span><span name="attr_intimidate_specialized"></span></div>
<div class="grid-cell"><span name="attr_intimidate_attributes"></span></div>
<div class="grid-cell"><span name="attr_intimidate_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_deceive_displayname"></span><span name="attr_deceive_specialized"></span></div>
<div class="grid-cell"><span name="attr_deceive_attributes"></span></div>
<div class="grid-cell"><span name="attr_deceive_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_negotiate_displayname"></span><span name="attr_negotiate_specialized"></span></div>
<div class="grid-cell"><span name="attr_negotiate_attributes"></span></div>
<div class="grid-cell"><span name="attr_negotiate_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_seduce_displayname"></span><span name="attr_seduce_specialized"></span></div>
<div class="grid-cell"><span name="attr_seduce_attributes"></span></div>
<div class="grid-cell"><span name="attr_seduce_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_streetwise_displayname"></span><span name="attr_streetwise_specialized"></span></div>
<div class="grid-cell"><span name="attr_streetwise_attributes"></span></div>
<div class="grid-cell"><span name="attr_streetwise_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Stealth Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_stealth_training" name="attr_toggle_stealth_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_stealth_training">Stealth Skill Group Training = <span name="attr_stealth_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_stealth" class="commit-spend-mode">Train (<span name="attr_stealth_cost"></span> skill points)</button>
<button type="action" name="act_refund_stealth" class="commit-spend-mode">Refund (<span name="attr_stealth_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_ambush_displayname"></span><span name="attr_ambush_specialized"></span></div>
<div class="grid-cell"><span name="attr_ambush_attributes"></span></div>
<div class="grid-cell"><span name="attr_ambush_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_hide_displayname"></span><span name="attr_hide_specialized"></span></div>
<div class="grid-cell"><span name="attr_hide_attributes"></span></div>
<div class="grid-cell"><span name="attr_hide_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_sneak_displayname"></span><span name="attr_sneak_specialized"></span></div>
<div class="grid-cell"><span name="attr_sneak_attributes"></span></div>
<div class="grid-cell"><span name="attr_sneak_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_subtle_displayname"></span><span name="attr_subtle_specialized"></span></div>
<div class="grid-cell"><span name="attr_subtle_attributes"></span></div>
<div class="grid-cell"><span name="attr_subtle_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Survival Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_survival_training" name="attr_toggle_survival_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_survival_training">Survival Skill Group Training = <span name="attr_survival_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_survival" class="commit-spend-mode">Train (<span name="attr_survival_cost"></span> skill points)</button>
<button type="action" name="act_refund_survival" class="commit-spend-mode">Refund (<span name="attr_survival_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_cooking_displayname"></span><span name="attr_cooking_specialized"></span></div>
<div class="grid-cell"><span name="attr_cooking_attributes"></span></div>
<div class="grid-cell"><span name="attr_cooking_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_fletching_displayname"></span><span name="attr_fletching_specialized"></span></div>
<div class="grid-cell"><span name="attr_fletching_attributes"></span></div>
<div class="grid-cell"><span name="attr_fletching_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_foraging_displayname"></span><span name="attr_foraging_specialized"></span></div>
<div class="grid-cell"><span name="attr_foraging_attributes"></span></div>
<div class="grid-cell"><span name="attr_foraging_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_hunting_displayname"></span><span name="attr_hunting_specialized"></span></div>
<div class="grid-cell"><span name="attr_hunting_attributes"></span></div>
<div class="grid-cell"><span name="attr_hunting_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_scavenging_displayname"></span><span name="attr_scavenging_specialized"></span></div>
<div class="grid-cell"><span name="attr_scavenging_attributes"></span></div>
<div class="grid-cell"><span name="attr_scavenging_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_tracking_displayname"></span><span name="attr_tracking_specialized"></span></div>
<div class="grid-cell"><span name="attr_tracking_attributes"></span></div>
<div class="grid-cell"><span name="attr_tracking_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Technical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_technical_training" name="attr_toggle_technical_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_technical_training">Technical Skill Group Training = <span name="attr_technical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_technical" class="commit-spend-mode">Train (<span name="attr_technical_cost"></span> skill points)</button>
<button type="action" name="act_refund_technical" class="commit-spend-mode">Refund (<span name="attr_technical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_blacksmithing_displayname"></span><span name="attr_blacksmithing_specialized"></span></div>
<div class="grid-cell"><span name="attr_blacksmithing_attributes"></span></div>
<div class="grid-cell"><span name="attr_blacksmithing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_carpentry_displayname"></span><span name="attr_carpentry_specialized"></span></div>
<div class="grid-cell"><span name="attr_carpentry_attributes"></span></div>
<div class="grid-cell"><span name="attr_carpentry_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_disarm_explosives_displayname"></span><span name="attr_disarm_explosives_specialized"></span></div>
<div class="grid-cell"><span name="attr_disarm_explosives_attributes"></span></div>
<div class="grid-cell"><span name="attr_disarm_explosives_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_gunsmithing_displayname"></span><span name="attr_gunsmithing_specialized"></span></div>
<div class="grid-cell"><span name="attr_gunsmithing_attributes"></span></div>
<div class="grid-cell"><span name="attr_gunsmithing_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_mining_displayname"></span><span name="attr_mining_specialized"></span></div>
<div class="grid-cell"><span name="attr_mining_attributes"></span></div>
<div class="grid-cell"><span name="attr_mining_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_set_explosives_displayname"></span><span name="attr_set_explosives_specialized"></span></div>
<div class="grid-cell"><span name="attr_set_explosives_attributes"></span></div>
<div class="grid-cell"><span name="attr_set_explosives_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Thievery Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_thievery_training" name="attr_toggle_thievery_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_thievery_training">Thievery Skill Group Training = <span name="attr_thievery_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_thievery" class="commit-spend-mode">Train (<span name="attr_thievery_cost"></span> skill points)</button>
<button type="action" name="act_refund_thievery" class="commit-spend-mode">Refund (<span name="attr_thievery_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_cheating_displayname"></span><span name="attr_cheating_specialized"></span></div>
<div class="grid-cell"><span name="attr_cheating_attributes"></span></div>
<div class="grid-cell"><span name="attr_cheating_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_forgery_displayname"></span><span name="attr_forgery_specialized"></span></div>
<div class="grid-cell"><span name="attr_forgery_attributes"></span></div>
<div class="grid-cell"><span name="attr_forgery_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_lockpicking_displayname"></span><span name="attr_lockpicking_specialized"></span></div>
<div class="grid-cell"><span name="attr_lockpicking_attributes"></span></div>
<div class="grid-cell"><span name="attr_lockpicking_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_sleight_of_hand_displayname"></span><span name="attr_sleight_of_hand_specialized"></span></div>
<div class="grid-cell"><span name="attr_sleight_of_hand_attributes"></span></div>
<div class="grid-cell"><span name="attr_sleight_of_hand_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<h3>Combat Skills</h3>
<div class="spacer-md"></div>
<!-- Armed Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_armed_training" name="attr_toggle_armed_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_armed_training">Armed Skill Group Training = <span name="attr_armed_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_armed" class="commit-spend-mode">Train (<span name="attr_armed_cost"></span> skill points)</button>
<button type="action" name="act_refund_armed" class="commit-spend-mode">Refund (<span name="attr_armed_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_improvised_weapon_displayname"></span><span name="attr_improvised_weapon_specialized"></span></div>
<div class="grid-cell"><span name="attr_improvised_weapon_attributes"></span></div>
<div class="grid-cell"><span name="attr_improvised_weapon_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_melee_weapon_displayname"></span><span name="attr_melee_weapon_specialized"></span></div>
<div class="grid-cell"><span name="attr_melee_weapon_attributes"></span></div>
<div class="grid-cell"><span name="attr_melee_weapon_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Longarms Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_longarms_training" name="attr_toggle_longarms_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_longarms_training">Longarms Skill Group Training = <span name="attr_longarms_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_longarms" class="commit-spend-mode">Train (<span name="attr_longarms_cost"></span> skill points)</button>
<button type="action" name="act_refund_longarms" class="commit-spend-mode">Refund (<span name="attr_longarms_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_rifle_displayname"></span><span name="attr_rifle_specialized"></span></div>
<div class="grid-cell"><span name="attr_rifle_attributes"></span></div>
<div class="grid-cell"><span name="attr_rifle_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_shotgun_displayname"></span><span name="attr_shotgun_specialized"></span></div>
<div class="grid-cell"><span name="attr_shotgun_attributes"></span></div>
<div class="grid-cell"><span name="attr_shotgun_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Primitive Ranged Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_primitive_training" name="attr_toggle_primitive_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_primitive_training">Primitive Ranged Skill Group Training = <span name="attr_primitive_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_primitive" class="commit-spend-mode">Train (<span name="attr_primitive_cost"></span> skill points)</button>
<button type="action" name="act_refund_primitive" class="commit-spend-mode">Refund (<span name="attr_primitive_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_bow_displayname"></span><span name="attr_bow_specialized"></span></div>
<div class="grid-cell"><span name="attr_bow_attributes"></span></div>
<div class="grid-cell"><span name="attr_bow_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_bow_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_bow" class="activate-skill-button">Activate</button>
<button type="action" name="act_undo_activate_bow" class="undo-activate-skill-button">Undo Activate</button>
<span class="activated-label">Activated</span>
</div>
</div>
<div class="grid-cell"><span name="attr_slingshot_displayname"></span><span name="attr_slingshot_specialized"></span></div>
<div class="grid-cell"><span name="attr_slingshot_attributes"></span></div>
<div class="grid-cell"><span name="attr_slingshot_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_thrown_displayname"></span><span name="attr_thrown_specialized"></span></div>
<div class="grid-cell"><span name="attr_thrown_attributes"></span></div>
<div class="grid-cell"><span name="attr_thrown_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
<span class="small-hint">Activating Bow costs 12 skill points.</span>
</div>
</div>
<!-- Sidearms Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_sidearms_training" name="attr_toggle_sidearms_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_sidearms_training">Sidearms Skill Group Training = <span name="attr_sidearms_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_sidearms" class="commit-spend-mode">Train (<span name="attr_sidearms_cost"></span> skill points)</button>
<button type="action" name="act_refund_sidearms" class="commit-spend-mode">Refund (<span name="attr_sidearms_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_pistol_displayname"></span><span name="attr_pistol_specialized"></span></div>
<div class="grid-cell"><span name="attr_pistol_attributes"></span></div>
<div class="grid-cell"><span name="attr_pistol_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_sawed_off_shotgun_displayname"></span><span name="attr_sawed_off_shotgun_specialized"></span></div>
<div class="grid-cell"><span name="attr_sawed_off_shotgun_attributes"></span></div>
<div class="grid-cell"><span name="attr_sawed_off_shotgun_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
</div>
</div>
<!-- Unarmed Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_unarmed_training" name="attr_toggle_unarmed_training" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_unarmed_training">Unarmed Skill Group Training = <span name="attr_unarmed_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_unarmed" class="commit-spend-mode">Train (<span name="attr_unarmed_cost"></span> skill points)</button>
<button type="action" name="act_refund_unarmed" class="commit-spend-mode">Refund (<span name="attr_unarmed_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell"><span name="attr_brawling_displayname"></span><span name="attr_brawling_specialized"></span></div>
<div class="grid-cell"><span name="attr_brawling_attributes"></span></div>
<div class="grid-cell"><span name="attr_brawling_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_martial_arts_displayname"></span><span name="attr_martial_arts_specialized"></span></div>
<div class="grid-cell"><span name="attr_martial_arts_attributes"></span></div>
<div class="grid-cell"><span name="attr_martial_arts_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_martial_arts_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_martial_arts" class="activate-skill-button">Activate</button>
<button type="action" name="act_undo_activate_martial_arts" class="undo-activate-skill-button">Undo Activate</button>
<span class="activated-label">Activated</span>
</div>
</div>
<div class="grid-cell"><span name="attr_push_displayname"></span><span name="attr_push_specialized"></span></div>
<div class="grid-cell"><span name="attr_push_attributes"></span></div>
<div class="grid-cell"><span name="attr_push_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
<div class="grid-cell"><span name="attr_wrestling_displayname"></span><span name="attr_wrestling_specialized"></span></div>
<div class="grid-cell"><span name="attr_wrestling_attributes"></span></div>
<div class="grid-cell"><span name="attr_wrestling_string"></span></div>
<div class="grid-cell"><span>Activated</span></div>
</div>
<span class="small-hint">Activating Martial Arts costs 12 skill points.</span>
</div>
</div>
</div> <!-- End hide for NPCs -->
</div> <!-- End Training -->
<!-- PC/Major NPC Character Sheet -->
<div class="sheet-step sheet-step-sheet sheet-mode-sheet">
<div class="sheet-view-wrapper">
<input type="hidden" name="attr_view_mode" value="character" />
<div class="sheet-view-character">
<!-- Expand/Collapse and Spend Controls -->
<div class="sheet-controls-row">
<!-- Left: Expand/Collapse -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_expand_all">Expand All</button>
<button type="action" class="sheet-d6pp" name="act_collapse_all">Collapse All</button>
</div>
<!-- Middle: Skill Points + Spend -->
<div class="sheet-controls-group">
<label for="attr_skill_points" class="sheet-d6pp-label">Skill Points:</label>
<input type="number" class="sheet-d6pp" name="attr_skill_points" value="1" id="attr_skill_points" />
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_enter_spend" class="enter-spend-mode">Enter Spend Mode</button>
<button type="action" name="act_commit_spend" class="commit-spend-mode">Commit Spend</button>
</div>
</div>
</div>
<!-- Right: View Inventory -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_view_inventory">View Inventory</button>
</div>
</div>
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="hide-when-spending">
<!-- Character Info Grid -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_details" name="attr_toggle_details" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_details">Character Details</label>
<div class="skill-group-content">
<div class="sheet-character-top-grid">
<label class="sheet-d6pp-label">Name:</label>
<input type="text" class="sheet-d6pp" name="attr_character_name" />
<label class="sheet-d6pp-label">Age:</label>
<input type="text" class="sheet-d6pp" name="attr_character_age" />
<label class="sheet-d6pp-label">Height:</label>
<input type="text" class="sheet-d6pp" name="attr_character_height" />
<label class="sheet-d6pp-label">Weight:</label>
<input type="text" class="sheet-d6pp" name="attr_character_weight" />
<label class="sheet-d6pp-label">Gender:</label>
<input type="text" class="sheet-d6pp" name="attr_character_gender" />
</div>
<!-- Background and Description -->
<div class="sheet-character-desc-grid">
<label for="attr_background_combined" class="sheet-d6pp-label"><span name="attr_background_name"></span>:</label>
<label for="character_description" class="sheet-d6pp-label">Description:</label>
<textarea name="attr_background_combined" id="attr_background_combined" class="sheet-d6pp" rows="4" readonly></textarea>
<textarea class="sheet-d6pp" name="attr_character_description" rows="4" id="character_description"></textarea>
</div>
<div class="spacer-sm"></div>
<!-- GM Whisper + Move/Run/Advantage Row -->
<div class="sheet-controls-row" style="justify-content: space-between;">
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_whisper_toggle" value="/w gm " />
Whisper to GM
</label>
</div>
<div style="display: flex; align-items: center; gap: 8px;">
<label class="sheet-d6pp-label">Move:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_move" readonly />
<label class="sheet-d6pp-label">Run:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_run" readonly />
<label class="sheet-d6pp-label">Advantage:</label>
<input type="number" class="sheet-d6pp" name="attr_advantage" />
</div>
</div>
</div>
</div>
</div> <!-- hide-when-spending -->
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="hide-when-spending">
<!-- Actions Tracker -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_actions" name="attr_toggle_actions" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_actions">Actions Tracker</label>
<div class="skill-group-content">
<div class="action-grid">
<!-- Row 1: Headings -->
<div class="action-grid-header">Outside Your Turn</div>
<div class="action-grid-header">On Your Turn</div>
<!-- Row 2: Pre-Action / Significant Action -->
<div>
<label class="sheet-d6pp-label">Pre-Action (start of round)</label>
<div class="inline-action-row">
<input type="hidden" name="attr_preaction_ignorepain_active" value="0" />
<input type="hidden" name="attr_preaction_disengage_active" value="0" />
<select class="preaction-normal sheet-d6pp-select" name="attr_preaction_selection_normal">
<option value="None">None</option>
<option value="Hold Actions">Hold Actions</option>
<option value="Haste Actions">Haste Actions</option>
<option value="Dodge">Dodge</option>
<option value="Power Strike">Power Strike</option>
<option value="Simple Action">Simple Action</option>
<option value="Prep Skill">Prep Skill</option>
<option value="Help">Help</option>
<option value="Multi-attack">Multi-Attack</option>
<option value="Reload">Reload</option>
<option value="Aim Attack">Aim Attack</option>
<option value="Break Grapple">Break Grapple</option>
<option value="Break Lassoed">Break Lassoed</option>
</select>
<select class="preaction-ignorepain sheet-d6pp-select" name="attr_preaction_selection_ignorepain">
<option value="None">None</option>
<option value="Hold Actions">Hold Actions</option>
<option value="Haste Actions">Haste Actions</option>
<option value="Dodge">Dodge</option>
<option value="Power Strike">Power Strike</option>
<option value="Simple Action">Simple Action</option>
<option value="Prep Skill">Prep Skill</option>
<option value="Help">Help</option>
<option value="Multi-attack">Multi-Attack</option>
<option value="Reload">Reload</option>
<option value="Aim Attack">Aim Attack</option>
<option value="Break Grapple">Break Grapple</option>
<option value="Break Lassoed">Break Lassoed</option>
<option value="Ignore Pain">Ignore Pain</option>
</select>
<select class="preaction-disengage sheet-d6pp-select" name="attr_preaction_selection_disengage">
<option value="None">None</option>
<option value="Hold Actions">Hold Actions</option>
<option value="Haste Actions">Haste Actions</option>
<option value="Dodge">Dodge</option>
<option value="Power Strike">Power Strike</option>
<option value="Simple Action">Simple Action</option>
<option value="Prep Skill">Prep Skill</option>
<option value="Help">Help</option>
<option value="Multi-attack">Multi-Attack</option>
<option value="Reload">Reload</option>
<option value="Aim Attack">Aim Attack</option>
<option value="Break Grapple">Break Grapple</option>
<option value="Break Lassoed">Break Lassoed</option>
<option value="Disengage">Disengage</option>
</select>
<span name="attr_preaction_text" class="small-hint"></span>
</div>
</div>
<div>
<label class="sheet-d6pp-label">Significant Action</label>
<div class="inline-action-row">
<select class="sheet-d6pp-select" name="attr_significant_action_selection">
<option value="None">None</option>
<option value="Attack">Attack</option>
<option value="Skill Check">Make a Skill Check</option>
<option value="Run">Run</option>
<option value="Reload">Reload</option>
<option value="Simple Action">Simple Action</option>
<option value="Help">Help</option>
</select>
<span name="attr_significant_action_text" class="small-hint"></span>
</div>
</div>
<!-- Row 3: Reaction / Simple Action -->
<div>
<label class="sheet-d6pp-label">Reaction (once per turn)</label>
<div class="inline-action-row">
<input type="hidden" name="attr_reaction_fixit_active" value="0" />
<input type="hidden" name="attr_reaction_medic_active" value="0" />
<input type="hidden" name="attr_reaction_mode" value="normal" />
<select class="reaction-normal sheet-d6pp-select" name="attr_reaction_selection_normal">
<option value="None">None</option>
<option value="Block">Block</option>
<option value="Impede">Impede</option>
<option value="Push">Push</option>
<option value="Protect">Protect</option>
<option value="Trip">Trip</option>
<option value="Simple Action">Simple Action</option>
<option value="Keep Grapple">Keep Grapple</option>
<option value="Keep Lassoed">Keep Lassoed</option>
</select>
<select class="reaction-medic sheet-d6pp-select" name="attr_reaction_selection_medic">
<option value="None">None</option>
<option value="Block">Block</option>
<option value="Impede">Impede</option>
<option value="Push">Push</option>
<option value="Protect">Protect</option>
<option value="Trip">Trip</option>
<option value="Simple Action">Simple Action</option>
<option value="Keep Grapple">Keep Grapple</option>
<option value="Keep Lassoed">Keep Lassoed</option>
<option value="Medic">Medic</option>
</select>
<select class="reaction-fixit sheet-d6pp-select" name="attr_reaction_selection_fixit">
<option value="None">None</option>
<option value="Block">Block</option>
<option value="Impede">Impede</option>
<option value="Push">Push</option>
<option value="Protect">Protect</option>
<option value="Trip">Trip</option>
<option value="Simple Action">Simple Action</option>
<option value="Keep Grapple">Keep Grapple</option>
<option value="Keep Lassoed">Keep Lassoed</option>
<option value="FixIt">FixIt</option>
</select>
<span name="attr_reaction_text" class="small-hint"></span>
</div>
</div>
<div>
<label class="sheet-d6pp-label">Simple Action</label>
<select class="sheet-d6pp-select" name="attr_simple_action_selection">
<option value="None">None</option>
<option value="Use an item">Use an item</option>
<option value="Open/close door">Open/close door</option>
<option value="Draw/sheath a weapon">Draw/sheath a weapon</option>
<option value="Drop prone/stand up">Drop prone/stand up</option>
<option value="Mount/dismount Horse">Mount/dismount Horse</option>
<option value="GM Approved action">GM Approved action</option>
</select>
</div>
<div>
</div>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<input type="hidden" name="attr_preaction_selection_normal" />
<input type="hidden" name="attr_preaction_selection_ignorepain" />
<input type="hidden" name="attr_preaction_selection_disengage" />
<div class="sheet-dodge-toggle">
<label class="sheet-d6pp-label" style="margin: 0; display: inline;"># Dodges:</label>
<input type="number" class="sheet-d6pp" name="attr_times_attacked"/>
</div>
<div class="sheet-controls-group">
<input type="hidden" name="attr_preaction_selection_normal" />
<input type="hidden" name="attr_preaction_selection_ignorepain" />
<input type="hidden" name="attr_preaction_selection_disengage" />
<div class="sheet-dodge-toggle">
<button type="action" class="sheet-d6pp" name="act_dodge">Roll Dodge</button>
</div>
</div>
<input type="hidden" name="attr_preaction_selection_normal" />
<input type="hidden" name="attr_preaction_selection_ignorepain" />
<input type="hidden" name="attr_preaction_selection_disengage" />
<!-- These toggles must be siblings of the hidden inputs -->
<div class="sheet-multi-attack-toggle">
<label for="attr_attack_count" class="sheet-d6pp-label">Multi-Attack:</label>
</div>
<div class="sheet-multi-attack-toggle">
<input type="number" name="attr_attack_count" class="sheet-d6pp" value="0" min="0" />
</div>
</div>
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_new_turn">New Turn</button>
</div>
</div>
</div>
</div>
<!-- Skill Check -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_skillcheck" name="attr_toggle_skillcheck" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_skillcheck">Skill Check</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col full-width">
<div class="grid-header">Target Number</div>
<div class="grid-header">Challenge Rating</div>
<div class="grid-header"># Dodges</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<div class="grid-header">Mounted Penalty</div>
<div class="grid-cell target-number-cell"><span name="attr_skill_check_target">0</span></div>
<div class="grid-cell">
<select name="attr_skillcheck_cr" class="sheet-d6pp-select">
<option value="0">Trivial</option>
<option value="5">Easy (+5)</option>
<option value="10">Moderate (+10)</option>
<option value="15">Hard (+15)</option>
<option value="20">Very Hard (+20)</option>
<option value="25">Extremely Hard (+25)</option>
</select>
</div>
<div class="grid-cell number-cell"><span name="attr_times_attacked">0</span></div>
<div class="grid-cell"><input type="number" name="attr_skillcheck_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell number-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
<div class="grid-cell number-cell"><span name="attr_skillcheck_mounted_penalty">0</span></div>
</div>
<span class="small-hint">Each attack during Dodge adds +3 to your TN. Modifier includes Help, Prep, and situational bonuses.</span>
<div class="sheet-skill-select-row">
<select name="attr_selected_skill" class="sheet-d6pp-select">
<option value="">None</option>
<option value="acrobatics">Acrobatics (AAS)</option>
<option value="acting">Acting (CCP)</option>
<option value="agility">Agility (AAS)</option>
<option value="ambush">Ambush (QQA)</option>
<option value="appraisal">Appraisal (PPI)</option>
<option value="art">Art (MMP)</option>
<option value="athletics">Athletics (SSA)</option>
<option value="avoid">Avoid (QPP)</option>
<option value="blacksmithing">Blacksmithing (SSW)</option>
<option value="brawling">Brawling (ASS)</option>
<option value="bow">Bow (AAM)</option>
<option value="carpentry">Carpentry (MMS)</option>
<option value="cartography">Cartography (IIP)</option>
<option value="cattle_care">Cattle Care (PCW)</option>
<option value="cattle_empathy">Cattle Empathy (PPC)</option>
<option value="cattle_handling">Cattle Handling (ACP)</option>
<option value="charisma">Charisma (CCC)</option>
<option value="cheating">Cheating (MPW)</option>
<option value="climbing">Climbing (SSH)</option>
<option value="comedy">Comedy (CPP)</option>
<option value="cooking">Cooking (IWM)</option>
<option value="dance">Dance (CAP)</option>
<option value="deceive">Deceive (CPP)</option>
<option value="disarm_explosives">Disarm Explosives (MWP)</option>
<option value="disguise">Disguise (MIP)</option>
<option value="dodge">Dodge (QPA)</option>
<option value="drive_boat">Drive Boat (PPM)</option>
<option value="drive_cart">Drive Cart (MWC)</option>
<option value="education">Education (III)</option>
<option value="empathy">Empathy (PPC)</option>
<option value="endure">Endure (HHW)</option>
<option value="engineering">Engineering (III)</option>
<option value="first_aid">First Aid (PWI)</option>
<option value="fletching">Fletching (PPM)</option>
<option value="forgery">Forgery (MII)</option>
<option value="foraging">Foraging (PIM)</option>
<option value="gambling">Gambling (PPI)</option>
<option value="gunsmithing">Gunsmithing (MMP)</option>
<option value="health">Health (HHH)</option>
<option value="hide">Hide (WWI)</option>
<option value="horse_care">Horse Care (PCW)</option>
<option value="horse_empathy">Horse Empathy (PPC)</option>
<option value="hunting">Hunting (PPQ)</option>
<option value="initiative">Initiative (QQP)</option>
<option value="insight">Insight (PPP)</option>
<option value="intelligence">Intelligence (III)</option>
<option value="intimidate">Intimidate (CCS)</option>
<option value="investigate">Investigate (IIP)</option>
<option value="jumping">Jumping (AAH)</option>
<option value="law">Law (III)</option>
<option value="lifting">Lifting (SSS)</option>
<option value="lockpicking">Lockpicking (MIP)</option>
<option value="manualdex">Manual Dexterity (MMM)</option>
<option value="martial_arts">Martial Arts (AQP)</option>
<option value="medical_care">Medical Care (IIP)</option>
<option value="melee_weapon">Melee Weapon (AQQ)</option>
<option value="mining">Mining (SWP)</option>
<option value="negotiate">Negotiate (CIW)</option>
<option value="perception">Perception (PPP)</option>
<option value="persuade">Persuade (CCI)</option>
<option value="pistol">Pistol (AAQ)</option>
<option value="play_instrument">Play Instrument (MMQ)</option>
<option value="push">Push (SSS)</option>
<option value="quickness">Quickness (QQQ)</option>
<option value="rifle">Rifle (APW)</option>
<option value="riding">Riding (AAC)</option>
<option value="roping">Roping (MAA)</option>
<option value="sailing">Sailing (IAP)</option>
<option value="sawed_off_shotgun">Sawed-Off Shotgun (SAW)</option>
<option value="scavenging">Scavenging (PPW)</option>
<option value="search">Search (PPI)</option>
<option value="seduce">Seduce (CCP)</option>
<option value="set_explosives">Set Explosives (MIW)</option>
<option value="showmanship">Showmanship (CCA)</option>
<option value="sing">Sing (CHP)</option>
<option value="sleight_of_hand">Sleight of Hand (MMP)</option>
<option value="slingshot">Slingshot (AMM)</option>
<option value="strength">Strength (SSS)</option>
<option value="streetwise">Streetwise (CPI)</option>
<option value="subtle">Subtle (QAP)</option>
<option value="surgery">Surgery (MIP)</option>
<option value="swimming">Swimming (AHH)</option>
<option value="thrown">Thrown (SAM)</option>
<option value="tracking">Tracking (PPI)</option>
<option value="willpower">Willpower (WWW)</option>
<option value="writing">Writing (CIP)</option>
<option value="wrestling">Wrestling (SQA)</option>
</select>
<span name="attr_skill_actual"></span>
<button type="action" name="act_selected_skill_roll" class="sheet-d6pp">Roll</button>
</div>
</div>
</div>
<!-- Combat -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_combat" name="attr_toggle_combat" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_combat">Combat</label>
<div class="skill-group-content">
<div class="sheet-grid-table eight-col full-width">
<!-- Headers -->
<div class="grid-header">Target Number</div>
<div class="grid-header">Range</div>
<div class="grid-header">Cover</div>
<div class="grid-header">Opponent's Dodge</div>
<div class="grid-header"># Dodges</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<div class="grid-header">Mounted Penalty</div>
<!-- Row values -->
<div class="grid-cell target-number-cell"><span name="attr_combat_target">0</span></div>
<div class="grid-cell">
<select name="attr_combat_range" class="sheet-d6pp-select">
<option value="5">Point Blank (5)</option>
<option value="10">Short (10)</option>
<option value="15">Medium (15)</option>
<option value="20">Long (20)</option>
<option value="25">Extreme (25)</option>
</select>
</div>
<div class="grid-cell">
<select name="attr_combat_cover" class="sheet-d6pp-select">
<option value="0">None (0)</option>
<option value="5">Light (5)</option>
<option value="10">Half (10)</option>
<option value="15">Heavy (15)</option>
<option value="30">Full (30)</option>
</select>
</div>
<div class="grid-cell">
<input type="number" name="attr_combat_opponent_dodge" class="sheet-d6pp" value="0" min="0" />
</div>
<div class="grid-cell"><span name="attr_times_attacked">0</span></div>
<div class="grid-cell"><input type="number" name="attr_combat_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
<div class="grid-cell"><span name="attr_skillcheck_mounted_penalty">0</span></div>
</div>
<span class="small-hint">Each attack during Dodge adds +3 to your TN. Modifier includes Help, Prep, and situational bonuses.</span>
<div class="spacer-md"></div>
<label class="sheet-d6pp-label">Select a Form of Attack</label>
<div class="sheet-attack-tabs">
<!-- Radio buttons -->
<input type="radio" name="attr_attack_mode" value="firearms" class="sheet-tab" checked />
<span>Firearms</span>
<input type="radio" name="attr_attack_mode" value="ranged" class="sheet-tab" />
<span>Ranged</span>
<input type="radio" name="attr_attack_mode" value="melee" class="sheet-tab" />
<span>Melee</span>
<div class="spacer-sm"></div>
<div class="sheet-attack-section sheet-firearms">
<!-- Weapon 1 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<div class="grid-header">Ammo</div>
<div class="grid-header">Short</div>
<div class="grid-header">Medium</div>
<div class="grid-header">Long</div>
<div class="grid-header">Extreme</div>
<!-- Row 1: Weapon 1 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm1_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_firearm1_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm1_actual"></span>
<button type="action" name="act_firearm1_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm1_damage"></span>
<button type="action" name="act_firearm1_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm1_ammo_add">+</button>
<button type="action" name="act_firearm1_ammo_sub"></button>
</div>
<button type="action" name="act_firearm1_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm1_short"></span></div>
<div class="grid-cell"><span name="attr_firearm1_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm1_long"></span></div>
<div class="grid-cell"><span name="attr_firearm1_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row"> <!-- not grid-span-8 -->
<span name="attr_firearm1_ammo_display"></span>
</div>
</div>
<!-- Weapon 2 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Row 1: Weapon 2 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm2_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_firearm2_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm2_actual"></span>
<button type="action" name="act_firearm2_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm2_damage"></span>
<button type="action" name="act_firearm2_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm2_ammo_add">+</button>
<button type="action" name="act_firearm2_ammo_sub"></button>
</div>
<button type="action" name="act_firearm2_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm2_short"></span></div>
<div class="grid-cell"><span name="attr_firearm2_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm2_long"></span></div>
<div class="grid-cell"><span name="attr_firearm2_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row"> <!-- not grid-span-8 -->
<span name="attr_firearm2_ammo_display"></span>
</div>
</div>
<!-- Weapon 3 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Row 1: Weapon 3 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm3_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_firearm3_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm3_actual"></span>
<button type="action" name="act_firearm3_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm3_damage"></span>
<button type="action" name="act_firearm3_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm3_ammo_add">+</button>
<button type="action" name="act_firearm3_ammo_sub"></button>
</div>
<button type="action" name="act_firearm3_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm3_short"></span></div>
<div class="grid-cell"><span name="attr_firearm3_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm3_long"></span></div>
<div class="grid-cell"><span name="attr_firearm3_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row last-row">
<span name="attr_firearm3_ammo_display"></span>
</div>
</div>
</div>
<div class="sheet-attack-section sheet-ranged">
<div class="sheet-grid-attack sheet-grid-ranged full-width">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<div class="grid-header">Short</div>
<div class="grid-header">Medium</div>
<div class="grid-header">Long</div>
<div class="grid-header">Extreme</div>
<!-- Weapon Row -->
<div class="grid-cell stack-weapon">
<select name="attr_ranged_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Bow">Bow</option>
<option value="Slingshot">Slingshot</option>
<option value="Thrown Knife/Axe">Thrown Knife/Axe</option>
<option value="Improvised Thrown">Improvised Thrown</option>
<option value="Lasso">Lasso</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_ranged_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_ranged_actual"></span>
<button type="action" name="act_ranged_attack" class="sheet-d6pp">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_ranged_damage"></span>
<button type="action" name="act_ranged_damage" class="sheet-d6pp">Damage</button>
</div>
<div class="grid-cell"><span name="attr_ranged_short"></span></div>
<div class="grid-cell"><span name="attr_ranged_medium"></span></div>
<div class="grid-cell"><span name="attr_ranged_long"></span></div>
<div class="grid-cell"><span name="attr_ranged_extreme"></span></div>
</div>
</div>
<div class="sheet-attack-section sheet-melee">
<div class="sheet-grid-attack sheet-grid-melee">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<!-- Row: Melee Weapon -->
<div class="grid-cell stack-weapon">
<select name="attr_melee_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Brawling">Brawling</option>
<option value="Wrestling">Wrestling</option>
<option value="Martial Arts">Martial Arts</option>
<option value="Improvised Weapon">Improvised Weapon</option>
<option value="Pistol Whip">Pistol Whip</option>
<option value="Knife/Hatchet">Knife/Hatchet</option>
<option value="Cavalry Sword">Cavalry Sword</option>
<option value="Club">Club</option>
<option value="Push">Push</option>
<option value="Hitting with Butt of Rifle">Hitting with Butt of Rifle</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_melee_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_melee_actual"></span>
<button type="action" class="sheet-d6pp" name="act_melee_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_melee_damage"></span>
<button type="action" class="sheet-d6pp" name="act_melee_damage">Damage</button>
</div>
</div>
</div>
</div>
<div class="spacer-sm"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_initiative">Roll Initiative</button>
</div>
</div>
</div>
</div>
<!-- Wounds -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_wounds" name="attr_toggle_wounds" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_wounds">Wounds</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col full-width">
<div class="grid-header">First Aid Target Number</div>
<div class="grid-header">Wound Points</div>
<div class="grid-header">Wounds Ignored</div>
<div class="grid-header"># First Aid</div>
<div class="grid-header">Unconscious Threshold</div>
<div class="grid-header">Death Threshold</div>
<div class="grid-cell target-number-cell">
<span name="attr_first_aid_target">0</span>
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_total" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_ignored" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_first_aid_count" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell"><span name="attr_unconscious_threshold"></span></div>
<div class="grid-cell"><span name="attr_death_threshold"></span></div>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_endure">Roll Endure</button>
</div>
<div class="sheet-controls-group">
<label class="sheet-d6pp-label" style="margin: 0; display: inline;">Status:</label>
<input type="text" class="sheet-d6pp" name="attr_status" readonly/>
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_revived_toggle" />
Revived
</label>
</div>
</div>
</div>
</div>
</div>
<!-- Conditions -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_conditions" name="attr_toggle_conditions" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_conditions">Conditions</label>
<div class="skill-group-content">
<div class="sheet-condition-grid">
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_dehydrated" /> Dehydrated</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_diseased" /> Diseased</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_drunk" /> Drunk</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_exhausted" /> Exhausted</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_frightened" /> Frightened</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_grappled" /> Grappled</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_hypothermic" /> Hypothermic</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_knockout" /> Knockout</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_lassoed" /> Lassoed</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_mounted_checked" /> Mounted</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_poisoned" /> Poisoned</label>
</div>
</div>
</div>
<!-- Attributes (not spend mode) -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_attibutes" name="attr_toggle_attibutes" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_attibutes">Attributes</label>
<div class="skill-group-content">
<div class="sheet-grid-table five-col">
<!-- Headers -->
<div class="grid-header"></div>
<div class="grid-header">Base</div>
<div class="grid-header">Adjustment</div>
<div class="grid-header">Actual</div>
<div class="grid-header">Roll</div>
<!-- Row: Strength -->
<div class="grid-cell number-cell">(S)trength</div>
<div class="grid-cell number-cell"><span name="attr_strength_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_strength_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_strength_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_strength">Roll</button></div>
<!-- Row: Agility -->
<div class="grid-cell number-cell">(A)gility</div>
<div class="grid-cell number-cell"><span name="attr_agility_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_agility_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_agility_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_agility">Roll</button></div>
<!-- Row: Health -->
<div class="grid-cell number-cell">(H)ealth</div>
<div class="grid-cell number-cell"><span name="attr_health_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_health_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_health_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_health">Roll</button></div>
<!-- Row: Perception -->
<div class="grid-cell number-cell">(P)erception</div>
<div class="grid-cell number-cell"><span name="attr_perception_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_perception_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_perception_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_perception">Roll</button></div>
<!-- Row: Quickness -->
<div class="grid-cell number-cell">(Q)uickness</div>
<div class="grid-cell number-cell"><span name="attr_quickness_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_quickness_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_quickness_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_quickness">Roll</button></div>
<!-- Row: Willpower -->
<div class="grid-cell number-cell">(W)illpower</div>
<div class="grid-cell number-cell"><span name="attr_willpower_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_willpower_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_willpower_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_willpower">Roll</button></div>
<!-- Row: Intelligence -->
<div class="grid-cell number-cell">(I)ntelligence</div>
<div class="grid-cell number-cell"><span name="attr_intelligence_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_intelligence_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_intelligence_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_intelligence">Roll</button></div>
<!-- Row: Manual Dexterity -->
<div class="grid-cell number-cell">(M)anual Dex</div>
<div class="grid-cell number-cell"><span name="attr_manualdex_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_manualdex_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_manualdex_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_manualdex">Roll</button></div>
<!-- Row: Charisma -->
<div class="grid-cell number-cell">(C)harisma</div>
<div class="grid-cell number-cell"><span name="attr_charisma_base_string"></span></div>
<div class="grid-cell number-cell"><input type="number" name="attr_charisma_adjustment" value="0" class="sheet-d6pp" /></div>
<div class="grid-cell number-cell"><span name="attr_charisma_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_charisma">Roll</button></div>
</div>
</div>
</div>
<!-- Core Skills -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_core" name="attr_toggle_core" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_core">Core Skill Group</label>
<div class="skill-group-content">
<div class="sheet-grid-table four-col">
<!-- Headers -->
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<!-- Row: Avoid -->
<div class="grid-cell grid-skill-name">
<span name="attr_avoid_displayname"></span><span name="attr_avoid_specialized"></span>
</div>
<div class="grid-cell number-cell"><span name="attr_avoid_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_avoid_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_avoid">Roll</button></div>
<!-- Row: Dodge -->
<div class="grid-cell grid-skill-name">
<span name="attr_dodge_displayname"></span><span name="attr_dodge_specialized"></span>
</div>
<div class="grid-cell number-cell"><span name="attr_dodge_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_dodge_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_dodge">Roll</button></div>
<!-- Row: Endure -->
<div class="grid-cell grid-skill-name">
<span name="attr_endure_displayname"></span><span name="attr_endure_specialized"></span>
</div>
<div class="grid-cell number-cell"><span name="attr_endure_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_endure_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_endure">Roll</button></div>
<!-- Row: Initiative -->
<div class="grid-cell grid-skill-name">
<span name="attr_initiative_displayname"></span><span name="attr_initiative_specialized"></span>
</div>
<div class="grid-cell number-cell"><span name="attr_initiative_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_initiative_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_initiative">Roll</button></div>
</div>
</div>
</div>
</div> <!-- Hide when spending -->
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="show-when-spending">
<!-- Attribute (spend mode) -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_attibutes_ro" name="attr_toggle_attibutes_ro" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_attibutes_ro">Attributes</label>
<div class="skill-group-content">
<div class="sheet-grid-table two-col">
<div class="grid-header"></div>
<div class="grid-header">Base</div>
<div class="grid-cell number-cell">(S)trength</div>
<div class="grid-cell number-cell"><span name="attr_strength_base_string"></span></div>
<div class="grid-cell number-cell">(A)gility</div>
<div class="grid-cell number-cell"><span name="attr_agility_base_string"></span></div>
<div class="grid-cell number-cell">(H)ealth</div>
<div class="grid-cell number-cell"><span name="attr_health_base_string"></span></div>
<div class="grid-cell number-cell">(P)erception</div>
<div class="grid-cell number-cell"><span name="attr_perception_base_string"></span></div>
<div class="grid-cell number-cell">(Q)uickness</div>
<div class="grid-cell number-cell"><span name="attr_quickness_base_string"></span></div>
<div class="grid-cell number-cell">(W)illpower</div>
<div class="grid-cell number-cell"><span name="attr_willpower_base_string"></span></div>
<div class="grid-cell number-cell">(I)ntelligence</div>
<div class="grid-cell number-cell"><span name="attr_intelligence_base_string"></span></div>
<div class="grid-cell number-cell">(M)anual Dex</div>
<div class="grid-cell number-cell"><span name="attr_manualdex_base_string"></span></div>
<div class="grid-cell number-cell">(C)harisma</div>
<div class="grid-cell number-cell"><span name="attr_charisma_base_string"></span></div>
</div>
</div>
</div>
</div> <!-- Show when spending -->
<h3>Non-Combat Skills</h3>
<div class="spacer-md"></div>
<!-- Alertness Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_alertness" name="attr_toggle_alertness" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_alertness">Alertness Skill Group Training = <span name="attr_alertness_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_alertness" class="commit-spend-mode">Train (<span name="attr_alertness_cost"></span> skill points)</button>
<button type="action" name="act_refund_alertness" class="commit-spend-mode">Refund (<span name="attr_alertness_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_empathy_displayname"></span><span name="attr_empathy_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_empathy_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_empathy_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_empathy">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_insight_displayname"></span><span name="attr_insight_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_insight_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_insight_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_insight">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_investigate_displayname"></span><span name="attr_investigate_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_investigate_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_investigate_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_investigate">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_search_displayname"></span><span name="attr_search_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_search_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_search_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_search">Roll</button></div>
</div>
</div>
</div>
<!-- Boating Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_boating" name="attr_toggle_boating" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_boating">Boating Skill Group Training = <span name="attr_boating_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_boating" class="commit-spend-mode">Train (<span name="attr_boating_cost"></span> skill points)</button>
<button type="action" name="act_refund_boating" class="commit-spend-mode">Refund (<span name="attr_boating_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_drive_boat_displayname"></span><span name="attr_drive_boat_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_drive_boat_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_drive_boat_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_drive_boat">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_sailing_displayname"></span><span name="attr_sailing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_sailing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_sailing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_sailing">Roll</button></div>
</div>
</div>
</div>
<!-- Cowpoke Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_cowpoke" name="attr_toggle_cowpoke" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_cowpoke">Cowpoke Skill Group Training = <span name="attr_cowpoke_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_cowpoke" class="commit-spend-mode">Train (<span name="attr_cowpoke_cost"></span> skill points)</button>
<button type="action" name="act_refund_cowpoke" class="commit-spend-mode">Refund (<span name="attr_cowpoke_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_cattle_care_displayname"></span><span name="attr_cattle_care_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_care_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_care_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cattle_care">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_cattle_empathy_displayname"></span><span name="attr_cattle_empathy_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_empathy_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_empathy_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cattle_empathy">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_cattle_handling_displayname"></span><span name="attr_cattle_handling_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_handling_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cattle_handling_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cattle_handling">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_roping_displayname"></span><span name="attr_roping_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_roping_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_roping_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_roping">Roll</button></div>
</div>
</div>
</div>
<!-- Horsemanship Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_horsemanship" name="attr_toggle_horsemanship" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_horsemanship">Horsemanship Skill Group Training = <span name="attr_horsemanship_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_horsemanship" class="commit-spend-mode">Train (<span name="attr_horsemanship_cost"></span> skill points)</button>
<button type="action" name="act_refund_horsemanship" class="commit-spend-mode">Refund (<span name="attr_horsemanship_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_drive_cart_displayname"></span><span name="attr_drive_cart_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_drive_cart_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_drive_cart_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_drive_cart">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_horse_care_displayname"></span><span name="attr_horse_care_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_horse_care_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_horse_care_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_horse_care">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_horse_empathy_displayname"></span><span name="attr_horse_empathy_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_horse_empathy_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_horse_empathy_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_horse_empathy">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_riding_displayname"></span><span name="attr_riding_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_riding_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_riding_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_riding">Roll</button></div>
</div>
</div>
</div>
<!-- Knowledge Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_knowledge" name="attr_toggle_knowledge" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_knowledge">Knowledge Skill Group Training = <span name="attr_knowledge_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_knowledge" class="commit-spend-mode">Train (<span name="attr_knowledge_cost"></span> skill points)</button>
<button type="action" name="act_refund_knowledge" class="commit-spend-mode">Refund (<span name="attr_knowledge_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_appraisal_displayname"></span><span name="attr_appraisal_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_appraisal_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_appraisal_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_appraisal">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_cartography_displayname"></span><span name="attr_cartography_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cartography_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cartography_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cartography">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_education_displayname"></span><span name="attr_education_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_education_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_education_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_education">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_engineering_displayname"></span><span name="attr_engineering_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_engineering_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_engineering_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_engineering_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_engineering" class="activate-skill-button" title="Activation costs 12 skill points.">Activate</button>
<button type="action" name="act_undo_activate_engineering" class="undo-activate-skill-button">Undo Activate</button>
<button type="action" name="act_engineering" class="roll-skill-button">Roll</button>
<span class="unactivated-label">Not Activated</span>
</div>
</div>
<div class="grid-cell number-cell"><span name="attr_law_displayname"></span><span name="attr_law_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_law_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_law_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_law_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_law" class="activate-skill-button" title="Activation costs 12 skill points.">Activate</button>
<button type="action" name="act_undo_activate_law" class="undo-activate-skill-button">Undo Activate</button>
<button type="action" name="act_law" class="roll-skill-button">Roll</button>
<span class="unactivated-label">Not Activated</span>
</div>
</div>
<div class="grid-cell number-cell"><span name="attr_writing_displayname"></span><span name="attr_writing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_writing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_writing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_writing">Roll</button></div>
</div>
<span class="small-hint">Activating Law or Engineering costs 12 skill points.</span>
</div>
</div>
<!-- Medical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_medical" name="attr_toggle_medical" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_medical">Medical Skill Group Training = <span name="attr_medical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_medical" class="commit-spend-mode">Train (<span name="attr_medical_cost"></span> skill points)</button>
<button type="action" name="act_refund_medical" class="commit-spend-mode">Refund (<span name="attr_medical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_first_aid_displayname"></span><span name="attr_first_aid_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_first_aid_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_first_aid_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_first_aid">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_medical_care_displayname"></span><span name="attr_medical_care_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_medical_care_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_medical_care_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_medical_care">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_surgery_displayname"></span><span name="attr_surgery_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_surgery_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_surgery_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_surgery_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_surgery" class="activate-skill-button" title="Activation costs 12 skill points.">Activate</button>
<button type="action" name="act_undo_activate_surgery" class="undo-activate-skill-button">Undo Activate</button>
<button type="action" name="act_surgery" class="roll-skill-button">Roll</button>
<span class="unactivated-label">Not Activated</span>
</div>
</div>
</div>
<span class="small-hint">Activating Surgery costs 12 skill points.</span>
</div>
</div>
<!-- Performance Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_performance" name="attr_toggle_performance" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_performance">Performance Skill Group Training = <span name="attr_performance_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_performance" class="commit-spend-mode">Train (<span name="attr_performance_cost"></span> skill points)</button>
<button type="action" name="act_refund_performance" class="commit-spend-mode">Refund (<span name="attr_performance_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_acting_displayname"></span><span name="attr_acting_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_acting_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_acting_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_acting">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_art_displayname"></span><span name="attr_art_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_art_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_art_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_art">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_comedy_displayname"></span><span name="attr_comedy_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_comedy_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_comedy_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_comedy">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_dance_displayname"></span><span name="attr_dance_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_dance_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_dance_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_dance">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_disguise_displayname"></span><span name="attr_disguise_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_disguise_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_disguise_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_disguise">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_gambling_displayname"></span><span name="attr_gambling_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_gambling_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_gambling_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_gambling">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_play_instrument_displayname"></span><span name="attr_play_instrument_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_play_instrument_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_play_instrument_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_play_instrument">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_showmanship_displayname"></span><span name="attr_showmanship_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_showmanship_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_showmanship_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_showmanship">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_sing_displayname"></span><span name="attr_sing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_sing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_sing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_sing">Roll</button></div>
</div>
</div>
</div>
<!-- Physical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_physical" name="attr_toggle_physical" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_physical">Physical Skill Group Training = <span name="attr_physical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_physical" class="commit-spend-mode">Train (<span name="attr_physical_cost"></span> skill points)</button>
<button type="action" name="act_refund_physical" class="commit-spend-mode">Refund (<span name="attr_physical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_acrobatics_displayname"></span><span name="attr_acrobatics_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_acrobatics_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_acrobatics_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_acrobatics">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_athletics_displayname"></span><span name="attr_athletics_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_athletics_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_athletics_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_athletics">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_climbing_displayname"></span><span name="attr_climbing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_climbing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_climbing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_climbing">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_jumping_displayname"></span><span name="attr_jumping_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_jumping_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_jumping_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_jumping">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_lifting_displayname"></span><span name="attr_lifting_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_lifting_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_lifting_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_lifting">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_swimming_displayname"></span><span name="attr_swimming_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_swimming_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_swimming_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_swimming">Roll</button></div>
</div>
</div>
</div>
</div>
<!-- Social Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_social" name="attr_toggle_social" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_social">Social Skill Group Training = <span name="attr_social_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_social" class="commit-spend-mode">Train (<span name="attr_social_cost"></span> skill points)</button>
<button type="action" name="act_refund_social" class="commit-spend-mode">Refund (<span name="attr_social_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_persuade_displayname"></span><span name="attr_persuade_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_persuade_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_persuade_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_persuade">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_intimidate_displayname"></span><span name="attr_intimidate_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_intimidate_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_intimidate_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_intimidate">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_deceive_displayname"></span><span name="attr_deceive_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_deceive_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_deceive_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_deceive">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_negotiate_displayname"></span><span name="attr_negotiate_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_negotiate_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_negotiate_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_negotiate">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_seduce_displayname"></span><span name="attr_seduce_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_seduce_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_seduce_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_seduce">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_streetwise_displayname"></span><span name="attr_streetwise_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_streetwise_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_streetwise_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_streetwise">Roll</button></div>
</div>
</div>
</div>
<!-- Stealth Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_stealth" name="attr_toggle_stealth" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_stealth">Stealth Skill Group Training = <span name="attr_stealth_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_stealth" class="commit-spend-mode">Train (<span name="attr_stealth_cost"></span> skill points)</button>
<button type="action" name="act_refund_stealth" class="commit-spend-mode">Refund (<span name="attr_stealth_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_ambush_displayname"></span><span name="attr_ambush_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_ambush_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_ambush_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_ambush">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_hide_displayname"></span><span name="attr_hide_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_hide_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_hide_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_hide">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_sneak_displayname"></span><span name="attr_sneak_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_sneak_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_sneak_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_sneak">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_subtle_displayname"></span><span name="attr_subtle_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_subtle_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_subtle_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_subtle">Roll</button></div>
</div>
</div>
</div>
<!-- Survival Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_survival" name="attr_toggle_survival" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_survival">Survival Skill Group Training = <span name="attr_survival_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_survival" class="commit-spend-mode">Train (<span name="attr_survival_cost"></span> skill points)</button>
<button type="action" name="act_refund_survival" class="commit-spend-mode">Refund (<span name="attr_survival_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_cooking_displayname"></span><span name="attr_cooking_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cooking_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cooking_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cooking">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_fletching_displayname"></span><span name="attr_fletching_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_fletching_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_fletching_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_fletching">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_foraging_displayname"></span><span name="attr_foraging_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_foraging_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_foraging_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_foraging">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_hunting_displayname"></span><span name="attr_hunting_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_hunting_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_hunting_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_hunting">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_scavenging_displayname"></span><span name="attr_scavenging_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_scavenging_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_scavenging_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_scavenging">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_tracking_displayname"></span><span name="attr_tracking_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_tracking_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_tracking_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_tracking">Roll</button></div>
</div>
</div>
</div>
<!-- Technical Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_technical" name="attr_toggle_technical" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_technical">Technical Skill Group Training = <span name="attr_technical_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_technical" class="commit-spend-mode">Train (<span name="attr_technical_cost"></span> skill points)</button>
<button type="action" name="act_refund_technical" class="commit-spend-mode">Refund (<span name="attr_technical_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_blacksmithing_displayname"></span><span name="attr_blacksmithing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_blacksmithing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_blacksmithing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_blacksmithing">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_carpentry_displayname"></span><span name="attr_carpentry_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_carpentry_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_carpentry_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_carpentry">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_disarm_explosives_displayname"></span><span name="attr_disarm_explosives_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_disarm_explosives_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_disarm_explosives_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_disarm_explosives">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_gunsmithing_displayname"></span><span name="attr_gunsmithing_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_gunsmithing_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_gunsmithing_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_gunsmithing">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_mining_displayname"></span><span name="attr_mining_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_mining_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_mining_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_mining">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_set_explosives_displayname"></span><span name="attr_set_explosives_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_set_explosives_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_set_explosives_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_set_explosives">Roll</button></div>
</div>
</div>
</div>
<!-- Thievery Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_thievery" name="attr_toggle_thievery" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_thievery">Thievery Skill Group Training = <span name="attr_thievery_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_thievery" class="commit-spend-mode">Train (<span name="attr_thievery_cost"></span> skill points)</button>
<button type="action" name="act_refund_thievery" class="commit-spend-mode">Refund (<span name="attr_thievery_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_cheating_displayname"></span><span name="attr_cheating_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_cheating_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_cheating_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_cheating">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_forgery_displayname"></span><span name="attr_forgery_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_forgery_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_forgery_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_forgery">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_lockpicking_displayname"></span><span name="attr_lockpicking_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_lockpicking_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_lockpicking_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_lockpicking">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_sleight_of_hand_displayname"></span><span name="attr_sleight_of_hand_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_sleight_of_hand_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_sleight_of_hand_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_sleight_of_hand">Roll</button></div>
</div>
</div>
</div>
<h3>Combat Skills</h3>
<div class="spacer-md"></div>
<!-- Armed Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_armed" name="attr_toggle_armed" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_armed">Armed Skill Group Training = <span name="attr_armed_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_armed" class="commit-spend-mode">Train (<span name="attr_armed_cost"></span> skill points)</button>
<button type="action" name="act_refund_armed" class="commit-spend-mode">Refund (<span name="attr_armed_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_improvised_weapon_displayname"></span><span name="attr_improvised_weapon_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_improvised_weapon_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_improvised_weapon_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_improvised_weapon">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_melee_weapon_displayname"></span><span name="attr_melee_weapon_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_melee_weapon_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_melee_weapon_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_melee_weapon">Roll</button></div>
</div>
</div>
</div>
<!-- Longarms Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_longarms" name="attr_toggle_longarms" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_longarms">Longarms Skill Group Training = <span name="attr_longarms_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_longarms" class="commit-spend-mode">Train (<span name="attr_longarms_cost"></span> skill points)</button>
<button type="action" name="act_refund_longarms" class="commit-spend-mode">Refund (<span name="attr_longarms_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_rifle_displayname"></span><span name="attr_rifle_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_rifle_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_rifle_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_rifle">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_shotgun_displayname"></span><span name="attr_shotgun_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_shotgun_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_shotgun_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_shotgun">Roll</button></div>
</div>
</div>
</div>
<!-- Primitive Ranged Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_primitive" name="attr_toggle_primitive" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_primitive">Primitive Ranged Skill Group Training = <span name="attr_primitive_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_primitive" class="commit-spend-mode">Train (<span name="attr_primitive_cost"></span> skill points)</button>
<button type="action" name="act_refund_primitive" class="commit-spend-mode">Refund (<span name="attr_primitive_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_bow_displayname"></span><span name="attr_bow_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_bow_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_bow_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_bow_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_bow" class="activate-skill-button" title="Activation costs 12 skill points.">Activate</button>
<button type="action" name="act_undo_activate_bow" class="undo-activate-skill-button">Undo Activate</button>
<button type="action" name="act_bow" class="roll-skill-button">Roll</button>
<span class="unactivated-label">Not Activated</span>
</div>
</div>
<div class="grid-cell number-cell"><span name="attr_slingshot_displayname"></span><span name="attr_slingshot_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_slingshot_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_slingshot_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_slingshot">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_thrown_displayname"></span><span name="attr_thrown_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_thrown_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_thrown_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_thrown">Roll</button></div>
</div>
<span class="small-hint">Activating Bow costs 12 skill points.</span>
</div>
</div>
<!-- Sidearms Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_sidearms" name="attr_toggle_sidearms" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_sidearms">Sidearms Skill Group Training = <span name="attr_sidearms_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_sidearms" class="commit-spend-mode">Train (<span name="attr_sidearms_cost"></span> skill points)</button>
<button type="action" name="act_refund_sidearms" class="commit-spend-mode">Refund (<span name="attr_sidearms_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_pistol_displayname"></span><span name="attr_pistol_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_pistol_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_pistol_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_pistol">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_sawed_off_shotgun_displayname"></span><span name="attr_sawed_off_shotgun_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_sawed_off_shotgun_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_sawed_off_shotgun_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_sawed_off_shotgun">Roll</button></div>
</div>
</div>
</div>
<!-- Unarmed Skill Group -->
<div class="skill-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_unarmed" name="attr_toggle_unarmed" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_unarmed">Unarmed Skill Group Training = <span name="attr_unarmed_string"></span></label>
<div class="skill-group-content">
<div class="sheet-spendblock">
<input type="hidden" name="attr_spend_mode" value="0" />
<div class="spend-mode">
<button type="action" name="act_add_unarmed" class="commit-spend-mode">Train (<span name="attr_unarmed_cost"></span> skill points)</button>
<button type="action" name="act_refund_unarmed" class="commit-spend-mode">Refund (<span name="attr_unarmed_refund"></span> skill points)</button>
<div class="commit-spend-mode">
Skill Points Left: <span name="attr_skill_points"></span>
</div>
</div>
<div class="spacer-sm"></div>
</div>
<div class="sheet-grid-table four-col">
<div class="grid-header">Skill</div>
<div class="grid-header">Attr Code</div>
<div class="grid-header">Dice Code</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell"><span name="attr_brawling_displayname"></span><span name="attr_brawling_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_brawling_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_brawling_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_brawling">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_martial_arts_displayname"></span><span name="attr_martial_arts_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_martial_arts_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_martial_arts_string"></span></div>
<div class="grid-cell">
<input type="hidden" name="attr_martial_arts_active" value="2" />
<div class="skill-roll-buttons">
<button type="action" name="act_activate_martial_arts" class="activate-skill-button" title="Activation costs 12 skill points.">Activate</button>
<button type="action" name="act_undo_activate_martial_arts" class="undo-activate-skill-button">Undo Activate</button>
<button type="action" name="act_martial_arts" class="roll-skill-button">Roll</button>
<span class="unactivated-label">Not Activated</span>
</div>
</div>
<div class="grid-cell number-cell"><span name="attr_push_displayname"></span><span name="attr_push_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_push_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_push_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_push">Roll</button></div>
<div class="grid-cell number-cell"><span name="attr_wrestling_displayname"></span><span name="attr_wrestling_specialized"></span></div>
<div class="grid-cell number-cell"><span name="attr_wrestling_attributes"></span></div>
<div class="grid-cell number-cell"><span name="attr_wrestling_string"></span></div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_wrestling">Roll</button></div>
</div>
<span class="small-hint">Activating Martial Arts costs 12 skill points.</span>
</div>
</div>
</div>
<div class="sheet-view-inventory">
<div class="sheet-controls-row">
<!-- Left: Expand/Collapse -->
<div class="sheet-controls-group">
<h3>Inventory - Weights in Pounds</h3>
</div>
<!-- Middle: Skill Points + Spend -->
<div class="sheet-controls-group">
<label class="sheet-d6pp-label">Move:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_move" readonly />
<label class="sheet-d6pp-label">Run:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_run" readonly />
</div>
<!-- Right: View Inventory -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_view_character">View Character</button>
</div>
</div>
<div class="sheet-controls-row" style="justify-content: space-between;">
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_use_encumbrance" checked />
Use Encumbrance
</label>
</div>
<div style="display: flex; align-items: center; gap: 8px;">
<label class="sheet-d6pp-label">Cash:</label>
<input type="text" class="sheet-d6pp" name="attr_character_cash" />
</div>
</div>
<p>All weights in pounds. Encumbrance assumes you use a horse or a sulky. If you use a wagon ignore Horse Load and Mounted Load. Storage is for items that you do not carry with you, or for items (like horses) that are not carried at all.</p>
<div class="sheet-view-wrapper">
<input type="hidden" name="attr_encumbrance_visible" />
<div class="sheet-encumbrance-section">
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_details" name="attr_toggle_details" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_details">Encumbrance Table</label>
<div class="skill-group-content">
<div class="sheet-grid-table seven-col full-width">
<div class="grid-header"></div>
<div class="grid-header">Capacity (lbs)</div>
<div class="grid-header">-5 Move/Run</div>
<div class="grid-header">-10 Move/Run</div>
<div class="grid-header">-15 Move/Run</div>
<div class="grid-header">-20 Move/Run</div>
<div class="grid-header">-25 Move/Run</div>
<div class="grid-cell"><strong>Character</strong></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_capacity" readonly /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_enc_5" readonly /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_enc_10" readonly /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_enc_15" readonly /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_enc_20" readonly /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_character_enc_25" readonly /></div>
<div class="grid-cell"><strong>Horse</strong></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_capacity" readonly value="250" /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_enc_5" readonly value="275" /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_enc_10" readonly value="300" /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_enc_15" readonly value="325" /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_enc_20" readonly value="350" /></div>
<div class="grid-cell"><input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_enc_25" readonly value="375" /></div>
</div>
</div>
</div>
</div>
</div>
<div class="spacer-sm"></div>
<div class="sheet-character-inventory-grid">
<label class="sheet-d6pp-label">Equipped:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_equipped_weight_total" readonly />
<label class="sheet-d6pp-label">Horse Load:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_horse_weight_total" readonly />
<label class="sheet-d6pp-label">Mounted Load:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_mounted_weight_total" readonly />
</div>
<div class="sheet-view-wrapper">
<input type="hidden" name="attr_encumbrance_visible" />
<div class="sheet-encumbrance-section">
<div class="sheet-character-inventory-grid">
<label class="sheet-d6pp-label">Effect:</label>
<input type="text" class="sheet-d6pp" name="attr_encumbrance_text" readonly />
<label class="sheet-d6pp-label">Effect:</label>
<input type="text" class="sheet-d6pp" name="attr_horse_encumbrance_text" readonly />
<label class="sheet-d6pp-label">Effect:</label>
<input type="text" class="sheet-d6pp" name="attr_mounted_encumbrance_text" readonly />
</div>
</div>
</div>
<fieldset class="repeating_inventory">
<div>
<div class="inventory-card">
<div class="inventory-card-header">
<div class="inventory-field">
<input type="text" name="attr_item_name" class="inventory-item-name" placeholder="Name"/>
</div>
<div class="inventory-field">
<label class="inventory-labeled-input">Qty:
<input type="number" name="attr_item_qty" class="sheet-d6pp inventory-input qty-input"/>
</label>
</div>
<div class="inventory-field">
<label class="inventory-labeled-input">Wt:
<input type="number" step="0.1" name="attr_item_weight" class="sheet-d6pp inventory-input weight-input"/>
</label>
</div>
<div class="inventory-field">
<select name="attr_item_location" class="inventory-item-location">
<option value="equipped">Equipped</option>
<option value="horse">On Horse</option>
<option value="storage">Storage</option>
</select>
</div>
</div>
<div class="inventory-card-description">
<textarea name="attr_item_description" placeholder="Description..."></textarea>
</div>
</div>
</div>
</fieldset>
<!-- Drop Zone -->
<div class="compendium-drop-target" style="opacity:0; height:1px; overflow:hidden; position:absolute;">
<p><strong>Drop an item here</strong></p>
<input type="text" name="attr_itemdrop_name" accept="item_name" placeholder="Name (hidden)" style="display:none;">
<input type="number" name="attr_itemdrop_qty" accept="item_qty" style="display:none;">
<input type="number" name="attr_itemdrop_weight" accept="item_weight" style="display:none;">
<input type="text" name="attr_itemdrop_location" accept="item_location" placeholder="Location" style="display:none;">
<textarea name="attr_itemdrop_description" accept="item_description" style="display:none;"></textarea>
</div>
<!-- Control Buttons OUTSIDE the fieldset -->
<div class="repcontrol" data-groupname="repeating_inventory"></div>
</div>
</div>
</div><!-- End PC/Major NPC Sheet -->
<!-- Monster Character Sheet -->
<div class="sheet-step sheet-step-monster sheet-mode-monster compendium-drop-target monsters">
<input accept="character_type" type="hidden" name="attr_character_type" />
<input accept="character_description" type="hidden" name="attr_character_description" />
<input accept="monster_type" type="hidden" name="attr_monster_type" />
<input accept="base_move" type="hidden" name="attr_base_move"/>
<input accept="base_run" type="hidden" name="attr_base_run" />
<input accept="strength" type="hidden" name="attr_strength" />
<input accept="agility" type="hidden" name="attr_agility" />
<input accept="health" type="hidden" name="attr__health" />
<input accept="perception" type="hidden" name="attr_perception" />
<input accept="quickness" type="hidden" name="attr_quickness" />
<input accept="willpower" type="hidden" name="attr_willpower" />
<input accept="intelligence" type="hidden" name="attr_intelligence" />
<input accept="manualdex" type="hidden" name="attr_manualdex" />
<input accept="charisma" type="hidden" name="attr_charisma" />
<input accept="skill_1_name" type="hidden" name="attr_skill_1_name" />
<input accept="skill_1_skill" type="hidden" name="attr_skill_1_skill" />
<input accept="melee_attack_1_name" type="hidden" name="attr_melee_attack_1_name" />
<input accept="melee_attack_1_skill" type="hidden" name="attr_melee_attack_1_skill" />
<input accept="melee_attack_1_damage" type="hidden" name="attr_melee_attack_1_damage" />
<input accept="melee_attack_1_min_damage" type="hidden" name="attr_melee_attack_1_min_damage" />
<input accept="melee_attack_1_special" type="hidden" name="attr_melee_attack_1_special" />
<input accept="melee_attack_2_name" type="hidden" name="attr_melee_attack_2_name" />
<input accept="melee_attack_2_skill" type="hidden" name="attr_melee_attack_2_skill" />
<input accept="melee_attack_2_damage" type="hidden" name="attr_melee_attack_2_damage" />
<input accept="melee_attack_2_min_damage" type="hidden" name="attr_melee_attack_2_min_damage" />
<input accept="melee_attack_2_special" type="hidden" name="attr_melee_attack_2_special" />
<input accept="special_ability_1" type="hidden" name="attr_special_ability_1" />
<div class="sheet-controls-row" style="justify-content: space-between;">
<!-- Left: Expand/Collapse -->
<div>
<button type="action" class="sheet-d6pp" name="act_expand_all">Expand All</button>
<button type="action" class="sheet-d6pp" name="act_collapse_all">Collapse All</button>
</div>
</div>
<!-- Monster Details -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_details" name="attr_toggle_details" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_details">
<span name="attr_monster_type">Monster Details</span>
</label>
<div class="skill-group-content">
<div class="sheet-controls-row">
<!-- Left: Expand/Collapse -->
<div class="sheet-controls-group">
<label class="sheet-d6pp-label">Name:</label>
<input type="text" class="sheet-d6pp" name="attr_character_name" />
</div>
</div>
<div class="spacer-sm"></div>
<label class="sheet-d6pp-label">Description:</label>
<textarea class="sheet-d6pp textarea-two-lines" name="attr_character_description" readonly></textarea>
<div class="spacer-sm"></div>
<!-- GM Whisper + Move/Run/Advantage Row -->
<div class="sheet-controls-row" style="justify-content: space-between;">
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_whisper_toggle" value="/w gm " />
Whisper to GM
</label>
</div>
<div style="display: flex; align-items: center; gap: 8px;">
<label class="sheet-d6pp-label">Move:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_move" readonly />
<label class="sheet-d6pp-label">Run:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_run" readonly />
<label class="sheet-d6pp-label">Advantage:</label>
<input type="number" class="sheet-d6pp" name="attr_advantage" />
</div>
</div>
</div>
</div>
<!-- Skill Check -->
<div>
<input type="hidden" name="attr_skills_active" value="0"/>
<div class="sheet-section-collapsible section-has-skills">
<input type="checkbox" class="skill-toggle" id="toggle_skillcheck" name="attr_toggle_skillcheck" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_skillcheck">Skill Check</label>
<div class="skill-group-content">
<div class="sheet-grid-table four-col full-width">
<div class="grid-header">Target Number</div>
<div class="grid-header">Challenge Rating</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<div class="grid-cell target-number-cell"><span name="attr_skill_check_target">0</span></div>
<div class="grid-cell">
<select name="attr_skillcheck_cr" class="sheet-d6pp-select">
<option value="0">Trivial</option>
<option value="5">Easy (+5)</option>
<option value="10">Moderate (+10)</option>
<option value="15">Hard (+15)</option>
<option value="20">Very Hard (+20)</option>
<option value="25">Extremely Hard (+25)</option>
</select>
</div>
<div class="grid-cell"><input type="number" name="attr_skillcheck_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell number-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
</div>
<div class="spacer-sm"></div>
<button type="action" name="act_roll_skill_1" class="sheet-d6pp-button"> Roll <span name="attr_skill_1_name"></span></button>
</div>
</div>
</div>
<!-- Combat -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_combat" name="attr_toggle_combat" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_combat">Combat</label>
<div class="skill-group-content">
<div class="sheet-grid-table four-col">
<!-- Headers -->
<div class="grid-header">Target Number</div>
<div class="grid-header">Opponent's Dodge</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<!-- Row values -->
<div class="grid-cell target-number-cell"><span name="attr_combat_target">0</span></div>
<div class="grid-cell">
<input type="number" name="attr_combat_opponent_dodge" class="sheet-d6pp" value="0" min="0" />
</div>
<div class="grid-cell"><input type="number" name="attr_combat_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
</div>
<div class="spacer-md"></div>
<input type="hidden" name="attr_second_melee_attack_active" value="0"/>
<div class="melee-grid-one-row">
<div class="sheet-grid-attack sheet-grid-melee">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<!-- First Row -->
<div class="grid-cell stack-tight target-number-cell">
<input type="text" name="attr_melee_attack_1_name" style="display:none;" />
<span name="attr_melee_attack_1_name"></span>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_1_skill" style="display:none;" />
<span name="attr_melee_attack_1_skill"></span>
<button type="action" class="sheet-d6pp" name="act_melee_attack_1">Roll</button>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_1_damage" style="display:none;" />
<span name="attr_melee_attack_1_damage"></span>
<button type="action" class="sheet-d6pp" name="act_melee_damage_1">Damage</button>
</div>
</div>
</div>
<div class="melee-grid-two-rows">
<div class="sheet-grid-attack sheet-grid-melee">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<!-- First Row -->
<div class="grid-cell stack-tight target-number-cell">
<input type="text" name="attr_melee_attack_1_name" style="display:none;" />
<span name="attr_melee_attack_1_name"></span>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_1_skill" style="display:none;" />
<span name="attr_melee_attack_1_skill"></span>
<button type="action" class="sheet-d6pp" name="act_melee_attack_1">Roll</button>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_1_damage" style="display:none;" />
<span name="attr_melee_attack_1_damage"></span>
<button type="action" class="sheet-d6pp" name="act_melee_damage_1">Damage</button>
</div>
<!-- Second Row -->
<div class="grid-cell stack-tight target-number-cell">
<input type="text" name="attr_melee_attack_2_name" style="display:none;" />
<span name="attr_melee_attack_2_name"></span>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_2_skill" style="display:none;" />
<span name="attr_melee_attack_2_skill"></span>
<button type="action" class="sheet-d6pp" name="act_melee_attack_2">Roll</button>
</div>
<div class="grid-cell stack-tight">
<input type="text" name="attr_melee_attack_2_damage" style="display:none;" />
<span name="attr_melee_attack_2_damage"></span>
<button type="action" class="sheet-d6pp" name="act_melee_damage_2">Damage</button>
</div>
</div>
</div>
<div class="spacer-sm"></div>
<input type="hidden" name="attr_special_ability_active" value="0" />
<div class="section-has-special-ability">
<label>Special Abilities:</label>
<span name="attr_special_ability_1"></span>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_initiative">Roll Initiative</button>
<button type="action" class="sheet-d6pp" name="act_avoid">Roll Avoid</button>
</div>
</div>
</div>
</div>
<!-- Wounds -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_wounds" name="attr_toggle_wounds" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_wounds">Wounds</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col full-width">
<div class="grid-header">First Aid Target Number</div>
<div class="grid-header">Wound Points</div>
<div class="grid-header">Wounds Ignored</div>
<div class="grid-header"># First Aid</div>
<div class="grid-header">Unconscious Threshold</div>
<div class="grid-header">Death Threshold</div>
<div class="grid-cell target-number-cell">
<span name="attr_first_aid_target">0</span>
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_total" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_ignored" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_first_aid_count" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell"><span name="attr_unconscious_threshold"></span></div>
<div class="grid-cell"><span name="attr_death_threshold"></span></div>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_endure">Roll Endure</button>
</div>
<div class="sheet-controls-group">
<label class="sheet-d6pp-label" style="margin: 0; display: inline;">Status:</label>
<input type="text" class="sheet-d6pp" name="attr_status" readonly/>
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_revived_toggle" />
Revived
</label>
</div>
</div>
</div>
</div>
</div>
<!-- Monster Attributes -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_attibutes" name="attr_toggle_attibutes" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_attibutes">Attributes</label>
<div class="skill-group-content">
<div class="sheet-grid-table nine-col full-width">
<!-- Headers -->
<div class="grid-header">S</div>
<div class="grid-header">A</div>
<div class="grid-header">H</div>
<div class="grid-header">P</div>
<div class="grid-header">Q</div>
<div class="grid-header">W</div>
<div class="grid-header">I</div>
<div class="grid-header">M</div>
<div class="grid-header">C</div>
<!-- Base Values -->
<span name="attr_strength_base_string" class="grid-cell number-cell"></span>
<span name="attr_agility_base_string" class="grid-cell number-cell"></span>
<span name="attr_health_base_string" class="grid-cell number-cell"></span>
<span name="attr_perception_base_string" class="grid-cell number-cell"></span>
<span name="attr_quickness_base_string" class="grid-cell number-cell"></span>
<span name="attr_willpower_base_string" class="grid-cell number-cell"></span>
<span name="attr_intelligence_base_string" class="grid-cell number-cell"></span>
<span name="attr_manualdex_base_string" class="grid-cell number-cell"></span>
<span name="attr_charisma_base_string" class="grid-cell number-cell"></span>
<!-- Roll Buttons -->
<button type="action" name="act_strength" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_agility" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_health" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_perception" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_quickness" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_willpower" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_intelligence" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_manualdex" class="sheet-d6pp grid-cell">Roll</button>
<button type="action" name="act_charisma" class="sheet-d6pp grid-cell">Roll</button>
</div>
</div>
</div>
</div> <!-- Monster Character Sheet -->
<!-- Quick NPC Character Sheet -->
<div class="sheet-step sheet-step-quicknpc sheet-mode-quicknpc">
<!-- Expand/Collapse and Spend Controls -->
<div class="sheet-controls-row" style="justify-content: space-between;">
<!-- Left: Expand/Collapse -->
<div>
<button type="action" class="sheet-d6pp" name="act_expand_all">Expand All</button>
<button type="action" class="sheet-d6pp" name="act_collapse_all">Collapse All</button>
</div>
</div>
<!-- Character Info Grid -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_details" name="attr_toggle_details" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_details">Character Details</label>
<div class="skill-group-content">
<label class="sheet-d6pp-label">Name:</label>
<input type="text" class="sheet-d6pp" name="attr_character_name" />
<div class="spacer-sm"></div>
<label class="sheet-d6pp-label">Description:</label>
<textarea class="sheet-d6pp" name="attr_character_description"></textarea>
<div class="spacer-sm"></div>
<!-- GM Whisper + Move/Run/Advantage Row -->
<div class="sheet-controls-row" style="justify-content: space-between;">
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_whisper_toggle" value="/w gm " />
Whisper to GM
</label>
</div>
<div style="display: flex; align-items: center; gap: 8px;">
<label class="sheet-d6pp-label">Move:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_move" readonly />
<label class="sheet-d6pp-label">Run:</label>
<input type="text" class="sheet-d6pp sheet-small-input" name="attr_current_run" readonly />
<label class="sheet-d6pp-label">Advantage:</label>
<input type="number" class="sheet-d6pp" name="attr_advantage" />
</div>
</div>
</div>
</div>
<!-- Actions Tracker -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_actions" name="attr_toggle_actions" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_actions">Actions Tracker</label>
<div class="skill-group-content">
<div class="action-grid">
<!-- Row 1: Headings -->
<div class="action-grid-header">Outside Your Turn</div>
<div class="action-grid-header">On Your Turn</div>
<!-- Row 2: Pre-Action / Significant Action -->
<div>
<label class="sheet-d6pp-label">Pre-Action (start of round)</label>
<div class="inline-action-row">
<input type="hidden" name="attr_preaction_ignorepain_active" value="0" />
<input type="hidden" name="attr_preaction_disengage_active" value="0" />
<select class="preaction-normal sheet-d6pp-select" name="attr_preaction_selection_normal">
<option value="None">None</option>
<option value="Dodge">Dodge</option>
<option value="Power Strike">Power Strike</option>
<option value="Simple Action">Simple Action</option>
<option value="Help">Help</option>
<option value="Reload">Reload</option>
<option value="Break Grapple">Break Grapple</option>
<option value="Break Lassoed">Break Lassoed</option>
</select>
<span name="attr_preaction_text" class="small-hint"></span>
</div>
</div>
<div>
<label class="sheet-d6pp-label">Significant Action</label>
<div class="inline-action-row">
<select class="sheet-d6pp-select" name="attr_significant_action_selection">
<option value="None">None</option>
<option value="Attack">Attack</option>
<option value="Skill Check">Make a Skill Check</option>
<option value="Run">Run</option>
<option value="Reload">Reload</option>
<option value="Simple Action">Simple Action</option>
<option value="Help">Help</option>
</select>
<span name="attr_significant_action_text" class="small-hint"></span>
</div>
</div>
<!-- Row 3: Reaction / Simple Action -->
<div>
<label class="sheet-d6pp-label">Reaction (once per turn)</label>
<div class="inline-action-row">
<input type="hidden" name="attr_reaction_fixit_active" value="0" />
<input type="hidden" name="attr_reaction_medic_active" value="0" />
<input type="hidden" name="attr_reaction_mode" value="normal" />
<select class="reaction-normal sheet-d6pp-select" name="attr_reaction_selection_normal">
<option value="None">None</option>
<option value="Block">Block</option>
<option value="Impede">Impede</option>
<option value="Push">Push</option>
<option value="Protect">Protect</option>
<option value="Trip">Trip</option>
<option value="Simple Action">Simple Action</option>
<option value="Keep Grapple">Keep Grapple</option>
<option value="Keep Lassoed">Keep Lassoed</option>
</select>
<span name="attr_reaction_text" class="small-hint"></span>
</div>
</div>
<div>
<label class="sheet-d6pp-label">Simple Action</label>
<select class="sheet-d6pp-select" name="attr_simple_action_selection">
<option value="None">None</option>
<option value="Use an item">Use an item</option>
<option value="Open/close door">Open/close door</option>
<option value="Draw/sheath a weapon">Draw/sheath a weapon</option>
<option value="Drop prone/stand up">Drop prone/stand up</option>
<option value="Mount/dismount Horse">Mount/dismount Horse</option>
<option value="GM Approved action">GM Approved action</option>
</select>
</div>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<input type="hidden" name="attr_preaction_selection_normal" />
<div class="sheet-dodge-toggle">
<label class="sheet-d6pp-label" style="margin: 0; display: inline;"># Dodges:</label>
<input type="number" class="sheet-d6pp" name="attr_times_attacked" />
</div>
<div class="sheet-controls-group">
<input type="hidden" name="attr_preaction_selection_normal" />
<div class="sheet-dodge-toggle">
<button type="action" class="sheet-d6pp" name="act_dodge">Roll Dodge</button>
</div>
</div>
</div>
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_new_turn">New Turn</button>
</div>
</div>
</div>
</div>
<!-- Skill Check -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_skillcheck" name="attr_toggle_skillcheck" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_skillcheck">Skill Check</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col full-width">
<div class="grid-header">Target Number</div>
<div class="grid-header">Challenge Rating</div>
<div class="grid-header"># Dodges</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<div class="grid-header">Mounted Penalty</div>
<div class="grid-cell target-number-cell"><span name="attr_skill_check_target">0</span></div>
<div class="grid-cell">
<select name="attr_skillcheck_cr" class="sheet-d6pp-select">
<option value="0">Trivial</option>
<option value="5">Easy (+5)</option>
<option value="10">Moderate (+10)</option>
<option value="15">Hard (+15)</option>
<option value="20">Very Hard (+20)</option>
<option value="25">Extremely Hard (+25)</option>
</select>
</div>
<div class="grid-cell number-cell"><span name="attr_times_attacked">0</span></div>
<div class="grid-cell"><input type="number" name="attr_skillcheck_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell number-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
<div class="grid-cell number-cell"><span name="attr_skillcheck_mounted_penalty">0</span></div>
</div>
<span class="small-hint">Each attack during Dodge adds +3 to your TN. Modifier includes Help, Prep, and situational bonuses.</span>
<div class="sheet-skill-select-row">
<select name="attr_selected_skill" class="sheet-d6pp-select">
<option value="">None</option>
<option value="acrobatics">Acrobatics (AAS)</option>
<option value="acting">Acting (CCP)</option>
<option value="agility">Agility (AAS)</option>
<option value="ambush">Ambush (QQA)</option>
<option value="appraisal">Appraisal (PPI)</option>
<option value="art">Art (MMP)</option>
<option value="athletics">Athletics (SSA)</option>
<option value="avoid">Avoid (QPP)</option>
<option value="blacksmithing">Blacksmithing (SSW)</option>
<option value="brawling">Brawling (ASS)</option>
<option value="bow">Bow (AAM)</option>
<option value="carpentry">Carpentry (MMS)</option>
<option value="cartography">Cartography (IIP)</option>
<option value="cattle_care">Cattle Care (PCW)</option>
<option value="cattle_empathy">Cattle Empathy (PPC)</option>
<option value="cattle_handling">Cattle Handling (ACP)</option>
<option value="charisma">Charisma (CCC)</option>
<option value="cheating">Cheating (MPW)</option>
<option value="climbing">Climbing (SSH)</option>
<option value="comedy">Comedy (CPP)</option>
<option value="cooking">Cooking (IWM)</option>
<option value="dance">Dance (CAP)</option>
<option value="deceive">Deceive (CPP)</option>
<option value="disarm_explosives">Disarm Explosives (MWP)</option>
<option value="disguise">Disguise (MIP)</option>
<option value="dodge">Dodge (QPA)</option>
<option value="drive_boat">Drive Boat (PPM)</option>
<option value="drive_cart">Drive Cart (MWC)</option>
<option value="education">Education (III)</option>
<option value="empathy">Empathy (PPC)</option>
<option value="endure">Endure (HHW)</option>
<option value="engineering">Engineering (III)</option>
<option value="first_aid">First Aid (PWI)</option>
<option value="fletching">Fletching (PPM)</option>
<option value="forgery">Forgery (MII)</option>
<option value="foraging">foraging (PIM)</option>
<option value="gambling">Gambling (PPI)</option>
<option value="gunsmithing">Gunsmithing (MMP)</option>
<option value="health">Health (HHH)</option>
<option value="hide">Hide (WWI)</option>
<option value="horse_care">Horse Care (PCW)</option>
<option value="horse_empathy">Horse Empathy (PPC)</option>
<option value="hunting">Hunting (PPQ)</option>
<option value="initiative">Initiative (QQP)</option>
<option value="insight">Insight (PPP)</option>
<option value="intelligence">Intelligence (III)</option>
<option value="intimidate">Intimidate (CCS)</option>
<option value="investigate">Investigate (IIP)</option>
<option value="jumping">Jumping (AAH)</option>
<option value="law">Law (III)</option>
<option value="lifting">Lifting (SSS)</option>
<option value="lockpicking">Lockpicking (MIP)</option>
<option value="manualdex">Manual Dexterity (MMM)</option>
<option value="martial_arts">Martial Arts (AQP)</option>
<option value="medical_care">Medical Care (IIP)</option>
<option value="melee_weapon">Melee Weapon (AQQ)</option>
<option value="mining">Mining (SWP)</option>
<option value="negotiate">Negotiate (CIW)</option>
<option value="perception">Perception (PPP)</option>
<option value="persuade">Persuade (CCI)</option>
<option value="pistol">Pistol (AAQ)</option>
<option value="play_instrument">Play Instrument (MMQ)</option>
<option value="push">Push (SSS)</option>
<option value="quickness">Quickness (QQQ)</option>
<option value="rifle">Rifle (APW)</option>
<option value="riding">Riding (AAC)</option>
<option value="roping">Roping (MAA)</option>
<option value="sailing">Sailing (IAP)</option>
<option value="sawed_off_shotgun">Sawed-Off Shotgun (SAW)</option>
<option value="scavenging">Scavenging (PPW)</option>
<option value="search">Search (PPI)</option>
<option value="seduce">Seduce (CCP)</option>
<option value="set_explosives">Set Explosives (MIW)</option>
<option value="showmanship">Showmanship (CCA)</option>
<option value="sing">Sing (CHP)</option>
<option value="sleight_of_hand">Sleight of Hand (MMP)</option>
<option value="slingshot">Slingshot (AMM)</option>
<option value="strength">Strength (SSS)</option>
<option value="streetwise">Streetwise (CPI)</option>
<option value="subtle">Subtle (QAP)</option>
<option value="surgery">Surgery (MIP)</option>
<option value="swimming">Swimming (AHH)</option>
<option value="thrown">Thrown (SAM)</option>
<option value="tracking">Tracking (PPI)</option>
<option value="willpower">Willpower (WWW)</option>
<option value="writing">Writing (CIP)</option>
<option value="wrestling">Wrestling (SQA)</option>
</select>
<span name="attr_skill_actual"></span>
<button type="action" name="act_selected_skill_roll" class="sheet-d6pp">Roll</button>
</div>
</div>
</div>
<!-- Combat -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_combat" name="attr_toggle_combat" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_combat">Combat</label>
<div class="skill-group-content">
<div class="sheet-grid-table eight-col full-width">
<!-- Headers -->
<div class="grid-header">Target Number</div>
<div class="grid-header">Range</div>
<div class="grid-header">Cover</div>
<div class="grid-header">Opponent's Dodge</div>
<div class="grid-header"># Dodges</div>
<div class="grid-header">Modifier</div>
<div class="grid-header">Wound Penalty</div>
<div class="grid-header">Mounted Penalty</div>
<!-- Row values -->
<div class="grid-cell target-number-cell"><span name="attr_combat_target">0</span></div>
<div class="grid-cell">
<select name="attr_combat_range" class="sheet-d6pp-select">
<option value="5">Point Blank (5)</option>
<option value="10">Short (10)</option>
<option value="15">Medium (15)</option>
<option value="20">Long (20)</option>
<option value="25">Extreme (25)</option>
</select>
</div>
<div class="grid-cell">
<select name="attr_combat_cover" class="sheet-d6pp-select">
<option value="0">None (0)</option>
<option value="5">Light (5)</option>
<option value="10">Half (10)</option>
<option value="15">Heavy (15)</option>
<option value="30">Full (30)</option>
</select>
</div>
<div class="grid-cell">
<input type="number" name="attr_combat_opponent_dodge" class="sheet-d6pp" value="0" min="0" />
</div>
<div class="grid-cell"><span name="attr_times_attacked">0</span></div>
<div class="grid-cell"><input type="number" name="attr_combat_modifier" class="sheet-d6pp" value="0" /></div>
<div class="grid-cell"><span name="attr_skillcheck_wound_penalty">0</span></div>
<div class="grid-cell"><span name="attr_skillcheck_mounted_penalty">0</span></div>
</div>
<span class="small-hint">Each attack during Dodge adds +3 to your TN. Modifier includes Help, Prep, and situational bonuses.</span>
<div class="spacer-md"></div>
<label class="sheet-d6pp-label">Select a Form of Attack</label>
<div class="sheet-attack-tabs">
<!-- Radio buttons -->
<input type="radio" name="attr_attack_mode_q" value="firearms" class="sheet-tab" checked />
<span>Firearms</span>
<input type="radio" name="attr_attack_mode_q" value="ranged" class="sheet-tab" />
<span>Ranged</span>
<input type="radio" name="attr_attack_mode_q" value="melee" class="sheet-tab" />
<span>Melee</span>
<div class="spacer-sm"></div>
<div class="sheet-attack-section sheet-firearms">
<!-- Weapon 1 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<div class="grid-header">Ammo</div>
<div class="grid-header">Short</div>
<div class="grid-header">Medium</div>
<div class="grid-header">Long</div>
<div class="grid-header">Extreme</div>
<!-- Row 1: Weapon 1 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm1_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm1_actual"></span>
<button type="action" name="act_firearm1_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm1_damage"></span>
<button type="action" name="act_firearm1_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm1_ammo_add">+</button>
<button type="action" name="act_firearm1_ammo_sub"></button>
</div>
<button type="action" name="act_firearm1_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm1_short"></span></div>
<div class="grid-cell"><span name="attr_firearm1_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm1_long"></span></div>
<div class="grid-cell"><span name="attr_firearm1_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row"> <!-- not grid-span-8 -->
<span name="attr_firearm1_ammo_display"></span>
</div>
</div>
<!-- Weapon 2 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Row 1: Weapon 2 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm2_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm2_actual"></span>
<button type="action" name="act_firearm2_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm2_damage"></span>
<button type="action" name="act_firearm2_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm2_ammo_add">+</button>
<button type="action" name="act_firearm2_ammo_sub"></button>
</div>
<button type="action" name="act_firearm2_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm2_short"></span></div>
<div class="grid-cell"><span name="attr_firearm2_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm2_long"></span></div>
<div class="grid-cell"><span name="attr_firearm2_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row"> <!-- not grid-span-8 -->
<span name="attr_firearm2_ammo_display"></span>
</div>
</div>
<!-- Weapon 3 -->
<div class="sheet-grid-attack sheet-grid-firearms full-width">
<!-- Row 1: Weapon 3 -->
<div class="grid-cell stack-weapon">
<select name="attr_firearm3_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Revolver">Revolver</option>
<option value="Derringer">Derringer</option>
<option value="Lever-Action Rifle">Lever-Action Rifle</option>
<option value="Single Shot Rifle">Single Shot Rifle</option>
<option value="Shotgun">Shotgun</option>
<option value="Sawed-off Shotgun">Sawed-off Shotgun</option>
</select>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm3_actual"></span>
<button type="action" name="act_firearm3_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_firearm3_damage"></span>
<button type="action" name="act_firearm3_damage">Damage</button>
</div>
<div class="grid-cell stack-tight">
<div class="ammo-button-row">
<button type="action" name="act_firearm3_ammo_add">+</button>
<button type="action" name="act_firearm3_ammo_sub"></button>
</div>
<button type="action" name="act_firearm3_ammo_reload">Reload</button>
</div>
<div class="grid-cell"><span name="attr_firearm3_short"></span></div>
<div class="grid-cell"><span name="attr_firearm3_medium"></span></div>
<div class="grid-cell"><span name="attr_firearm3_long"></span></div>
<div class="grid-cell"><span name="attr_firearm3_extreme"></span></div>
<!-- Ammo Display Row -->
<div class="grid-cell ammo-display full-row last-row">
<span name="attr_firearm3_ammo_display"></span>
</div>
</div>
</div>
<div class="sheet-attack-section sheet-ranged">
<div class="sheet-grid-attack sheet-grid-ranged full-width">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<div class="grid-header">Short</div>
<div class="grid-header">Medium</div>
<div class="grid-header">Long</div>
<div class="grid-header">Extreme</div>
<!-- Weapon Row -->
<div class="grid-cell stack-weapon">
<select name="attr_ranged_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Bow">Bow</option>
<option value="Slingshot">Slingshot</option>
<option value="Thrown Knife/Axe">Thrown Knife/Axe</option>
<option value="Improvised Thrown">Improvised Thrown</option>
<option value="Lasso">Lasso</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_ranged_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_ranged_actual"></span>
<button type="action" name="act_ranged_attack" class="sheet-d6pp">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_ranged_damage"></span>
<button type="action" name="act_ranged_damage" class="sheet-d6pp">Damage</button>
</div>
<div class="grid-cell"><span name="attr_ranged_short"></span></div>
<div class="grid-cell"><span name="attr_ranged_medium"></span></div>
<div class="grid-cell"><span name="attr_ranged_long"></span></div>
<div class="grid-cell"><span name="attr_ranged_extreme"></span></div>
</div>
</div>
<div class="sheet-attack-section sheet-melee">
<div class="sheet-grid-attack sheet-grid-melee">
<!-- Headers -->
<div class="grid-header">Weapon</div>
<div class="grid-header">Dice</div>
<div class="grid-header">Damage</div>
<!-- Row: Melee Weapon -->
<div class="grid-cell stack-weapon">
<select name="attr_melee_weapon" class="sheet-d6pp-select">
<option value="None">None</option>
<option value="Brawling">Brawling</option>
<option value="Wrestling">Wrestling</option>
<option value="Martial Arts">Martial Arts</option>
<option value="Improvised Weapon">Improvised Weapon</option>
<option value="Pistol Whip">Pistol Whip</option>
<option value="Knife/Hatchet">Knife/Hatchet</option>
<option value="Cavalry Sword">Cavalry Sword</option>
<option value="Club">Club</option>
<option value="Push">Push</option>
<option value="Hitting with Butt of Rifle">Hitting with Butt of Rifle</option>
</select>
<div class="weapon-skill">
<span class="small-hint">Skill:</span>
<span class="small-hint" name="attr_melee_attr"></span>
</div>
</div>
<div class="grid-cell stack-tight">
<span name="attr_melee_actual"></span>
<button type="action" class="sheet-d6pp" name="act_melee_attack">Roll</button>
</div>
<div class="grid-cell stack-tight">
<span name="attr_melee_damage"></span>
<button type="action" class="sheet-d6pp" name="act_melee_damage">Damage</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Wounds -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_wounds" name="attr_toggle_wounds" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_wounds">Wounds</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col full-width">
<div class="grid-header">First Aid Target Number</div>
<div class="grid-header">Wound Points</div>
<div class="grid-header">Wounds Ignored</div>
<div class="grid-header"># First Aid</div>
<div class="grid-header">Unconscious Threshold</div>
<div class="grid-header">Death Threshold</div>
<div class="grid-cell target-number-cell">
<span name="attr_first_aid_target">0</span>
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_total" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_wounds_ignored" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell">
<input type="number" name="attr_first_aid_count" value="0" min="0" class="sheet-d6pp" />
</div>
<div class="grid-cell"><span name="attr_unconscious_threshold"></span></div>
<div class="grid-cell"><span name="attr_death_threshold"></span></div>
</div>
<div class="spacer-md"></div>
<div class="sheet-controls-row">
<!-- Left -->
<div class="sheet-controls-group">
<button type="action" class="sheet-d6pp" name="act_endure">Roll Endure</button>
</div>
<div class="sheet-controls-group">
<label class="sheet-d6pp-label" style="margin: 0; display: inline;">Status:</label>
<input type="text" class="sheet-d6pp" name="attr_status" readonly/>
<div class="d6pp-checkbox">
<label class="inline-checkbox-label">
<input type="checkbox" name="attr_revived_toggle" />
Revived
</label>
</div>
</div>
</div>
</div>
</div>
<!-- Conditions -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_conditions" name="attr_toggle_conditions" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_conditions">Conditions</label>
<div class="skill-group-content">
<div class="sheet-condition-grid">
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_grappled" /> Grappled</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_knockout" /> Knockout</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_condition_lassoed" /> Lassoed</label>
<label class="d6pp-checkbox"><input type="checkbox" name="attr_mounted_checked" /> Mounted</label>
</div>
</div>
</div>
<!-- Attributes (not spend mode) -->
<div class="sheet-section-collapsible">
<input type="checkbox" class="skill-toggle" id="toggle_attibutes" name="attr_toggle_attibutes" value="1" checked hidden />
<label class="skill-toggle-label" for="toggle_attibutes">Rolls</label>
<div class="skill-group-content">
<div class="sheet-grid-table six-col">
<div class="grid-header"></div>
<div class="grid-header">Base</div>
<div class="grid-header">Roll</div>
<div class="grid-header"></div>
<div class="grid-header">Base</div>
<div class="grid-header">Roll</div>
<div class="grid-cell number-cell">Any Attribute/Skill</div>
<div class="grid-cell number-cell">2D</div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_2droll">Roll</button></div>
<div class="grid-cell number-cell">Initiative</div>
<div class="grid-cell number-cell">2D</div>
<div class="grid-cell"><button type="action" class="sheet-d6pp" name="act_2dinit">Roll</button></div>
</div>
</div>
</div>
</div> <!-- End Quick NPC Sheet -->
</div> <!-- End sheet -->
<script type="text/worker">
const ATTRS = [
"strength",
"agility",
"health",
"perception",
"quickness",
"willpower",
"intelligence",
"manualdex",
"charisma"
];
const SKILL_STATS = {
// Core
initiative: "QQP",
dodge: "QPA",
endure: "HHW",
avoid: "QPP",
// Social
persuade: "CCI",
intimidate: "CCS",
deceive: "CPP",
negotiate: "CIW",
seduce: "CCP",
streetwise: "CPI",
// Performance
dance: "CAP",
sing: "CHP",
acting: "CCP",
art: "MMP",
comedy: "CPP",
play_instrument: "MMQ",
disguise: "MIP",
gambling: "PPI",
showmanship: "CCA",
// Thievery
sleight_of_hand: "MMP",
lockpicking: "MIP",
forgery: "MII",
cheating: "MPW",
// Cowpoke
roping: "MAA",
cattle_handling: "ACP",
cattle_care: "PCW",
cattle_empathy: "PPC",
// Alertness
search: "PPI",
insight: "PPP",
investigate: "IIP",
empathy: "PPC",
// Survival
tracking: "PPI",
hunting: "PPQ",
foraging: "PIM",
scavenging: "PPW",
cooking: "IWM",
fletching: "PPM",
// Stealth
ambush: "QQA",
sneak: "APW",
hide: "WWI",
subtle: "QAP",
// Physical
athletics: "SSA",
acrobatics: "AAS",
climbing: "SSH",
swimming: "AHH",
lifting: "SSS",
jumping: "AAH",
// Medical
first_aid: "PWI",
medical_care: "IIP",
surgery: "MIP",
// Boating
drive_boat: "PPM",
sailing: "IAP",
// Technical
set_explosives: "MIW",
disarm_explosives: "MWP",
carpentry: "MMS",
mining: "SWP",
blacksmithing: "SSW",
gunsmithing: "MMP",
// Knowledge
education: "III",
cartography: "IIP",
appraisal: "PPI",
engineering: "III",
law: "III",
writing: "CIP",
// Horsemanship
horse_empathy: "PPC",
riding: "AAC",
drive_cart: "MWC",
horse_care: "PCW",
// Sidearms
pistol: "AAQ",
sawed_off_shotgun: "SAW",
// Longarms
rifle: "APW",
shotgun: "SAW",
// Unarmed
brawling: "ASS",
wrestling: "SQA",
martial_arts: "AQP",
push: "SSS",
// Armed
melee_weapon: "AQQ",
improvised_weapon: "ASQ",
// Primitive Ranged
bow: "AAM",
slingshot: "AMM",
thrown: "SAM",
};
const LETTER_TO_ATTR = {
A: "agility",
S: "strength",
H: "health",
P: "perception",
Q: "quickness",
W: "willpower",
I: "intelligence",
M: "manualdex",
C: "charisma"
};
const SKILL_GROUPS = {
// Core
initiative: "core",
dodge: "core",
endure: "core",
avoid: "core",
// Social
persuade: "social",
intimidate: "social",
deceive: "social",
negotiate: "social",
seduce: "social",
streetwise: "social",
// Performance
dance: "performance",
sing: "performance",
acting: "performance",
art: "performance",
comedy: "performance",
play_instrument: "performance",
disguise: "performance",
gambling: "performance",
showmanship: "performance",
// Thievery
sleight_of_hand: "thievery",
lockpicking: "thievery",
forgery: "thievery",
cheating: "thievery",
// Cowpoke
roping: "cowpoke",
cattle_handling: "cowpoke",
cattle_care: "cowpoke",
cattle_empathy: "cowpoke",
// Alertness
search: "alertness",
insight: "alertness",
investigate: "alertness",
empathy: "alertness",
// Survival
tracking: "survival",
hunting: "survival",
foraging: "survival",
scavenging: "survival",
cooking: "survival",
fletching: "survival",
// Stealth
sneak: "stealth",
hide: "stealth",
subtle: "stealth",
ambush: "stealth",
// Physical
athletics: "physical",
acrobatics: "physical",
climbing: "physical",
swimming: "physical",
lifting: "physical",
jumping: "physical",
// Medical
first_aid: "medical",
medical_care: "medical",
surgery: "medical",
// Boating
drive_boat: "boating",
sailing: "boating",
// Technical
set_explosives: "technical",
disarm_explosives: "technical",
carpentry: "technical",
mining: "technical",
blacksmithing: "technical",
gunsmithing: "technical",
// Knowledge
education: "knowledge",
cartography: "knowledge",
appraisal: "knowledge",
engineering: "knowledge",
law: "knowledge",
writing: "knowledge",
// Horsemanship
horse_empathy: "horsemanship",
riding: "horsemanship",
drive_cart: "horsemanship",
horse_care: "horsemanship",
// Sidearms
pistol: "sidearms",
sawed_off_shotgun: "sidearms",
// Longarms
rifle: "longarms",
shotgun: "longarms",
// Unarmed
push: "unarmed",
brawling: "unarmed",
wrestling: "unarmed",
martial_arts: "unarmed",
// Armed
melee_weapon: "armed",
improvised_weapon: "armed",
// Primitive Ranged
bow: "primitive",
slingshot: "primitive",
thrown: "primitive",
};
const SKILL_GROUP_LIST = [
"core", "social", "performance", "thievery",
"cowpoke", "alertness", "survival", "stealth",
"physical", "medical", "boating", "technical",
"knowledge", "horsemanship", "sidearms", "longarms",
"unarmed", "armed", "primitive"
];
const ACTIVATABLE_SKILLS = [
"law",
"surgery",
"martial_arts",
"engineering",
"bow"
];
const PREACTION_TEXTS = {
"Hold actions": "Go anytime after your turn in the turn meter",
"Haste actions": "Go anytime before your turn in the turn meter",
"Dodge": "Add your Dodge skill dice to your defense against attacks",
"Simple Action": "Do any Simple Action resolved at the start of the turn",
"Prep Skill": "Add pips of skill to your skill check",
"Power Strike": "Increase any damage dependent on Strength by 1D",
"Help": "Add pips of skill to someone else's skill check",
"Multi-attack": "Burn dice to attack more than once",
"Disengage": "Automatically drop Grapple condition",
"Ignore Pain": "No penalty from Wound Points",
"Reload": "Reload 1 weapon",
"Aim Attack": "Add pips of skill to your attacks",
"Break Grapple": "Contested Wrestle vs Wrestle to break free",
"Break Lassoed": "Contested Agility vs Roping to break free",
"None":"Pick a pre-action"
};
const REACTION_TEXTS = {
"None": "No reaction selected",
"Medic": "Use First Aid skill",
"FixIt": "Attempt to fix an item",
"Block": "Reduce damage of a melee attack by pips of Brawling or Martial Arts",
"Trip": "Free push attack when a character leaves your zone-of-control, success knocks them prone.",
"Impede": "When an character in your zone-of-control moves, make it difficult terain.",
"Push": "Free push attack when a character enters your zone-of-control.",
"Protect": "Switch locactions with a willing character in your zone-of-control and be target of an attack (one attack only).",
"Simple Action": "Do any Simple Action immediately",
"Keep Grapple": "Attempt to maintain a grapple",
"Keep Lassoed": "Attempt to maintain a lasso"
};
const SIGNIFICANT_ACTION_TEXTS = {
"None": "Pick a significant action",
"Attack": "Make an attack roll",
"Skill Check": "Perform a skill-based task",
"Run": "Extra move up to your Run Code",
"Reload": "Reload a weapon",
"Simple Action": "Do any Simple Action",
"Help": "You can't do a significant action if you Help another",
};
const RANGE_LOOKUP = {
"Blank Range": {
"point_blank": "-",
"short": "-",
"medium": "-",
"long": "-",
"extreme": "-"
},
"Close Range": {
"point_blank": "05",
"short": "610",
"medium": "1015",
"long": "1620",
"extreme": "2125"
},
"Short Range": {
"point_blank": "05",
"short": "615",
"medium": "1650",
"long": "51100",
"extreme": "101200"
},
"Medium Range": {
"point_blank": "05",
"short": "620",
"medium": "21100",
"long": "101500",
"extreme": "5013500"
},
"Long Range": {
"point_blank": "05",
"short": "620",
"medium": "21500",
"long": "5013000",
"extreme": "30016000"
}
};
const FIREARMS_LOOKUP = {
"None": {
skillCategory: "",
hands: "",
damage: "0D",
minDamage: 0,
rangeType: "Blank Range",
ammo: "",
special: "No weapon selected"
},
"Revolver": {
skillCategory: "pistol",
hands: "1H",
damage: "5D",
minDamage: 1,
rangeType: "Short Range",
ammo: 6,
special: ""
},
"Derringer": {
skillCategory: "pistol",
hands: "1H",
damage: "4D",
minDamage: 0,
rangeType: "Close Range",
ammo: 2,
special: ""
},
"Lever-Action Rifle": {
skillCategory: "rifle",
hands: "2H",
damage: "6D",
minDamage: 2,
rangeType: "Long Range",
ammo: 15,
special: ""
},
"Single Shot Rifle": {
skillCategory: "rifle",
hands: "2H",
damage: "6D",
minDamage: 2,
rangeType: "Long Range",
ammo: 1,
special: ""
},
"Shotgun": {
skillCategory: "shotgun",
hands: "2H",
damage: "5D",
minDamage: 1,
rangeType: "Medium Range",
ammo: 2,
special: ""
},
"Sawed-off Shotgun": {
skillCategory: "sawed_off_shotgun",
hands: "2H",
damage: "5D",
minDamage: 2,
rangeType: "Close Range",
ammo: 2,
special: ""
}
};
const RANGED_LOOKUP = {
"None": {
skillCategory: "",
hands: "",
damage: "0D",
minDamage: 0,
rangeType: "Blank Range",
special: "No weapon selected"
},
"Bow": {
skillCategory: "bow",
hands: "2H",
damage: "5D",
minDamage: 1,
rangeType: "Medium Range",
special: ""
},
"Slingshot": {
skillCategory: "slingshot",
hands: "1H",
damage: "2D+2",
minDamage: 0,
rangeType: "Short Range",
special: ""
},
"Thrown Knife/Axe": {
skillCategory: "thrown",
hands: "1H",
damage: "3D",
minDamage: 1,
rangeType: "Short Range",
special: ""
},
"Improvised Thrown": {
skillCategory: "thrown",
hands: "1H",
damage: "3D",
minDamage: 0,
rangeType: "Short Range",
special: "50% chance of breaking on hit"
},
"Lasso": {
skillCategory: "roping",
hands: "2H",
damage: "0D",
minDamage: 0,
rangeType: "Short Range",
special: "Applies Lassoed condition on hit"
}
};
const MELEE_LOOKUP = {
"None": {
skillCategory: "",
damage: "0D",
minDamage: 0,
special: "No weapon selected"
},
"Brawling": {
skillCategory: "brawling",
damage: "S+2",
minDamage: 0,
special: "Forces Knockout Check on damage"
},
"Push": {
skillCategory: "push",
damage: "0D",
minDamage: 0,
special: "Move target 5ft away from you"
},
"Wrestling": {
skillCategory: "wrestling",
damage: "S",
minDamage: 0,
special: "Applies Grapple condition on damage"
},
"Martial Arts": {
skillCategory: "martial_arts",
damage: "S+1D+2",
minDamage: 0,
special: "On damage: choose to apply Grapple, force a Knockout Check, or push the target 5ft from you."
},
"Improvised Weapon": {
skillCategory: "improvised_weapon",
damage: "S+1D",
minDamage: 0,
special: "50% chance of breaking on hit"
},
"Pistol Whip": {
skillCategory: "improvised_weapon",
damage: "S+2",
minDamage: 0,
special: "Forces Knockout Check on damage"
},
"Knife/Hatchet": {
skillCategory: "melee_weapon",
damage: "S+1D+2",
minDamage: 1,
special: ""
},
"Cavalry Sword": {
skillCategory: "melee_weapon",
damage: "S+2D",
minDamage: 2,
special: ""
},
"Club": {
skillCategory: "melee_weapon",
damage: "S+1D",
minDamage: 1,
special: "Forces Knockout Check on damage"
},
"Hitting with Butt of Rifle": {
skillCategory: "improvised_weapon",
damage: "S+1D",
minDamage: 0,
special: "Forces Knockout Check on damage"
}
};
const VALIDATION_RULES = {
advantage: { min: -10, max:10 },
times_attacked: { min: 0 },
skillcheck_modifier: { min: -99 },
combat_modifier: { min: -99 },
combat_opponent_dodge: { min: 0 },
attack_count: { min: 1},
wounds_total: { min: 0 },
wounds_ignored: { min: 0 },
first_aid_count: { min: 0 },
strength_adjustment: { min: -99 },
agility_adjustment: { min: -99 },
health_adjustment: { min: -99 },
perception_adjustment: { min: -99 },
quickness_adjustment: { min: -99 },
willpower_adjustment: { min: -99 },
intelligence_adjustment: { min: -99 },
manualdex_adjustment: { min: -99 },
charisma_adjustment: { min: -99 },
strength_value: { min: 1, max: 5 },
agility_value: { min: 1, max: 5 },
health_value: { min: 1, max: 5 },
perception_value: { min: 1, max: 5 },
quickness_value: { min: 1, max: 5 },
willpower_value: { min: 1, max: 5 },
intelligence_value: { min: 1, max: 5 },
manualdex_value: { min: 1, max: 5 },
charisma_value: { min: 1, max: 5 },
item_qty: { min: 0 },
item_weight: { min: 0 },
character_weight: {min: 0},
};
const ITEMS = {
medical_bag: {
name: "Medical Bag",
qty: 1,
weight: 2,
location: "equipped",
description: "Contains basic medical supplies."
},
derringer: {
name: "Derringer",
qty: 1,
weight: 1,
location: "equipped",
description: "A tiny, concealable pistol used at close quarters.",
cost: "$10"
},
working_cowboy_outfit: {
name: "Working Cowboy Outfit",
qty: 1,
weight: 8,
location: "equipped",
description: "Includes canvas pants, flannel shirt, wide-brimmed hat, bandana, long duster, leather boots, and a gun belt. Built for saddle work and trail durability.",
cost: "$10"
},
fancy_outfit: {
name: "Fancy Outfit",
qty: 1,
weight: 10,
location: "equipped",
description: "Men: Includes tailored trousers, embroidered shirt, silk vest, frock coat, polished boots, cravat, gloves, and a formal hat. Women: Includes corset, petticoats, bustle, embroidered dress or gown, lace gloves, heeled shoes, and decorated hat.",
cost: "$25"
},
ranch_hand_outfit: {
name: "Ranch Hand Outfit",
qty: 1,
weight: 7,
location: "equipped",
description: "Denim trousers, simple shirt, suspenders, work boots, and a slouch hat. For stable work or branding cattle. Less fancy than a cowboy.",
cost: "$6"
},
saloon_entertainer_outfit: {
name: "Saloon Entertainer Outfit",
qty: 1,
weight: 9,
location: "equipped",
description: "Bright corset, layered skirt, stockings, heeled shoes, feathered headpiece, and accessories like fans or jewelry. Flashy and eye-catching.",
cost: "$18"
},
preachers_garb: {
name: "Preachers Garb",
qty: 1,
weight: 9,
location: "equipped",
description: "Black frock coat, dark trousers, plain shirt, boots, and a flat-brimmed hat. Simple but clean, with an air of authority.",
cost: "$15"
},
prospectors_outfit: {
name: "Prospectors Outfit",
qty: 1,
weight: 8,
location: "equipped",
description: "Worn pants, patchy shirt, suspenders, floppy hat, thick boots, and a canvas coat. Includes lots of pockets and a general air of dustiness.",
cost: "$8"
},
lawmans_attire: {
name: "Lawmans Attire",
qty: 1,
weight: 9,
location: "equipped",
description: "Sturdy trousers, shirt with vest, star badge, hat, gun belt, and boots. May include a coat for travel or rain.",
cost: "$12"
},
soldiers_uniform: {
name: "Soldiers Uniform",
qty: 1,
weight: 7,
location: "equipped",
description: "Standard-issue military gear including wool trousers, a dark buttoned tunic, suspenders, leather boots, and a forage cap or slouch hat. Designed for durability, ease of movement, and uniformity across infantry units on campaign.",
cost: "$9"
},
trail_riders_outfit: {
name: "Trail Riders Outfit",
qty: 1,
weight: 7,
location: "equipped",
description: "Includes rugged canvas trousers, dark flannel shirt, long dust coat, wide-brimmed slouch hat, bandana for covering the face, and sturdy boots. Built for endurance and intimidation while tracking or riding the frontier.",
cost: "$7"
},
woodsman_outfit: {
name: "Woodsman Outfit",
qty: 1,
weight: 8,
location: "equipped",
description: "Includes wool trousers, flannel shirt, leather boots, suspenders, heavy coat, and a fur-lined cap or hood. Designed for outdoor labor in cold or forested terrain.",
cost: "$9"
},
native_outfit: {
name: "Native Outfit",
qty: 1,
weight: 6,
location: "equipped",
description: "Buckskin leggings, soft moccasins, decorated tunic, sash, and fur cloak or poncho. Often adorned with beads, feathers, or tribal embroidery. Practical and silent for wilderness travel.",
cost: "$7"
},
townie_outfit: {
name: "Townie Outfit",
qty: 1,
weight: 8,
location: "equipped",
description: "Men: trousers, shirt, vest or suspenders, soft hat, and boots. Women: Modest dress with apron or shawl, bonnet, and walking shoes.",
cost: "$6"
},
manacles: {
name: "Manacles (Iron)",
qty: 1,
weight: 3,
location: "equipped",
description: "Restraints used to secure prisoners. Heavy iron cuffs with a short chain and a small brass key.",
cost: "$8"
},
tinkers_kit: {
name: "Tinkers Kit",
qty: 1,
weight: 6,
location: "horse",
description: "Portable kit with small hammers, files, pliers, and wire for simple repairs. Used by traveling fixers or resourceful settlers.",
cost: "$5.00"
},
rope: {
name: "Rope (coil, 50 ft)",
qty: 1,
weight: 5,
location: "horse",
description: "Hemp or horsehair rope. Common and always in demand.",
cost: "$2.00"
},
draft_horse: {
name: "Horse (Draft)",
qty: 1,
weight: 1300,
location: "storage",
description: "Larger, stronger breed used to pull wagons, plows, and heavy loads. Not ideal for riding.",
cost: "$100"
},
riding_horse: {
name: "Horse (Riding)",
qty: 1,
weight: 1000,
location: "storage",
description: "A general-purpose riding horse, suitable for travel and ranch work. Most common mount in the West.",
cost: "$75"
},
covered_wagon: {
name: "Covered Wagon",
qty: 1,
weight: 1300,
location: "storage",
description: "Large wooden freight or settler wagon with canvas cover. Pulled by oxen, horses, or mules. Mainstay of westward expansion.",
cost: "$85"
},
sulky: {
name: "Sulky (One-Person Buggy)",
qty: 1,
weight: 300,
location: "storage",
description: "Lightweight single-seat cart, often used for fast travel or racing. Pulled by one horse.",
cost: "$25"
},
blacksmiths_toolkit: {
name: "Blacksmiths Toolkit",
qty: 1,
weight: 12,
location: "storage",
description: "Includes a heavy leather apron, gloves, hammer, tongs, file, punch, rasp, and small chisel. Comes with a roll of wire, a pouch of nails, and a compact folding anvil or striking surface. Used for basic repairs and forging in the field or at a mobile smithy.",
cost: "$15"
},
carpenters_toolkit: {
name: "Carpenters Toolkit",
qty: 1,
weight: 10,
location: "storage",
description: "Includes a handsaw, mallet, brace and bits, marking tools, square, small hatchet, measuring string, and a pouch of nails. Essential for framing, repairs, and general woodworking, whether building cabins or fixing wagons.",
cost: "$12"
},
demolitions_toolkit: {
name: "Demolitions Toolkit",
qty: 1,
weight: 9,
location: "storage",
description: "Contains pliers, snips, wire cutters, fuses, spools of wire, a hand-crank detonator, timing pocketwatch, and wooden stakes. Designed for setting, securing, and triggering explosives such as dynamite. Used by engineers, miners, and saboteurs.",
cost: "$18"
},
miners_toolkit: {
name: "Miners Toolkit",
qty: 1,
weight: 11,
location: "storage",
description: "Includes a pickaxe, short-handled shovel, lantern with oil flask, iron spikes, hand chisel, and a canvas bag. Used for breaking rock, digging shafts, and extracting ore or stone. Standard gear for prospectors, tunnel crews, and mine workers.",
cost: "$14"
},
gunsmiths_toolkit: {
name: "Gunsmiths Toolkit",
qty: 1,
weight: 10,
location: "storage",
description: "Contains precision tools such as files, punches, screwdrivers, brushes, hammers, and a small vise. Used for maintaining, repairing, and customizing firearms. Essential for anyone who works with revolvers, rifles, or shotguns.",
cost: "$20"
},
saddle_standard: {
name: "Saddle (standard)",
qty: 1,
weight: 25,
location: "horse",
description: "Sturdy leather saddle with horn, stirrups, and rigging. Used for general riding."
},
saddlebags_pair: {
name: "Saddlebags (pair)",
qty: 1,
weight: 5,
location: "horse",
description: "Heavy leather bags attached to a saddle. Used to carry gear while traveling on horseback.",
cost: "$10"
},
revolver: {
name: "Revolver",
qty: 1,
weight: 2,
location: "equipped",
description: "A reliable six-shooter sidearm with decent power and quick access.",
cost: "$25"
},
revolver_cartridges: {
name: "50 Revolver Rounds",
qty: 50,
weight: 0,
location: "horse",
description: ".44 or .45 caliber metallic cartridges used in most six-shooters. Carried in gun belts, pouches, or ammo boxes.",
cost: "$2"
},
gun_belt: {
name: "Gun Belt",
qty: 1,
weight: 2,
location: "equipped",
description: "Leather waist belt with holster and 30 ammunition loops.",
cost: "$5"
},
lever_rifle: {
name: "Lever-Action Rifle",
qty: 1,
weight: 7,
location: "equipped",
description: "Fast-firing rifle used by ranchers and lawmen alike.",
cost: "$50"
},
bandolier: {
name: "Bandolier",
qty: 1,
weight: 2,
location: "equipped",
description: "Shoulder-worn strap lined with 40 ammo loops, sometimes includes small pouches.",
cost: "$3"
},
rifle_scabbard: {
name: "Rifle Scabbard",
qty: 1,
weight: 2,
location: "horse",
description: "Leather sheath worn on a horse or back to carry a rifle or shotgun securely.",
cost: "$4"
},
rifle_cartridges: {
name: "50 Rifle Rounds",
qty: 50,
weight: 0,
location: "horse",
description: "Long .44.45 caliber cartridges used in lever-action and single-shot rifles. Bulkier than pistol rounds.",
cost: "$3"
},
bedroll: {
name: "Bedroll",
qty: 1,
weight: 5,
location: "horse",
description: "Rolled blanket or wool bedding tied with leather straps. Used for sleeping on the ground.",
cost: "$2"
},
camp_kit: {
name: "Camp Cooking Kit",
qty: 1,
weight: 6,
location: "horse",
description: "Includes tin pot, pan, utensils, cup, and coffee pot—all metal and rugged.",
cost: "$5"
},
flint_steel: {
name: "Flint & Steel",
qty: 1,
weight: 1,
location: "horse",
description: "Fire-starting tool using flint, steel, and char cloth. Standard kit for outdoorsmen.",
cost: "$0.50"
},
canteen: {
name: "Canteen",
qty: 1,
weight: 3,
location: "horse",
description: "Metal or wood-and-tin water container, typically carried on a strap.",
cost: "$2"
},
knife: {
name: "Knife",
qty: 1,
weight: 1,
location: "equipped",
description: "A sturdy steel blade used for utility, hunting, or fighting. Can be thrown. Carried in a sheath on belt or boot.",
cost: "$1"
},
cavalry_sword: {
name: "Cavalry Sword",
qty: 1,
weight: 4,
location: "equipped",
description: "Standard-issue curved saber used by mounted soldiers. Designed for slashing from horseback. Often a war relic.",
cost: "$10"
},
hatchet: {
name: "Hatchet",
qty: 1,
weight: 3,
location: "equipped",
description: "A small one-handed axe, useful both as a weapon and for chopping wood. Often carried by trappers and scouts.",
cost: "$2"
},
journal_notebook: {
name: "Journal or Notebook",
qty: 1,
weight: 1,
location: "equipped",
description: "Leather- or canvas-bound book with blank pages for writing. Used by travelers, writers, and scouts.",
cost: "$1.00"
},
bow: {
name: "Bow",
qty: 1,
weight: 3,
location: "equipped",
description: "Traditional hunting or combat bow.",
cost: "$15"
},
arrows: {
name: "20 Arrows",
qty: 20,
weight: 0,
location: "equipped",
description: "Wooden shafts with iron or flint heads. Fletched with feathers. Carried in a quiver.",
cost: "$1.50"
},
quiver: {
name: "Quiver",
qty: 1,
weight: 1,
location: "equipped",
description: "Cylindrical leather case worn at the back or hip, used for carrying arrows.",
cost: "$2"
},
sawed_off_shotgun: {
name: "Sawed-off Shotgun",
qty: 1,
weight: 5,
location: "equipped",
description: "Compact version of a shotgun, ideal for close-quarters combat.",
cost: "$40"
},
shotgun_shells: {
name: "25 Shotgun Shells",
qty: 25,
weight: 0,
location: "horse",
description: "Paper-hulled 12-gauge shells filled with shot or slugs. Stored in bandoliers or pouches.",
cost: "$2"
},
snake_oil_kit: {
name: "Snake Oil Salesman Kit",
qty: 1,
weight: 6,
location: "equipped",
description: "A battered case filled with glass vials, tonic bottles, colorful labels, a folding display stand, and pamphlets claiming miraculous cures. Used by traveling hucksters to sell dubious remedies and charm crowds.",
cost: "$12"
},
lockpick_set: {
name: "Lockpick Set",
qty: 1,
weight: 1,
location: "equipped",
description: "A leather roll or small tin case containing picks, tension tools, and probes. Used to bypass simple mechanical locks on doors, safes, or handcuffs. Illegal in most towns if found without good reason.",
cost: "$5"
},
holy_bible: {
name: "The Holy Bible",
qty: 1,
weight: 2,
location: "equipped",
description: "The most widespread book in the West. Found in homes, jails, hotels, and churches.",
cost: "$1.00"
},
slingshot: {
name: "Slingshot",
qty: 1,
weight: 1,
location: "equipped",
description: "Makeshift weapon used by kids or desperate fighters.",
cost: "$0.00"
},
};
const ITEM_GROUPS = {
horse_kit: [
ITEMS.riding_horse,
ITEMS.saddle_standard,
ITEMS.saddlebags_pair
],
wagon_kit: [
ITEMS.draft_horse,
ITEMS.sulky
],
covered_wagon_kit: [
ITEMS.draft_horse,
ITEMS.draft_horse,
ITEMS.covered_wagon
],
sidearm_kit: [
ITEMS.revolver,
ITEMS.revolver_cartridges,
ITEMS.gun_belt
],
derringer_kit: [
ITEMS.derringer,
ITEMS.revolver_cartridges,
],
rifle_kit: [
ITEMS.lever_rifle,
ITEMS.bandolier,
ITEMS.rifle_scabbard,
ITEMS.rifle_cartridges
],
camp_kit: [
ITEMS.bedroll,
ITEMS.camp_kit,
ITEMS.flint_steel,
ITEMS.canteen
],
bow_kit: [
ITEMS.bow,
ITEMS.arrows,
ITEMS.quiver
],
};
const BACKGROUND_DETAILS = {
"Army Medic": {
details: "2D Sidearms\n2D Medical\nReaction: Medic\nSpecialized: First Aid",
cash: "$15.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.medical_bag,
ITEMS.soldiers_uniform,
]
},
"Bounty Hunter": {
details: "2D Survival\n2D Sidearms\nExtra pips on aim\nSpecialized: Tracking",
cash: "$25.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.rifle_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.manacles,
ITEMS.trail_riders_outfit,
]
},
"Cavalry": {
details: "2D Longarms\n2D Horsemanship\nNo penalty when mounted\nSpecialized: Riding",
cash: "$10.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.rifle_kit,
ITEMS.cavalry_sword,
ITEMS.soldiers_uniform,
]
},
"Cowboy": {
details: "2D Cowpoke\n2D Horsemanship\nNo penalty when mounted\nSpecialized: Cattle Handling",
cash: "$10.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.rifle_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.working_cowboy_outfit,
ITEMS.tinkers_kit,
ITEMS.rope,
]
},
"Doctor": {
details: "2D Medical\nActivate Surgery\nReaction: Medic\nSpecialized: Medical Care",
cash: "$75.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.medical_bag,
ITEMS.fancy_outfit,
]
},
"Engineer: Blacksmithing": {
details: "2D Knowledge\nActivate Engineering\nReaction: FixIt\nSpecialized: Blackmithing",
cash: "$20.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.blacksmiths_toolkit,
ITEMS.tinkers_kit,
ITEMS.prospectors_outfit,
]
},
"Engineer: Carpentry": {
details: "2D Knowledge\nActivate Engineering\nReaction: FixIt\nSpecialized: Carpentry",
cash: "$20.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.carpenters_toolkit,
ITEMS.tinkers_kit,
ITEMS.prospectors_outfit,
]
},
"Engineer: Gunsmithing": {
details: "2D Knowledge\nActivate Engineering\nReaction: FixIt\nSpecialized: Gunsmithing",
cash: "$20.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.gunsmiths_toolkit,
ITEMS.tinkers_kit,
ITEMS.prospectors_outfit,
]
},
"Engineer: Mining": {
details: "2D Knowledge\nActivate Engineering\nReaction: FixIt\nSpecialized: Mining",
cash: "$20.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.miners_toolkit,
ITEMS.tinkers_kit,
ITEMS.prospectors_outfit,
]
},
"Engineer: Demolitions": {
details: "2D Knowledge\nActivate Engineering\nReaction: FixIt\nSpecialized: Set Explosives\nSpecialized: Disarm Explosives",
cash: "$20.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.demolitions_toolkit,
ITEMS.tinkers_kit,
ITEMS.prospectors_outfit,
]
},
"Celestial": {
details: "2D Unarmed\nActivate Martial Arts\nExtra pips on haste\nSpecialized: Acrobatics",
cash: "$8.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.ranch_hand_outfit,
]
},
"Fast Draw": {
details: "2D Sidearms\n2D Alertness\nExtra pips on haste\nSpecialized: Pistols",
cash: "$20.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Gambler": {
details: "2D Performance\n2D Social Skills\nExtra pips on prep\nSpecialized: Gambling",
cash: "$50.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.fancy_outfit,
]
},
"Gunslinger": {
details: "2D Sidearms\n2D Performance\nExtra attack on multi-attack when you have two pistols\nSpecialized: Showmanship",
cash: "$25.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Hunter": {
details: "2D Survival\n2D Longarms\nExtra pips on aim\nSpecialized: Hunting",
cash: "$15.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.rifle_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.knife,
ITEMS.woodsman_outfit,
]
},
"Journalist": {
details: "2D Knowledge\n2D Alertness\nExtra pips on prep\nSpecialized: Writing",
cash: "$20.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.journal_notebook,
ITEMS.fancy_outfit,
]
},
"Knife Fighter": {
details: "2D Armed\n2D Stealth\nExtra attack on multi-attack when you have two knives\nSpecialized: Melee Weapon",
cash: "$12.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.knife,
ITEMS.knife,
ITEMS.knife,
ITEMS.knife,
ITEMS.trail_riders_outfit,
]
},
"Lawyer": {
details: "2D Knowledge\nActivate Law\nExtra pips on prep\nSpecialized: Law",
cash: "$100.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.journal_notebook,
ITEMS.fancy_outfit,
]
},
"Mountain Man": {
details: "2D Survival\nActivate Bow\nReaction: FixIt\nSpecialized: Foraging",
cash: "$5.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.rifle_kit,
...ITEM_GROUPS.bow_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.hatchet,
ITEMS.tinkers_kit,
ITEMS.woodsman_outfit,
]
},
"Native": {
details: "2D Survival\nActivate Bow\n5 extra move on Run Action\nSpecialized: Hide",
cash: "$5.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.bow_kit,
ITEMS.hatchet,
ITEMS.hatchet,
ITEMS.native_outfit,
]
},
"Native Wrestler": {
details: "2D Unarmed\n2D Stealth\n5 extra move on Run Action\nSpecialized: Wrestling",
cash: "$5.00",
items: [
...ITEM_GROUPS.horse_kit,
ITEMS.hatchet,
ITEMS.hatchet,
ITEMS.native_outfit,
]
},
"Outlaw": {
details: "2D Thievery\n2D Sidearms\nExtra pips on ambush\nSpecialized: Pistols",
cash: "$10.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Outlaw Brute": {
details: "2D Unarmed\n2D Physical\nPre-action: Ignore Pain\nSpecialized: Brawling",
cash: "$5.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Outlaw Leader": {
details: "2D Social\n2D Sidearms\nExtra pips on ambush\nSpecialized: Negotiate",
cash: "$20.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Painted Lady": {
details: "2D Social\n2D Performance\nPre-action: Disengage\nSpecialized: Persuade",
cash: "$25.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.saloon_entertainer_outfit,
]
},
"Preacher": {
details: "2D Knowledge\n2D Performance\nExtra pips on prep\nSpecialized: Acting",
cash: "$30.00",
items: [
...ITEM_GROUPS.wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.holy_bible,
ITEMS.preachers_garb,
]
},
"Pugilist": {
details: "2D Unarmed\n2D Performance\nPre-action: Ignore Pain\nSpecialized: Brawling",
cash: "$15.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.trail_riders_outfit,
]
},
"Sheriff": {
details: "2D Sidearms\n2D Horsemanship\nNo penalty when mounted\nSpecialized: Search",
cash: "$50.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
ITEMS.journal_notebook,
ITEMS.manacles,
ITEMS.lawmans_attire,
]
},
"Shopkeeper": {
details: "2D Social\n2D Alertness\nReaction: FixIt\nSpecialized: Negotiate",
cash: "$40.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
ITEMS.sawed_off_shotgun,
ITEMS.shotgun_shells,
ITEMS.townie_outfit,
]
},
"Snake Oil Salesman": {
details: "2D Performance\n2D Social\n5 extra move on Run Action\nSpecialized: Deceive",
cash: "$40.00",
items: [
...ITEM_GROUPS.covered_wagon_kit,
...ITEM_GROUPS.derringer_kit,
ITEMS.snake_oil_kit,
ITEMS.fancy_outfit,
]
},
"Sniper": {
details: "2D Longarms\n2D Stealth\nExtra pips on aim\nSpecialized: Rifle",
cash: "$15.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.rifle_kit,
ITEMS.trail_riders_outfit,
]
},
"Soldier": {
details: "2D Longarms\n2D Sidearms\nPre-action: Ignore Pain\nSpecialized: Rifle",
cash: "$5.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.rifle_kit,
ITEMS.soldiers_uniform,
]
},
"Street Urchin": {
details: "2D Thievery\n2D Stealth\nPre-action: Disengage\nSpecialized: Sleight of Hand",
cash: "$3.00",
items: [
ITEMS.slingshot,
ITEMS.knife,
ITEMS.townie_outfit,
]
},
"Thief": {
details: "2D Thievery\n2D Stealth\n5 extra move on Run Action\nSpecialized: Lock Picking",
cash: "$8.00",
items: [
...ITEM_GROUPS.horse_kit,
...ITEM_GROUPS.sidearm_kit,
...ITEM_GROUPS.camp_kit,
ITEMS.lockpick_set,
ITEMS.trail_riders_outfit,
]
}
};
const SECTIONS = [
"actions",
"wounds",
"attibutes",
"attibutes_ro",
"combat",
"conditions",
"skillcheck",
"details",
"inventory",
"core", "core_training",
"alertness", "alertness_training",
"boating", "boating_training",
"cowpoke", "cowpoke_training",
"horsemanship", "horsemanship_training",
"knowledge", "knowledge_training",
"medical", "medical_training",
"performance", "performance_training",
"physical", "physical_training",
"social", "social_training",
"stealth", "stealth_training",
"survival", "survival_training",
"technical", "technical_training",
"unarmed", "unarmed_training",
"armed", "armed_training",
"thievery", "thievery_training",
"longarms", "longarms_training",
"primitive", "primitive_training",
"sidearms", "sidearms_training",
];
function initSkillGroupsIfUnset() {
const attrsToCheck = [];
SKILL_GROUP_LIST.forEach(group => {
attrsToCheck.push(`${group}_value`, `${group}_string`);
});
getAttrs(attrsToCheck, function(values) {
const updates = {};
SKILL_GROUP_LIST.forEach(group => {
if (!values[`${group}_value`]) {
updates[`${group}_value`] = 0;
}
if (!values[`${group}_string`]) {
updates[`${group}_string`] = "0D + 0";
}
});
if (Object.keys(updates).length > 0) {
setAttrs(updates);
}
});
}
function getTypeDefaults(character_type) {
if (character_type === "major_npc") {
return { skill_points: 600 };
}
if (character_type === "npc") {
return { skill_points: 0 };
}
return { skill_points: 60 };
}
function getDefaults() {
return {
sheet_mode: "sheet",
core_value: 0, core_string: "0D", core_min: 0, core_cost: 1, core_refund: 0,
social_value: 0, social_string: "0D", social_min: 0, social_cost: 1, social_refund: 0,
performance_value: 0, performance_string: "0D", performance_min: 0, performance_cost: 1, performance_refund: 0,
thievery_value: 0, thievery_string: "0D", thievery_min: 0, thievery_cost: 1, thievery_refund: 0,
cowpoke_value: 0, cowpoke_string: "0D", cowpoke_min: 0, cowpoke_cost: 1, cowpoke_refund: 0,
alertness_value: 0, alertness_string: "0D", alertness_min: 0, alertness_cost: 1, alertness_refund: 0,
survival_value: 0, survival_string: "0D", survival_min: 0, survival_cost: 1, survival_refund: 0,
stealth_value: 0, stealth_string: "0D", stealth_min: 0, stealth_cost: 1, stealth_refund: 0,
physical_value: 0, physical_string: "0D", physical_min: 0, physical_cost: 1, physical_refund: 0,
medical_value: 0, medical_string: "0D", medical_min: 0, medical_cost: 1, medical_refund: 0,
boating_value: 0, boating_string: "0D", boating_min: 0, boating_cost: 1, boating_refund: 0,
technical_value: 0, technical_string: "0D", technical_min: 0, technical_cost: 1, technical_refund: 0,
knowledge_value: 0, knowledge_string: "0D", knowledge_min: 0, knowledge_cost: 1, knowledge_refund: 0,
horsemanship_value: 0, horsemanship_string: "0D", horsemanship_min: 0, horsemanship_cost: 1, horsemanship_refund: 0,
sidearms_value: 0, sidearms_string: "0D", sidearms_min: 0, sidearms_cost: 1, sidearms_refund: 0,
longarms_value: 0, longarms_string: "0D", longarms_min: 0, longarms_cost: 1, longarms_refund: 0,
unarmed_value: 0, unarmed_string: "0D", unarmed_min: 0, unarmed_cost: 1, unarmed_refund: 0,
armed_value: 0, armed_string: "0D", armed_min: 0, armed_cost: 1, armed_refund: 0,
primitive_value: 0, primitive_string: "0D", primitive_min: 0, primitive_cost: 1, primitive_refund: 0,
law_active: 0,
engineering_active: 0,
surgery_active: 0,
martial_arts_active: 0,
bow_active: 0,
preaction_disengage_active: 0,
preaction_ignorepain_active: 0,
reaction_fixit_active: 0,
reaction_medic_active: 0,
base_move: 30,
base_run: 30,
current_move: 30,
current_run: 30,
strength: 3,
agility: 3,
health: 3,
perception: 3,
quickness: 3,
willpower: 3,
intelligence: 3,
manualdex: 3,
charisma: 3,
advantage: 0,
defaults_set: 1,
attribute_total: 27,
spend_mode: 1,
attack_count: 1,
status: "Conscious",
encumbrance_visible: 0,
use_encumbrance: 0,
};
}
function setSkillAttributeCodes() {
const updates = {};
Object.keys(SKILL_STATS).forEach(skill => {
updates[`${skill}_attributes`] = SKILL_STATS[skill];
});
setAttrs(updates);
};
function setSkillGroups() {
const updates = {};
Object.keys(SKILL_GROUPS).forEach(skill => {
updates[`${skill}_skillgroup`] = SKILL_GROUPS[skill];
});
setAttrs(updates);
};
function updateActual(attrName) {
const baseAttr = attrName;
const adjAttr = `${attrName}_adjustment`;
const actual = `${attrName}_rollcode`;
const actualStringAttr = `${attrName}_string`;
getAttrs([baseAttr, adjAttr], function(values) {
const base = parseInt(values[baseAttr]) || 0;
const adj = parseInt(values[adjAttr]) || 0;
let rollcode = base + adj;
let displaycode = base + adj;
if(rollcode < 0) {
displaycode = 0;
}
let actualString = `${displaycode}D`;
setAttrs({
[actual]: rollcode + "d6",
[actualStringAttr]: actualString
});
});
}
function updateSkillFromStats(skill) {
const code = SKILL_STATS[skill];
const letters = code.split("");
const stats = letters.map(letter => LETTER_TO_ATTR[letter]);
const actualStats = stats.map(stat => `${stat}_rollcode`);
const skillgroupAttr = `${skill}_skillgroup`;
const skillActiveAttr = `${skill}_active`;
const attrsToFetch = [...actualStats, skillgroupAttr, skillActiveAttr];
getAttrs(attrsToFetch, function(values) {
const group = values[skillgroupAttr];
const groupValueAttr = `${group}_value`;
getAttrs([groupValueAttr], function(groupValues) {
const baseTotal = actualStats.reduce((sum, stat) => sum + (parseInt(values[stat]) || 0), 0);
const groupValue = parseInt(groupValues[groupValueAttr]) || 0;
const total = baseTotal + groupValue;
const dicecode = pipsToDiceCode(total, "D");
const rollcode = pipsToDiceCode(total, "d6");
setAttrs({
[`${skill}_string`]: dicecode,
[`${skill}_rollcode`]: rollcode,
});
});
});
}
function handleTraining(group) {
const groupValueAttr = `${group}_value`;
const groupStringAttr = `${group}_string`;
const groupCost = `${group}_cost`;
const groupRefund = `${group}_refund`;
getAttrs(["skill_points", groupValueAttr], function(values) {
let skillPoints = parseInt(values.skill_points) || 0;
let pips = parseInt(values[groupValueAttr]) || 0;
const cost = Math.floor(pips / 3) + 1;
if (skillPoints >= cost) {
skillPoints -= cost;
pips += 1;
const dicecode = pipsToDiceCode(pips, "D");
const nextCost = Math.floor(pips / 3) + 1;
setAttrs({
skill_points: skillPoints,
[groupValueAttr]: pips,
[groupStringAttr]: dicecode,
[groupCost]: nextCost,
[groupRefund]: cost,
});
getSkillsByGroup(group).forEach(updateSkillFromStats);
} else {
rollErrorMessage(`❌ ${capitalize(group)} Training Failed: Not enough skill points (need ${cost})`);
return;
}
});
}
function handleUndo(group) {
const groupValueAttr = `${group}_value`;
const groupStringAttr = `${group}_string`;
const groupCost = `${group}_cost`;
const groupMin = `${group}_min`;
const groupRefund = `${group}_refund`;
getAttrs(["skill_points", groupValueAttr, groupRefund, groupMin], function(values) {
let skillPoints = parseInt(values.skill_points) || 0;
let pips = parseInt(values[groupValueAttr]) || 0;
let refund = parseInt(values[groupRefund]) || 0;
let min = parseInt(values[groupMin]) || 0;
if (pips <= 0 || refund <= 0) return;
pips -= 1;
skillPoints += refund;
const dicecode = pipsToDiceCode(pips, "D");
const nextCost = refund;
const nextRefund = pips>min ? Math.floor((pips - 1) / 3) + 1 : 0;
setAttrs({
skill_points: skillPoints,
[groupValueAttr]: pips,
[groupStringAttr]: dicecode,
[groupCost]: nextCost,
[groupRefund]: nextRefund,
});
getSkillsByGroup(group).forEach(updateSkillFromStats);
});
}
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function getSkillsByGroup(group) {
return Object.entries(SKILL_GROUPS)
.filter(([, skillGroup]) => skillGroup === group)
.map(([skill]) => skill);
}
function pipsToDiceCode(pips, letter = "D") {
const dice = Math.floor(pips / 3);
const remainder = pips % 3;
return remainder > 0 ? `${dice}${letter} + ${remainder}` : `${dice}${letter}`;
}
function enterSpendMode() {
const attrsToGet = ["spend_mode"];
// Gather all active skill attributes to check
ACTIVATABLE_SKILLS.forEach(skill => {
attrsToGet.push(`${skill}_active`);
});
getAttrs(attrsToGet, function(values) {
const updates = {
spend_mode: "1"
};
ACTIVATABLE_SKILLS.forEach(skill => {
const active = parseInt(values[`${skill}_active`], 10) || 0;
if (active < 3) {
updates[`${skill}_active`] = "1";
}
});
setAttrs(updates);
});
}
function commitSpend() {
const attrsToGet = [];
SKILL_GROUP_LIST.forEach(group => {
attrsToGet.push(`${group}_value`);
});
ACTIVATABLE_SKILLS.forEach(skill => {
attrsToGet.push(`${skill}_active`);
});
getAttrs(attrsToGet, function(values) {
const updates = {};
// Update skill group minimums and reset refunds
SKILL_GROUP_LIST.forEach(group => {
const value = parseInt(values[`${group}_value`] || "0", 10);
updates[`${group}_min`] = value;
updates[`${group}_refund`] = 0;
});
// Update activatable skills from "2" (activated) to "3" (committed)
ACTIVATABLE_SKILLS.forEach(skill => {
const activeVal = String(values[`${skill}_active`] || "0");
if (activeVal === "2" || activeVal === "3") {
updates[`${skill}_active`] = "3";
} else {
updates[`${skill}_active`] = "0";
}
});
updates.spend_mode = "0";
setAttrs(updates);
});
}
function renderAmmoDisplay(currentAmmo, maxAmmo) {
let output = "";
for (let i = 0; i < maxAmmo; i++) {
output += i < currentAmmo ? "●" : "○";
}
return output;
}
function handleFirearmAttack(slot) {
const attrs = [
`${slot}_ammo`,
`${slot}_rollcode`,
`${slot}_weapon`,
"character_name"
];
getAttrs(attrs, function(values) {
const ammo = parseInt(values[`${slot}_ammo`], 10) || 0;
if (ammo <= 0) {
rollErrorMessage("❌ Out of Ammo: Reload before firing!");
return;
}
rollSkill(slot);
adjustAmmo(slot, -1);
});
}
function updateAmmo(slot, delta) {
const ammoAttr = `${slot}_ammo`;
const maxAttr = `${slot}_ammo_max`;
getAttrs([ammoAttr, maxAttr], function(values) {
const current = parseInt(values[ammoAttr], 10) || 0;
const max = parseInt(values[maxAttr], 10) || 0;
let updated = current + delta;
if (updated > max) updated = max;
if (updated < 0) updated = 0;
setAttrs({ [ammoAttr]: updated });
adjustAmmo(slot, 0);
});
}
function reloadAmmo(slot) {
const maxAttr = `${slot}_ammo_max`;
const ammoAttr = `${slot}_ammo`;
getAttrs([maxAttr], function(values) {
const max = parseInt(values[maxAttr], 10) || 0;
setAttrs({ [ammoAttr]: max });
adjustAmmo(slot, 0);
});
}
function adjustAmmo(slot, delta) {
const ammoAttr = `${slot}_ammo`;
const maxAttr = `${slot}_ammo_max`;
const displayAttr = `${slot}_ammo_display`;
getAttrs([ammoAttr, maxAttr], function(values) {
let ammo = parseInt(values[ammoAttr], 10) || 0;
const maxAmmo = parseInt(values[maxAttr], 10) || 0;
// Apply delta
ammo += delta;
// Clamp within 0 and maxAmmo
if (ammo < 0) ammo = 0;
if (ammo > maxAmmo) ammo = maxAmmo;
const display = renderAmmoDisplay(ammo, maxAmmo);
const updates = {};
updates[ammoAttr] = ammo;
updates[displayAttr] = display;
setAttrs(updates);
});
}
function adjustDiceByAttackCount(baseString, count) {
const basePips = diceCodeToPips(baseString);
const adjustedPips = Math.max(0, basePips - 3 * (count - 1));
return {
actual: pipsToDiceCode(adjustedPips, "D"),
rollcode: pipsToDiceCode(adjustedPips, "d6")
};
}
function diceCodeToPips(diceCode) {
const match = diceCode.match(/^(\d+)[dD](?:\s*\+\s*(\d+))?$/);
if (!match) return 0;
const dice = parseInt(match[1], 10);
const remainder = parseInt(match[2] || "0", 10);
return dice * 3 + remainder;
}
function updateWeapon({
values,
weaponAttr,
lookupTable,
prefix,
extra = () => ({})
}) {
const weapon = values[weaponAttr] || "None";
const updates = {};
const weaponData = lookupTable[weapon];
if (!weaponData) {
return setAttrs({
[`${prefix}attr`]: `${weapon} not found`,
[`${prefix}string`]: "0D",
[`${prefix}actual`]: "0D",
[`${prefix}rollcode`]: "0d6",
[`${prefix}damage`]: "0D",
[`${prefix}damage_rollcode`]: "0d6",
[`${prefix}min_damage`]: "-",
[`${prefix}special`]: `${weapon} not found`
});
}
const skillCategory = weaponData.skillCategory?.toLowerCase().replace(/\s+/g, "") || "";
const displayDice = values[`${skillCategory}_string`] || "0D";
const displayName = values[`${skillCategory}_displayname`] || weapon;
const count = parseInt(values.attack_count, 10) || 1;
const result = adjustDiceByAttackCount(displayDice, count);
const damage = weaponData.damage || "-";
const rollcode = damage.replace(/D/g, "d6").replace(/(\d+)d6/g, "$1d6kh$1cs0cf0");
Object.assign(updates, {
[`${prefix}attr`]: displayName,
[`${prefix}string`]: displayDice,
[`${prefix}actual`]: result.actual || "0D",
[`${prefix}rollcode`]: result.rollcode || "0d6",
[`${prefix}damage`]: damage,
[`${prefix}damage_rollcode`]: rollcode,
[`${prefix}min_damage`]: weaponData.minDamage || "-",
[`${prefix}special`]: weaponData.special || "",
[`${prefix}weapon`]: weapon,
...extra(values, weaponData)
});
const rangeCategory = weaponData.rangeType || "blank_range";
const rangeData = RANGE_LOOKUP[rangeCategory] || {};
["point_blank", "short", "medium", "long", "extreme"].forEach(range => {
const label = range.replace(/_/g, " ");
const value = rangeData[label] || "-";
const attrName = `${prefix}${range}`;
updates[attrName] = value;
});
if (weaponData.ammo) {
const maxAmmo = parseInt(weaponData.ammo, 10);
const bulletString = renderAmmoDisplay(maxAmmo, maxAmmo);
updates[`${prefix}ammo`] = maxAmmo;
updates[`${prefix}ammo_max`] = maxAmmo;
updates[`${prefix}ammo_display`] = bulletString;
}
setAttrs(updates);
}
function rollWeaponDamage(key) {
const fields = [
'character_name',
'whisper_toggle',
'revived_toggle',
'condition_knockout',
'status',
`${key}_weapon`,
`${key}_damage_rollcode`,
`${key}_min_damage`,
`${key}_special`
];
getAttrs(fields, function(values) {
if (isKnockedOut(values)) {
rollErrorMessage("❌ You are knocked out and cannot attack.");
return;
}
if (!isConscious(values)) {
rollErrorMessage("❌ You are not conscious and cannot act.");
return;
}
const character = values.character_name || '';
const weapon = values[`${key}_weapon`] || '';
const rollcode = values[`${key}_damage_rollcode`] || '0';
const minDamage = values[`${key}_min_damage`] || '0';
const special = values[`${key}_special`] || '';
const whisper = values.whisper_toggle || '';
const roll =
`${whisper} ` +
`&{template:d6damage} ` +
`{{character=${character}}} ` +
`{{weapon=${weapon}}} ` +
`{{damage_roll=[[ ${rollcode} ]]}} ` +
`{{minimum_damage=${minDamage}}} ` +
`{{special=${special}}}`;
startRoll(roll, (results) => {
finishRoll(results.rollId);
});
});
}
function rollMonsterDamage(key) {
const fields = [
'character_name',
'whisper_toggle',
'revived_toggle',
'condition_knockout',
'status',
`${key}_name`,
`${key}_damage`,
`${key}_min_damage`,
`${key}_special`
];
getAttrs(fields, function(values) {
if (isKnockedOut(values)) {
rollErrorMessage("❌ You are knocked out and cannot attack.");
return;
}
if (!isConscious(values)) {
rollErrorMessage("❌ You are not conscious and cannot act.");
return;
}
const character = values.character_name || '';
const weapon = values[`${key}_name`] || '';
const rawDamage = values[`${key}_damage`] || '0';
const rollcode = rawDamage.replace(/D/g, 'd6');
const safeRollcode = makeSafeRollcode(rollcode);
const minDamage = values[`${key}_min_damage`] || '0';
const special = values[`${key}_special`] || '';
const whisper = values.whisper_toggle || '';
const roll =
`${whisper} ` +
`&{template:d6damage} ` +
`{{character=${character}}} ` +
`{{weapon=${weapon}}} ` +
`{{damage_roll=[[ ${safeRollcode} ]]}} ` +
`{{minimum_damage=${minDamage}}} ` +
`{{special=${special}}}`;
startRoll(roll, (results) => {
finishRoll(results.rollId);
});
});
}
function registerSkillRollHandlers(skills) {
skills.forEach(skill => {
on(`clicked:${skill}`, function () {
rollSkill(skill);
});
});
}
function isKnockedOut(values) {
return values.condition_knockout === "on";
}
function isConscious(values) {
return values.status === "Conscious" || values.revived_toggle === "on";
}
function rollErrorMessage(message) {
getAttrs(["character_name", "whisper_toggle"], function(values) {
const name = values.character_name || "Character";
const whisper = values.whisper_toggle || "";
const errorRoll =
`${whisper} &{template:d6plus-error} ` +
`{{name=${name}}} ` +
`{{message=${message}}}`;
startRoll(errorRoll, (results) => finishRoll(results.rollId));
});
}
function rollInitiative(name, rollcode, whisper) {
const roll =
`${whisper} &{template:d6plus-initiative} ` +
`{{character=${name}}} ` +
`{{roll=[[ ${rollcode} &{tracker} ]]}}`;
startRoll(roll, (results) => finishRoll(results.rollId));
}
function rollFixedND(n, label = "Fixed nD Roll") {
getAttrs([
"character_name",
"whisper_toggle",
"revived_toggle",
"status",
"condition_knockout"
], function (values) {
const name = values.character_name || "Character";
const whisper = values.whisper_toggle || "";
if (isKnockedOut(values)) {
rollErrorMessage("❌ You are knocked out and cannot act.");
return;
}
if (!isConscious(values)) {
rollErrorMessage("❌ You are not conscious and cannot act.");
return;
}
const rollcode = `${n}d6kh${n}cs0cf0`;
const d20Roll = "1d20";
const roll =
`${whisper} &{template:d6plus} ` +
`{{character=${name}}} ` +
`{{name=${label}}} ` +
`{{rollcode=${n}D}} ` +
`{{roll=[[ ${rollcode} ]]}} ` +
`{{d20=[[ ${d20Roll} ]]}}`;
startRoll(roll, (results) => finishRoll(results.rollId));
});
}
function getOpenEndRolls(advantage) {
const rolls = [];
let roll = Math.floor(Math.random() * 20) + 1;
while (roll >= 20-advantage || roll == 20) {
rolls.push(roll);
roll = Math.floor(Math.random() * 20) + 1;
}
rolls.push(roll);
return rolls;
}
function rollSkill(skill) {
const attrs = [
"character_name",
`${skill}_rollcode`,
`${skill}_displayname`,
"advantage",
`${skill}_specialized`,
"whisper_toggle",
"revived_toggle",
"status",
"condition_knockout",
"initiative_rollcode",
"times_attacked"
];
getAttrs(attrs, values => {
const displayName = getDisplayName(skill, values);
const ableToAct = canAct(values);
if(displayName === "Endure" && !ableToAct) {
rollErrorMessage("❌ Since you are not conscious you are defenceless. Your Endure roll is 3.");
return;
}
if (!ableToAct) {
rollErrorMessage("❌ You are not conscious and cannot act.");
return;
}
if (displayName === "Dodge") {
const current = parseInt(values.times_attacked, 10) || 0;
setAttrs({ times_attacked: current + 1 });
}
const name = values.character_name || "Character";
const whisper = values.whisper_toggle || "";
const rollcode = getRollcode(skill, values);
const safeRollcode = makeSafeRollcode(rollcode);
const delta = values[`${skill}_specialized`] === "(specialized)" ? 1 : 0;
const advantage = parseInt(values.advantage, 10) || 0;
const d20s = getOpenEndRolls(advantage+delta);
const numOpenEnd = d20s.length - 1;
if (skill === "initiative") {
rollInitiative(name, safeRollcode, whisper);
return;
}
if (d20s.length === 1) {
if (delta <= 0 && d20s[0] <= 1 - advantage) {
rollMishapTemplate({ name, displayName, rollcode, safeRollcode, whisper, d20s });
} else {
rollStandardTemplate({ name, displayName, rollcode, safeRollcode, whisper, d20s });
}
} else {
rollOpenEndedTemplate({ name, displayName, safeRollcode, numOpenEnd, whisper, d20s });
}
});
}
function rollMonsterSkill(skill) {
const attrs = [
"character_name",
`${skill}_skill`,
`${skill}_name`,
"advantage",
"whisper_toggle",
"revived_toggle",
"status",
"condition_knockout",
];
getAttrs(attrs, values => {
if (!canAct(values)) {
rollErrorMessage("❌ You are not conscious and cannot act.");
return;
}
const name = values.character_name || "Character";
const whisper = values.whisper_toggle || "";
const displayName = values[`${skill}_name`] || skill;
const rollcode = (values[`${skill}_skill`] || "0D").replace(/D/g, "d6");
const safeRollcode = makeSafeRollcode(rollcode);
const advantage = parseInt(values.advantage, 10) || 0;
const d20s = getOpenEndRolls(advantage);
const numOpenEnd = d20s.length - 1;
if (d20s.length === 1) {
if (d20s[0] <= 1-advantage) {
rollMishapTemplate({ name, displayName, rollcode, safeRollcode, advantage, delta, whisper, d20s });
} else {
rollStandardTemplate({ name, displayName, rollcode, safeRollcode, whisper, d20s });
}
} else {
rollOpenEndedTemplate({ name, displayName, safeRollcode, numOpenEnd, whisper, d20s });
}
});
}
function canAct(values) {
if (isKnockedOut(values)) {
//rollErrorMessage("❌ You are knocked out and cannot act.");
return false;
}
if (!isConscious(values)) {
//rollErrorMessage("❌ You are not conscious and cannot act.");
return false;
}
return true;
}
function getDisplayName(skill, values) {
if (["firearm1", "firearm2", "firearm3", "ranged", "melee"].includes(skill)) {
return `@{${skill}_weapon}`;
}
return values[`${skill}_displayname`] || skill;
}
function getRollcode(skill, values) {
return values[`${skill}_rollcode`] || "0d6";
}
function makeSafeRollcode(rollcode) {
return rollcode.replace(/(\d+)d6/g, "$1d6kh$1cs0cf0");
}
function rollStandardTemplate({ name, displayName, rollcode, safeRollcode, whisper, d20s }) {
const d20 = d20s?.[0] || 0;
const roll =
`${whisper} &{template:d6plus} ` +
`{{character=${name}}} ` +
`{{name=${displayName}}} ` +
`{{rollcode=${rollcode}}} ` +
`{{roll=[[ ${safeRollcode} ]]}} ` +
`{{d20=${d20}}}`;
startRoll(roll, (results) => {
const resultValue = results.results.roll.result || 0;
if (displayName === "Dodge") {
setAttrs({ dodge_value: resultValue });
}
finishRoll(results.rollId);
});
}
function rollMishapTemplate({ name, displayName, rollcode, safeRollcode, whisper, d20s }) {
const roll =
`${whisper} &{template:d6plus-mishap} ` +
`{{character=${name}}} ` +
`{{name=${displayName}}} ` +
`{{rollcode=${rollcode}}} ` +
`{{roll=[[ ${safeRollcode} ]]}} ` +
`{{d20=${d20s[0]}}}`;
startRoll(roll, (results) => finishRoll(results.rollId));
}
function rollOpenEndedTemplate({ name, displayName, safeRollcode, numOpenEnd, whisper, d20s }) {
const fullExpression = Array(numOpenEnd + 1).fill(safeRollcode).join(" + ");
const d20List = d20s.join(", ");
const roll = `${whisper} &{template:d6plus-openend} ` +
`{{character=${name}}} ` +
`{{name=${displayName}}} ` +
`{{openends=${numOpenEnd}}} ` +
`{{rolls=[[ ${fullExpression} ]]}} ` +
`{{d20s=${d20List}}}`;
startRoll(roll, results => finishRoll(results.rollId));
}
function getSkillBonuses(details) {
const matches = [...details.matchAll(/2D ([^\n]+)/g)];
const bonuses = {};
matches.forEach(match => {
const skill = match[1].trim().toLowerCase().replace(/\s+/g, "_");
bonuses[`${skill}_value`] = 6;
bonuses[`${skill}_string`] = "2D";
bonuses[`${skill}_min`] = 6;
bonuses[`${skill}_cost`] = 3;
bonuses[`${skill}_refund`] = 0;
});
return bonuses;
}
function getSpecializations(details) {
const match = details.match(/Specialized:\s*(.+)/i);
if (!match) return {};
const skill = match[1].trim().toLowerCase().replace(/\s+/g, "_");
return { [`${skill}_specialized`]: "(specialized)" };
}
function getMovementBonus(details) {
if (/5 extra move on Run Action/i.test(details)) {
return {
base_run: 35,
current_run: 35
};
}
return {};
}
function getReactionAndPreAction(details) {
const updates = {};
const reactionMatch = details.match(/Reaction:\s*(.+)/i);
if (reactionMatch) {
const reaction = reactionMatch[1].trim().toLowerCase().replace(/\s+/g, "");
updates[`reaction_${reaction}_active`] = 1;
}
const preactionMatch = details.match(/Pre-action:\s*(.+)/i);
if (preactionMatch) {
const preaction = preactionMatch[1].trim().toLowerCase().replace(/\s+/g, "");
updates[`preaction_${preaction}_active`] = 1;
}
return updates;
}
function getActivatableSkills(details) {
const updates = {};
ACTIVATABLE_SKILLS.forEach(skill => {
const readableName = skill;
const pattern = new RegExp(`Activate\\s+${readableName.replace(/_/g, " ")}`, "i");
if (pattern.test(details)) {
updates[`${skill}_active`] = 3;
}
});
return updates;
}
function toggleAllSections(expand = false) {
const updates = {};
SECTIONS.forEach(section => {
updates[`toggle_${section}`] = expand ? "1" : "0";
});
setAttrs(updates);
}
function updateMountedEncumbrance(force = false) {
getAttrs([
"equipped_weight_total",
"horse_weight_total",
"encumbrance_visible",
"character_weight"
], function(values) {
if (values.encumbrance_visible !== "1" && !force) return;
let encumbranceText = "Not Encumbered";
let mountedText = "Not Encumbered";
const weight = parseInt(values.horse_weight_total) || 0;
const riderWeight = (parseInt(values.equipped_weight_total) || 0) + (parseInt(values.character_weight) || 0);
const thresholds = [
{ limit: 275, penalty: 5, text: "-5 Move/Run" },
{ limit: 300, penalty: 10, text: "-10 Move/Run" },
{ limit: 325, penalty: 15, text: "-15 Move/Run" },
{ limit: 350, penalty: 20, text: "-20 Move/Run" },
{ limit: 375, penalty: 25, text: "-25 Move/Run" }
];
for (let i = 0; i < thresholds.length; i++) {
if (weight > thresholds[i].limit) encumbranceText = thresholds[i].text;
if (weight + riderWeight > thresholds[i].limit) mountedText = thresholds[i].text;
}
setAttrs({
horse_encumbrance_text: encumbranceText,
mounted_encumbrance_text: mountedText,
});
});
}
function updateCharacterEncumbrance(force = false) {
getAttrs([
"equipped_weight_total",
"character_enc_5",
"character_enc_10",
"character_enc_15",
"character_enc_20",
"character_enc_25",
"encumbrance_visible"
], function(values) {
if (values.encumbrance_visible !== "1" && !force) return;
let totalPenalty = 0;
let encumbranceText = "Not Encumbered";
const weight = parseInt(values.equipped_weight_total) || 0;
const thresholds = [
{ limit: parseInt(values.character_enc_5), penalty: 5, text: "-5 Move/Run" },
{ limit: parseInt(values.character_enc_10), penalty: 10, text: "-10 Move/Run" },
{ limit: parseInt(values.character_enc_15), penalty: 15, text: "-15 Move/Run" },
{ limit: parseInt(values.character_enc_20), penalty: 20, text: "-20 Move/Run" },
{ limit: parseInt(values.character_enc_25), penalty: 25, text: "-25 Move/Run" }
];
for (let i = 0; i < thresholds.length; i++) {
if (weight > thresholds[i].limit) {
encumbranceText = thresholds[i].text;
totalPenalty = thresholds[i].penalty;
}
}
setAttrs({
encumbrance_text: encumbranceText,
encum_penalty_move: totalPenalty,
encum_penalty_run: totalPenalty
});
});
}
function setupMonster() {
getAttrs(["defaults_set", "skill_1_name", "melee_attack_2_name", "special_ability_1", ...ATTRS], function(values) {
if (values.defaults_set === "1") return;
const updates = {
advantage: 0,
spend_mode: 0,
attack_count: 1,
status: "Conscious"
};
ATTRS.forEach(attr => {
const base = parseInt(values[attr], 10) || 0;
updates[`${attr}_base_string`] = `${base}D`;
updates[`${attr}_string`] = `${base}D`;
updates[`${attr}_rollcode`] = `${base}d6`;
updates[`${attr}_adjustment`] = 0;
});
// Conditionally set skills_active
updates["skills_active"] = values.skill_1_name?.trim() ? "1" : "0";
// Conditionally set second_melee_attack_active
updates["second_melee_attack_active"] = values.melee_attack_2_name?.trim() ? "1" : "0";
updates["special_ability_active"] = values.special_ability_1?.trim() ? "1" : "0";
// First, mark as initialized
setAttrs({ defaults_set: "1" }, () => {
// Then apply other updates including skills_active
setAttrs(updates);
});
});
}
function setupQuickNPC() {
const updates = {
base_move: 30,
base_run: 30,
current_move: 30,
current_run: 30,
advantage: 0,
defaults_set: 1,
spend_mode: 0,
attack_count: 1,
status: "Conscious",
strength: 2,
agility: 2,
health: 2,
perception: 2,
quickness: 2,
willpower: 2,
intelligence: 2,
manualdex: 2,
charisma: 2,
};
setAttrs(updates, () => {
getAttrs([...ATTRS], function (values) {
const baseUpdates = {};
ATTRS.forEach(attr => {
const base = values[attr] || 0;
baseUpdates[`${attr}_base_string`] = `${base}D`;
baseUpdates[`${attr}_string`] = `${base}D`;
baseUpdates[`${attr}_rollcode`] = `${base}d6`;
baseUpdates[`${attr}_adjustment`] = 0;
});
setAttrs(baseUpdates);
});
});
}
function addMultipleInventoryItems(items) {
const all = {};
items.forEach(({ name, qty = 1, weight = 0, location = "equipped", description = "" }) => {
const rowId = generateRowID();
const prefix = `repeating_inventory_${rowId}_`;
all[`${prefix}item_name`] = name;
all[`${prefix}item_qty`] = qty;
all[`${prefix}item_weight`] = weight;
all[`${prefix}item_location`] = location;
all[`${prefix}item_description`] = description;
});
setAttrs(all, () => {
updateMountedEncumbrance(true);
updateCharacterEncumbrance(true);
});
}
function setSheetModeFromCharacterType() {
getAttrs(["character_type"], function(values) {
const ct = values.character_type;
if (ct === "monster") {
setAttrs({ sheet_mode: "monster" });
setupMonster();
}
});
}
function isSkillActive(value) {
return value === undefined || value === "" || parseInt(value, 10) === 3;
}
on("sheet:opened", function() {
setSkillAttributeCodes();
setSkillGroups();
initSkillGroupsIfUnset();
ATTRS.forEach(attr => updateActual(attr));
Object.keys(SKILL_STATS).forEach(updateSkillFromStats);
setSheetModeFromCharacterType();
});
on("change:character_type", setSheetModeFromCharacterType);
ATTRS.forEach(attrName => {
on(`change:${attrName}_adjustment`, () => updateActual(attrName));
on(`change:${attrName}`, () => updateActual(attrName));
});
ATTRS.forEach(attr => {
on(`clicked:${attr}`, () => rollSkill(attr));
});
Object.keys(SKILL_STATS).forEach(skill => {
const code = SKILL_STATS[skill];
const stats = [...new Set(code.split(""))]; // Remove duplicates like "AAS"
const actualStats = stats.map(letter => `change:${LETTER_TO_ATTR[letter]}_rollcode`);
const eventString = actualStats.join(" ");
on(eventString, () => updateSkillFromStats(skill));
});
SKILL_GROUP_LIST.forEach(group => {
on(`clicked:add_${group}`, () => handleTraining(group));
on(`clicked:refund_${group}`, () => handleUndo(group));
const skills = getSkillsByGroup(group);
skills.forEach(skill => {
on(`clicked:${skill}`, () => rollSkill(skill));
});
});
ACTIVATABLE_SKILLS.forEach(skillName => {
on(`clicked:activate_${skillName}`, function() {
getAttrs(["skill_points", `${skillName}_active`], function(values) {
const skillPoints = parseInt(values.skill_points, 10) || 0;
const skillActive = values[`${skillName}_active`] === "3";
if (skillActive) {
// Already active, no need to do anything
return;
}
if (skillPoints < 12) {
const skillTitle = skillName.charAt(0).toUpperCase() + skillName.slice(1);
rollErrorMessage(`❌ Activate ${skillTitle} Failed: Not enough skill points (need 12)`);
return;
}
// Enough points - activate the skill
const update = {};
update[`${skillName}_active`] = "2";
update["skill_points"] = skillPoints - 12;
setAttrs(update, function() {
updateSkillFromStats(skillName);
});
});
});
on(`clicked:undo_activate_${skillName}`, function() {
getAttrs(["skill_points"], function(values) {
const skillPoints = parseInt(values.skill_points, 10) || 0;
// Refund skill points and reset to Not Activated (0)
const update = {};
update[`${skillName}_active`] = "1";
update["skill_points"] = skillPoints + 12;
setAttrs(update, function() {
updateSkillFromStats(skillName);
});
});
});
});
on("clicked:enter_spend", function() {
enterSpendMode();
});
on("clicked:commit_spend", function() {
commitSpend();
});
on("change:preaction_selection_normal change:preaction_selection_ignorepain change:preaction_selection_disengage", function(eventInfo) {
const changedAttr = eventInfo.sourceAttribute;
let finalAttr = "preaction_selection_normal";
if (changedAttr === "preaction_selection_ignorepain") {
finalAttr = "preaction_selection_ignorepain";
} else if (changedAttr === "preaction_selection_disengage") {
finalAttr = "preaction_selection_disengage";
}
getAttrs(["reaction_mode", "preaction_selection_final", "power_strike", finalAttr], function(values) {
const previousChoice = values.preaction_selection_final || "None"; // old pre-action
const newChoice = values[finalAttr] || "None"; // new pre-action
const preactionText = PREACTION_TEXTS[newChoice] || "";
const updates = {
preaction_selection_final: newChoice,
preaction_text: preactionText,
power_strike: newChoice === "Power Strike" ? "1" : "0"
};
if (newChoice === "Help") {
updates.significant_action_selection = "Help";
updates.significant_action_text = SIGNIFICANT_ACTION_TEXTS["Help"] || "";
} else if (previousChoice === "Help") {
updates.significant_action_selection = "None";
updates.significant_action_text = SIGNIFICANT_ACTION_TEXTS["None"] || "";
}
setAttrs(updates);
});
});
on("change:reaction_selection_normal change:reaction_selection_medic change:reaction_selection_fixit", function(eventInfo) {
const changedAttr = eventInfo.sourceAttribute;
let finalAttr = "reaction_selection_normal";
if (changedAttr === "reaction_selection_medic") {
finalAttr = "reaction_selection_medic";
} else if (changedAttr === "reaction_selection_fixit") {
finalAttr = "reaction_selection_fixit";
}
getAttrs([finalAttr], function(values) {
const choice = values[finalAttr] || "None";
const text = REACTION_TEXTS[choice] || "";
setAttrs({
reaction_selection_final: choice,
reaction_text: text
});
});
});
on("change:significant_action_selection", function() {
getAttrs(["significant_action_selection"], function(values) {
const choice = values.significant_action_selection || "None";
const text = SIGNIFICANT_ACTION_TEXTS[choice] || "";
setAttrs({
significant_action_text: text
});
});
});
on("clicked:new_turn", function() {
const updates = {
preaction_selection_normal: "None",
preaction_selection_ignorepain: "None",
preaction_selection_disengage: "None",
preaction_selection_final: "None",
preaction_text: "",
reaction_selection_normal: "None",
reaction_selection_medic: "None",
reaction_selection_fixit: "None",
reaction_selection_final: "None",
reaction_text: "",
significant_action_selection: "None",
significant_action_text: "",
simple_action_selection: "None",
move_checked: "0",
times_attacked: "0",
dodge_value: "-"
};
setAttrs(updates);
});
on("change:selected_skill", function(eventInfo) {
const skill = eventInfo.newValue;
if (!skill) {
setAttrs({ skill_actual: " " });
return;
}
const rollAttr = `${skill}_string`;
const activeAttr = `${skill}_active`;
getAttrs([rollAttr, activeAttr], values => {
const isActive = isSkillActive(values[activeAttr]);
const skillValue = isActive ? values[rollAttr] : "Not Active";
setAttrs({
skill_actual: skillValue
});
});
});
on("clicked:selected_skill_roll", () => {
getAttrs(["selected_skill"], values => {
const skill = values.selected_skill;
if (!skill) return;
const activeAttr = `${skill}_active`;
getAttrs([activeAttr], subvalues => {
if (isSkillActive(subvalues[activeAttr])) {
rollSkill(skill);
}
});
});
});
on("change:wounds_total change:first_aid_count change:health_string", function () {
getAttrs(["wounds_total", "first_aid_count", "health_string"], function (values) {
const woundsTotal = parseInt(values.wounds_total) || 0;
const firstAidCount = parseInt(values.first_aid_count) || 0;
const healthString = values.health_string || "0D";
const healthMatch = healthString.match(/^(\d+)D/i);
const health = healthMatch ? parseInt(healthMatch[1], 10) : 0;
const targetNumber = woundsTotal + (5 * firstAidCount);
const death_threshold = 10 + 6 * health;
const uncons_threshold = 10 + 3 * health; // <-- remove fallback here, it's redundant
let status = "Conscious";
if (woundsTotal >= death_threshold) {
status = "Dead";
} else if (woundsTotal >= uncons_threshold) {
status = "Unconscious";
}
setAttrs({
first_aid_target: targetNumber,
status: status,
death_threshold: death_threshold,
unconscious_threshold: uncons_threshold,
});
});
});
on("change:wounds_total change:wounds_ignored", function() {
getAttrs(["wounds_total", "wounds_ignored"], function(values) {
const total = parseInt(values.wounds_total) || 0;
let ignored = parseInt(values.wounds_ignored) || 0;
// Enforce that wounds_ignored cannot exceed wounds_total
if (ignored > total) {
ignored = total;
}
const penalty = Math.max(total - ignored, 0);
const woundPenalty = Math.ceil(penalty/3);
setAttrs({
wounds_ignored: ignored,
skillcheck_wound_penalty: woundPenalty
});
});
});
on("clicked:end_combat", function() {
setAttrs({
wounds_ignored: 0,
first_aid_count: 0
});
});
on("clicked:revive", function () {
getAttrs(["status"], function (values) {
if (values.status !== "Dead") {
setAttrs({ status: "Conscious" });
}
});
});
on("change:mounted_checked", function() {
getAttrs(["mounted_checked", "no_mounted_penalty"], function(values) {
if(values.no_mounted_penalty) {
return;
}
const checked = values.mounted_checked === "on";
let penalty = 0;
if(checked) {
penalty = 5;
}
setAttrs({
skillcheck_mounted_penalty: penalty
});
});
});
on("change:skillcheck_cr change:times_attacked change:skillcheck_modifier change:skillcheck_wound_penalty change:skillcheck_mounted_penalty", function() {
getAttrs(["skillcheck_cr", "times_attacked", "skillcheck_modifier", "skillcheck_help", "skillcheck_wound_penalty", "skillcheck_mounted_penalty"], function(values) {
const cr = parseInt(values.skillcheck_cr) || 0;
const timesAttacked = parseInt(values.times_attacked) || 0;
const modifier = parseInt(values.skillcheck_modifier) || 0;
const woundPenalty = parseInt(values.skillcheck_wound_penalty) || 0;
const mountedPenalty = parseInt(values.skillcheck_mounted_penalty) || 0;
let target = cr + (3 * timesAttacked) + modifier + woundPenalty + mountedPenalty;
if(target <0) {
target = 0;
}
setAttrs({
skill_check_target: target
});
});
});
on("change:combat_range change:combat_cover change:combat_opponent_dodge change:combat_unaware change:times_attacked change:combat_modifier change:skillcheck_wound_penalty change:skillcheck_mounted_penalty", function() {
getAttrs([
"combat_range", "combat_cover", "combat_opponent_dodge", "combat_unaware",
"times_attacked", "combat_modifier",
"skillcheck_wound_penalty", "skillcheck_mounted_penalty"
], function(values) {
const range = parseInt(values.combat_range) || 0;
const cover = parseInt(values.combat_cover) || 0;
const opponentDodge = parseInt(values.combat_opponent_dodge) || 0;
const unaware = values.combat_unaware === "5" ? 5 : 0;
const timesAttacked = parseInt(values.times_attacked) || 0;
const modifier = parseInt(values.combat_modifier) || 0;
const woundPenalty = parseInt(values.skillcheck_wound_penalty) || 0;
const mountedPenalty = parseInt(values.skillcheck_mounted_penalty) || 0;
let target = range + cover + opponentDodge - unaware + (3 * timesAttacked) + modifier + woundPenalty + mountedPenalty;
if(target <0) {
target = 0;
}
setAttrs({
combat_target: target
});
});
});
on("clicked:firearm1_attack", () => handleFirearmAttack("firearm1"));
on("clicked:firearm2_attack", () => handleFirearmAttack("firearm2"));
on("clicked:firearm3_attack", () => handleFirearmAttack("firearm3"));
on("clicked:firearm1_ammo_add", () => updateAmmo("firearm1", 1));
on("clicked:firearm1_ammo_sub", () => updateAmmo("firearm1", -1));
on("clicked:firearm1_ammo_reload", () => reloadAmmo("firearm1"));
on("clicked:firearm2_ammo_add", () => updateAmmo("firearm2", 1));
on("clicked:firearm2_ammo_sub", () => updateAmmo("firearm2", -1));
on("clicked:firearm2_ammo_reload", () => reloadAmmo("firearm2"));
on("clicked:firearm3_ammo_add", () => updateAmmo("firearm3", 1));
on("clicked:firearm3_ammo_sub", () => updateAmmo("firearm3", -1));
on("clicked:firearm3_ammo_reload", () => reloadAmmo("firearm3"));
["firearm1", "firearm2", "firearm3"].forEach(slot => {
on(`change:${slot}_weapon`, () => {
const weaponAttr = `${slot}_weapon`;
getAttrs([
weaponAttr,
"attack_count",
"pistol_string",
"rifle_string",
"shotgun_string",
"sawed_off_shotgun_string",
"pistol_displayname",
"rifle_displayname",
"shotgun_displayname",
"sawed_off_shotgun_displayname"
], values => {
updateWeapon({
values,
weaponAttr,
lookupTable: FIREARMS_LOOKUP,
prefix: `${slot}_`
});
});
});
});
on("change:ranged_weapon", () => {
getAttrs([
"ranged_weapon", "bow_active", "attack_count",
"bow_string", "slingshot_string", "thrown_string", "roping_string",
"bow_displayname", "slingshot_displayname", "thrown_displayname", "roping_displayname"
], values => {
if (values.ranged_weapon === "Bow" && parseInt(values.bow_active, 10) !== 3) {
return setAttrs({
ranged_attr: "Bow skill not activated",
ranged_string: "0D",
ranged_actual: "0D",
ranged_rollcode: "0d6",
ranged_damage: "0D",
ranged_damage_rollcode: "0d6",
ranged_min_damage: "-",
ranged_special: "Bow skill not activated"
});
}
updateWeapon({
values,
weaponAttr: "ranged_weapon",
lookupTable: RANGED_LOOKUP,
prefix: "ranged_"
});
});
});
on("change:melee_weapon", () => {
getAttrs([
"melee_weapon", "attack_count", "martial_arts_active", "strength_string",
"melee_weapon_string", "improvised_weapon_string", "brawling_string", "wrestling_string", "martial_arts_string", "push_string",
"melee_weapon_displayname", "improvised_weapon_displayname", "brawling_displayname", "wrestling_displayname", "martial_arts_displayname", "push_displayname"
], values => {
if (values.melee_weapon === "Martial Arts" && parseInt(values.martial_arts_active, 10) !== 3) {
return setAttrs({
melee_attr: "Martial Arts skill not activated",
melee_string: "0D",
melee_actual: "0D",
melee_rollcode: "0d6",
melee_damage: "0D",
melee_damage_rollcode: "0d6",
melee_min_damage: "-",
melee_special: "Martial Arts skill not activated"
});
}
updateWeapon({
values,
weaponAttr: "melee_weapon",
lookupTable: MELEE_LOOKUP,
prefix: "melee_",
extra: (values, weaponData) => {
const str = values.strength_string || "0D";
const replaced = (weaponData.damage || "-").replace(/S/g, str).replace(/D/g, "d6").replace(/(\d+)d6/g, "$1d6kh$1cs0cf0");
return {
melee_damage_rollcode: replaced
};
}
});
});
});
on("change:bow_rollcode change:slingshot_rollcode change:thrown_rollcode change:roping_rollcode", function () {
getAttrs([
"ranged_weapon",
"bow_string", "slingshot_string", "thrown_string", "roping_string",
"bow_active", "attack_count"
], function (values) {
const bowActive = parseInt(values.bow_active, 10) || 0;
if (values.ranged_weapon === "Bow" && bowActive !== 3) return;
updateWeapon({
values,
weaponAttr: "ranged_weapon",
lookupTable: RANGED_LOOKUP,
prefix: "ranged_"
});
});
});
on("change:pistol_rollcode change:rifle_rollcode change:shotgun_rollcode change:sawed_off_shotgun_rollcode", function () {
getAttrs([
"firearm1_weapon", "firearm2_weapon", "firearm3_weapon",
"pistol_string", "rifle_string", "shotgun_string", "sawed_off_shotgun_string",
"attack_count"
], function (values) {
updateWeapon({
values,
weaponAttr: "firearm1_weapon",
lookupTable: FIREARMS_LOOKUP,
prefix: "firearm1_"
});
updateWeapon({
values,
weaponAttr: "firearm2_weapon",
lookupTable: FIREARMS_LOOKUP,
prefix: "firearm2_"
});
updateWeapon({
values,
weaponAttr: "firearm3_weapon",
lookupTable: FIREARMS_LOOKUP,
prefix: "firearm3_"
});
});
});
on("change:melee_weapon_rollcode change:power_strike change:improvised_weapon_rollcode change:brawling_rollcode change:push_rollcode change:wrestling_rollcode change:martial_arts_rollcode change:attr_strength_rollcode", function () {
getAttrs([
"melee_weapon",
"melee_weapon_string", "improvised_weapon_string", "brawling_string", "push_string",
"wrestling_string", "martial_arts_string", "strength_string",
"attack_count", "martial_arts_active", "power_strike"
], function (values) {
const maActive = parseInt(values.martial_arts_active, 10) || 0;
if (values.melee_weapon === "Martial Arts" && maActive !== 3) return;
updateWeapon({
values,
weaponAttr: "melee_weapon",
lookupTable: MELEE_LOOKUP,
prefix: "melee_",
extra: (vals, weaponData) => {
const strengthDice = vals["strength_string"] || "0D";
const powerStrike = +values.power_strike;
let fullDamageRoll = weaponData.damage || "-";
if (fullDamageRoll.includes("S")) {
fullDamageRoll = fullDamageRoll.replace(/S/g, strengthDice);
}
if (powerStrike) {
fullDamageRoll += "+1D";
}
return {
melee_damage_rollcode: fullDamageRoll.replace(/D/g, "d6")
};
}
});
});
});
on('clicked:firearm1_damage', function() {rollWeaponDamage('firearm1');});
on('clicked:firearm2_damage', function() {rollWeaponDamage('firearm2');});
on('clicked:firearm3_damage', function() {rollWeaponDamage('firearm3');});
on('clicked:ranged_damage', function() {rollWeaponDamage('ranged');});
on('clicked:melee_damage', function() {rollWeaponDamage('melee');});
on('clicked:ranged_attack', function() {rollSkill('ranged');});
on('clicked:melee_attack', function() {rollSkill('melee');});
on('clicked:melee_attack_1', function() {rollMonsterSkill('melee_attack_1');});
on('clicked:melee_damage_1', function() {rollMonsterDamage('melee_attack_1');});
on('clicked:melee_attack_2', function() {rollMonsterSkill('melee_attack_2');});
on('clicked:melee_damage_2', function() {rollMonsterDamage('melee_attack_2');});
on('clicked:roll_skill_1', function() {rollMonsterSkill('skill_1');});
on("change:condition_drunk change:condition_exhausted change:condition_dehydrated change:condition_hypothermic change:condition_knockout change:condition_frightened change:condition_diseased change:condition_poisoned change:condition_grappled change:condition_lassoed", function () {
getAttrs([
"condition_drunk", "condition_exhausted", "condition_dehydrated", "condition_hypothermic", "condition_knockout",
"condition_frightened", "condition_diseased", "condition_poisoned", "condition_grappled", "condition_lassoed",
"base_move", "base_run", "encum_penalty_move", "encum_penalty_run"
], function (values) {
const adjustments = {
strength: 0,
agility: 0,
health: 0,
perception: 0,
quickness: 0,
willpower: 0,
manualdex: 0,
charisma: 0,
move: 0,
run: 0
};
if (values.condition_drunk === "on") {
adjustments.agility -= 1;
adjustments.perception -= 1;
adjustments.willpower += 1;
}
if (values.condition_exhausted === "on") {
adjustments.strength -= 1;
adjustments.quickness -= 1;
adjustments.willpower -= 1;
adjustments.run -= 10;
adjustments.move -= 10;
}
if (values.condition_dehydrated === "on") {
adjustments.health -= 1;
adjustments.strength -= 1;
adjustments.run -= 5;
adjustments.move -= 5;
}
if (values.condition_hypothermic === "on") {
adjustments.agility -= 1;
adjustments.manualdex -= 1;
adjustments.run -= 5;
adjustments.move -= 5;
}
if (values.condition_frightened === "on") {
adjustments.willpower -= 1;
adjustments.charisma -= 1;
adjustments.run += 5;
}
if (values.condition_diseased === "on") {
adjustments.health -= 1;
adjustments.strength -= 1;
adjustments.run -= 5;
adjustments.move -= 5;
}
if (values.condition_poisoned === "on") {
adjustments.health -= 1;
adjustments.quickness -= 1;
adjustments.run -= 5;
adjustments.move -= 5;
}
if (values.condition_grappled === "on" || values.condition_knockout === "on" || values.condition_lassoed === "on") {
adjustments.run -= 500;
adjustments.move -= 500;
}
setAttrs({
strength_adjustment: adjustments.strength,
agility_adjustment: adjustments.agility,
health_adjustment: adjustments.health,
perception_adjustment: adjustments.perception,
quickness_adjustment: adjustments.quickness,
willpower_adjustment: adjustments.willpower,
manualdex_adjustment: adjustments.manualdex,
charisma_adjustment: adjustments.charisma,
conditions_penalty_move: adjustments.move,
conditions_penalty_run: adjustments.run
});
});
});
on(`change:${Object.keys(VALIDATION_RULES).join(" change:")}`, function() {
getAttrs(Object.keys(VALIDATION_RULES), function(values) {
const updates = {};
for (let attr in VALIDATION_RULES) {
const rule = VALIDATION_RULES[attr];
const value = parseInt(values[attr], 10);
if (isNaN(value)) {
updates[attr] = rule.min || 0;
} else if (typeof rule.min === "number" && value < rule.min) {
updates[attr] = rule.min;
} else if (typeof rule.max === "number" && value > rule.max) {
updates[attr] = rule.max;
}
}
if (Object.keys(updates).length > 0) {
setAttrs(updates);
}
});
});
on("change:repeating_inventory:item_qty change:repeating_inventory:item_weight", function(eventInfo) {
const rowPrefix = eventInfo.sourceAttribute.replace(/(item_qty|item_weight)$/, "");
getAttrs([`${rowPrefix}item_qty`, `${rowPrefix}item_weight`], function(values) {
const updates = {};
const qty = parseInt(values[`${rowPrefix}item_qty`], 10);
const weight = parseFloat(values[`${rowPrefix}item_weight`]);
if (isNaN(qty) || qty < 1) {
updates[`${rowPrefix}item_qty`] = 1;
}
if (isNaN(weight) || weight < 0) {
updates[`${rowPrefix}item_weight`] = 0;
}
if (Object.keys(updates).length > 0) {
setAttrs(updates);
}
});
});
on("clicked:type_continue", function () {
getAttrs(["character_type"], function (values) {
const type = values.character_type;
let sheet_mode = "background"; // Default fallback
switch (type) {
case "pc":
case "major_npc":
case "standard_npc":
sheet_mode = "background";
break;
case "quick_npc":
setupQuickNPC();
sheet_mode = "quicknpc";
break;
case "beast":
sheet_mode = "sheet";
break;
}
setAttrs({ sheet_mode });
});
});
on("clicked:next_step", function () {
getAttrs(["background_choice", "character_type"], function (values) {
const name = values.background_choice || "";
const entry = BACKGROUND_DETAILS[name] || {};
const details = entry.details || "";
const cash = entry.cash || "$0.00";
const items = entry.items || [];
const updates = {
background_name: name,
background_combined: details,
character_cash: cash,
no_mounted_penalty: /no penalty when mounted/i.test(details) ? 1 : 0
};
Object.assign(updates, getDefaults());
Object.assign(updates, getTypeDefaults(values.character_type));
Object.assign(updates, getSkillBonuses(details));
Object.assign(updates, getSpecializations(details));
Object.assign(updates, getMovementBonus(details));
Object.assign(updates, getReactionAndPreAction(details));
Object.assign(updates, getActivatableSkills(details));
// Add items to inventory
addMultipleInventoryItems(items);
// Finalize updates
setAttrs(updates, () => {
enterSpendMode();
setAttrs({ sheet_mode: "training" });
});
});
});
const getSuggestedWeight = (heightString, strength) => {
const baseWeightsByHeight = {
"5'": 120,
"5'1\"": 125,
"5'2\"": 130,
"5'3\"": 135,
"5'4\"": 140,
"5'5\"": 145,
"5'6\"": 150,
"5'7\"": 155,
"5'8\"": 160,
"5'9\"": 165,
"5'10\"": 170,
"5'11\"": 175,
"6'": 180,
"6'1\"": 185,
"6'2\"": 190,
"6'3\"": 195,
"6'4\"": 200,
"6'5\"": 205,
"6'6\"": 210
}
const baseWeight = baseWeightsByHeight[heightString] || 150; // default if unmatched
const multiplier = 1 + 0.1 * (strength - 3);
return Math.round(baseWeight * multiplier);
};
function populateStartingWeight() {
getAttrs(["character_height", "strength"], function (values) {
console.log("here");
const height = values.character_height || "5&#39;8&quot;";
const strength = parseInt(values.strength, 10) || 3;
const suggestedWeight = getSuggestedWeight(height, strength);
setAttrs({
character_weight: suggestedWeight
});
});
}
on("clicked:final_step", function () {
getAttrs(["sheet_mode", ...ATTRS], function (values) {
const updates = {
sheet_mode: "sheet",
spend_mode: "0"
};
ATTRS.forEach(attr => {
updates[`${attr}_base_string`] = `${values[attr] || 0}D`;
});
//registerSkillRollHandlers(Object.keys(SKILL_GROUPS));
commitSpend();
setAttrs(updates);
toggleAllSections(true);
populateStartingWeight();
});
});
on("change:background_choice", function () {
getAttrs(["background_choice"], function (values) {
const name = values.background_choice?.trim() || "";
const entry = BACKGROUND_DETAILS[name] || {};
const details = entry.details || "";
const backgroundChosen = name !== "";
const items = entry.items || [];
const cash = entry.cash || "$0.00";
const itemList = items.map(item => `• ${item.name}`);
const part1 = [`Cash: ${cash}`, ...itemList.slice(0, 9)].join("\n").trim(); // leave room for cash line
const part2 = itemList.slice(9).join("\n").trim();
setAttrs({
background_combined: details,
ready_to_advance_background: backgroundChosen,
background_items1: part1,
background_items2: part2
});
});
});
on(`change:${ATTRS.join(' change:')} change:skill_points change:sheet_mode`, function () {
getAttrs([...ATTRS, 'skill_points', 'sheet_mode', 'character_type'], function (values) {
if (values.sheet_mode !== "training") return;
let total = 0;
ATTRS.forEach(attr => {
const val = parseInt(values[attr], 10);
if (!isNaN(val)) total += val;
});
const skillPoints = parseInt(values.skill_points, 10);
let isReady = total === 27 && skillPoints === 0 ? "1" : "0";
if (values.character_type === "major_npc") {
isReady = "1";
}
setAttrs({
attribute_total: total,
ready_to_advance_training: isReady
});
});
});
on("change:attack_count", function() {
const weapons = ["firearm1", "firearm2", "firearm3", "ranged", "melee"];
const attrsToGet = ["attack_count", ...weapons.map(w => `${w}_string`)];
getAttrs(attrsToGet, function(values) {
const count = parseInt(values.attack_count, 10) || 1;
const updates = {};
weapons.forEach(weapon => {
const baseString = values[`${weapon}_string`] || "0D";
const result = adjustDiceByAttackCount(baseString, count);
updates[`${weapon}_actual`] = result.actual;
updates[`${weapon}_rollcode`] = result.rollcode;
});
setAttrs(updates);
});
});
on("clicked:collapse_all", () => toggleAllSections(false));
on("clicked:expand_all", () => toggleAllSections(true));
on("clicked:2droll", () => rollFixedND(2, "2D Roll"));
on("clicked:2dinit", function () {
getAttrs(["character_name", "whisper_toggle"], function (values) {
const name = values.character_name || "Character";
const whisper = values.whisper_toggle || "";
const rollcode = "2d6";
rollInitiative(name, rollcode, whisper);
});
});
on("clicked:view_inventory", function () {
setAttrs({ view_mode: "inventory" });
});
on("clicked:view_character", function () {
setAttrs({ view_mode: "character" });
});
on("change:repeating_inventory:item_qty change:repeating_inventory:item_weight change:repeating_inventory:item_location remove:repeating_inventory add:repeating_inventory change:character_weight", function() {
getSectionIDs("repeating_inventory", function(ids) {
const fields = [];
ids.forEach(id => {
fields.push(`repeating_inventory_${id}_item_qty`);
fields.push(`repeating_inventory_${id}_item_weight`);
fields.push(`repeating_inventory_${id}_item_location`);
});
getAttrs(fields, function(values) {
let equippedTotal = 0;
let onHorseTotal = 0;
ids.forEach(id => {
const qty = parseInt(values[`repeating_inventory_${id}_item_qty`], 10) || 0;
const weight = parseFloat(values[`repeating_inventory_${id}_item_weight`]) || 0;
const location = values[`repeating_inventory_${id}_item_location`] || "";
const total = qty * weight;
if (location === "equipped") equippedTotal += total;
else if (location === "horse") onHorseTotal += total;
});
setAttrs({
equipped_weight_total: equippedTotal,
horse_weight_total: onHorseTotal
}, () => {
// Now get character weight and calculate mounted load
getAttrs(["character_weight"], function(charValues) {
const charWeight = parseFloat(charValues.character_weight) || 0;
const mountedTotal = equippedTotal + onHorseTotal + charWeight;
setAttrs({
mounted_weight_total: mountedTotal
});
});
});
});
});
});
on("change:strength_string", function() {
getAttrs(["strength_string"], function(values) {
const str = parseInt(values.strength_string, 10) || 0;
// Base capacity = 30 × Strength
const capacity = str * 30;
// Each step increases by 10%
const enc_5 = Math.ceil(capacity * 1.1);
const enc_10 = Math.ceil(capacity * 1.2);
const enc_15 = Math.ceil(capacity * 1.3);
const enc_20 = Math.ceil(capacity * 1.4);
const enc_25 = Math.ceil(capacity * 1.5);
setAttrs({
character_capacity: capacity,
character_enc_5: enc_5,
character_enc_10: enc_10,
character_enc_15: enc_15,
character_enc_20: enc_20,
character_enc_25: enc_25,
});
});
});
on("change:equipped_weight_total change:horse_weight_total change:character_weight", updateMountedEncumbrance);
on("change:equipped_weight_total change:character_enc_5 change:encumbrance_visible", updateCharacterEncumbrance);
on("change:base_move change:base_run change:encum_penalty_move change:encum_penalty_run change:conditions_penalty_move change:conditions_penalty_run", function() {
getAttrs([
"base_move", "base_run",
"encum_penalty_move", "encum_penalty_run",
"conditions_penalty_move", "conditions_penalty_run"
], function(values) {
const baseMove = parseInt(values.base_move, 10) || 0;
const baseRun = parseInt(values.base_run, 10) || 0;
const encMove = parseInt(values.encum_penalty_move, 10) || 0;
const encRun = parseInt(values.encum_penalty_run, 10) || 0;
const condMove = parseInt(values.conditions_penalty_move, 10) || 0;
const condRun = parseInt(values.conditions_penalty_run, 10) || 0;
const currentMove = Math.max(0, baseMove - encMove + condMove);
const currentRun = Math.max(0, baseRun - encRun + condRun);
setAttrs({
current_move: currentMove,
current_run: currentRun
});
});
});
on("change:use_encumbrance", function() {
getAttrs(["use_encumbrance"], function(values) {
const isEnabled = values.use_encumbrance === "on";
const updates = {
encumbrance_visible: isEnabled ? "1" : "0"
};
// If disabling encumbrance, clear penalties and text
if (!isEnabled) {
updates.encumbrance_text = "";
updates.encum_penalty_move = 0;
updates.encum_penalty_run = 0;
}
setAttrs(updates);
});
});
on("change:itemdrop_name", function() {
getAttrs([
"itemdrop_name", "itemdrop_qty", "itemdrop_weight", "itemdrop_location","itemdrop_description"
], function(values) {
const name = values.itemdrop_name;
if (!name) return; // skip if nothing dropped
const rowId = generateRowID();
const prefix = `repeating_inventory_${rowId}_`;
const all = {};
all[`${prefix}item_name`] = values.itemdrop_name || "";
all[`${prefix}item_qty`] = values.itemdrop_qty || "";
all[`${prefix}item_weight`] = values.itemdrop_weight || "";
all[`${prefix}item_location`] = values.itemdrop_location || "";
all[`${prefix}item_description`] = values.itemdrop_description || "";
// Clear the drop zone
all["itemdrop_name"] = "";
all["itemdrop_qty"] = "";
all["itemdrop_weight"] = "";
all["itemdrop_location"] = "";
all["itemdrop_description"] = "";
setAttrs(all);
});
});
</script>
<rolltemplate class="sheet-rolltemplate-d6plus">
<div class="sheet-template-container">
<div>{{character}}</div>
<h3>{{name}}</h3>
<div><strong>Total:</strong> {{roll}}</div>
<div><strong>Open Ended D20:</strong> {{d20}}</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-d6plus-initiative">
<div class="sheet-template-container">
<div>{{character}}</div>
<h3>Initiative Roll</h3>
<div><strong>Total:</strong> {{roll}}</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-d6damage">
<div class="sheet-template-container">
<div>{{character}}</div>
<h3>{{weapon}} Damage</h3>
<div><strong>Damage Roll:</strong> {{damage_roll}}</div>
<div><strong>Minimum Damage:</strong> {{minimum_damage}}</div>
{{#special}}
<div><strong>Special:</strong> {{special}}</div>
{{/special}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-d6plus-error">
<div class="error-template">
<h3>{{name}}</h3>
<div>{{message}}</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-d6plus-openend">
<div class="sheet-template-container">
<div>{{character}}</div>
<h3>{{name}}</h3>
<div><strong>Total:</strong> {{rolls}}</div>
<div style="color: green;"><strong>Open Ended D20s:</strong> {{d20s}}</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-d6plus-mishap">
<div class="sheet-template-container">
<div>{{character}}</div>
<h3>{{name}}</h3>
<div><strong>Total:</strong> {{roll}}</div>
<div><strong>Open Ended D20:</strong> {{d20}}</div>
<div style="color: red;"><strong>Mishap!!</strong></div>
</div>
</rolltemplate>