diff --git a/LyrianChronicles/LyrianChronicles.css b/LyrianChronicles/LyrianChronicles.css index 16f76552fa..01009c781a 100644 --- a/LyrianChronicles/LyrianChronicles.css +++ b/LyrianChronicles/LyrianChronicles.css @@ -3,6 +3,54 @@ background: #181818 !important; } +/* PC/NPC switch */ +.charsheet div.sheet-section-pc, +.charsheet div.sheet-section-npc { + display: none; +} + +.charsheet input.sheet-is-npc:checked ~ div.sheet-section-npc, +.charsheet input.sheet-is-npc:not(:checked) ~ div.sheet-section-pc { + display: block; +} + +.charsheet input.sheet-is-npc { + width: 20%; + height: 16px; + cursor: pointer; + position: relative; + opacity: 0; + z-index: 9999; +} + +.charsheet span.sheet-is-npc-tab::before { + content: "Player Sheet"; +} + +.charsheet span.sheet-is-npc-tab { + text-align: center; + display: inline-block; + width: 20%; + height: 16px; + font-size: 9px; + background: #65763c; + color: white; + font-weight: bold; + border-radius: 4px; + margin-left: -20% +} + +.charsheet input.sheet-is-npc:checked + span.sheet-is-npc-tab { + background: #93537c; + color: white; + border-radius: 4px; +} + +.charsheet input.sheet-is-npc:checked + span.sheet-is-npc-tab::before { + content: "NPC Sheet" +} + + /* ROLL BUTTONS */ .charsheet button[type="action"], .charsheet button[type="roll"] { @@ -336,7 +384,7 @@ color: #ccc; } -.charsheet .header-details-content { +.charsheet .sheet-section-pc .header-details-content { display: grid; grid-template-areas: "name spiritcore experience" @@ -562,11 +610,11 @@ width: 450px; } .charsheet .inventory-left-column{ - width: 450px; + width: 400px; } .charsheet .inventory-right-column { - width: 350px; + width: 400px; } .charsheet .skills-left-column{ width: 400px; @@ -680,7 +728,8 @@ line-height: 0.5; } .sheet-darkmode .charsheet .attribute-container .label, -.sheet-darkmode .charsheet .attribute-container2 .label { +.sheet-darkmode .charsheet .attribute-container2 .label, +.sheet-darkmode .charsheet .attribute-container3 .label { color: #000000; } .charsheet .attribute-container .value { @@ -713,9 +762,46 @@ cursor: default; } .sheet-darkmode .charsheet .attribute-container .value input, -.sheet-darkmode .charsheet .attribute-container2 .value input { +.sheet-darkmode .charsheet .attribute-container2 .value input, +.sheet-darkmode .charsheet .attribute-container3 .value input { color: #0f0f0f; } + +.charsheet .attribute-container3 { + flex-grow: 1; + display: flex; + flex-direction: column-reverse; + align-items: center; + justify-content: start; + border-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/refs/heads/master/LyrianChronicles/Assets/AttibuteVal.png") + 50 50 50 50 fill stretch; + border-style: solid; + border-width: 8px 10px; + box-sizing: border-box; + width: 80px; + margin: 0 6px; +} +.charsheet .attribute-container3 .label { + font-size: 12px; + text-transform: uppercase; + font-weight: bold; + text-align: center; + justify-content: start; + line-height: 0.5; + color: #8c8c8c; +} +.charsheet .attribute-container3 .value input { + border: 0; + background: transparent; + width: 100%; + height: 20px; + text-align: center; + font-size: 18px; + font-weight: bold; + padding: 0; + color: #505050; + cursor: default; +} /* ATTRIBUTE END */ /* DERIVED ATTRIBUTES START*/ @@ -1068,7 +1154,8 @@ flex-direction: column; width: 100%; } -.charsheet .table-container input[type="checkbox"]:checked + .row-container { +.charsheet .table-container input[type="checkbox"]:checked + .row-container, +.charsheet .npc-sheet-content .row-container { display: flex; } .charsheet .table-container .table-row{ @@ -1175,6 +1262,7 @@ width: 13px; margin-left: 0px; } +.sheet-darkmode .charsheet .npc-icon, .charsheet .table-container .table-row .actions .item span { display: flex; width: 20px; @@ -1190,24 +1278,29 @@ cursor: pointer; margin-top: 0px; } +.sheet-darkmode .charsheet .npc-icon, .sheet-darkmode .charsheet .table-container .table-row .actions .item span { color: #272626; } .charsheet .table-container .table-row .actions .item.thin span { width: 13px; } +.charsheet input:hover + .npc-icon, .charsheet .table-container .table-row .actions .item input:hover + span { border-color: #b61037; color: #b61037; } +.sheet-darkmode .charsheet input:hover + .npc-icon, .sheet-darkmode .charsheet .table-container .table-row .actions .item input:hover + span { border-color: #49efc8; color: #49efc8; } +.charsheet input:active + .npc-icon, .charsheet .table-container .table-row .actions .item input:active + span { border-color: #ff0000; color: #ff0000; } +.sheet-darkmode .charsheet input:active + .npc-icon, .sheet-darkmode .charsheet .table-container .table-row .actions .item input:active + span { border-color: #0ff; color: #0ff; @@ -2182,10 +2275,13 @@ height: 100%; } .charsheet .table-container .headers-container .header2.name6 { - flex: 10; + flex: 8; text-align: left; padding-left: 5px; } +.charsheet .table-container .headers-container .header2.amount6 { + flex: 2; +} .charsheet .table-container .headers-container .header2.burden6 { flex: 2; } @@ -2198,12 +2294,35 @@ .charsheet .table-container .table-row .name6{ font-size: 10px; - flex: 10; + flex: 8; text-align: left; padding-left: 5px; font-weight: bold; cursor: default; } +.charsheet .table-container .table-row .amount6 { + flex: 2; +} +.charsheet .table-container .table-row .amount6 input{ + margin-bottom: 0; + border-left: 0; + border-right: 0; + border-top: 0; + border-bottom: 0; + border-radius: 0; + height: 15px; + padding: 0; + width: 100%; + border-color: #cccccc; + background-color: #f0f0f0; + text-align: center; + font-size: 12px; +} +.sheet-darkmode .charsheet .table-container .table-row .amount6 input{ + color: #131313; + border-color: #393939; + background-color: #bcbcbc; +} .charsheet .table-container .table-row .burden6 { flex: 2; text-align: center; @@ -2589,7 +2708,7 @@ display: flex; } -.charsheet .table-container .form-container.ability-grid{ +.charsheet .table-container .form-container.artability-grid{ grid-template-areas: "dropdown dropdown dropdown dropdown" "rolls rolls rolls rolls" @@ -2597,7 +2716,7 @@ grid-template-columns: 1fr 1fr 1fr 1fr; gap:10px; } -.charsheet .table-container .custom-enabler:checked ~ .ability-grid { +.charsheet .table-container .custom-enabler:checked ~ .artability-grid { grid-template-areas: "dropdown dropdown dropdown dropdown" "name name name name" @@ -2804,4 +2923,261 @@ .sheet-rolltemplate-default td{ line-height:2; } -/* DEFAULT TEMPLATE STYLES END */ \ No newline at end of file +/* DEFAULT TEMPLATE STYLES END */ + +/* NPC STUFF START */ +.charsheet .sheet-section-npc-header { + display: block; + position: relative; +} + +.charsheet .sheet-section-npc .header-details-content { + display: grid; + grid-template-areas: + "name rank type danger size"; + grid-template-columns: 3fr 1fr 2fr 1fr 1fr; + gap: 10px; + row-gap: 0px; + height: 100%; + width: 100%; + margin-top: 10px; +} + +.charsheet .header-details-content .rank { + grid-area: rank; +} + +.charsheet .header-details-content .type { + grid-area: type; +} + +.charsheet .header-details-content .danger { + grid-area: danger; +} + +.charsheet .header-details-content .size { + grid-area: size; +} +.charsheet .header-details-content label { + margin-bottom: 0px; +} + +.charsheet .npc-sheet-content { + padding-top: 8px; + width: 100%; + box-sizing: border-box; + gap: 10px; +} + +.charsheet .npc-left-column { + width: 300px; +} +.charsheet .npc-right-column { + width: calc(100% - 300px); +} + +.charsheet .sheet-section-npc .section-container { + border-width: 12px; +} + +.charsheet .npc-main-stats { + display: grid; + grid-template-areas: + "focus power" + "agility toughness"; + grid-template-columns: 1fr 1fr; +} +.charsheet .sheet-section-npc .derived-stats { + grid-template-areas: + "accuracy damage" + "evasion dodge" + "guard blocking" + "save-bonus potency" + "initiative speed"; +} +.charsheet .derived-stats .accuracy { + grid-area: accuracy; +} +.charsheet .derived-stats .damage { + grid-area: damage; +} + +.charsheet .npc-sub-stats { + display: flex; +} + +.charsheet .sheet-section-npc .attribute-container2 .label { + width: 128px; + margin-left: -33px; +} + +.charsheet .sheet-section-npc .value input { + cursor: text !important; +} + +.charsheet .npc-button-container { + position: relative; +} +.charsheet .npc-button, +.charsheet .npc-icon { + position: absolute; + width: 15px; + height: 15px; + top: -10px; + right: -12px; +} +.charsheet .npc-button { + cursor: pointer; + opacity: 0; + z-index: 9999; +} +.charsheet .npc-icon { + font-size: 15px !important; +} + +.charsheet .npc-autocalculate, +.charsheet .npc-autocalculate + span { + position: absolute; + width: 60px; + height: 16px !important; + top: -18px; + right: 12px; +} +.charsheet .npc-autocalculate { + cursor: pointer; + opacity: 0; + z-index: 9999; +} +.charsheet .npc-autocalculate + span { + font-size: 9px; + background: #333; + color: #eee; + border-radius: 4px; + text-align: center; + font-weight: bold; +} +.charsheet .npc-autocalculate:checked + span { + background: #0a0; + color: #fff; +} +.charsheet .npc-autocalculate + span::before { + text-transform: uppercase; + content: "Manual"; +} +.charsheet .npc-autocalculate:checked + span::before { + content: "Autocalc"; +} + +.charsheet .sheet-section-npc .custom { + display: flex; +} +.charsheet .sheet-section-npc .table-container input:checked + .details-container.ability { + display: flex; +} + +.charsheet .sheet-section-npc .table-container .npcaction-grid { + grid-template-areas: + "name name name name" + "keywords keywords range costs" + "requirements requirements requirements requirements" + "description description description description" + "rolls rolls rolls rolls" + "close close close close"; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap:10px; +} + +.charsheet .sheet-section-npc .table-container .npcability-grid { + grid-template-areas: + "name name name name" + "description description description description" + "close close close close"; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap:10px; +} + +/* NPC STUFF END */ + +/* FULL VITALS START */ +.charsheet .partial-vitals-block, +.charsheet .full-vitals-block { + display: none; +} +.charsheet .full-vitals-toggle:not(:checked) ~ .partial-vitals-block { + display: flex; + flex-direction: row; + gap: 5px; +} +.charsheet .full-vitals-toggle:checked ~ .full-vitals-block { + display: flex; + flex-direction: column; + gap: 5px; +} +/* FULL VITALS END */ + +/* NPC TABLES START */ +.charsheet .table-container .npc-skill-name { + flex: 6; + text-align: left !important; + padding-left: 5px; +} +.charsheet .table-container .npc-skill-name select { + text-align: left; +} +.charsheet .table-container .npc-skill-expertise { + flex: 5; +} + +.charsheet .table-container .npc-action-name, +.charsheet .table-container .npc-ability-name { + flex: 8; + text-align: left !important; + padding-left: 5px; +} + +.charsheet .table-container .npc-skill-total, +.charsheet .table-container .npc-skill-stat, +.charsheet .table-container .npc-skill-base, +.charsheet .table-container .npc-skill-actions, +.charsheet .table-container .npc-action-cost, +.charsheet .table-container .npc-action-range { + text-align: center; + flex: 2; +} + +.charsheet .table-container .npc-action-actions, +.charsheet .table-container .npc-ability-actions { + flex: 2; +} + +.charsheet .table-container .table-row .npc-skill-name, +.charsheet .table-container .table-row .npc-action-name, +.charsheet .table-container .table-row .npc-ability-name { + font-size: 10px; + font-weight: bold; + cursor: default; +} +.charsheet .table-container .table-row .npc-skill-expertise input, +.charsheet .table-container .table-row .npc-skill-total input, +.charsheet .table-container .table-row .npc-skill-stat input, +.charsheet .table-container .table-row .npc-skill-base input, +.charsheet .table-container .table-row .npc-action-range input, +.charsheet .table-container .table-row .npc-action-cost input { + border: 0; + font-size: 11px; + background: transparent; + width: 100% !important; + text-align: center; + padding: 0; + color: black; +} +.charsheet .table-container .table-row .npc-skill-expertise, +.charsheet .table-container .table-row .npc-skill-total, +.charsheet .table-container .table-row .npc-skill-stat, +.charsheet .table-container .table-row .npc-skill-base, +.charsheet .table-container .table-row .npc-action-range input, +.charsheet .table-container .table-row .npc-action-cost input { + text-align: center; + cursor: default; +} +/* NPC TABLES END/ diff --git a/LyrianChronicles/LyrianChronicles.html b/LyrianChronicles/LyrianChronicles.html index 76da83ab68..20e664f994 100644 --- a/LyrianChronicles/LyrianChronicles.html +++ b/LyrianChronicles/LyrianChronicles.html @@ -1,4 +1,5 @@
+
@@ -2195,8 +2196,8 @@
- - + +
@@ -2315,7 +2316,8 @@
@@ -2358,7 +2360,8 @@
@@ -2427,7 +2430,8 @@ @@ -2513,7 +2517,8 @@
@@ -2675,6 +2680,7 @@
Misc Inventory
Name
+
Amount
Burden
Status
@@ -2698,7 +2704,11 @@
@@ -2718,13 +2728,20 @@
+
+ +
@@ -3640,7 +3657,7 @@ -
+
@@ -3872,7 +3889,7 @@
- Setup & Tunning + Setup & Tuning
@@ -4200,14 +4217,14 @@ - - - - - - + + + + + + - + @@ -13385,710 +13402,8 @@ }, }; - const abilityMacroMap = { - "secret_art:_beaver_timber_fang": "missing_macro", - disarming_attack: "missing_macro", - gods_blessing: "missing_macro", - just_a_hug: "missing_macro", - point_of_death: "missing_macro", - refreshing_stream: "missing_macro", - "rider_&_mount_as_one": "missing_macro", - scent_of_blood: "missing_macro", - share_armor: "missing_macro", - reinforce_armor: "missing_macro", - spore_symbiote: "missing_macro", - transmute_weapon: "missing_macro", - vampiric_domination: "no_macro_needed", - arcane_explosion: "missing_macro", - cat_form: "missing_macro", - cavalry_charge: "missing_macro", - "secret_art:_ambush_shot": "missing_macro", - snap_shot_ii: "missing_macro", - soul_strike: "missing_macro", - "take_cover!": "missing_macro", - wild_thrusts: "missing_macro", - chain_lightning: "missing_macro", - decipher_magic: "missing_macro", - foragers_eye: "missing_macro", - full_power_swing: "missing_macro", - graceful_landing: "missing_macro", - ki_blast: "&{template:default} {{name=@{name} ❖ Heavy Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[4d6+2*@{power}]]}}", - tiny_pixie: "missing_macro", - "secret_art:_dynamic_duo": "missing_macro", - wind_infusion: "missing_macro", - bolting: - "&{template:default} {{name=@{name} ❖ Bolting}} {{ Heavy Attack=[[1d20+@{focus}]]}} {{ Damage= [[4d6+2*@{power}]]}} {{ Max Damage= [[4*6+2*@{power}]]}} {{ Static= [[3*@{power}]]}}", - call_of_the_grave: "missing_macro", - death_perception: "missing_macro", - evil_eye_of_fear: "missing_macro", - ignite: "missing_macro", - shared_defense: "missing_macro", - faerie_flash: "missing_macro", - flash_bomb: "missing_macro", - mighty_leap: "missing_macro", - secret_talisman: "no_macro_needed", - soulreap: "missing_macro", - shieldcrusher: "missing_macro", - steadfast_earth_stance: "missing_macro", - aqua_drill: "missing_macro", - destroying_angel: - "&{template:default} {{name=@{name} ❖ Destroying Angel}} {{ Precise Attack=[[1d20+2*@{focus}]]}} {{ Damage= [[2d4+@{power}]]}} {{ Max Damage= [[2*4+@{power}]]}} {{ Heal= [[5+2*@{power}]]}}", - haste: "missing_macro", - stalks_of_comparison: "missing_macro", - "counter-potion": "missing_macro", - "secret_art:_7_points_of_death": "missing_macro", - "secret_art:_rewind": "missing_macro", - status_assessment_iii: "missing_macro", - terracing: "missing_macro", - wind_scatter: "missing_macro", - wither_the_stalk: "missing_macro", - "darkvision_(passive)": "missing_macro", - discipline: "missing_macro", - half_restore: "missing_macro", - "secret_art:_whiteout": "missing_macro", - sheet_ice: "missing_macro", - vampire_shapeshift: "no_macro_needed", - evasive_maneuver: "missing_macro", - explosive_ward: "missing_macro", - hopping_zombie: "missing_macro", - multishot: "missing_macro", - "store/consume_item": "missing_macro", - threatening_aura: "missing_macro", - battle_cast: "missing_macro", - bone_armor: "missing_macro", - "secret_art:_shatter": - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - "secret_art:_ultimate_spell": "missing_macro", - two_sword_crush: "&{template:default} {{name=@{name} ❖ Two Sword Crush @{main_weapon_name}}} {{ Light Damage= [[2d4+@{power}+@{main_weapon_power}]]}}", - wind_wall: "missing_macro", - assign_decoy: "no_macro_needed", - devils_curse: "no_macro_needed", - divine_storm: "missing_macro", - hardening_fist: "missing_macro", - into_the_fray: "missing_macro", - purifying_shields: "missing_macro", - repair_weapon: "missing_macro", - scarecrows_gaze: "missing_macro", - blue_tide: "missing_macro", - channel_eidolon: "no_macro_needed", - flyby_attack: "missing_macro", - "hit_&_run": - "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}", - holy_light: "missing_macro", - leashing: "missing_macro", - "lu_-_dense_mana": "missing_macro", - reverse_polarity: "missing_macro", - paragon_of_virtue: "missing_macro", - plow_the_fields: "missing_macro", - psychometry: "missing_macro", - weighing_the_heart: "missing_macro", - arcane_barrier: "missing_macro", - blood_shield: "missing_macro", - extra_arms: "missing_macro", - "secret_art:_jade_skin": "&{template:default} {{name=@{name} ❖ Secret Art: Jade Skin}} {{ Block= @{total_block}}}", - "secret_art:_ride_of_the_valkyrie": "missing_macro", - canter: "missing_macro", - horse_whistle: "missing_macro", - "ni_-_emergency_maneuvers": "missing_macro", - "secret_art:_dragonslaying_jump": "missing_macro", - stoneskin: "missing_macro", - absorb_ice: "missing_macro", - bloodbolt: "missing_macro", - create_talisman: "missing_macro", - darkness: "missing_macro", - hidden_wards: "missing_macro", - infuse_potion: "missing_macro", - line_of_death: "missing_macro", - "secret_art:_entropic_magic_pulse": "missing_macro", - riposte: "missing_macro", - devils_blow: "missing_macro", - fast_runner: "missing_macro", - forged_knowledge: "missing_macro", - icicle_nail: "missing_macro", - kawarimi_no_jutsu: "missing_macro", - persistent_spell: "missing_macro", - strike_of_still_water: "missing_macro", - divine_might: "missing_macro", - eternal_vigil: "missing_macro", - flying_kick: "missing_macro", - incendiary_ray: "missing_macro", - ki_burst: "missing_macro", - "secret_art:_shield_wall": "missing_macro", - vital_drive: "missing_macro", - abjurers_blast: "missing_macro", - adaptive_defense: "missing_macro", - quick_revive: "missing_macro", - spiritual_sync: "missing_macro", - throw_potion: "missing_macro", - bear_trap: "missing_macro", - crescent_sweep: "missing_macro", - gleaming_cut: "missing_macro", - holy_declaration: "&{template:default} {{name=@{name} ❖ Holy Declaration}} {{ Block= @{total_block}}}", - momentum: "missing_macro", - "secret_art:_unholy_strength": "no_macro_needed", - true_death: "missing_macro", - armor_up: "missing_macro", - "elemental_mastery:_dark": "missing_macro", - "faerie_light_eyes:__empty": "missing_macro", - fissure: "missing_macro", - sable_grace: "missing_macro", - "secret_art:_earthquake": "missing_macro", - travelers_end: "missing_macro", - blast_away: "missing_macro", - "d_-_mana_burst": "missing_macro", - evil_eye_of_lethargy: "missing_macro", - holy_shield: "missing_macro", - mordschlag: "missing_macro", - "slide_&_shoot": "missing_macro", - stolen_skill: "missing_macro", - strengthening_the_bond: "missing_macro", - cavalry_heal: "missing_macro", - evil_eye_of_death: "no_macro_needed", - focused_detonation: "missing_macro", - gravitational_ki: "missing_macro", - summon_lesser_eidolon: "missing_macro", - tempestuous_fire_stance: "missing_macro", - track: "missing_macro", - zhen_jiao: "missing_macro", - antennae: "missing_macro", - eternal_mirane_cage: "missing_macro", - heavenfall_descent: "missing_macro", - hover: "missing_macro", - magic_missile: "missing_macro", - running_shot: "missing_macro", - schadenfreude: "missing_macro", - "secret_art:_gae_bolg": "missing_macro", - "faerie_light_eyes:_golden_illusion": "missing_macro", - flame_wall: "missing_macro", - "flash_star_style:_thunderbolt_slash": "missing_macro", - provoke_ii: "missing_macro", - pull_the_weeds: "no_macro_needed", - redirected_force: "no_macro_needed", - statue_form: "missing_macro", - tireless_undead: "missing_macro", - blood_drain: "missing_macro", - bullet_magnet: "missing_macro", - empty_body: "missing_macro", - overclock: "missing_macro", - quick_artifice_reload: "missing_macro", - repair_armor: "missing_macro", - "secret_art:_whirling_death": "missing_macro", - tailwind: "no_macro_needed", - disrupt_ki: "missing_macro", - double_punch: "missing_macro", - "secret_art:_overcharge": "missing_macro", - "rescue_&_drop": "missing_macro", - "anti-magic_shield": "missing_macro", - craft_pemmican: "missing_macro", - lifebeat_sense: "missing_macro", - movement_burst: "missing_macro", - power_jump: "missing_macro", - "secret_art:_summon_eidolon": "missing_macro", - summon_animal: "missing_macro", - fight_or_flight: "missing_macro", - glittershards: "no_macro_needed", - imbue_weapon: "missing_macro", - mud_wall: "missing_macro", - soul_absorption: "missing_macro", - transmute_effective_implement: "missing_macro", - vampire_bite: "missing_macro", - "ar_-_minds_eye": "missing_macro", - cleave: "missing_macro", - consistent_shot: "missing_macro", - double_palm_strike: "missing_macro", - duelist_blow: "missing_macro", - flash_cut: - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - human_adaptability: "missing_macro", - scry: "missing_macro", - crashing_foam_wave: "missing_macro", - "expertise_study_(armorsmithing)": "missing_macro", - illuminating_flash: "missing_macro", - instinct: "missing_macro", - shield_burst: "missing_macro", - store_time: "missing_macro", - swallow_acrobatics: "no_macro_needed", - bunshin_tai_no_jutsu: "missing_macro", - "faerie_light_eyes:_time_dilation": "missing_macro", - glide: "missing_macro", - own_mount: "missing_macro", - panda_roll: "missing_macro", - wind_blast: "missing_macro", - deus_vult: "missing_macro", - escape_artist: "missing_macro", - jump_back: "missing_macro", - last_rites: "missing_macro", - "secret_art:_galaxy_stop": "missing_macro", - "secret_art:_lifesaver": "missing_macro", - trample: "missing_macro", - feeding_frenzy: "missing_macro", - forged_knowledge_ii: "missing_macro", - ninja_run: "missing_macro", - oil_slick: "missing_macro", - tackle: "missing_macro", - warm_together: "missing_macro", - conduit: "no_macro_needed", - mana_eater: "missing_macro", - mana_sight: "missing_macro", - "secret_art:_gate_of_fate": "missing_macro", - shadow_cloak: "missing_macro", - "stratagem:_lightning": "missing_macro", - torture_techniques: "missing_macro", - dark_healing: - "&{template:default} {{name=@{name} ❖ Dark Healing}} {{?{Light or Heavy? |Light, Light Damage= [[2d4+@{power}]] |Heavy, Heavy Damage= [[4d6+2*@{power}]]}}}", - deconstruction: "missing_macro", - horse_step_acceleration: "missing_macro", - malevolent_phantasm: "missing_macro", - "power_word:_guardian_shield": "missing_macro", - "secret_art:_divine_shield": "missing_macro", - "secret_art:_spirit_stigma": "missing_macro", - "wind-up_punch": "missing_macro", - concealed_shot: "missing_macro", - draw_elements: "missing_macro", - hunting_wolf: "missing_macro", - stolen_power: - "&{template:default} {{name=@{name} ❖ Stolen Power}} {{?{Light , Heavy, or Precise? |Light, Light Attack: [[1d20+@{focus}]] Damage Roll: [[2d4]] |Heavy, Heavy Attack: [[1d20+@{focus}]] Damage Roll: [[4d6]] |Precise, Precise Attack: [[1d20+2*@{focus}]] Damage: [[2d4+]]}}}", - attune_eidolon: "missing_macro", - flight: "missing_macro", - frost_driver: "missing_macro", - pathfinder: "missing_macro", - "secret_art:_bloody_ritual": "missing_macro", - aftershock: "missing_macro", - fireball_barrage: "missing_macro", - "secret_art:_assassinate": "missing_macro", - "secret_art:_nightcaller": "missing_macro", - craft_artificers_glove: "missing_macro", - demonblood_regeneration: "missing_macro", - leg_sweep: "missing_macro", - perfect_shot: "missing_macro", - "secret_art:_life_sacrifice": "missing_macro", - spore_burst: "missing_macro", - wire_sweep: "missing_macro", - accelerating_strike: "missing_macro", - cant_escape_death: "missing_macro", - inspiring_song: "missing_macro", - natures_grasp: "missing_macro", - dark_barrier: "&{template:default} {{name=@{name} ❖ Dark Barrier}} {{ Temp HP= [[2*[[2d4+@{power}]]]]}} {{Damage= $[[0]]}}", - misdirected_blow: "missing_macro", - parry: "missing_macro", - preparedness: "missing_macro", - spirit_jump: "missing_macro", - vanish: "missing_macro", - victory_or_death: "missing_macro", - prehensile_tail: "missing_macro", - resheathe: "missing_macro", - anvil_tactics: "missing_macro", - detailed_finish: "missing_macro", - transmuter_tricks: "missing_macro", - verdant_instinct: "missing_macro", - "wind-empowered_aim": "missing_macro", - quickdraw: "missing_macro", - ambush_trapper: "no_macro_needed", - consume_enemy: "missing_macro", - divine_smite_ii: "missing_macro", - "flash_star_style_secret_art:_twin_nova_pursuit": "missing_macro", - horse_body: "missing_macro", - penetrating_shot: "missing_macro", - static_discharge: "missing_macro", - fireball_ii: "missing_macro", - grand_theft_horse: "missing_macro", - lifesense: "missing_macro", - point_blank_shot: "missing_macro", - thunderstorm: "missing_macro", - wind_blast_ii: "missing_macro", - feigned_retreat: "missing_macro", - long_toss: "missing_macro", - presence_concealment: "missing_macro", - true_divine_release: "missing_macro", - "secret_art:_walking_church": "missing_macro", - "stab_&_throw": "missing_macro", - cure_touch: "missing_macro", - divine_smite: "missing_macro", - draw_elements_ii: "missing_macro", - fast_hands: "missing_macro", - pepper_spray: "missing_macro", - flame_infusion: "no_macro_needed", - wall_formation: "missing_macro", - boundless_wind_stance: "missing_macro", - "secret_art:_meteor": "missing_macro", - weapon_maintenance: "missing_macro", - blast_wave: "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}", - "single-minded_fury": "missing_macro", - spirit_circuit_crash: "missing_macro", - aerial_crashdown: "missing_macro", - cave_raider: "missing_macro", - divine_guard: "missing_macro", - headless: "missing_macro", - memory_of_the_grove: "missing_macro", - radiant_halo: "&{template:default} {{name=@{name} ❖ Radiant Halo}} {{ Heal= [[11+2*@{power}]]}}", - spirited_bravado: "missing_macro", - tap_cracker: "missing_macro", - chiburi_noto_ii: "missing_macro", - doctor_jekyll: "missing_macro", - thermal_vision: "missing_macro", - two_point_strike: "missing_macro", - vivisect: "missing_macro", - shadow_step: "missing_macro", - siphon_material: "missing_macro", - spellsteal: "missing_macro", - status_assessment_ii: "missing_macro", - "wi_-_presence_concealment": "missing_macro", - excavation_crash: "missing_macro", - regrowing_limbs: "missing_macro", - "secret_art:_chase_the_horizon": "missing_macro", - "secret_art:_seventeen_dissection": "missing_macro", - shelter: "missing_macro", - unholy_pact: "missing_macro", - cut_away: "&{template:default} {{name=@{name} ❖ Cut Away}} {{ Precise Attack= [[1d20+2*@{focus}]]}}", - justice_blade: - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - "kiri-tsuke": "missing_macro", - mark_of_justice: "missing_macro", - "secret_art:_override": "&{template:default} {{name=@{name} ❖ Heavy Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[4d6+2*@{power}]]}}", - kibaku_fuda_shuriken: "missing_macro", - knockdown_swing: - "&{template:default} {{name=@{name} ❖ Knockdown Swing @{main_weapon_name}}} {{ Light Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{ Damage= [[2d4+@{power}+@{main_weapon_power}]]}} {{ Max Damage= [[2*4+@{power}+@{main_weapon_power}]]}} {{ Power= [[@{power}]]}}", - reckless_strike: "missing_macro", - shatter_time: "missing_macro", - corpse_explosion: "missing_macro", - dullahans_mount: "missing_macro", - explosive_advance: "missing_macro", - last_stand: "missing_macro", - "secret_art:_transmute_proto_armatae": "missing_macro", - separate_wheat_from_chaff: "missing_macro", - stable_foundation: "missing_macro", - undying_justice: "missing_macro", - at_your_side: "missing_macro", - frost_coffin: "missing_macro", - mounted_casting: "no_macro_needed", - "secret_art:_the_grand_theater": "missing_macro", - volley: - "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}", - consume_lightning: "missing_macro", - forest_walker: "missing_macro", - repair_artifice: "no_macro_needed", - spear_charge: "missing_macro", - temporary_protection: "missing_macro", - "flash_star_style:_starlight_crescent_reversal": "missing_macro", - four_point_strike: "missing_macro", - plaguebringer: "missing_macro", - "power_word:_reinforce": "missing_macro", - dragonfire_dive: "missing_macro", - "expertise_study_(carpentry)": "missing_macro", - lengthened_incantation: - "&{template:default} {{name=@{name} ❖ Lengthened Incantation}} {{?{2AP, 4AP, 6AP, or 8AP? |2AP, Damage= [[2d4+@{power}]] |4AP, Damage= [[4d4+2*@{power}]] |6AP, Damage= [[6d4+3*@{power}]] |8AP, Damage= [[8d4+4*@{power}]]}}}", - lucid_sleep: "missing_macro", - rage_stance: "missing_macro", - "secret_art:_tsubame_gaeshi": "missing_macro", - aquatic_fae: "missing_macro", - cloud_piercing_claw: "missing_macro", - despair_of_isolation: "missing_macro", - iai_strike: "missing_macro", - killshot: "missing_macro", - saprophytic_bolt: "missing_macro", - spiked_armor: "missing_macro", - fading_counter: "missing_macro", - "faerie_light_eyes:_hold_person": "missing_macro", - flame_shield: "missing_macro", - shatter: "missing_macro", - steal_time: "missing_macro", - flowing_kick: "missing_macro", - sacrament: "missing_macro", - sense_magic: "missing_macro", - snatch: "missing_macro", - dimensional_armory_expansion: "missing_macro", - kage_shuriken_no_jutsu: "missing_macro", - lay_on_hands: "missing_macro", - "no_getting_past!": "missing_macro", - "power_word:_shield": "missing_macro", - scurry_away: "missing_macro", - "secret_art:_endless_waltz": "missing_macro", - counter_stance: "missing_macro", - disarming_shot: "missing_macro", - forward_momentum: "missing_macro", - "secret_art:_guiding_shot": - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - swap: "no_macro_needed", - ki_blast_ii: "missing_macro", - mana_razor: "missing_macro", - presence_of_mind: "missing_macro", - "secret_art:_lightning_field": "missing_macro", - steal_heart: "missing_macro", - chilling_cold: "missing_macro", - double_elements: "missing_macro", - hide_in_shadows: "missing_macro", - increased_reach: "missing_macro", - raise_undead: "missing_macro", - blood_frenzy: "no_macro_needed", - mind_connection: "missing_macro", - mountain_slayer: "missing_macro", - "expertise_study_(artificing)": "missing_macro", - amphibious: "missing_macro", - break_away: "missing_macro", - dispel_magic: "missing_macro", - inspired_finish: "missing_macro", - poison_spore: "missing_macro", - cloak_of_bats: "missing_macro", - dragon_breaks_the_ranks: "missing_macro", - fly: "missing_macro", - "secret_art:_fan_the_hammer": "missing_macro", - "secret_art:_titan_blade": "missing_macro", - unerring_aim: "no_macro_needed", - lights_care: "missing_macro", - ave_maría: "missing_macro", - destroy_ground: "missing_macro", - "faerie_eyes:_calling": "missing_macro", - glacial_wall: "&{template:default} {{name=@{name} ❖ Glacial Wall}} {{ Wall HP= [[20+@{focus}]]}}", - hyphal_force: "missing_macro", - jump: "missing_macro", - "lir_-_predict": "missing_macro", - "miracle:_sanctuary": "missing_macro", - eagle_hunt: "missing_macro", - quickdraw_alchemy: "missing_macro", - seismic_shove: "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}", - serene_water_stance: "missing_macro", - snap_shot: "missing_macro", - stygian_screen: "missing_macro", - trailblazer: "missing_macro", - transfusion: "missing_macro", - cut_magic: "missing_macro", - "expertise_study_(blacksmithing)": "missing_macro", - transmute_wall: "missing_macro", - wind_shield: "missing_macro", - chair_grab: "missing_macro", - consume_fire: "missing_macro", - lunge: "missing_macro", - prediction: "missing_macro", - wind_buffet: "missing_macro", - zap: "missing_macro", - crippling_attack: "missing_macro", - headwind: "missing_macro", - light_work: "missing_macro", - start_dash: "missing_macro", - take_it_easy: "missing_macro", - vengeance: "missing_macro", - white_thunder: "missing_macro", - advanced_artificing: "missing_macro", - dark_bolt: "missing_macro", - divining_petalfall: "missing_macro", - duplicate: "missing_macro", - enduring_warmth: "missing_macro", - hug_tight: "&{template:default} {{name=@{name} ❖ Hug Tight}} {{ Light Damage= [[2d4+@{power}]]}}", - panda_stance: "missing_macro", - phoenix_tears: "missing_macro", - pack_tactics: "missing_macro", - "secret_art:_bestial_wrath": "missing_macro", - "secret_art:_bladestorm": "missing_macro", - skydive: "missing_macro", - slam: "missing_macro", - speak_with_dead: "missing_macro", - alchemical_detonation: "missing_macro", - clearcasting: "missing_macro", - precise_thrust: "missing_macro", - redistribute: "missing_macro", - steel_aura: "missing_macro", - anathema: "missing_macro", - death_mark: "missing_macro", - downburst_ii: "missing_macro", - forked_lightning: "missing_macro", - mining_expertise: "missing_macro", - "none_-_instinct": "missing_macro", - rushing_knee_drop: "missing_macro", - vital_drain: "missing_macro", - blinding_dust: "missing_macro", - crucified_by_radiance: "missing_macro", - send_to_armory: "missing_macro", - status_assessment: "missing_macro", - aimed_shot: "missing_macro", - lightning_weapon: "missing_macro", - smash_through_the_pain: "missing_macro", - unconventional_weapon: "missing_macro", - arcane_buster: "missing_macro", - fast_dimensional_equip: "missing_macro", - loyalty: "missing_macro", - quick_getaway: "no_macro_needed", - butterfly_effect: "missing_macro", - divine_providence: "missing_macro", - four_field_system: "missing_macro", - suckerpunch: "missing_macro", - warning_shot: "missing_macro", - arcane_barrier_ii: "&{template:default} {{name=@{name} ❖ Arcane Barrier II}} {{ Barrier HP= [[15+@{focus}]]}}", - attacks_from_the_past: "missing_macro", - bottle_smash: "missing_macro", - faerie_flash_ii: "missing_macro", - receive_oracle: "missing_macro", - foretell: "&{template:default} {{name=@{name} ❖ Foretell}} {{ Foretold Roll= [[1d20]]}}", - "gale-wind_aura": "missing_macro", - hammer_and_nail: - "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}", - sealing_talisman: "missing_macro", - "secret_art:_perfect_repetition": "missing_macro", - static_overload: "missing_macro", - tag_rotation: "missing_macro", - arcane_pull: "no_macro_needed", - aura_of_resistance: "&{template:default} {{name=@{name} ❖ Aura of Resistance}} {{ Toughness= @{toughness}}}", - darkvision: "missing_macro", - emergency_recall: "no_macro_needed", - aerial_loop: "missing_macro", - scouting_ahead: "missing_macro", - "secret_art:__revitalize": "missing_macro", - "secret_art:_divine_judgement": "missing_macro", - divine_release: "missing_macro", - elbow_uppercut: - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - guided_aim: "missing_macro", - improvised_defense: "missing_macro", - "secret_art:_life_bet": "missing_macro", - feint: "missing_macro", - "secret_art:_all_of_creation": "missing_macro", - unrelenting_assault: "missing_macro", - angels_embrace: "missing_macro", - crusaders_advance: "missing_macro", - downburst: "missing_macro", - elemental_strike: "missing_macro", - in_the_zone: "missing_macro", - overpower: "missing_macro", - "secret_art:_razor_hurricane": "missing_macro", - amoxicillin: "missing_macro", - shield_the_fallen: "missing_macro", - squadsight: "missing_macro", - tengu_mask: "missing_macro", - cure_touch_ii: "missing_macro", - intercept: "missing_macro", - mist_of_the_vale: "missing_macro", - piercing_stab: "missing_macro", - rappelling_dagger: "missing_macro", - "secret_art:_moving_castle": "no_macro_needed", - "secret_art:_shock_&_awe": "missing_macro", - silentium: "missing_macro", - "anti-shield": "missing_macro", - faithful_shield: "missing_macro", - full_dimensional_equip: "missing_macro", - mystic_eyes_of_life_perception: "missing_macro", - sound_the_retreat: "missing_macro", - thermal_quench: "missing_macro", - bottle_toss: "missing_macro", - counterspell: "missing_macro", - delayed_hit: "missing_macro", - efficient_strike: "missing_macro", - provoke: "missing_macro", - "secret_art:_true_serenity": "missing_macro", - siren_song: "missing_macro", - "un_-_graceful_service": "missing_macro", - nightvision: "missing_macro", - "secret_art:_pyroblast": "missing_macro", - spellstrike: "missing_macro", - chiburi_noto: "missing_macro", - guard_dog: "missing_macro", - alarm_ward: "missing_macro", - execute_heretic: "missing_macro", - hearthlight: "missing_macro", - "power_word:_barrier": "missing_macro", - rescue: "missing_macro", - skillfull_blow: "missing_macro", - uke_nagashi: "missing_macro", - fireball: "missing_macro", - gloom_infusion: "missing_macro", - phantoms_of_the_mist: "missing_macro", - selective_casting: "missing_macro", - spellblades_preparation: "missing_macro", - circle_swing: "missing_macro", - "secret_art:_efficient_spirit_control": "missing_macro", - "x-attack": "missing_macro", - felling_strike: "missing_macro", - cure_water: "missing_macro", - dirge_of_despair: "missing_macro", - drink_to_battle: "no_macro_needed", - harvest_moon: "missing_macro", - hold_the_line: "missing_macro", - knockout_punch: - "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}", - steady_stance: "missing_macro", - riposte_ii: "missing_macro", - double_slam: "missing_macro", - elemental_sweep: "missing_macro", - "secret_art:_mushroomize": "missing_macro", - devastating_strike_iii: - "&{template:default} {{name=@{name} ❖ Devastating Strike III @{main_weapon_name}}} {{?{Light , Heavy, or Precise? |Light, Light Attack: [[1d20+@{focus}+@{main_weapon_focus}]] Damage Roll: [[2d4+@{power}+@{main_weapon_power}]] |Heavy, Heavy Attack: [[1d20+@{focus}+@{main_weapon_focus}]] Damage Roll: [[4d6+2*@{power}+2*@{main_weapon_power}]]}}}", - dualcast: "missing_macro", - gnome_claws: "missing_macro", - hide_in_bush: "missing_macro", - independent_action: "missing_macro", - mage_armor: "no_macro_needed", - power_strike: "missing_macro", - attack_in_detail: "missing_macro", - aura_of_protection: "missing_macro", - countershot: "missing_macro", - holy_orders: "missing_macro", - grindstone_echo: "missing_macro", - mana_shield: "missing_macro", - shade_form: "missing_macro", - trail_mix: "missing_macro", - prone_cover: "missing_macro", - chemical_explosive: "missing_macro", - "elemental_mastery:_fire": "missing_macro", - energy_drain: "missing_macro", - scouts_retreat: "missing_macro", - sweeping_stance: "missing_macro", - cyclone: "&{template:default} {{name=@{name} ❖ Cyclone}} {{ Potency= @{potency}}}", - devastating_strike: "missing_macro", - slime_body: "missing_macro", - tetsuzanko: "missing_macro", - charge: "missing_macro", - cursed_evil_eye: "missing_macro", - earthen_guardian: "&{template:default} {{name=@{name} ❖ Earthen Guardian}} {{ Block= @{total_block}}}", - quick_assist: "missing_macro", - repair_wood_weapon: "missing_macro", - defensive_flexibility: "no_macro_needed", - greater_imbue_weapon: "missing_macro", - backlash: "missing_macro", - break_free: "missing_macro", - "kiri-tsuke_ii": "missing_macro", - shooting_form: "missing_macro", - swift_wind_palm: "missing_macro", - tengu_aura_weapon: "missing_macro", - transmute_terrain: "missing_macro", - vampiric_fascination: "no_macro_needed", - extending_spear: - "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}", - flame_weapon: "missing_macro", - unsummon: "missing_macro", - "vi_-_first_response": "missing_macro", - fan_of_knives: "missing_macro", - perfect_seasoning: "missing_macro", - place_trap: "missing_macro", - "secret_art:_spectrum_blade": "no_macro_needed", - study_target: "missing_macro", - blackbird: "missing_macro", - "flash_star_style:_photon_line": "missing_macro", - point_of_death_ii: "missing_macro", - bring_out_your_dead: "missing_macro", - glacial_bastion: "missing_macro", - pistol_whip: - "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}", - rock_fang: "missing_macro", - vital_drive_ii: "missing_macro", - "order:_retreat": "missing_macro", - purify: "missing_macro", - sneak_attack: "missing_macro", - spider_climb: "missing_macro", - accelerando: "missing_macro", - arcane_power: "missing_macro", - brilliance: "missing_macro", - "elemental_mastery:_lightning": "missing_macro", - fiery_rebirth: "missing_macro", - ricochet: "missing_macro", - seal_cloak: "missing_macro", - "secret_art:_mythical_awakening": "missing_macro", - tremorsense: "missing_macro", - magic_missile_ii: "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}", - slow: "missing_macro", - steady_craft_ii: "missing_macro", - bestial_command: "missing_macro", - power_rock_strike: "missing_macro", - sapping_ward: "missing_macro", - "draw-in": "missing_macro", - }; +const abilityMacroMap = {"fan_of_knives": "missing_macro","half_restore": "missing_macro","hopping_zombie": "missing_macro","mighty_leap": "missing_macro","misdirected_blow": "missing_macro","receive_oracle": "missing_macro","blast_away": "missing_macro","sneak_attack": "missing_macro","two_sword_crush": "&{template:default} {{name=@{name} ❖ Two Sword Crush @{main_weapon_name}}} {{ Light Damage= [[2d4+@{power}+@{main_weapon_power}]]}}","divine_might": "missing_macro","grindstone_echo": "missing_macro","pepper_spray": "missing_macro","secret_art:_summon_eidolon": "missing_macro","steadfast_earth_stance": "missing_macro","swift_wind_palm": "missing_macro","bone_armor": "missing_macro","anvil_tactics": "missing_macro","bullet_magnet": "missing_macro","fast_runner": "missing_macro","full_power_swing": "missing_macro","glide": "missing_macro","tailwind": "no_macro_needed","wind_blast_ii": "missing_macro","fading_counter": "missing_macro","inspired_finish": "missing_macro","lifebeat_sense": "missing_macro","lights_care": "&{template:default} {{name=@{name} ❖ Light's Care }} {{Heal Amount=[[11+(2*@{power})]]}}","nightvision": "no_macro_needed","paragon_of_virtue": "missing_macro","single-minded_fury": "missing_macro","take_cover!": "missing_macro","arcane_pull": "no_macro_needed","intercept": "missing_macro","panda_roll": "missing_macro","clearcasting": "missing_macro","fiery_rebirth": "missing_macro","hidden_wards": "missing_macro","movement_burst": "missing_macro","pistol_whip": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","rappelling_dagger": "missing_macro","static_discharge": "missing_macro","temporary_protection": "missing_macro","amoxicillin": "missing_macro","mana_eater": "missing_macro","scurry_away": "no_macro_needed","stoneskin": "missing_macro","tengu_aura_weapon": "missing_macro","tiny_pixie": "missing_macro","vengeance": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","bear_trap": "missing_macro","faithful_shield": "missing_macro","hold_the_line": "missing_macro","killshot": "missing_macro","mining_expertise": "missing_macro","rage_stance": "missing_macro","secret_art:_divine_judgement": "missing_macro","thunderstorm": "missing_macro","draw-in": "missing_macro","flash_cut": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","purifying_shields": "no_macro_needed","redistribute": "no_macro_needed","secret_art:_bestial_wrath": "missing_macro","bottle_toss": "missing_macro","brilliance": "missing_macro","quick_assist": "missing_macro","rescue": "missing_macro","double_elements": "missing_macro","spear_charge": "missing_macro","tackle": "&{template:default} {{name=@{name} ❖ Heavy Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[4d6+2*@{power}]]}}","transmute_effective_implement": "missing_macro","accelerating_strike": "missing_macro","angels_embrace": "&{template:default} {{name=@{name} ❖ Angel's Embrace }} {{Temp HP=[[5+(2*@{toughness})]]}}","forest_walker": "missing_macro","phantoms_of_the_mist": "missing_macro","quickdraw": "missing_macro","refreshing_stream": "missing_macro","static_overload": "missing_macro","status_assessment": "missing_macro","arcane_barrier": "missing_macro","hardening_fist": "missing_macro","snap_shot": "&{template:default} {{name=@{name} ❖ Snap Shot}} {{ Heavy Attack=[[1d20]]}} {{ Damage= [[4d6+2*@{power}]]}} {{ Max Damage= [[4*6+2*@{power}]]}} ","unsummon": "missing_macro","feint": "missing_macro","harvest_moon": "missing_macro","secret_art:_guiding_shot": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","slow": "missing_macro","undying_justice": "missing_macro","wind_scatter": "missing_macro","arcane_barrier_ii": "&{template:default} {{name=@{name} ❖ Arcane Barrier II}} {{ Barrier HP= [[15+@{focus}]]}} {{Guard= @{total_guard}}}","cave_raider": "missing_macro","charge": "missing_macro","doctor_jekyll": "missing_macro","scry": "missing_macro","secret_art:_bloody_ritual": "missing_macro","snatch": "missing_macro","advanced_artificing": "missing_macro","conduit": "no_macro_needed","gloom_infusion": "missing_macro","justice_blade": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","provoke": "missing_macro","skillfull_blow": "missing_macro","ar_-_minds_eye": "missing_macro","elemental_mastery:_dark": "missing_macro","haste": "missing_macro","secret_art:_earthquake": "missing_macro","statue_form": "missing_macro","arcane_buster": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","arcane_power": "missing_macro","foragers_eye": "missing_macro","guard_dog": "missing_macro","secret_art:_razor_hurricane": "missing_macro","selective_casting": "missing_macro","shieldcrusher": "missing_macro","transmute_terrain": "missing_macro","aimed_shot": "missing_macro","blood_frenzy": "no_macro_needed","four_field_system": "missing_macro","redirected_force": "no_macro_needed","secret_art:_life_bet": "missing_macro","downburst_ii": "missing_macro","gleaming_cut": "missing_macro","sapping_ward": "&{template:default} {{name=@{name} ❖ Sapping Ward}} {{ Potency= @{potency}}}","serene_water_stance": "missing_macro","siren_song": "missing_macro","speak_with_dead": "missing_macro","tag_rotation": "missing_macro","x-attack": "missing_macro","repair_wood_weapon": "missing_macro","break_free": "missing_macro","flight": "no_macro_needed","fly": "missing_macro","forward_momentum": "missing_macro","glacial_wall": "&{template:default} {{name=@{name} ❖ Glacial Wall}} {{ Wall HP= [[20+@{focus}]]}}","glittershards": "no_macro_needed","increased_reach": "missing_macro","ki_burst": "missing_macro","alarm_ward": "missing_macro","jump_back": "missing_macro","psychometry": "missing_macro","riposte": "missing_macro","dark_bolt": "&{template:default} {{name=@{name} ❖ Dark Bolt}} {{ Light Attack=[[1d20+@{focus}]]}} {{ Damage= [[2d4+@{power}]]}} {{ Max Damage= [[2*4+@{power}]]}} {{ True Damage= [[3+@{power}]]}}","extra_arms": "missing_macro","glacial_bastion": "missing_macro","own_mount": "missing_macro","sealing_talisman": "missing_macro","trail_mix": "no_macro_needed","cursed_evil_eye": "missing_macro","despair_of_isolation": "missing_macro","into_the_fray": "missing_macro","memory_of_the_grove": "missing_macro","phoenix_tears": "missing_macro","power_word:_guardian_shield": "&{template:default} {{name=@{name} ❖ Power Word: Guardian Shield }} {{Temp HP=[[11+(2*@{power})]]}}","secret_art:_galaxy_stop": "missing_macro","two_point_strike": "missing_macro","attacks_from_the_past": "missing_macro","cure_touch": "&{template:default} {{name=@{name} ❖ Cure Touch: }} {{Heal Amount=[[11+(2*@{power})]]}}","secret_art:_ambush_shot": "missing_macro","snap_shot_ii": "missing_macro","spirit_circuit_crash": "missing_macro","study_target": "missing_macro","vi_-_first_response": "missing_macro","rider_&_mount_as_one": "missing_macro","felling_strike": "missing_macro","cloud_piercing_claw": "missing_macro","death_mark": "missing_macro","flame_wall": "missing_macro","frost_driver": "missing_macro","hit_&_run": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","holy_shield": "missing_macro","arcane_explosion": "missing_macro","flash_star_style:_starlight_crescent_reversal": "missing_macro","secret_art:_beaver_timber_fang": "missing_macro","spellblades_preparation": "missing_macro","stalks_of_comparison": "missing_macro","wind_infusion": "missing_macro","adaptive_defense": "missing_macro","consume_fire": "missing_macro","death_perception": "missing_macro","faerie_light_eyes:_golden_illusion": "missing_macro","horse_step_acceleration": "missing_macro","malevolent_phantasm": "missing_macro","secret_art:_pyroblast": "missing_macro","secret_art:_ultimate_spell": "missing_macro","consume_enemy": "missing_macro","double_slam": "missing_macro","dualcast": "missing_macro","secret_art:_fan_the_hammer": "missing_macro","share_armor": "&{template:default} {{name=@{name} ❖ Share Armor}} {{ Armor Guard= @{armors_guard}}} {{ Armor Block= @{armors_block}}}","unholy_pact": "missing_macro","holy_orders": "missing_macro","horse_body": "missing_macro","light_work": "missing_macro","secret_art:_all_of_creation": "missing_macro","soul_strike": "missing_macro","stable_foundation": "missing_macro","summon_lesser_eidolon": "missing_macro","consistent_shot": "missing_macro","draw_elements": "missing_macro","eagle_hunt": "no_macro_needed","fissure": "missing_macro","thermal_vision": "missing_macro","dark_barrier": "&{template:default} {{name=@{name} ❖ Dark Barrier}} {{ Temp HP= [[2*[[2d4+@{power}]]]]}} {{Damage= $[[0]]}}","emergency_recall": "no_macro_needed","faerie_flash_ii": "missing_macro","shelter": "missing_macro","track": "missing_macro","detailed_finish": "missing_macro","divine_smite_ii": "&{template:default} {{name=@{name} ❖ Divine Smite II}} {{ Heavy Attack=[[1d20+@{focus}]]}} {{ Damage= [[4d6+2*@{power}]]}} {{ Max Damage= [[4*6+2*@{power}]]}} {{Temp HP= [[5+@{power}]]}}","forged_knowledge_ii": "missing_macro","last_stand": "no_macro_needed","secret_art:_endless_waltz": "missing_macro","silentium": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","wi_-_presence_concealment": "missing_macro","double_palm_strike": "missing_macro","efficient_strike": "no_macro_needed","flash_star_style:_photon_line": "missing_macro","flowing_kick": "missing_macro","un_-_graceful_service": "missing_macro","bolting": "&{template:default} {{name=@{name} ❖ Bolting}} {{ Heavy Attack=[[1d20+@{focus}]]}} {{ Damage= [[4d6+2*@{power}]]}} {{ Max Damage= [[4*6+2*@{power}]]}} {{ Static= [[3*@{power}]]}}","chair_grab": "missing_macro","divine_release": "no_macro_needed","frost_coffin": "missing_macro","gale-wind_aura": "no_macro_needed","seismic_shove": "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}","tap_cracker": "missing_macro","bottle_smash": "missing_macro","sable_grace": "missing_macro","chain_lightning": "missing_macro","craft_artificers_glove": "no_macro_needed","expertise_study_(armorsmithing)": "missing_macro","flash_star_style:_thunderbolt_slash": "missing_macro","gods_blessing": "missing_macro","hammer_and_nail": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","eternal_mirane_cage": "missing_macro","headless": "missing_macro","imbue_weapon": "missing_macro","lir_-_predict": "missing_macro","start_dash": "missing_macro","hide_in_bush": "missing_macro","no_getting_past!": "missing_macro","quick_revive": "missing_macro","steady_craft_ii": "missing_macro","wind-empowered_aim": "missing_macro","earthen_guardian": "&{template:default} {{name=@{name} ❖ Earthen Guardian}} {{ Block= @{total_block}}}","elemental_strike": "missing_macro","faerie_eyes:_calling": "missing_macro","hide_in_shadows": "missing_macro","hunting_wolf": "missing_macro","long_toss": "missing_macro","secret_art:_moving_castle": "no_macro_needed","secret_art:_overcharge": "missing_macro","destroying_angel": "&{template:default} {{name=@{name} ❖ Destroying Angel}} {{ Precise Attack=[[1d20+2*@{focus}]]}} {{ Damage= [[2d4+@{power}]]}} {{ Max Damage= [[2*4+@{power}]]}} {{ Heal= [[5+2*@{power}]]}}","plow_the_fields": "missing_macro","scarecrows_gaze": "missing_macro","secret_art:_assassinate": "missing_macro","secret_art:_dragonslaying_jump": "missing_macro","store/consume_item": "missing_macro","take_it_easy": "missing_macro","tetsuzanko": "missing_macro","aquatic_fae": "missing_macro","rock_fang": "missing_macro","secret_art:_tsubame_gaeshi": "missing_macro","true_death": "missing_macro","power_strike": "&{template:default} {{name=@{name} ❖ Power Strike}} {{?{1MP, 2MP, 3MP, 4MP or 5MP |1MP, Heavy Attack: [[1d20+@{focus}]] Damage: [[4d6+2+2*@{power}]] |2MP, Heavy Attack: [[1d20+@{focus}]] Damage: [[4d6+4+2*@{power}]] |3MP, Heavy Attack: [[1d20+@{focus}]] Damage: [[4d6+6+2*@{power}]] |4MP, Heavy Attack: [[1d20+@{focus}]] Damage: [[4d6+8+2*@{power}]] |5MP, Heavy Attack: [[1d20+@{focus}]] Damage: [[4d6+10+2*@{power}]]}}}","d_-_mana_burst": "missing_macro","chiburi_noto": "missing_macro","evil_eye_of_fear": "&{template:default} {{name=@{name} ❖ Evil Eye of Fear}} {{ Potency= @{potency}}}","expertise_study_(carpentry)": "missing_macro","mana_shield": "missing_macro","secret_art:_gate_of_fate": "missing_macro","transmuter_tricks": "missing_macro","absorb_ice": "missing_macro","crippling_attack": "missing_macro","darkvision": "missing_macro","independent_action": "no_macro_needed","kage_shuriken_no_jutsu": "missing_macro","spore_burst": "missing_macro","warm_together": "no_macro_needed","weapon_maintenance": "missing_macro","flame_infusion": "no_macro_needed","crucified_by_radiance": "missing_macro","mana_razor": "missing_macro","secret_art:_transmute_proto_armatae": "missing_macro","secret_art:_whiteout": "missing_macro","elemental_sweep": "missing_macro","multishot": "missing_macro","perfect_seasoning": "missing_macro","shield_burst": "no_macro_needed","victory_or_death": "missing_macro","wind-up_punch": "missing_macro","downburst": "missing_macro","faerie_flash": "missing_macro","natures_grasp": "missing_macro","saprophytic_bolt": "&{template:default} {{name=@{name} ❖ Saprophytic Bolt}} {{ Light Attack=[[1d20+@{focus}]]}} {{ Damage= [[2d4+@{power}]]}} {{ Max Damage= [[2*4+@{power}]]}} {{ Heal= [[3+@{power}]]}} ","shatter": "missing_macro","provoke_ii": "missing_macro","send_to_armory": "missing_macro","squadsight": "no_macro_needed","alchemical_detonation": "missing_macro","ricochet": "missing_macro","sense_magic": "missing_macro","shooting_form": "no_macro_needed","terracing": "missing_macro","bloodbolt": "missing_macro","mind_connection": "missing_macro","power_word:_barrier": "&{template:default} {{name=@{name} ❖ Power Word: Barrier }} {{Temp HP=[[10+@{power}]]}}","armor_up": "missing_macro","counter-potion": "missing_macro","dimensional_armory_expansion": "missing_macro","spiritual_sync": "missing_macro","strengthening_the_bond": "missing_macro","vampiric_domination": "no_macro_needed","extending_spear": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","kawarimi_no_jutsu": "missing_macro","none_-_instinct": "missing_macro","power_word:_reinforce": "no_macro_needed","secret_art:_spectrum_blade": "no_macro_needed","cavalry_heal": "&{template:default} {{name=@{name} ❖ Cavalry Heal}} {{ Heal= [[11+2*@{power}]]}}","divining_petalfall": "missing_macro","prediction": "missing_macro","slide_&_shoot": "missing_macro","transmute_weapon": "missing_macro","darkness": "missing_macro","just_a_hug": "missing_macro","mountain_slayer": "missing_macro","sheet_ice": "no_macro_needed","throw_potion": "missing_macro","wind_wall": "missing_macro","iai_strike": "missing_macro","mystic_eyes_of_life_perception": "missing_macro","power_rock_strike": "missing_macro","sacrament": "missing_macro","hover": "missing_macro","leashing": "missing_macro","perfect_shot": "missing_macro","resheathe": "missing_macro","secret_art:__revitalize": "missing_macro","bunshin_tai_no_jutsu": "missing_macro","devils_curse": "no_macro_needed","divine_guard": "missing_macro","divine_providence": "missing_macro","ignite": "missing_macro","preparedness": "missing_macro","warning_shot": "missing_macro","aerial_loop": "missing_macro","chilling_cold": "missing_macro","full_dimensional_equip": "missing_macro","presence_concealment": "missing_macro","at_your_side": "missing_macro","chiburi_noto_ii": "missing_macro","fast_dimensional_equip": "missing_macro","fight_or_flight": "missing_macro","flash_star_style_secret_art:_twin_nova_pursuit": "missing_macro","last_rites": "missing_macro","slime_body": "missing_macro","steel_aura": "missing_macro","quick_artifice_reload": "missing_macro","smash_through_the_pain": "missing_macro","store_time": "missing_macro","vital_drive": "missing_macro","kiri-tsuke": "missing_macro","momentum": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","secret_art:_unholy_strength": "no_macro_needed","wind_shield": "missing_macro","butterfly_effect": "missing_macro","excavation_crash": "missing_macro","greater_imbue_weapon": "missing_macro","secret_art:_lightning_field": "missing_macro","spellsteal": "missing_macro","spellstrike": "missing_macro","elbow_uppercut": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","pull_the_weeds": "no_macro_needed","stratagem:_lightning": "missing_macro","create_talisman": "missing_macro","crescent_sweep": "missing_macro","evil_eye_of_death": "no_macro_needed","secret_art:_whirling_death": "missing_macro","wind_buffet": "missing_macro","aura_of_protection": "missing_macro","blood_drain": "missing_macro","grand_theft_horse": "missing_macro","secret_art:_spirit_stigma": "missing_macro","sound_the_retreat": "missing_macro","tremorsense": "missing_macro","anathema": "&{template:default} {{name=@{name} ❖ Anathema}} {{ Potency= @{potency}}} {{ Heavy Damage= [[4d6+2*@{power}]]}}","cavalry_charge": "missing_macro","dragon_breaks_the_ranks": "&{template:default} {{name=@{name} ❖ Dragon Breaks The Ranks}} {{ Light Fire Damage=[[2d4+@{power}]]}} {{ Heavy Attack=[[1d20+@{focus}]]}} {{Heavy/HEAVY Damage=[[4d6+2*@{power}]]/[[5d6+2*@{power}]]}} {{ Max Damage=[[4*6+2*@{power}]]/[[5*6+2*@{power}]]}}","guided_aim": "missing_macro","secret_art:_shock_&_awe": "missing_macro","shield_the_fallen": "missing_macro","vital_drain": "missing_macro","boundless_wind_stance": "no_macro_needed","channel_eidolon": "no_macro_needed","double_punch": "missing_macro","execute_heretic": "missing_macro","reinforce_armor": "missing_macro","repair_artifice": "no_macro_needed","travelers_end": "missing_macro","accelerando": "missing_macro","demonblood_regeneration": "missing_macro","instinct": "missing_macro","miracle:_sanctuary": "&{template:default} {{name=@{name} ❖ Miracle: Sanctuary }} {{Shield HP=[[20+(8*@{toughness})]]}}","secret_art:_entropic_magic_pulse": "missing_macro","separate_wheat_from_chaff": "missing_macro","spirited_bravado": "missing_macro","stolen_skill": "missing_macro","craft_pemmican": "missing_macro","disarming_attack": "missing_macro","headwind": "no_macro_needed","panda_stance": "missing_macro","spirit_jump": "missing_macro","tempestuous_fire_stance": "missing_macro","dragonfire_dive": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","feigned_retreat": "missing_macro","holy_declaration": "&{template:default} {{name=@{name} ❖ Holy Declaration}} {{ Block= @{total_block}}}","knockdown_swing": "&{template:default} {{name=@{name} ❖ Knockdown Swing @{main_weapon_name}}} {{ Light Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{ Damage= [[2d4+@{power}+@{main_weapon_power}]]}} {{ Max Damage= [[2*4+@{power}+@{main_weapon_power}]]}} {{ Power= [[@{power}]]}}","trailblazer": "missing_macro","swap": "no_macro_needed","cyclone": "&{template:default} {{name=@{name} ❖ Cyclone}} {{ Potency= @{potency}}}","blackbird": "no_macro_needed","hearthlight": "missing_macro","kiri-tsuke_ii": "missing_macro","lightning_weapon": "no_macro_needed","secret_art:_meteor": "missing_macro","secret_art:_shatter": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","spider_climb": "missing_macro","attune_eidolon": "missing_macro","delayed_hit": "missing_macro","human_adaptability": "missing_macro","improvised_defense": "missing_macro","inspiring_song": "missing_macro","mage_armor": "no_macro_needed","persistent_spell": "missing_macro","steady_stance": "&{template:default} {{name=@{name} ❖ Steady Stance}} {{ Power= @{power}}}","bestial_command": "missing_macro","cat_form": "missing_macro","rescue_&_drop": "missing_macro","status_assessment_iii": "missing_macro","torture_techniques": "missing_macro","verdant_instinct": "missing_macro","elemental_mastery:_lightning": "missing_macro","chemical_explosive": "missing_macro","icicle_nail": "missing_macro","mark_of_justice": "missing_macro","poison_spore": "missing_macro","prone_cover": "missing_macro","secret_art:_shield_wall": "missing_macro","secret_art:_the_grand_theater": "missing_macro","aura_of_resistance": "&{template:default} {{name=@{name} ❖ Aura of Resistance}} {{ Toughness= @{toughness}}}","disarming_shot": "missing_macro","mana_sight": "missing_macro","uke_nagashi": "missing_macro","unrelenting_assault": "missing_macro","flame_weapon": "missing_macro","reverse_polarity": "missing_macro","running_shot": "missing_macro","secret_art:_efficient_spirit_control": "missing_macro","steal_heart": "missing_macro","devils_blow": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","overpower": "missing_macro","penetrating_shot": "missing_macro","piercing_stab": "missing_macro","repair_armor": "missing_macro","shared_defense": "missing_macro","anti-shield": "missing_macro","cloak_of_bats": "missing_macro","forked_lightning": "missing_macro","hug_tight": "&{template:default} {{name=@{name} ❖ Hug Tight}} {{ Light Damage= [[2d4+@{power}]]}}","magic_missile_ii": "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}","secret_art:_chase_the_horizon": "missing_macro","secret_art:_override": "&{template:default} {{name=@{name} ❖ Heavy Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[4d6+2*@{power}]]}}","dullahans_mount": "missing_macro","point_of_death": "missing_macro","vital_drive_ii": "missing_macro","deus_vult": "missing_macro","holy_light": "missing_macro","skydive": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","status_assessment_ii": "missing_macro","radiant_halo": "&{template:default} {{name=@{name} ❖ Radiant Halo}} {{ Heal= [[11+2*@{power}]]}}","secret_art:_divine_shield": "missing_macro","secret_art:_mythical_awakening": "missing_macro","true_divine_release": "missing_macro","focused_detonation": "missing_macro","infuse_potion": "missing_macro","place_trap": "missing_macro","rushing_knee_drop": "missing_macro","seal_cloak": "missing_macro","swallow_acrobatics": "no_macro_needed","tengu_mask": "missing_macro","ambush_trapper": "no_macro_needed","ki_blast": "&{template:default} {{name=@{name} ❖ Heavy Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[4d6+2*@{power}]]}}","lay_on_hands": "missing_macro","repair_weapon": "missing_macro","secret_art:_lifesaver": "no_macro_needed","assign_decoy": "no_macro_needed","faerie_light_eyes:_time_dilation": "no_macro_needed","mist_of_the_vale": "missing_macro","thermal_quench": "missing_macro","fireball": "missing_macro","secret_art:_7_points_of_death": "missing_macro","secret_art:_nightcaller": "missing_macro","steal_time": "missing_macro","aerial_crashdown": "missing_macro","aftershock": "missing_macro","antennae": "no_macro_needed","decipher_magic": "missing_macro","evil_eye_of_lethargy": "missing_macro","threatening_aura": "missing_macro","break_away": "missing_macro","disrupt_ki": "missing_macro","counter_stance": "missing_macro","cure_touch_ii": "missing_macro","enduring_warmth": "missing_macro","energy_drain": "missing_macro","feeding_frenzy": "missing_macro","purify": "missing_macro","quickdraw_alchemy": "no_macro_needed","secret_talisman": "no_macro_needed","flash_bomb": "missing_macro","point_of_death_ii": "missing_macro","secret_art:_true_serenity": "missing_macro","secret_art:_walking_church": "missing_macro","summon_animal": "missing_macro","unerring_aim": "no_macro_needed","vampiric_fascination": "no_macro_needed","circle_swing": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","concealed_shot": "missing_macro","gnome_claws": "missing_macro","parry": "missing_macro","regrowing_limbs": "no_macro_needed","shadow_cloak": "missing_macro","suckerpunch": "missing_macro","crashing_foam_wave": "missing_macro","duplicate": "missing_macro","stab_&_throw": "missing_macro","cant_escape_death": "missing_macro","counterspell": "missing_macro","graceful_landing": "missing_macro","mud_wall": "missing_macro","secret_art:_titan_blade": "&{template:default} {{name=@{name} ❖ Secret Art: Titan Blade}} {{ Heavy Attack=[[1d20+@{focus}]]}} {{ Damage= [[4d6+2*@{power}]]}} {{ Max Damage= [[4*6+2*@{power}]]}} {{ 2nd Heavy Attack=[[1d20+@{focus}]]}} {{ 2nd Damage= [[4d6+2*@{power}]]}} {{ 2nd Max Damage= [[4*6+2*@{power}]]}} ","wild_thrusts": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","aqua_drill": "missing_macro","call_of_the_grave": "missing_macro","dark_healing": "&{template:default} {{name=@{name} ❖ Dark Healing}} {{?{Light or Heavy? |Light, Light Damage= [[2d4+@{power}]] |Heavy, Heavy Damage= [[4d6+2*@{power}]]}}}","defensive_flexibility": "no_macro_needed","duelist_blow": "missing_macro","empty_body": "missing_macro","expertise_study_(artificing)": "missing_macro","fireball_ii": "missing_macro","cut_away": "&{template:default} {{name=@{name} ❖ Cut Away}} {{ Precise Attack= [[1d20+2*@{focus}]]}}","explosive_ward": "missing_macro","gravitational_ki": "missing_macro","lucid_sleep": "missing_macro","magic_missile": "missing_macro","power_word:_shield": "&{template:default} {{name=@{name} ❖ Power Word:Shield }} {{Temp HP=[[11+(2*@{power})]]}}","soulreap": "missing_macro","stygian_screen": "missing_macro","in_the_zone": "missing_macro","knockout_punch": "&{template:default} {{name=@{name} ❖ Heavy Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[4d6+2(@{power}+@{main_weapon_power})]]}}","schadenfreude": "missing_macro","blue_tide": "missing_macro","lunge": "no_macro_needed","plaguebringer": "missing_macro","wall_formation": "missing_macro","weighing_the_heart": "missing_macro","white_thunder": "&{template:default} {{name=@{name} ❖ Precise Attack}} {{Attack=[[1d20+2*@{focus}]]}} {{Damage=[[2d4+@{power}]]}}","wind_blast": "missing_macro","expertise_study_(blacksmithing)": "missing_macro","faerie_light_eyes:__empty": "missing_macro","fireball_barrage": "missing_macro","ni_-_emergency_maneuvers": "missing_macro","overclock": "missing_macro","escape_artist": "no_macro_needed","evasive_maneuver": "missing_macro","four_point_strike": "missing_macro","ninja_run": "no_macro_needed","secret_art:_mushroomize": "missing_macro","spiked_armor": "missing_macro","sweeping_stance": "missing_macro","abjurers_blast": "missing_macro","canter": "no_macro_needed","corpse_explosion": "missing_macro","crusaders_advance": "missing_macro","ki_blast_ii": "missing_macro","scouts_retreat": "missing_macro","vivisect": "missing_macro","ave_maría": "missing_macro","lifesense": "missing_macro","shatter_time": "missing_macro","vampire_shapeshift": "no_macro_needed","volley": "&{template:default} {{name=@{name} ❖ Light Attack[@{main_weapon_name}]}} {{Attack=[[1d20+@{focus}+@{main_weapon_focus}]]}} {{Damage=[[2d4+@{power}+@{main_weapon_power}]]}}","cure_water": "missing_macro","secret_art:_bladestorm": "missing_macro","secret_art:_gae_bolg": "missing_macro","trample": "missing_macro","transmute_wall": "missing_macro","darkvision_(passive)": "missing_macro","forged_knowledge": "missing_macro","pack_tactics": "missing_macro","stolen_power": "&{template:default} {{name=@{name} ❖ Stolen Power}} {{?{Light , Heavy, or Precise? |Light, Light Attack: [[1d20+@{focus}]] Damage Roll: [[2d4]] |Heavy, Heavy Attack: [[1d20+@{focus}]] Damage Roll: [[4d6]] |Precise, Precise Attack: [[1d20+2*@{focus}]] Damage: [[2d4+]]}}}","transfusion": "missing_macro","battle_cast": "no_macro_needed","illuminating_flash": "missing_macro","secret_art:_perfect_repetition": "missing_macro","slam": "missing_macro","point_blank_shot": "missing_macro","blood_shield": "missing_macro","eternal_vigil": "missing_macro","flying_kick": "missing_macro","spore_symbiote": "missing_macro","fast_hands": "missing_macro","dirge_of_despair": "missing_macro","explosive_advance": "missing_macro","vampire_bite": "missing_macro","faerie_light_eyes:_hold_person": "missing_macro","divine_smite": "missing_macro","draw_elements_ii": "missing_macro","loyalty": "missing_macro","soul_absorption": "missing_macro","wire_sweep": "&{template:default} {{name=@{name} ❖ Wire Sweep}} {{ Potency= [[2+@{potency}]]}} {{Light Damage= [[2d4+@{power}]]}}","bring_out_your_dead": "missing_macro","riposte_ii": "missing_macro","secret_art:_dynamic_duo": "missing_macro","blast_wave": "&{template:default} {{name=@{name} ❖ Light Attack}} {{Attack=[[1d20+@{focus}]]}} {{Damage=[[2d4+@{power}]]}}","cut_magic": "missing_macro","flyby_attack": "missing_macro","leg_sweep": "missing_macro","prehensile_tail": "missing_macro","presence_of_mind": "no_macro_needed","secret_art:_life_sacrifice": "missing_macro","secret_art:_ride_of_the_valkyrie": "&{template:default} {{name=@{name} ❖ Secret Art: Ride of the Valkyrie}} {{ Heal= [[11+2*@{power}]]}}","zhen_jiao": "no_macro_needed","backlash": "missing_macro","countershot": "missing_macro","precise_thrust": "missing_macro","scouting_ahead": "missing_macro","secret_art:_jade_skin": "&{template:default} {{name=@{name} ❖ Secret Art: Jade Skin}} {{ Block= @{total_block}}}","discipline": "missing_macro","elemental_mastery:_fire": "missing_macro","shadow_step": "missing_macro","amphibious": "missing_macro","consume_lightning": "missing_macro","heavenfall_descent": "missing_macro","devastating_strike": "missing_macro","incendiary_ray": "missing_macro","zap": "missing_macro","horse_whistle": "&{template:default} {{name=@{name} ❖ Horse Whistle}} {{ Light Attack= [[1d20+@{current_mount_focus}]]}} {{ Damage= [[2d4+@{current_mount_power}]]}} {{ Max Damage= [[2*4+@{current_mount_power}]]}}","lengthened_incantation": "&{template:default} {{name=@{name} ❖ Lengthened Incantation}} {{?{2AP, 4AP, 6AP, or 8AP? |2AP, Damage= [[2d4+@{power}]] |4AP, Damage= [[4d4+2*@{power}]] |6AP, Damage= [[6d4+3*@{power}]] |8AP, Damage= [[8d4+4*@{power}]]}}}","dispel_magic": "missing_macro","tireless_undead": "missing_macro","blinding_dust": "missing_macro","kibaku_fuda_shuriken": "missing_macro","order:_retreat": "missing_macro","shade_form": "no_macro_needed","unconventional_weapon": "missing_macro","wither_the_stalk": "light_attack_weapon","anti-magic_shield": "missing_macro","drink_to_battle": "no_macro_needed","oil_slick": "missing_macro","quick_getaway": "no_macro_needed","siphon_material": "missing_macro","cleave": "missing_macro","divine_storm": "missing_macro","line_of_death": "missing_macro","lu_-_dense_mana": "missing_macro","power_jump": "missing_macro","destroy_ground": "missing_macro","secret_art:_seventeen_dissection": "missing_macro","strike_of_still_water": "missing_macro","attack_in_detail": "no_macro_needed","hyphal_force": "missing_macro","jump": "missing_macro","pathfinder": "missing_macro","raise_undead": "missing_macro","mordschlag": "missing_macro","scent_of_blood": "missing_macro","vanish": "missing_macro","flame_shield": "missing_macro","foretell": "&{template:default} {{name=@{name} ❖ Foretell}} {{ Foretold Roll= [[1d20]]}}","mounted_casting": "no_macro_needed","reckless_strike": "missing_macro","secret_art:_rewind": "missing_macro","deconstruction": "missing_macro","devastating_strike_iii": "&{template:default} {{name=@{name} ❖ Devastating Strike III @{main_weapon_name}}} {{?{Light , Heavy, or Precise? |Light, Light Attack: [[1d20+@{focus}+@{main_weapon_focus}]] Damage Roll: [[2d4+@{power}+@{main_weapon_power}]] |Heavy, Heavy Attack: [[1d20+@{focus}+@{main_weapon_focus}]] Damage Roll: [[4d6+2*@{power}+2*@{main_weapon_power}]]}}}"}; + const craftingAbilityList = { adaptive_layering: { @@ -14764,6 +14079,224 @@ }, }; + function get_skill_stat(skill) { + switch (skill) { + case "athletics": + return "fitness"; + case "acrobatics": + return "fitness"; + case "animal_husbandry": + return "awareness"; + case "appraise": + return "reason"; + case "art": + return "presence"; + case "artifice": + return "reason"; + case "common_knowledge": + return "reason"; + case "deception": + return "cunning"; + case "flight": + return "reason"; + case "history": + return "reason"; + case "insight": + return "awareness"; + case "intimidation": + return "presence"; + case "linguistics": + return "reason"; + case "negotiation": + return "presence"; + case "magic": + return "reason"; + case "medicine": + return "reason"; + case "riding": + return "fitness"; + case "roguecraft": + return "cunning"; + case "stealth": + return "cunning"; + case "religion": + return "reason"; + case "perception": + return "awareness"; + case "survival": + return "awareness"; + default: + return ""; + } + } + + function get_skill_name(skill) { + switch (skill) { + case "athletics": + return "Athletics"; + case "acrobatics": + return "Acrobatics"; + case "alchemy": + return "Alchemy"; + case "animal_husbandry": + return "Animal Husbandry"; + case "appraise": + return "Appraise"; + case "armorsmithing": + return "Armorsmithing"; + case "art": + return "Art"; + case "artifice": + return "Artifice"; + case "artificing": + return "Artificing"; + case "blacksmithing": + return "Blacksmithing"; + case "carpentry": + return "Carpentry"; + case "common_knowledge": + return "Common Knowledge"; + case "culinary": + return "Culinary"; + case "deception": + return "Deception"; + case "farming": + return "Farming"; + case "flight": + return "Flight"; + case "foraging": + return "Foraging"; + case "history": + return "History"; + case "insight": + return "Insight"; + case "intimidation": + return "Intimidation"; + case "linguistics": + return "Linguistics"; + case "negotiation": + return "Negotiation"; + case "magic": + return "Magic"; + case "medicine": + return "Medicine"; + case "mining": + return "Mining"; + case "riding": + return "Riding"; + case "roguecraft": + return "Roguecraft"; + case "stealth": + return "Stealth"; + case "religion": + return "Religion"; + case "perception": + return "Perception"; + case "survival": + return "Survival"; + default: + return ""; + } + } + + function get_skill_type(skill) { + switch (skill) { + case "athletics": + return "true_skill"; + case "acrobatics": + return "true_skill"; + case "alchemy": + return "crafting_skill"; + case "animal_husbandry": + return "true_skill"; + case "appraise": + return "true_skill"; + case "armorsmithing": + return "crafting_skill"; + case "art": + return "true_skill"; + case "artifice": + return "true_skill"; + case "artificing": + return "crafting_skill"; + case "blacksmithing": + return "crafting_skill"; + case "carpentry": + return "crafting_skill"; + case "common_knowledge": + return "true_skill"; + case "culinary": + return "crafting_skill"; + case "deception": + return "true_skill"; + case "farming": + return "crafting_skill"; + case "flight": + return "true_skill"; + case "foraging": + return "crafting_skill"; + case "history": + return "true_skill"; + case "insight": + return "true_skill"; + case "intimidation": + return "true_skill"; + case "linguistics": + return "true_skill"; + case "negotiation": + return "true_skill"; + case "magic": + return "true_skill"; + case "medicine": + return "true_skill"; + case "mining": + return "crafting_skill"; + case "riding": + return "true_skill"; + case "roguecraft": + return "true_skill"; + case "stealth": + return "true_skill"; + case "religion": + return "true_skill"; + case "perception": + return "true_skill"; + case "survival": + return "true_skill"; + default: + return "true_skill"; + } + } + + // Check if PC or NPC + function ifPC(attributes, callback, elseCallback) { + getAttrs(["is_npc"], function(values) { + if (values.is_npc !== "1") { + getAttrs(attributes, callback); + } else if (elseCallback) { + getAttrs(attributes, elseCallback); + } + }) + } + function ifNPC(attributes, callback, elseCallback) { + getAttrs(["is_npc"], function(values) { + if (values.is_npc === "1") { + getAttrs(attributes, callback); + } else if (elseCallback) { + getAttrs(attributes, elseCallback); + } + }) + } + + // Utilities + function getValuesAsObj(values, prefix, keys) { + const obj = {}; + keys.forEach((key) => { + obj[key] = values[`${prefix}${key}`]; + }); + return obj; + } + // General purpose roll on("clicked:general_roll", function (eventInfo) { // Get parameters from the button's dataset @@ -14859,6 +14392,61 @@ } }); + // NPC skill roll + on("clicked:repeating_npcskills", function (eventInfo) { + if (eventInfo.htmlAttributes.name === "act_roll_npc_skill") { + const button = eventInfo.htmlAttributes; + const hidden = button["data-hidden"]; + + getSectionIDs("npcskills", function (ids) { + ids.forEach((id) => { + if (eventInfo.triggerName.includes(id)) { + const fields = [].concat( + ...ids.map((id) => [ + `repeating_npcskills_${id}_skill_name`, + `repeating_npcskills_${id}_skill_expertise`, + `repeating_npcskills_${id}_skill_total`, + `repeating_npcskills_${id}_skill_stat`, + `repeating_npcskills_${id}_skill_points`, + ]) + ); + getAttrs(fields, function (values) { + let skillName = values[`repeating_npcskills_${id}_skill_name`]; + let skillExpertise = values[`repeating_npcskills_${id}_skill_expertise`]; + let skillTotal = values[`repeating_npcskills_${id}_skill_total`]; + let skillStat = values[`repeating_npcskills_${id}_skill_stat`]; + let skillPoints = values[`repeating_npcskills_${id}_skill_points`]; + let skillType = get_skill_type(skillName); + + let rollbase = "1d20"; + if (skillType === "crafting_skill") { + rollbase = "1d10"; + } + + let fullName = get_skill_name(skillName); + if (fullName && skillExpertise) { + fullName = `${fullName} (${skillExpertise})`; + } else if (skillExpertise) { + fullName = skillExpertise; + } else if (!fullName) { + fullName = "???"; + } + + let roll = `&{template:default} {{name=@{name} ❖ Skill: ${fullName}}} {{Roll=[[${rollbase}+${skillTotal}]]}}`; + if (hidden) { + roll = `/w gm ${roll}`; + } + + startRoll(roll, function (results) { + finishRoll(results.rollId); + }); + }); + } + }); + }); + } + }); + // General no roll stat posting on("clicked:stat_posting", function (eventInfo) { // Get parameters from the button's dataset @@ -14925,7 +14513,7 @@ const precisionAtkDmg = "2d4"; const maxPrecisionAtkDmg = "2*4"; - function mainWeaponAttack(eventInfo) { + function mainWeaponAttack(eventInfo, hidden) { const fields = [ "main_weapon_name", "main_weapon_type", @@ -15134,6 +14722,9 @@ |Precise,Precise Attack=Atk: ${preciseAtk} Damage: ${regularDmg} ${critLightExtraDmg} }}}`; + if (hidden) { + roll = `/w gm ${roll}`; + } startRoll(roll, function (results) { finishRoll(results.rollId); }); @@ -15145,23 +14736,40 @@ mainWeaponAttack(eventInfo); }); - function universalAttackRoll(eventInfo) { - roll = `&{template:default} {{name=@{name} ❖ Offensive Options}} {{?{Light, Heavy, HEAVY, or Precise? - |Light, Light Attack= Atk:[[1d20+@{focus_base}+@{focus_race}+@{focus_misc}]] - Damage: [[2d4+@{power_base}+@{power_race}+@{power_misc}]] - Max Dmg: [[2*4+@{power_base}+@{power_race}+@{power_misc}]] - |Heavy, Heavy Attack= Atk:[[1d20+@{focus_base}+@{focus_race}+@{focus_misc}]] - Damage: [[4d6+(2*(@{power_base}+@{power_race}+@{power_misc}))]] - Max Dmg: [[4*6+(2*(@{power_base}+@{power_race}+@{power_misc}))]] - |HEAVY, HEAVY-Melee Attack= Atk[[1d20+@{focus_base}+@{focus_race}]] - Damage: [[5d6+(2*(@{power_base}+@{power_race}+@{power_misc}))]] - Max Dmg: [[5*6+(2*(@{power_base}+@{power_race}+@{power_misc}))]] - |Precise, Precise Attack= Atk[[1d20+(2*(@{focus_base}+@{focus_race}+@{focus_misc}))]] - Damage: [[2d4+(@{power_base}+@{power_race}+@{power_misc})]] - Max Dmg: [[2*4+(@{power_base}+@{power_race}+@{power_misc})]] - }}}`; - startRoll(roll, function (results) { - finishRoll(results.rollId); + function universalAttackRoll(eventInfo, hidden) { + getAttrs(["is_npc"], function(values) { + // PC values + let power = `@{power_base}+@{power_race}+@{power_misc}`; + let focus = `@{focus_base}+@{focus_race}+@{focus_misc}`; + + // NPC values + if (values.is_npc === "1") { + power = `@{total_damage}`; + focus = `@{total_accuracy}`; + } + + let roll = `&{template:default} {{name=@{name} ❖ Offensive Options}} {{?{Light, Heavy, HEAVY, or Precise? + |Light, Light Attack= Atk:[[1d20+${focus}]] + Damage: [[2d4+${power}]] + Max Dmg: [[2*4+${power}]] + |Heavy, Heavy Attack= Atk:[[1d20+${focus}]] + Damage: [[4d6+(2*(${power}))]] + Max Dmg: [[4*6+(2*(${power}))]] + |HEAVY, HEAVY-Melee Attack= Atk[[1d20+@{focus_base}+@{focus_race}]] + Damage: [[5d6+(2*(${power}))]] + Max Dmg: [[5*6+(2*(${power}))]] + |Precise, Precise Attack= Atk[[1d20+(2*(${focus}))]] + Damage: [[2d4+(${power})]] + Max Dmg: [[2*4+(${power})]] + }}}`; + + if (hidden) { + roll = `/w gm ${roll}`; + } + + startRoll(roll, function (results) { + finishRoll(results.rollId); + }); }); } @@ -15227,7 +14835,7 @@ const attributesCollective = ["focus", "power", "agility", "toughness", "fitness", "cunning", "reason", "awareness", "presence", "speed"]; attributesCollective.forEach((attr) => { on(`change:${attr}_base change:${attr}_race change:${attr}_misc`, function () { - getAttrs([`${attr}_base`, `${attr}_race`, `${attr}_misc`], function (values) { + ifPC([`${attr}_base`, `${attr}_race`, `${attr}_misc`], function (values) { let change = {}; let base = parseInt(values[`${attr}_base`], 10) || 0; let race = parseInt(values[`${attr}_race`], 10) || 0; @@ -15244,7 +14852,7 @@ attributesCollective2.forEach((attr) => { on(`change:${attr}_mod`, function () { console.log(`Detected change in ${attr}_mod`); - getAttrs([`${attr}_base`, `${attr}_mod`], function (values) { + ifPC([`${attr}_base`, `${attr}_mod`], function (values) { let change = {}; change[attr] = (parseInt(values[`${attr}_base`], 10) || 0) + (parseInt(values[`${attr}_mod`], 10) || 0); @@ -15267,7 +14875,7 @@ const classFields = classIds.flatMap((id) => [`repeating_classes_${id}_class_xp`]); const btFields = btIds.flatMap((id) => [`repeating_breakthroughs_${id}_breakthrough_xp`]); const allFields = classFields.concat(btFields).concat(["spirit_core", "global_xp_modifier"]); - getAttrs(allFields, function (values) { + ifPC(allFields, function (values) { let experience = parseInt(values.spirit_core, 10) || 0; // console.log(`Initial spiritCore: ${values.spirit_core}`); experience += parseInt(values.global_xp_modifier, 10) || 0; @@ -15293,26 +14901,26 @@ ); on("change:focus", function () { - getAttrs(["focus"], function (values) { + ifPC(["focus"], function (values) { let potency = (parseInt(values.focus, 10) || 0) + 11; setAttrs({ potency: potency }); }); }); on("change:power change:power_base change:power_race change:power_misc", function () { - getAttrs(["power", "power_base", "power_race", "power_misc", "max_mp_mod"], function (values) { - let mana = (parseInt(values.power, 10) || 0) + 6; - let totalmana = (parseInt(values.power_base, 10) || 0) + (parseInt(values.max_mp_mod, 10) || 0); + ifPC(["power", "power_base", "power_race", "power_misc", "max_mp_mod"], function (values) { let powerbase = parseInt(values.power_base, 10) || 0; let powermisc = parseInt(values.power_misc, 10) || 0; let powerrace = parseInt(values.power_race, 10) || 0; let totalpower = powerbase + powerrace + powermisc; - setAttrs({ power: totalpower, max_mp: mana + totalmana, max_mp_base: mana }); + + let totalmana = 6 + totalpower + (parseInt(values.max_mp_mod, 10) || 0); + setAttrs({ power: totalpower, max_mp: totalmana, max_mp_base: 6+totalpower }); }); }); on("change:agility change:agility_base change:agility_race change:agility_misc", function () { - getAttrs(["agility", "agility_base", "agility_race", "agility_misc", "max_rp_mod", "initiative_mod", "armors_initiative"], function (values) { + ifPC(["agility", "agility_base", "agility_race", "agility_misc", "max_rp_mod", "initiative_mod", "armors_initiative"], function (values) { let total = (parseInt(values.agility_base, 10) || 0) + (parseInt(values.agility_race, 10) || 0) + (parseInt(values.agility_misc, 10) || 0); setAttrs({ agility: total }); let evasion = total + 7; @@ -15331,7 +14939,7 @@ }); on("change:toughness change:toughness_base change:toughness_race change:toghness_misc", function () { - getAttrs(["toughness", "toughness_base", "toughness_race", "toughness_misc", "equipment_guard", "max_hp_base", "max_hp_mod"], function (values) { + ifPC(["toughness", "toughness_base", "toughness_race", "toughness_misc", "equipment_guard", "max_hp_base", "max_hp_mod"], function (values) { total = (parseInt(values.toughness_base, 10) || 0) + (parseInt(values.toughness_race, 10) || 0) + (parseInt(values.toughness_misc, 10) || 0); setAttrs({ toughness: total }); let maxhp = total * 10 + 20; @@ -15732,16 +15340,91 @@ }); }); + // Common code for handling ability presses + function handleAbility(eventInfo, ab) { + console.log("only roll?", ab.only_roll); + if (!ab.only_roll) { + let roll = `&{template:default} {{name=@{name} ❖ Ability: ${ab.name}}} `; + // npc abilities should hard code type + if (ab.type === "key_ability") { + roll += `{{Benefits=${ab.description}}} `; + } else if (ab.type === "true_ability") { + if (ab.keywords && ab.keywords !== "--" && ab.keywords !== "") roll += `{{Keywords=${ab.keywords}}} `; + if (ab.range && ab.range !== "" && ab.range != "--") roll += `{{Range=${ab.range}}} `; + if (ab.requirements && ab.requirements !== "--" && ab.requirements != "") roll += `{{Requirements=${ab.requirements}}} `; + if (ab.costs && ab.costs !== "--" && ab.costs != "") roll += `{{Cost=${ab.costs}}} `; + if (ab.description && ab.description !== "" && ab.description != "--") roll += `{{Description=${ab.description}}} `; + } else { + console.log("Ability type not set"); + } + + console.log("Including description in ability roll"); + + if (ab.hidden) { + roll = `/w gm ${roll}`; + } + startRoll(roll, function (results) { + finishRoll(results.rollId); + }) + } else { + console.log("Ignoring description in ability roll"); + } + + if (ab.skip_roll) { + console.log("Skipping roll"); + return; + } + + console.log("Ability roll type:", ab.roll_select); + + let roll2 = ""; + if (ab.roll_select === "generic_attack_roll") { + console.log("Using generic attack roll"); + universalAttackRoll(eventInfo, ab.hidden); + } else if (ab.roll_select === "weapon_attack_roll") { + console.log("Using weapon attack roll"); + mainWeaponAttack(eventInfo, hidden); + } else if (ab.roll_select === "custom_macro") { + console.log("Using custom roll macro:", ab.roll_macro); + roll2 = ab.roll_macro; + } else if (ab.roll_select === "default_roll") { + console.log("Using default roll macro:", ab.default_roll); + if (ab.default_roll && ab.default_roll === "missing_macro") { + console.log("Default roll macro is missing"); + roll2 = `&{template:default} {{name=Missing macro}} {{Description=There is no default macro for this ability or the macro is missing.}}`; + } else { + roll2 = ab.default_roll; + } + } else if (ab.roll_select === "missing_macro") { + roll2 = `&{template:default} {{name=Missing macro}} {{Description=There is no default macro for this ability or the macro is missing.}}`; + } else { + console.log("Ability roll not set"); + } + + if (roll2 && roll2 !== "") { + if (ab.hidden) { + roll2 = `/w gm ${roll2}`; + } + startRoll(roll2, function (results) { + finishRoll(results.rollId); + }); + } + } + // This is to trigger the post of an ability to the chat when the button in the repeating section is clicked. // This is quite extensive, since it involves not only posting the ability info, but also potentially rolling attacks and damage. on("clicked:repeating_abilities", function (eventInfo) { const button = eventInfo.htmlAttributes; - const attr = button["data-only-roll"]; + const only_roll = button["data-only-roll"]; + console.log("A",eventInfo) // console.log("eventInfo:", eventInfo); if (eventInfo.htmlAttributes.name === "act_post_ability_info") { + console.log("B") getSectionIDs("repeating_abilities", function (ids) { ids.forEach((id) => { + + console.log("C") if (eventInfo.triggerName.includes(id)) { // console.log("Posting ability info for id:", id); const fields = [].concat( @@ -15759,69 +15442,14 @@ ]) ); getAttrs(fields, function (values) { - abName = values[`repeating_abilities_${id}_ability_name`]; - abType = values[`repeating_abilities_${id}_ability_type`]; - abKeywords = values[`repeating_abilities_${id}_ability_keywords`]; - abRange = values[`repeating_abilities_${id}_ability_range`]; - abReq = values[`repeating_abilities_${id}_ability_requirements`]; - abDesc = values[`repeating_abilities_${id}_ability_description`]; - abCost = values[`repeating_abilities_${id}_ability_costs`]; - abRoll = values[`repeating_abilities_${id}_ability_roll_select`]; - abDefaultRoll = values[`repeating_abilities_${id}_ability_default_roll`]; - abRollMacro = values[`repeating_abilities_${id}_ability_roll_macro`]; - - let roll = `&{template:default} {{name=@{name} ❖ Ability: ${abName}}} `; - if (abType === "key_ability") { - roll += `{{Benefits=${abDesc}}} `; - } else if (abType === "true_ability") { - if (abKeywords && abKeywords !== "--" && abKeywords !== "") roll += `{{Keywords=${abKeywords}}} `; - if (abRange && abRange !== "" && abRange != "--") roll += `{{Range=${abRange}}} `; - if (abReq && abReq !== "--" && abReq != "") roll += `{{Requirements=${abReq}}} `; - if (abCost && abCost !== "--" && abCost != "") roll += `{{Cost=${abCost}}} `; - if (abDesc && abDesc !== "" && abDesc != "--") roll += `{{Description=${abDesc}}} `; - } else { - console.log("Ability type not set"); - } - if (attr === "true") { - console.log("Ignoring description in ability roll"); - } else { - console.log("Including description in ability roll"); - startRoll(roll, function (results) { - finishRoll(results.rollId); - }); - } - - console.log("Ability roll type:", abRoll); - - let roll2 = ""; - if (abRoll === "generic_attack_roll") { - console.log("Using generic attack roll"); - universalAttackRoll(eventInfo); - } else if (abRoll === "weapon_attack_roll") { - console.log("Using weapon attack roll"); - mainWeaponAttack(eventInfo); - } else if (abRoll === "custom_macro") { - console.log("Using custom roll macro:", abRollMacro); - roll2 = abRollMacro; - } else if (abRoll === "default_roll") { - console.log("Using default roll macro:", abDefaultRoll); - if (abDefaultRoll && abDefaultRoll === "missing_macro") { - console.log("Default roll macro is missing"); - roll2 = `&{template:default} {{name=Missing macro}} {{Description=There is no default macro for this ability or the macro is missing.}}`; - } else { - roll2 = abDefaultRoll; - } - } else if (abRoll === "missing_macro") { - roll2 = `&{template:default} {{name=Missing macro}} {{Description=There is no default macro for this ability or the macro is missing.}}`; - } else { - console.log("Ability roll not set"); - } - - if (roll2 && roll2 !== "") { - startRoll(roll2, function (results) { - finishRoll(results.rollId); - }); - } + console.log("D") + const ab = getValuesAsObj(values, `repeating_abilities_${id}_ability_`, [ + "name", "type", "keywords", "range", "requirements", "description", + "costs", "roll_select", "default_roll", "roll_macro", + ]); + console.log("F") + ab.only_roll = (only_roll === "true") + handleAbility(eventInfo, ab); }); } }); @@ -15844,7 +15472,7 @@ `repeating_armors_${id}_armor_initiative`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { // let totalBurden = 0; let totalEvasion = 0; let totalGuard = 0; @@ -15890,7 +15518,7 @@ `repeating_weapons_${id}_weapon_name`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { let totalBurden = 0; ids.forEach((id) => { if (values[`repeating_weapons_${id}_weapon_status`] === "carried") { @@ -15931,7 +15559,7 @@ `repeating_weapons_${id}_weapon_power`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { let totalBurden = 0; let mainHandFound = false; @@ -15996,7 +15624,7 @@ `repeating_mounts_${id}_mount_name`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { ids.forEach((id) => { if (values[`repeating_mounts_${id}_mount_type`] === "current-mount") { setAttrs({ @@ -16033,7 +15661,7 @@ `repeating_mounts_${id}_mount_status`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { let mountedFound = false; if (values[`repeating_mounts_${tID}_mount_status`] === "mounted") { @@ -16088,15 +15716,17 @@ }); // Recalculates all armor related values when armor is changed - on("change:repeating_miscs:misc_status change:repeating_miscs:misc_burden remove:repeating_miscs", function () { + on("change:repeating_miscs:misc_status change:repeating_miscs:misc_burden change:repeating_miscs:misc_amount remove:repeating_miscs", function () { getSectionIDs("repeating_miscs", function (ids) { - const fields = [].concat(...ids.map((id) => [`repeating_miscs_${id}_misc_status`, `repeating_miscs_${id}_misc_burden`])); - getAttrs(fields, function (values) { + const fields = [].concat(...ids.map((id) => [`repeating_miscs_${id}_misc_status`, `repeating_miscs_${id}_misc_burden`,`repeating_miscs_${id}_misc_amount`])); + ifPC(fields, function (values) { // let totalBurden = 0; let totalBurden = 0; ids.forEach((id) => { + let amount = parseInt(values[`repeating_miscs_${id}_misc_amount`]) || 1; + if (amount < 1) amount = 1; if (values[`repeating_miscs_${id}_misc_status`] === "carried") { - totalBurden += parseFloat(values[`repeating_miscs_${id}_misc_burden`]) || 0; + totalBurden += amount*parseFloat(values[`repeating_miscs_${id}_misc_burden`]) || 0; } return; }); @@ -16109,7 +15739,7 @@ // Recalculate total burden on("change:armors_burden change:weapons_burden change:inventory_burden", function () { - getAttrs(["armors_burden", "weapons_burden", "inventory_burden"], function (values) { + ifPC(["armors_burden", "weapons_burden", "inventory_burden"], function (values) { let totalBurden = (parseFloat(values.armors_burden) || 0) + (parseFloat(values.weapons_burden) || 0) + (parseFloat(values.inventory_burden) || 0); setAttrs({ total_burden: totalBurden }); }); @@ -16117,7 +15747,7 @@ // Recalculate total guard bonus on("change:armors_guard change:toughness", function () { - getAttrs(["armors_guard", "toughness"], function (values) { + ifPC(["armors_guard", "toughness"], function (values) { let totalGuard = (parseFloat(values.armors_guard) || 0) + (parseFloat(values.toughness) || 0); setAttrs({ total_guard: totalGuard }); }); @@ -16125,7 +15755,7 @@ // Recalculate total block bonus on("change:armors_block change:toughness", function () { - getAttrs(["armors_block", "toughness"], function (values) { + ifPC(["armors_block", "toughness"], function (values) { let totalBlock = (parseFloat(values.armors_block) || 0) + (parseFloat(values.toughness) || 0) * 2; setAttrs({ total_block: totalBlock }); }); @@ -16133,7 +15763,7 @@ // Recalculate total evasion penalty on("change:armors_evasion change:agility", function () { - getAttrs(["armors_evasion", "agility"], function (values) { + ifPC(["armors_evasion", "agility"], function (values) { let totalEvasion = (parseFloat(values.armors_evasion) || 0) + (parseFloat(values.agility) || 0) + 7; let totalDodge = (parseFloat(values.agility) || 0) + 20 + (parseFloat(values.armors_evasion) || 0); @@ -16144,7 +15774,7 @@ // Recalculate total initiative on("change:armors_initiative change:agility", function () { - getAttrs(["armors_initiative", "agility"], function (values) { + ifPC(["armors_initiative", "agility"], function (values) { let totalInitiative = (parseFloat(values.armors_initiative) || 0) + (parseFloat(values.agility) || 0); setAttrs({ total_initiative: totalInitiative }); @@ -16164,7 +15794,7 @@ `repeating_expertises_${id}_expertise_misc`, ]) ); - getAttrs(fields, function (values) { + ifPC(fields, function (values) { let update = {}; ids.forEach((id) => { let name = values[`repeating_expertises_${id}_expertise_name`]; @@ -16178,136 +15808,104 @@ switch (skill) { case "athletics": row_name = `${name} [Athl]`; - expertise_type = "true_skill"; break; case "acrobatics": row_name = `${name} [Acro]`; - expertise_type = "true_skill"; break; case "alchemy": row_name = `${name} [Alch]`; - expertise_type = "crafting_skill"; break; case "animal_husbandry": row_name = `${name} [Anim]`; - expertise_type = "true_skill"; break; case "appraise": row_name = `${name} [App]`; - expertise_type = "true_skill"; break; case "armorsmithing": row_name = `${name} [Arms]`; - expertise_type = "crafting_skill"; break; case "art": row_name = `${name} [Art]`; - expertise_type = "true_skill"; break; case "artifice": row_name = `${name} [Arti]`; - expertise_type = "true_skill"; break; case "artificing": row_name = `${name} [Arti]`; - expertise_type = "crafting_skill"; break; case "blacksmithing": row_name = `${name} [Blks]`; - expertise_type = "crafting_skill"; break; case "carpentry": row_name = `${name} [Carp]`; - expertise_type = "crafting_skill"; break; case "common_knowledge": row_name = `${name} [Comm]`; - expertise_type = "true_skill"; break; case "culinary": row_name = `${name} [Culi]`; - expertise_type = "crafting_skill"; break; case "deception": row_name = `${name} [Dec]`; - expertise_type = "true_skill"; break; case "farming": row_name = `${name} [Farm]`; - expertise_type = "crafting_skill"; break; case "flight": row_name = `${name} [Fli]`; - expertise_type = "true_skill"; break; case "foraging": row_name = `${name} [For]`; - expertise_type = "crafting_skill"; break; case "history": row_name = `${name} [Hist]`; - expertise_type = "true_skill"; break; case "insight": row_name = `${name} [Ins]`; - expertise_type = "true_skill"; break; case "intimidation": row_name = `${name} [Inti]`; - expertise_type = "true_skill"; break; case "linguistics": row_name = `${name} [Ling]`; - expertise_type = "true_skill"; break; case "negotiation": row_name = `${name} [Neg]`; - expertise_type = "true_skill"; break; case "magic": row_name = `${name} [Mag]`; - expertise_type = "true_skill"; break; case "medicine": row_name = `${name} [Med]`; - expertise_type = "true_skill"; break; case "mining": row_name = `${name} [Min]`; - expertise_type = "crafting_skill"; break; case "riding": row_name = `${name} [Rid]`; - expertise_type = "true_skill"; break; case "roguecraft": row_name = `${name} [Rog]`; - expertise_type = "true_skill"; break; case "stealth": row_name = `${name} [Ste]`; - expertise_type = "true_skill"; break; case "religion": row_name = `${name} [Rel]`; - expertise_type = "true_skill"; break; case "perception": row_name = `${name} [Perc]`; - expertise_type = "true_skill"; break; case "survival": row_name = `${name} [Surv]`; - expertise_type = "true_skill"; break; default: row_name = name; - expertise_type = "true_skill"; } update[`repeating_expertises_${id}_expertise_total`] = points + misc + skillValue; update[`repeating_expertises_${id}_expertise_row_name`] = row_name; update[`repeating_expertises_${id}_expertise_skill_value`] = skillValue; - update[`repeating_expertises_${id}_expertise_skill_type`] = expertise_type; + update[`repeating_expertises_${id}_expertise_skill_type`] = get_skill_type(skill); setAttrs(update); }); @@ -16440,8 +16038,772 @@ }); } }); + + // recalculate NPC skills + on("change:repeating_npcskills:skill_name change:repeating_npcskills:skill_points", function(e) { + log(`on change:repeating_npcskills: ${e.sourceAttribute}`); + + const prefix = e.sourceAttribute.replace(/(repeating_npcskills_[^_]+)_.*/, "$1"); + + getAttrs([`${prefix}_skill_name`, `${prefix}_skill_points`], function(values) { + const skill = values[`${prefix}_skill_name`]; + const points = parseInt(values[`${prefix}_skill_points`], 10) || 0; + const stat = get_skill_stat(skill) + if (stat) { + getAttrs([stat], function (values2) { + let update = {}; + let statValue = parseInt(values2[stat], 10) || 0; + update[`${prefix}_skill_total`] = points + statValue; + update[`${prefix}_skill_stat`] = statValue; + setAttrs(update, {silent: true}); + }); + } else { + let update = {}; + update[`${prefix}_skill_total`] = points; + update[`${prefix}_skill_stat`] = ""; + setAttrs(update, {silent: true}); + } + }) + }); + + const sub_stats = ["fitness", "cunning", "reason", "awareness", "presence"]; + sub_stats.forEach((stat_name) => { + on(`change:${stat_name}`, function() { + ifNPC([stat_name], function(stat) { + const stat_value = parseInt(stat[stat_name], 10) || 0; + getSectionIDs("npcskills", function(ids) { + const fields = [].concat( + ...ids.map((id) => [ + `repeating_npcskills_${id}_skill_name`, + `repeating_npcskills_${id}_skill_points`, + ]) + ); + getAttrs(fields, function(values) { + const update = {}; + ids.forEach((id) => { + const skill = values[`repeating_npcskills_${id}_skill_name`]; + if (get_skill_stat(skill) !== stat_name) { + return; + } + + const points = parseInt(values[`repeating_npcskills_${id}_skill_points`], 10) || 0; + const total = points + stat_value; + + update[`repeating_npcskills_${id}_skill_stat`] = stat_value; + update[`repeating_npcskills_${id}_skill_total`] = total; + }); + setAttrs(update, {silent: true}); + }); + }); + }); + }); + }); + + // NPC abilities + on("change:repeating_npcactions:ability_roll_select", function () { + getSectionIDs("repeating_npcactions", function (ids) { + const fields = [].concat(...ids.map((id) => [`repeating_npcactions_${id}_ability_roll_select`])); + getAttrs(fields, function (values) { + let update = {}; + ids.forEach((id) => { + roll_selected = values[`repeating_npcactions_${id}_ability_roll_select`]; + if (roll_selected === "custom_macro") { + update[`repeating_npcactions_${id}_custom_macro_show`] = "on"; + } else { + update[`repeating_npcactions_${id}_custom_macro_show`] = "off"; + } + }); + setAttrs(update); + }); + }); + }); + on("clicked:repeating_npcactions", function (eventInfo) { + console.log("pressed?"); + if (eventInfo.htmlAttributes.name === "act_post_npc_action") { + const button = eventInfo.htmlAttributes; + const hidden = button["data-hidden"]; + console.log("pressed!"); + + getSectionIDs("npcactions", function (ids) { + ids.forEach((id) => { + if (eventInfo.triggerName.includes(id)) { + console.log("found!"); + const fields = [ + `repeating_npcactions_${id}_ability_name`, + `repeating_npcactions_${id}_ability_keywords`, + `repeating_npcactions_${id}_ability_range`, + `repeating_npcactions_${id}_ability_requirements`, + `repeating_npcactions_${id}_ability_description`, + `repeating_npcactions_${id}_ability_costs`, + `repeating_npcactions_${id}_ability_roll_select`, + `repeating_npcactions_${id}_ability_default_roll`, + `repeating_npcactions_${id}_ability_roll_macro`, + ]; + console.log(`id: ${id}`); + console.log(`fields: ${fields}`); + getAttrs(fields, function (values) { + console.log("attrs!"); + const ab = getValuesAsObj(values, `repeating_npcactions_${id}_ability_`, [ + "name", "keywords", "range", "requirements", "description", + "costs", "roll_select", "default_roll", "roll_macro", + ]); + ab.type = "true_ability"; + ab.hidden = (hidden === "true"); + console.log("handling!"); + handleAbility(eventInfo, ab); + }); + } + }); + }); + } + }); + on("clicked:repeating_npcabilities", function (eventInfo) { + if (eventInfo.htmlAttributes.name === "act_post_npc_ability") { + const button = eventInfo.htmlAttributes; + const hidden = button["data-hidden"]; + + getSectionIDs("npcabilities", function (ids) { + ids.forEach((id) => { + if (eventInfo.triggerName.includes(id)) { + const fields = [ + `repeating_npcabilities_${id}_ability_name`, + `repeating_npcabilities_${id}_ability_description`, + ]; + getAttrs(fields, function (values) { + const ab = getValuesAsObj(values, `repeating_npcabilities_${id}_ability_`, ["name", "description"]); + ab.type = "key_ability"; + ab.hidden = (hidden === "true"); + ab.skip_roll = true; + handleAbility(eventInfo, ab); + }); + } + }); + }); + } + }); + + // NPC auto-calculations + on("change:npc_autocalc change:rank change:focus change:power change:agility change:toughness", function() { + ifNPC(["npc_autocalc", "rank", "focus", "power", "agility", "toughness"], function(values) { + console.log(`npc_autocalc; ${values.npc_autocalc}`); + if (values.npc_autocalc === "1") { + const update = {}; + + const rank = values.rank; + const focus = parseInt(values.focus, 10) || 0; + const power = parseInt(values.power, 10) || 0; + const agility = parseInt(values.agility, 10) || 0; + const toughness = parseInt(values.toughness, 10) || 0; + + update.max_hp = 20 + toughness * 10; + update.max_rp = agility + 2; + update.max_mp = power + 6; + + if (rank === "grunt") { + // hp and mp are vague heuristics here + update.max_hp = Math.floor(update.max_hp / 2); + update.max_rp = 1; + update.max_mp = Math.floor(update.max_mp / 2); + } else if (rank === "boss") { + // hp is a vague heuristics here + update.max_hp = update.max_hp * 3; + } + + update.total_evasion = agility + 7; + update.total_dodge = agility + 20; + update.total_guard = toughness; + update.total_block = toughness * 2; + update.save_bonus = toughness; + update.potency = focus + 11; + update.initiative = agility; + update.total_accuracy = focus; + update.total_damage = power; + + setAttrs(update, {silent: true}); + } + }) + })
+
+ +
+ +
+
NPC Details
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + +
+ +
+
+
HP
+
+ +
+
+
+
MP
+
+ +
+
+
+
RP
+
+ +
+
+
+
+
+
Max | HP | Temp
+
+ + + +
+
+
+
Max | MP | Temp
+
+ + + +
+
+
+
Max | RP | Temp
+
+ + + +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + +
+
+
Abilities
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + Close +
+
+ + + +
+
+
+ +
+
+ + + +
+
+
+
+ + +
+ +
+ +
+ +
+
+
+
+
+ + +
+
+
Actions
+
+
Name
+
Range
+
Cost
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ + +
+
+
+ + Close +
+
+ + + +
+
+
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+ + +
+
+
Keywords:
+
+
+
+
Range:
+
+
+
+
Description:
+
+
+
+
Requirements:
+
+
+
+
Costs:
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
Skills
+
+
Skill
+
Expertise
+
Total
+
Stat
+
Skill
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
+
+ +
+
+ +