diff --git a/3D&T_ALPHA/3D&T_ALPHA.html b/3D&T_ALPHA/3D&T_ALPHA.html index c7332bf4fd..f464f0201d 100644 --- a/3D&T_ALPHA/3D&T_ALPHA.html +++ b/3D&T_ALPHA/3D&T_ALPHA.html @@ -16,7 +16,6 @@


-
@@ -345,7 +344,7 @@ - +
@@ -357,7 +356,7 @@ {{#ability}}
{{type}}: {{ability}}
{{#^rollGreater() ability atributo }} - Teste bem sucedido! + Sucesso!!! {{/^rollGreater() ability atributo }} {{#rollGreater() ability atributo}} Fracassou... @@ -403,369 +402,7 @@

{{name}}

- {{#ataque-pa}} -
- -
{{subtags}}
-
Ataque: {{ataque-pa}}
- {{#dano}} - {{#^rollWasCrit() ataque-pa}} - {{#rollGreater() dano 0 }} -
Dano: {{dano}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo: 1
- {{/rollLess() dano 1 }} - {{/^rollWasCrit() ataque-pa}} - - {{#rollWasCrit() ataque-pa}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-pa}} - {{/dano}} - {{/ataque-pa}} - {{#ataque-dist}} -
- -
{{subtags}}
-
Ataque: {{ataque-dist}}
- - {{#dano}} - {{#^rollWasCrit() ataque-dist}} - - {{#rollGreater() dano 0 }} -
Dano: {{dano}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano: 1 (mín.)
- {{/rollLess() dano 1 }} - - {{/^rollWasCrit() ataque-dist}} - {{#rollWasCrit() ataque-dist}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano crítico: 1 (mín.)
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-dist}} - {{/dano}} - {{/ataque-dist}} - -
- - - - -
-
- -

{{name}}

- {{#def_norm}} -
- -
{{subtags}}
-
Defesa: {{defesa}}
- {{#defesa}} - {{#^rollWasCrit() defesa}} - {{#rollGreater() defnormal 0 }} -
Defendeu: {{defnormal}}
- {{/rollGreater() defnormal 0 }} - {{#rollLess() defnormal 1 }} -
Defendeu: 1
- {{/rollLess() defnormal 1 }} - {{/^rollWasCrit()defesa}} - - {{#rollWasCrit() defesa}} - Defesa crítica! - {{#rollGreater() defcritica 0 }} -
Defendeu crítico: {{defcritica}}
- {{/rollGreater() defcritica 0 }} - {{#rollLess() defcritica 1 }} -
Defendeu crítico: 1
- {{/rollLess() defcritica 1 }} - {{/rollWasCrit() defesa}} - {{/defesa}} - {{/def_norm}} - - - {{#def_surp}} -
- -
{{subtags}}
-
Defesa: {{defesa}}
- - {{#surp}} - {{#^rollWasCrit() defesa}} - - {{#rollGreater() defsurp 0 }} -
Supreendido: {{defsurp}}
- {{/rollGreater() defsurp 0 }} - {{#rollLess() defsurp 1 }} -
Supreendido: 1
- {{/rollLess() defsurp 1 }} - - {{/^rollWasCrit() defesa}} - {{#rollWasCrit() defesa}} - Defesa crítica! - {{#rollGreater() suprcritico 0 }} -
Supreendido crítico: {{suprcritico}}
- {{/rollGreater() suprcritico 0 }} - {{#rollLess() suprcritico 1 }} -
Supreendido crítico: 1
- {{/rollLess() suprcritico 1 }} - {{/rollWasCrit() defesa}} - {{/surp}} - {{/def_surp}} - - - {{#def_indef}} -
-
{{subtags}}
-
Indefeso: {{indef}}
- {{/def_indef}} -
-
- - - - - - - - - - - - - -
-
- -

{{name}}

-
-
{{character}}
- - - {{#testeatt}} -
{{type}}: {{testeatt}}
- {{#^rollGreater() testeatt atributo }} - Sucesso!!! - {{/^rollGreater() testeatt atributo }} - {{#rollGreater() testeatt atributo}} - Fracassou... - {{/rollGreater() testeatt atributo}} - {{/testeatt}} - -
-
- - - - - - -
-
- -

{{name}}

- {{#ataque-pa}} -
- -
{{subtags}}
-
Ataque: {{ataque-pa}}
- {{#dano}} - {{#^rollWasCrit() ataque-pa}} - {{#rollGreater() dano 0 }} -
Dano: {{dano}}+{{ataque-pa}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo: 1
- {{/rollLess() dano 1 }} - {{/^rollWasCrit() ataque-pa}} - - {{#rollWasCrit() ataque-pa}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-pa}} - {{/dano}} - {{/ataque-pa}} - {{#ataque-dist}} -
- -
{{subtags}}
-
Ataque: {{ataque-dist}}
- - {{#dano}} - {{#^rollWasCrit() ataque-dist}} - - {{#rollGreater() dano 0 }} -
Dano: {{dano}}+{{ataque-dist}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo 1
- {{/rollLess() dano 1 }} - - {{/^rollWasCrit() ataque-dist}} - {{#rollWasCrit() ataque-dist}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-dist}} - {{/dano}} - {{/ataque-dist}} - -
-
- - - -
-
- -

{{name}}

- {{#ataque-pa}} -
- -
{{subtags}}
-
Ataque: {{ataque-pa}}
- {{#dano}} - {{#^rollWasCrit() ataque-pa}} - {{#rollGreater() dano 0 }} -
Dano: {{{{dano}}+{{ataque-pa}}}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo: 1
- {{/rollLess() dano 1 }} - {{/^rollWasCrit() ataque-pa}} - - {{#rollWasCrit() ataque-pa}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-pa}} - {{/dano}} - {{/ataque-pa}} - {{#ataque-dist}} -
- -
{{subtags}}
-
Ataque: {{ataque-dist}}
- - {{#dano}} - {{#^rollWasCrit() ataque-dist}} - - {{#rollGreater() dano 0 }} -
Dano: {{{{dano}}+{{ataque-dist}}}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo 1
- {{/rollLess() dano 1 }} - - {{/^rollWasCrit() ataque-dist}} - {{#rollWasCrit() ataque-dist}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-dist}} - {{/dano}} - {{/ataque-dist}} - -
-
- - -
-
- -

{{name}}

- {{#ataque-pa}} -
- -
{{subtags}}
-
Ataque: {{ataque-pa}}
- {{#dano}} - {{#^rollWasCrit() ataque-pa}} - {{#rollGreater() dano 0 }} -
Dano: {{({{dano}}+{{ataque-pa}})}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo: 1
- {{/rollLess() dano 1 }} - {{/^rollWasCrit() ataque-pa}} - - {{#rollWasCrit() ataque-pa}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-pa}} - {{/dano}} - {{/ataque-pa}} - {{#ataque-dist}} -
- -
{{subtags}}
-
Ataque: {{ataque-dist}}
- - {{#dano}} - {{#^rollWasCrit() ataque-dist}} - - {{#rollGreater() dano 0 }} -
Dano: {{{{dano}}+{{ataque-dist}}}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo 1
- {{/rollLess() dano 1 }} - - {{/^rollWasCrit() ataque-dist}} - {{#rollWasCrit() ataque-dist}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-dist}} - {{/dano}} - {{/ataque-dist}} - -
-
- - -
-
- -

{{name}}

- {{#ataque-pa}} + {{#ataque}}
{{subtags}}
@@ -790,37 +427,49 @@ {{/rollLess() danocrit 1 }} {{/rollWasCrit() ataque-pa}} {{/dano}} - {{/ataque-pa}} - {{#ataque-dist}} -
- -
{{subtags}}
-
Ataque: {{ataque-dist}}
- - {{#dano}} - {{#^rollWasCrit() ataque-dist}} - - {{#rollGreater() dano 0 }} -
Dano: {{dano}}+{{ataque-dist}}
- {{/rollGreater() dano 0 }} - {{#rollLess() dano 1 }} -
Dano Mínimo 1
- {{/rollLess() dano 1 }} - - {{/^rollWasCrit() ataque-dist}} - {{#rollWasCrit() ataque-dist}} - Acerto crítico! - {{#rollGreater() danocrit 0 }} -
Dano crítico: {{danocrit}}
- {{/rollGreater() danocrit 0 }} - {{#rollLess() danocrit 1 }} -
Dano Mínimo: 1
- {{/rollLess() danocrit 1 }} - {{/rollWasCrit() ataque-dist}} - {{/dano}} - {{/ataque-dist}} - + {{/ataque}}
+ + +
+
+ +

{{name}}

+ {{#defsaFD}} +
+ +
{{subtags}}
+ + {{#dano}} + {{#^rollWasCrit() defesa-pa}} + {{#rollGreater() dano 0 }} +
Defendeu: {{defesa-pa}}
+ {{/rollGreater() dano 0 }} + {{#rollLess() dano 1 }} +
Defesa Mínimo: 1
+ {{/rollLess() dano 1 }} + {{/^rollWasCrit() defesa-pa}} + + {{#rollWasCrit() defesa-pa}} + Defesa crítico! + {{#rollGreater() danocrit 0 }} +
Defendeu crítico: {{danocrit}}
+ {{/rollGreater() danocrit 0 }} + {{#rollLess() danocrit 1 }} +
Defesa Mínimo: 1
+ {{/rollLess() danocrit 1 }} + {{/rollWasCrit() defesa-pa}} + {{/dano}} + {{/defesaFD}} +
+
+ + + + + + + diff --git a/AD&D 2E Revised/2ESheet.html b/AD&D 2E Revised/2ESheet.html index 062cb3d776..1e7aca01fc 100644 --- a/AD&D 2E Revised/2ESheet.html +++ b/AD&D 2E Revised/2ESheet.html @@ -16656,7 +16656,7 @@

Hit Dice:

- ± + ± | @@ -16845,7 +16845,7 @@

Hit Dice:

- ± + ± | diff --git a/AD&D 2E Revised/raw/2ESheet-raw.html b/AD&D 2E Revised/raw/2ESheet-raw.html index d962cbba63..4c5f7f3639 100644 --- a/AD&D 2E Revised/raw/2ESheet-raw.html +++ b/AD&D 2E Revised/raw/2ESheet-raw.html @@ -16656,7 +16656,7 @@

Hit Dice:

- ± + ± | @@ -16845,7 +16845,7 @@

Hit Dice:

- ± + ± | diff --git a/Agon Official/agon.css b/Agon Official/agon.css index 4f5f8610f0..a639e87e27 100644 --- a/Agon Official/agon.css +++ b/Agon Official/agon.css @@ -639,7 +639,8 @@ input.sheet-zero:checked + span { .sheet-type:not([value=""]) ~ .sheet-type-selector, .sheet-type:not([value="character"]) ~ .sheet-type-character, -.sheet-type:not([value="strife"]) ~ .sheet-type-strife { +.sheet-type:not([value="strife"]) ~ .sheet-type-strife, +.sheet-type:not([value="island"]) ~ .sheet-type-island { display: none; } @@ -664,7 +665,7 @@ input.sheet-zero:checked + span { text-transform: uppercase; font-size: 12px; font-family: "Della Respira", serif; - grid-template: auto / 1fr 1fr; + grid-template: auto / 1fr 1fr 1fr; } .sheet-type-selector button[type="action"] { @@ -1711,135 +1712,6 @@ button[type="roll"].sheet-domain-button-resolve_spirit { top: 257px; } -.sheet-roller { - grid-row: 2; - display: grid; - grid-gap: 5px; - grid-template: auto / auto 140px auto 1fr; - border-left: 2px solid black; -} - -.sheet-roller .sheet-harm { - display: grid; - grid-template: auto/ 1fr 1fr; - grid-gap: 3px; -} - -.sheet-roller .sheet-harmbox { - display: flex; - align-items: center; - background: #ddd; - padding: 2px; -} - -.sheet-roller .sheet-harmbox input[type="text"].sheet-title { - text-transform: uppercase; - font-size: 12px; - font-family: "Della Respira", serif; - width: 68px; - margin-right: auto; - padding-left: 2px; -} - -.sheet-roller .sheet-divine-wrath .sheet-title { - text-transform: uppercase; - font-size: 12px; - font-family: "Della Respira", serif; - background: #ddd; - text-align: center; - padding: 2px 4px; -} - -.sheet-roller .sheet-divine-wrath input[type="checkbox"] + span { - border-width: 16px 8px 0; -} - -.sheet-roller .sheet-divine-wrath input[type="checkbox"]:not(:checked) + span { - border-top-color: #999; -} - -.sheet-roller .sheet-divine-wrath .sheet-checks { - display: flex; - align-items: center; - justify-content: center; - margin-top: 2px; - font-size: 10px; - font-weight: bold; -} - -.sheet-roller .sheet-divine-wrath .sheet-checks label { - display: block; - margin-right: 5px; -} - -.sheet-roller .sheet-strife-level .sheet-title { - text-transform: uppercase; - font-size: 12px; - font-family: "Della Respira", serif; - background: #ddd; - text-align: center; - padding: 2px 4px; -} - -.sheet-roller .sheet-strife-level .sheet-checks { - display: grid; - font-size: 16px; - grid-template: auto/repeat(4, 1fr); - line-height: 1.4; - font-weight: bold; -} - -.sheet-roller .sheet-strife-level .sheet-checks label { - justify-content: center; -} - -.sheet-roller .sheet-strife-level .sheet-checks input:checked + span { - color: #669999; -} - -.sheet-roller button[type="roll"].sheet-strife-button { - text-transform: uppercase; - font-size: 12px; - font-family: "Della Respira", serif; - font-size: 16px; - line-height: 1.2; - white-space: normal; - margin: 0; - border: 2px solid; -} - -.sheet-roller .sheet-dice { - grid-column: span 4; -} - -.sheet-roller .sheet-dice .repcontainer { - display: grid; - grid-gap: 4px; - grid-template: auto/repeat(2, calc(50% - 1px)); -} - -.sheet-roller .sheet-dice .repitem { - display: grid; - grid-template: auto / 1fr 50px; -} - -.sheet-roller .sheet-dice select { - width: 100%; - border: 2px solid black; -} - -.sheet-roller .sheet-dice input[type="text"] { - text-transform: uppercase; - font-size: 12px; - font-family: "Della Respira", serif; - padding-left: 4px; - background: #ddd; -} - -.sheet-roller .sheet-dice .repcontrol { - padding-left: 3px; -} - .sheet-destinies { grid-row: span 2; } @@ -1872,3 +1744,177 @@ button[type="roll"].sheet-domain-button-resolve_spirit { .sheet-destinies .repitem { margin-top: 5px; } + +.sheet-type-island { + margin-right: 25px; +} + +.sheet-type-island .sheet-title { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + padding-left: 2px; + margin-bottom: 5px; +} + +.sheet-type-island .repcontainer .repitem { + border: none !important; + outline: none !important; +} + +.sheet-type-island .repcontainer .repitem:not(:first-child) { + margin-top: 40px; +} + +.sheet-stats { + display: grid; + grid-template-columns: 1fr 0.5fr 0.5fr; + grid-gap: 10px; + margin-bottom: 20px; + align-items: center; +} + +.sheet-stats .sheet-island-name input { + text-transform: uppercase; + font-size: 20px; + font-family: "Della Respira", serif; + padding-left: 4px; + font-weight: bold; +} + +.sheet-stats .sheet-divine-wrath .sheet-title { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + background: #ddd; + text-align: center; + padding: 2px 4px; +} + +.sheet-stats .sheet-divine-wrath input[type="checkbox"] + span { + border-width: 16px 8px 0; +} + +.sheet-stats .sheet-divine-wrath input[type="checkbox"]:not(:checked) + span { + border-top-color: #999; +} + +.sheet-stats .sheet-divine-wrath .sheet-checks { + display: flex; + align-items: center; + justify-content: center; + margin-top: 2px; + font-size: 10px; + font-weight: bold; +} + +.sheet-stats .sheet-divine-wrath .sheet-checks label { + display: block; + margin-right: 5px; +} + +.sheet-stats .sheet-strife-level .sheet-title { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + background: #ddd; + text-align: center; + padding: 2px 4px; +} + +.sheet-stats .sheet-strife-level .sheet-checks { + display: grid; + font-size: 16px; + grid-template: auto/repeat(4, 1fr); + line-height: 1.4; + font-weight: bold; +} + +.sheet-stats .sheet-strife-level .sheet-checks label { + justify-content: center; +} + +.sheet-stats .sheet-strife-level .sheet-checks input:checked + span { + color: #669999; +} + +.sheet-roller { + display: grid; + grid-gap: 5px; + grid-template-columns: 1fr 100px; +} + +.sheet-roller .sheet-harm { + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-gap: 3px; +} + +.sheet-roller .sheet-harmbox { + display: flex; + align-items: center; + background: #ddd; + padding: 2px; +} + +.sheet-roller .sheet-harmbox input[type="text"].sheet-title { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + width: 68px; + margin-right: auto; + padding-left: 2px; +} + +.sheet-roller button[type="roll"].sheet-strife-button { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + font-size: 16px; + line-height: 1.2; + white-space: normal; + margin: 0; + border: 2px solid; +} + +.sheet-roller .sheet-dice select { + width: 100%; + border: 2px solid black; +} + +.sheet-roller .sheet-dice input[type="text"] { + text-transform: uppercase; + font-size: 12px; + font-family: "Della Respira", serif; + padding-left: 4px; + background: #ddd; +} + +.sheet-roller .sheet-dice .sheet-enabled { + display: flex; + align-items: center; +} + +.sheet-roller .sheet-dice .sheet-strifedie { + display: grid; + grid-template-columns: 15px 1fr 350px 50px; + grid-gap: 5px; +} + +.sheet-roller .sheet-dice .sheet-strifedie:not(:first-of-type) { + margin-top: 10px; +} + +.sheet-roller .sheet-dice .sheet-strifedie:not(.sheet-default) { + display: none; +} + +.sheet-roller .sheet-dice .sheet-strife-dice .sheet-strifedie-name[value]:not([value=""]) + .sheet-strifedie, +.sheet-roller .sheet-dice .sheet-strife-dice .sheet-strifedie-name[value]:not([value=""]) + .sheet-strifedie + .sheet-strifedie-name + .sheet-strifedie { + display: grid; + opacity: 1; +} + +.sheet-cnotes { + margin-top: 10px; +} diff --git a/Agon Official/agon.html b/Agon Official/agon.html index f0223c345d..e1a5581cad 100644 --- a/Agon Official/agon.html +++ b/Agon Official/agon.html @@ -14,15 +14,15 @@ -
-
+
+
@@ -825,24 +825,54 @@
-
-
-
- - -
-
- - -
-
- - -
-
- - + +
+ +
+ +
+
+
+
+
+
+
+
+
@@ -859,7 +889,7 @@
- +
- -
-
- - -
-
-
- -
- -
- +
+ + +
+
+
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
-
-
+
+ +
+
+
+ +
+ +
+
+
+ + + + + +
{{#rollGreater() obstacle roll}}
{{/rollGreater() obstacle roll}} {{#^rollGreater() obstacle roll}} @@ -1088,6 +1542,13 @@ function registerButton(buttonName, callback, handlerName = "handler") { ); on(`clicked:${buttonName}`, throttledFunction); } +function registerCompediumDrop(callback, handlerName = "handler") { + console.log(`Registering ${handlerName} for compedium drop.`); + on("sheet:compendium-drop", () => { + console.log(`Triggering ${handlerName} for compedium drop.`); + callback(); + }); +} /* Constants */ const kSheetVersion = "2"; const kBrace = "&" + "#125" + ";"; @@ -1096,6 +1557,9 @@ const kExtraEpithetField = "boons_4_check_1"; const kPathosGivesTwoDiceField = "boons_6_check_1"; const kSpendDivineFavorBoon = "boons_7_check_1"; const kHarms = ["epic", "mythic", "perilous", "sacred"]; +const kSrifeDiceLength = 12; +const kRepeatingCharacters = "repeating_characters"; +const kDropCategory = "drop_category"; const kDomains = [ "arts_oration", "blood_valor", @@ -1267,32 +1731,125 @@ function setupDivineFavorQuery(attrs) { attrs["divine_favor_query"] = base_query; } } -function calcStrifeRoll(attrs) { - const harmType = kHarms - .filter((harm) => attrs[harm] == "1") - .map((x) => `@{${x}_label}`) - .join(", "); - const dieSources = attrs.repeating.strifedie.map((row) => [ - row.strifedie_name, - row.strifedie_size, - ]); - if (attrs["divine_wrath"] !== "0") { - dieSources.push(["@{divine_wrath_label}", "@{divine_wrath}"]); +function getStrifeDiceAttributes(pre = "") { + let attributes = []; + for(let i=1; i<= kSrifeDiceLength; i++) { + attributes.push(`${pre}strifedie_enabled_${i}`); + attributes.push(`${pre}strifedie_name_${i}`); + attributes.push(`${pre}strifedie_size_${i}`); + kHarms.forEach(harm => { + attributes.push(`${pre}${harm}_${i}`); + }); } - const dieFormula = dieSources - .map(([name, die]) => `${die}[${name}]`) - .join(" + "); - attrs[ - "strife_formula" - ] = `{{roll=[[{${dieFormula}}k1 + @{strife_level}[${getTranslation( - "strife_level" - )}]]]}} {{harm=${harmType}}}`; + return attributes; } function handleStrifeRoll() { - getSetAttrs([...kHarms, "divine_wrath"], calcStrifeRoll, { - repeating: { - strifedie: ["strifedie_name", "strifedie_size"], - }, + calcStrifeRoll(); +} +function calcStrifeRoll() { + getSetAttrs(["divine_wrath"], (attrs) => { + attrs.repeating.characters.forEach(character => { + const dieSources = []; + const harms = []; + for(let i=1; i<= kSrifeDiceLength; i++) { + if(character[`strifedie_enabled_${i}`] && character[`strifedie_enabled_${i}`] == 1 && character[`strifedie_name_${i}`]) { + kHarms.forEach(harm => { + if(character[`${harm}_${i}`] && character[`${harm}_${i}`] == 1) { + harms.push(harm); + } + }); + dieSources.push([character[`strifedie_name_${i}`], character[`strifedie_size_${i}`]]); + } + } + if (attrs["divine_wrath"] !== "0") dieSources.push(["@{divine_wrath_label}", "@{divine_wrath}"]); + const dieFormula = dieSources + .map(([name, die]) => `${die}[${name}]`) + .join(" + "); + const harmType = Array.from(new Set(harms)).sort(); + const formula = `{{roll=[[{${dieFormula}}k1 + @{strife_level}[${getTranslation("strife_level")}]]]}} {{harm=${harmType}}}`; + character[`strife_formula`] = formula; + }); + },{repeating: {characters: ["strife_formula", ...getStrifeDiceAttributes()]}}); +} +function safeGuardDiceSize(roll) { + return roll.toLowerCase().replace(/\b[^2]?d/g, 'd'); +} +function joinNameAndTags(characters) { + let joined = []; + characters.forEach(character => { + let joinedChar = {}; + if(character.tags) { + joinedChar.rolls = JSON.parse(character.tags); + joinedChar.rolls.forEach(roll => { + if(roll.dice) roll.dice = safeGuardDiceSize(roll.dice); + if(roll.harm) roll.harm = Object.keys(roll.harm); + }); + } + let firstTag = {}; + firstTag.name = character.name; + firstTag.dice = safeGuardDiceSize(character.dice); + if(character.harm) firstTag.harm = Object.keys(JSON.parse(character.harm)); + joinedChar.rolls = [firstTag, ...joinedChar.rolls]; + if(character.notes) joinedChar.notes = character.notes; + joined.push(joinedChar); + }); + return joined; +} +function handleIsland() { + console.log("Handling Island Drop."); + getSetAttrs(["drop_name", "drop_data", "drop_content", "character_id", "token_src", "token_size", "sheet_type"], (attrs, setter) => { + let pagedata = {}; + try { + pagedata = JSON.parse(attrs.drop_data); + } catch(e) { + console.log("Invalid drop-Data attribute"); + pagedata = attrs.drop_data; + } + let category = pagedata["Category"]; + let characters = []; + try { + characters = joinNameAndTags(JSON.parse(pagedata["data-characters"])); + } catch(e) { + console.log("Invalid data-Character page attribute"); + characters = []; + } + attrs.sheet_type = "island"; + if(pagedata["Token"]) attrs.token_src = pagedata["Token"]; + if(pagedata["Token Size"]) attrs.token_size = pagedata["Token Size"]; + let charactersData = []; + characters.forEach(character => { + let newCharacter = {}; + let harmType = []; + for(let i=0; i { + const lType = type.toLowerCase(); + if(kHarms.indexOf(lType) > -1) { + newCharacter[`${lType}_${i+1}`] = 1 + if(i == 0) harmType.push(type); + } + }); + } + } + if(character.notes) newCharacter["style_notes"] = character.notes; + const formula = `{{roll=[[{${character.rolls[0].dice}[${character.rolls[0].name}]}k1 + 5[${getTranslation("strife_level")}]]]}} {{harm=${harmType}}}`; + newCharacter.strife_formula = formula; + charactersData.push(newCharacter); + }); + fillRepeatingSectionFromData("characters", charactersData, setter); + }); +} +function handleCompediumDrop() { + getSetAttrs(["token_size", "token_src"], (attrs) => { + if(attrs.token_size) { + let tokenUpdate = {}; + if(attrs.token_src) tokenUpdate.imgsrc = attrs['token_src']; + tokenUpdate.width = 70 * parseInt(attrs.token_size); + tokenUpdate.height = 70 * parseInt(attrs.token_size); + setDefaultToken(tokenUpdate); + } }); } registerSingle( @@ -1311,11 +1868,19 @@ registerSingle( "Handle boon for getting +2d4 on spending divine favor" ); register( - [...kHarms, "divine_wrath", "repeating_strifedie"], + [kRepeatingCharacters], handleStrifeRoll, - "Handle strife player roll" + "Handle generating strife roll query" ); -on("remove:repeating_strifedie", handleStrifeRoll); +register( + [kDropCategory], + handleIsland, + "Handle generating strife roll query" +); +registerCompediumDrop( + handleCompediumDrop +); + registerOpened(function () { getSetAttrs(["version"], function (attrs, setter) { if (!attrs["version"]) performFirstTimeSetup(attrs, setter); @@ -1341,6 +1906,12 @@ registerButton("choose_strife", () => getSetAttrs([], (attrs) => { attrs["sheet_type"] = "strife"; }) +); +registerButton("choose_island", () => + getSetAttrs([], (attrs) => { + attrs["sheet_type"] = "island"; + }) );} )(); +//# sourceURL=agon.js diff --git a/Agon Official/sheet.json b/Agon Official/sheet.json index 763fcdd221..69fc224598 100644 --- a/Agon Official/sheet.json +++ b/Agon Official/sheet.json @@ -1,9 +1,10 @@ { "html": "agon.html", "css": "agon.css", - "authors": "Jakob Oesinghaus, Tim Denee", - "roll20userid": "726129, 782723", + "authors": "Jakob Oesinghaus, Miguel Peres, Tim Denee", + "roll20userid": "726129, 3967686, 782723", "preview": "agon.png", + "compendium": "AGON", "instructions": "This is the offical sheet for Agon by John Harper and Sean Nittner. Please report issues or feature requests [here](https://github.com/joesinghaus/Agon-Sheet/issues).", "legacy": true -} \ No newline at end of file +} diff --git a/Agon Official/translation.json b/Agon Official/translation.json index 66d8267545..2fd5f6d4f2 100644 --- a/Agon Official/translation.json +++ b/Agon Official/translation.json @@ -41,6 +41,7 @@ "divine_wrath": "Divine Wrath", "domain": "Domain", "domains": "Domains", + "edit_strife_dice": "Edit strife dice", "epic": "Epic", "epithet": "Epithet", "epithet_die": "Epithet die", @@ -58,16 +59,19 @@ "honored_god": "Honored God", "ingenuity": "Ingenuity", "insight": "Insight", + "island": "Island", "island_destinies": "Island Destinies", + "island_name": "Island Name", "knowledge": "Knowledge", "lineage_pronouns": "Lineage / Pronouns", "mythic": "Mythic", "name": "Name", "no": "No", "none": "None", + "notes": "Notes", "passion": "Passion", "pathos": "Pathos", - "plus_strife_level": "Plus Strife Level", + "plus_strife_level": "Strife Level", "poseidon": "Poseidon", "perilous": "Perilous", "precision": "Precision", @@ -96,4 +100,4 @@ "wisdom": "Wisdom", "yes": "Yes", "zeus": "Zeus" -} \ No newline at end of file +} diff --git a/Ars_Magica_5th/images/paintbar.jpg b/Ars_Magica_5th/images/paintbar_v2.jpg similarity index 100% rename from Ars_Magica_5th/images/paintbar.jpg rename to Ars_Magica_5th/images/paintbar_v2.jpg diff --git a/Ars_Magica_5th/template.css b/Ars_Magica_5th/template.css index 2fa2f5482d..79b860229c 100644 --- a/Ars_Magica_5th/template.css +++ b/Ars_Magica_5th/template.css @@ -581,7 +581,7 @@ input.sheet-counter[type=number]::-webkit-outer-spin-button { border: 2px solid #d49d4b; border-radius: 0px 15px 0px 0px; background:#544177; - background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Ars_Magica_5th/images/paintbar.jpg"); + background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Ars_Magica_5th/images/paintbar_v2.jpg"); /* text-shadow: 0px 0px 20px black, 0px 0px 15px black, 0px 0px 5px #cb8f33; */ font-family: 'Uncial Antiqua', cursive; text-shadow: 0px 0px 30px #bea05a, 0px 0px 20px #bea05a, 0px 0px 10px white, 2px 2px 15px white, 2px 2px 10px white, 2px 2px 5px white, 2px 2px 2px white; diff --git a/Beyond the Wall and Other Adventures/translations/pl.json b/Beyond the Wall and Other Adventures/translations/pl.json index 89497f5c8b..df35987dec 100644 --- a/Beyond the Wall and Other Adventures/translations/pl.json +++ b/Beyond the Wall and Other Adventures/translations/pl.json @@ -24,7 +24,7 @@ "hit points per level": "Do wytrzymałości na poziom", "Intelligence": "Inteligencja", "languages known": "Znane języki", - "Wisdom": "Mdrość", + "Wisdom": "Mądrość", "save vs mind control": "Do obrony przed kontrolą", "Charisma": "Charyzma", "max # of allies": "Do liczby sojuszników", @@ -38,7 +38,7 @@ "Traits": "Umiejętności", "Equipment": "Ekwipunek", "Armor Class": "Klasa pancerza", - "Fortune Points": "Klasa pancerza", + "Fortune Points": "Punkty Fortuny", "Hit Points": "Punkty Wytrzymałości", "Current": "Obecne", "Weapons": "Broń", diff --git a/ButterflyAspect/ButterflyAspect.css b/ButterflyAspect/ButterflyAspect.css index 6f111b0de5..5fcb3ab351 100644 --- a/ButterflyAspect/ButterflyAspect.css +++ b/ButterflyAspect/ButterflyAspect.css @@ -1 +1 @@ -input.sheet-selector-switch{display:none}input.sheet-selector-switch.sheet-rollmod:not(:checked)~.sheet-container button.sheet-rollmod,input.sheet-selector-switch.sheet-rollmod:checked~.sheet-container button.sheet-norollmod{display:none}.sheet-container{width:850px}.sheet-container button[type=roll]{width:auto;height:24px;padding:0;margin:0;border-top-left-radius:10px;border-bottom-right-radius:10px;border-radius:unset;background-image:none;background-color:transparent;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.sheet-container button[type=roll] label{line-height:24px;font-size:13px;text-align:center;font-weight:700}.sheet-container button[type=roll] input{line-height:24px;font-size:13px;text-align:center;font-weight:700}.sheet-container input{background:transparent;width:100%;border:1px solid #ddd;border-radius:3px}.sheet-container input[type=number]{text-align:center;-moz-appearance:textfield;-webkit-appearance:textfield}.sheet-container textarea{background:transparent;margin:0;width:100%;height:65px;resize:vertical;box-sizing:border-box;border:1px solid #ddd;border-radius:3px}.sheet-container label{width:auto}.sheet-container .sheet-options-flag,.sheet-container .sheet-options-flag+span{position:absolute;top:-10px;left:-10px}.sheet-container .sheet-options-flag{opacity:0;width:16px;min-height:16px;z-index:2}.sheet-container .sheet-options-flag+span{white-space:nowrap;width:16px;height:16px;font-size:16px;font-family:pictos;color:#bbb;cursor:pointer;margin-top:0;display:none}.sheet-container .sheet-options-flag~.sheet-hiddenBox{display:none}.sheet-container .sheet-options-flag:checked~.sheet-hiddenBox{display:inherit}.sheet-container .sheet-number-20{font-size:20px}.sheet-container .sheet-float{float:left;box-sizing:border-box;width:100%;margin:4px 0;padding-right:5px}.sheet-container .sheet-full{width:100%}.sheet-container .sheet-threequarters{width:75%}.sheet-container .sheet-half{width:50%}.sheet-container .sheet-quarter{width:25%}.sheet-container .sheet-break{clear:both}.sheet-container .sheet-textcenter{text-align:center}.sheet-container .sheet-formular{padding:9px;margin-top:15px;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-formular label{display:block;float:left;height:20px;margin-top:-19px;margin-bottom:0px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;font-weight:normal}.sheet-container .sheet-formular input{box-sizing:border-box;border:0}.sheet-container .sheet-gridplace .repcontainer select{border:none;margin:0}.sheet-container .sheet-gridplace .repcontainer input,.sheet-container .sheet-gridplace .repcontainer select,.sheet-container .sheet-gridplace .repcontainer button{width:-webkit-fill-available;width:-moz-available;box-shadow:none}.sheet-container .sheet-gridplace .repcontainer .repitem:nth-child(even){background:#eee}.sheet-container .sheet-gridplace .repcontainer .repcontrol_move{float:left}.sheet-container .sheet-gridplace .repcontainer .repcontrol_del{width:auto}.sheet-container .sheet-header{margin-bottom:4px;padding:2px 8px;background:#000;color:#fff;font-weight:bold;border-top-left-radius:10px;border-bottom-right-radius:10px}.sheet-container .sheet-header span{text-transform:uppercase}.sheet-container .sheet-header button{border:none;float:right;height:unset}.sheet-container .sheet-header button:before{content:"t";padding-right:5px}.sheet-container .sheet-head .sheet-head-logo{width:200px;vertical-align:middle}.sheet-container .sheet-head .sheet-logo{height:200px}.sheet-container .sheet-head .sheet-settings select{width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-head .sheet-head-info{width:calc(100% - 200px)}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes{width:100%}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes>div:first-child{height:36px}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes input{width:100%;box-sizing:border-box}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes textarea{height:64px;border:none}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes .sheet-formular{margin-bottom:5px}.sheet-container .sheet-head-stats{display:flex;width:100%;justify-content:space-between}.sheet-container .sheet-head-stats>div{width:-webkit-min-content;width:-moz-min-content;width:min-content;height:36px}.sheet-container .sheet-head-stats input{max-width:100px;float:right;text-align:center}.sheet-container .sheet-head-stats .sheet-formular>input{width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-head-stats button{display:block;float:left;margin-top:-21px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-head-stats button[type=roll]:before{content:"";display:none}.sheet-container .sheet-head-stats .sheet-health{display:flex;width:-webkit-max-content;width:-moz-max-content;width:max-content;font-size:x-large}.sheet-container .sheet-head-stats .sheet-health input{max-width:80px}.sheet-container .sheet-attribut{display:inherit}.sheet-container .sheet-attribut .sheet-attribut-stats{display:flex;width:100%;justify-content:space-evenly;flex-flow:row wrap}.sheet-container .sheet-attribut .sheet-attribut-stats .sheet-formular{width:21%;height:56px}.sheet-container .sheet-attribut .sheet-attribut-stats input{width:-webkit-fill-available;width:-moz-available;text-align:center}.sheet-container .sheet-attribut .sheet-attribut-stats button{display:block;float:left;margin-top:-21px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-attribut .sheet-attribut-stats button[type=roll]:before{content:"";display:none}.sheet-container .sheet-skills,.sheet-container .sheet-weapons{display:inherit}.sheet-container .sheet-skills .sheet-grid,.sheet-container .sheet-weapons .sheet-grid{display:grid;grid-template-columns:405px 155px 75px 75px 55px 55px;grid-gap:5px}.sheet-container .sheet-skills .sheet-grid>div,.sheet-container .sheet-weapons .sheet-grid>div{background-color:#eee;font-weight:bold;text-align:center}.sheet-container .sheet-skills .sheet-gridplace input,.sheet-container .sheet-weapons .sheet-gridplace input{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-skills .sheet-gridplace button[type=roll],.sheet-container .sheet-weapons .sheet-gridplace button[type=roll]{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-skill,.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-skill,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon{display:grid;grid-template-columns:405px 155px 75px 75px 55px 55px;grid-gap:5px;min-height:40px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem input.sheet-liketextarea,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem input.sheet-liketextarea{width:845px;height:26px;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem textarea,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem textarea{width:845px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem div,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem div{margin:auto 0;text-align:center}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon input.sheet-options-flag,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon input.sheet-options-flag{width:auto}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon:hover .sheet-options-flag+span,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-mage{display:inherit}.sheet-container .sheet-mage input{border:none}.sheet-container .sheet-mage button[type=roll]{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-mage .sheet-grid{display:grid;grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px}.sheet-container .sheet-mage .sheet-grid>div{background-color:#eee;font-weight:bold;text-align:center}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage{display:grid;grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px;min-height:40px}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage input.sheet-options-flag{width:auto}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox{grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px;grid-template-rows:auto;grid-template-areas:"inputtext inputtext inputtext inputtext inputtext inputtext inputtext dauer dauer randomplayer randomplayer ." "textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea"}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-inputtext{grid-area:inputtext}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-dauer{grid-area:dauer}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-randomplayer{grid-area:randomplayer}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-textarea{grid-area:textarea}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem input[type=checkbox]{width:auto;float:left}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem div{margin:auto 0;text-align:center}.sheet-container .sheet-aspects{display:inherit}.sheet-container .sheet-stunts{display:inherit}.sheet-container .sheet-stunts .sheet-repeat-stunt:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-inventar{display:inherit}.sheet-container .sheet-inventar .sheet-rustung{padding-bottom:4px}.sheet-container .sheet-inventar input[type=text],.sheet-container .sheet-inventar input[type=number]{width:81px}.sheet-container .sheet-inventar input[name=attr_name],.sheet-container .sheet-inventar input[name=attr_ruestungName]{width:250px}.sheet-container .sheet-inventar .sheet-repeat-inv:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-notes{display:inherit}.sheet-container .sheet-notes .sheet-repeat-notes:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-xp{display:inherit}.sheet-container .sheet-xp .sheet-totalxp{display:grid;grid-auto-flow:column;grid-gap:50px}.sheet-container .sheet-xp .sheet-totalxp input{width:100%;text-align:end}.sheet-container .sheet-xp .repcontainer{padding-top:15px}.sheet-container .sheet-xp .repcontainer .repitem{display:grid;grid-template-columns:210px 50px 10px 210px 50px 10px 210px 50px;grid-gap:5px;height:40px}.sheet-container .sheet-xp .repcontainer .repitem div{margin:auto 0}.sheet-container .sheet-xp .sheet-brackets{border-left:1px solid #aaa;border-right:1px solid #aaa;border-radius:12px}.sheet-container .sheet-xp .sheet-brackets input{border:none;text-align:center}.sheet-rolltemplate-butterfly .sheet-container{background-color:#fff;border-top-left-radius:10px;border-bottom-right-radius:10px;width:240px}.sheet-rolltemplate-butterfly .sheet-container .sheet-header{margin-bottom:4px;padding:2px 8px;background:#000;color:#fff;font-weight:bold;border-top-left-radius:10px;border-bottom-right-radius:10px}.sheet-rolltemplate-butterfly .sheet-container .sheet-header span{text-transform:uppercase}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div{padding:5px}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div:nth-child(even){background:#eee}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div span{margin-left:15px;font-weight:bold}.sheet-rolltemplate-butterfly .sheet-container .sheet-content .sheet-desc{grid-column:span 2;padding:5px;text-align:center}.sheet-rolltemplate-butterfly .sheet-container .sheet-content .sheet-desc span{display:block;width:100%;margin:0}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult{background-color:transparent;border:none;position:relative;right:30px;float:right;margin:0}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.fullcrit{color:#3fb315}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.fullfail{color:#b31515}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.importandivoll{color:#4a57ed}/*# sourceMappingURL=ButterflyAspect.css.map */ \ No newline at end of file +input.sheet-selector-switch{display:none}input.sheet-selector-switch.sheet-rollmod:not(:checked)~.sheet-container button.sheet-rollmod,input.sheet-selector-switch.sheet-rollmod:checked~.sheet-container button.sheet-norollmod{display:none}.sheet-container{width:850px}.sheet-container button[type=roll]{width:auto;height:24px;padding:0;margin:0;border-top-left-radius:10px;border-bottom-right-radius:10px;border-radius:unset;background-image:none;background-color:transparent;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.sheet-container button[type=roll] label{line-height:24px;font-size:13px;text-align:center;font-weight:700}.sheet-container button[type=roll] input{line-height:24px;font-size:13px;text-align:center;font-weight:700}.sheet-container input{background:transparent;width:100%;border:1px solid #ddd;border-radius:3px}.sheet-container input[type=number]{text-align:center;-moz-appearance:textfield;-webkit-appearance:textfield}.sheet-container textarea{background:transparent;margin:0;width:100%;height:65px;resize:vertical;box-sizing:border-box;border:1px solid #ddd;border-radius:3px}.sheet-container label{width:auto}.sheet-container .sheet-options-flag,.sheet-container .sheet-options-flag+span{position:absolute;top:-10px;left:-10px}.sheet-container .sheet-options-flag{opacity:0;width:16px;min-height:16px;z-index:2}.sheet-container .sheet-options-flag+span{white-space:nowrap;width:16px;height:16px;font-size:16px;font-family:pictos;color:#bbb;cursor:pointer;margin-top:0;display:none}.sheet-container .sheet-options-flag~.sheet-hiddenBox{display:none}.sheet-container .sheet-options-flag:checked~.sheet-hiddenBox{display:inherit}.sheet-container .sheet-number-20{font-size:20px}.sheet-container .sheet-float{float:left;box-sizing:border-box;width:100%;margin:4px 0;padding-right:5px}.sheet-container .sheet-full{width:100%}.sheet-container .sheet-threequarters{width:75%}.sheet-container .sheet-half{width:50%}.sheet-container .sheet-quarter{width:25%}.sheet-container .sheet-break{clear:both}.sheet-container .sheet-textcenter{text-align:center}.sheet-container .sheet-formular{padding:9px;margin-top:15px;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-formular label{display:block;float:left;height:20px;margin-top:-19px;margin-bottom:0px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;font-weight:normal}.sheet-container .sheet-formular input{box-sizing:border-box;border:0}.sheet-container .sheet-gridplace .repcontainer select{border:none;margin:0}.sheet-container .sheet-gridplace .repcontainer input,.sheet-container .sheet-gridplace .repcontainer select,.sheet-container .sheet-gridplace .repcontainer button{width:-webkit-fill-available;width:-moz-available;box-shadow:none}.sheet-container .sheet-gridplace .repcontainer .repitem:nth-child(even){background:#eee}.sheet-container .sheet-gridplace .repcontainer .repcontrol_move{float:left}.sheet-container .sheet-gridplace .repcontainer .repcontrol_del{width:auto}.sheet-container .sheet-header{margin-bottom:4px;padding:2px 8px;background:#000;color:#fff;font-weight:bold;border-top-left-radius:10px;border-bottom-right-radius:10px}.sheet-container .sheet-header span{text-transform:uppercase}.sheet-container .sheet-header button{border:none;float:right;height:unset;color:#fff;font-size:15px;text-shadow:none}.sheet-container .sheet-header button:before{content:"t";padding-right:5px}.sheet-container .sheet-head .sheet-head-logo{width:200px;vertical-align:middle}.sheet-container .sheet-head .sheet-logo{height:200px}.sheet-container .sheet-head .sheet-settings select{width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-head .sheet-head-info{width:calc(100% - 200px)}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes{width:100%}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes>div:first-child{height:36px}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes input{width:100%;box-sizing:border-box}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes textarea{height:64px;border:none}.sheet-container .sheet-head .sheet-head-info .sheet-head-info-boxes .sheet-formular{margin-bottom:5px}.sheet-container .sheet-head-stats{display:flex;width:100%;justify-content:space-between}.sheet-container .sheet-head-stats>div{width:-webkit-min-content;width:-moz-min-content;width:min-content;height:36px}.sheet-container .sheet-head-stats input{max-width:100px;float:right;text-align:center}.sheet-container .sheet-head-stats .sheet-formular>input{width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-head-stats button{display:block;float:left;margin-top:-21px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-head-stats button[type=roll]:before{content:"";display:none}.sheet-container .sheet-head-stats .sheet-health{display:flex;width:-webkit-max-content;width:-moz-max-content;width:max-content;font-size:x-large}.sheet-container .sheet-head-stats .sheet-health input{max-width:80px}.sheet-container .sheet-attribut{display:inherit}.sheet-container .sheet-attribut .sheet-attribut-stats{display:flex;width:100%;justify-content:space-evenly;flex-flow:row wrap}.sheet-container .sheet-attribut .sheet-attribut-stats .sheet-formular{width:21%;height:56px}.sheet-container .sheet-attribut .sheet-attribut-stats input{width:-webkit-fill-available;width:-moz-available;text-align:center}.sheet-container .sheet-attribut .sheet-attribut-stats button{display:block;float:left;margin-top:-21px;background:#fff;padding:2px 5px 2px 5px;color:#b9b9b9;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-attribut .sheet-attribut-stats button[type=roll]:before{content:"";display:none}.sheet-container .sheet-skills,.sheet-container .sheet-weapons{display:inherit}.sheet-container .sheet-skills .sheet-grid,.sheet-container .sheet-weapons .sheet-grid{display:grid;grid-template-columns:405px 155px 75px 75px 55px 55px;grid-gap:5px}.sheet-container .sheet-skills .sheet-grid>div,.sheet-container .sheet-weapons .sheet-grid>div{background-color:#eee;font-weight:bold;text-align:center}.sheet-container .sheet-skills .sheet-gridplace input,.sheet-container .sheet-weapons .sheet-gridplace input{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-skills .sheet-gridplace button[type=roll],.sheet-container .sheet-weapons .sheet-gridplace button[type=roll]{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-skill,.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-skill,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon{display:grid;grid-template-columns:405px 155px 75px 75px 55px 55px;grid-gap:5px;min-height:40px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem input.sheet-liketextarea,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem input.sheet-liketextarea{width:845px;height:26px;border:1px solid #ddd;border-radius:3px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem textarea,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem textarea{width:845px}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem div,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem div{margin:auto 0;text-align:center}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon input.sheet-options-flag,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon input.sheet-options-flag{width:auto}.sheet-container .sheet-skills .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon:hover .sheet-options-flag+span,.sheet-container .sheet-weapons .sheet-gridplace .repcontainer .repitem .sheet-repeat-weapon:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-mage{display:inherit}.sheet-container .sheet-mage input{border:none}.sheet-container .sheet-mage button[type=roll]{border:none;width:-webkit-fill-available;width:-moz-available}.sheet-container .sheet-mage .sheet-grid{display:grid;grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px}.sheet-container .sheet-mage .sheet-grid>div{background-color:#eee;font-weight:bold;text-align:center}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage{display:grid;grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px;min-height:40px}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage input.sheet-options-flag{width:auto}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox{grid-template-columns:130px 60px 60px 60px 60px 60px 60px 60px 60px 60px 60px 55px;grid-gap:5px;grid-template-rows:auto;grid-template-areas:"inputtext inputtext inputtext inputtext inputtext inputtext inputtext dauer dauer randomplayer randomplayer ." "textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea textarea"}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-inputtext{grid-area:inputtext}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-dauer{grid-area:dauer}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-randomplayer{grid-area:randomplayer}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem .sheet-repeat-mage div.sheet-hiddenBox #sheet-textarea{grid-area:textarea}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem input[type=checkbox]{width:auto;float:left}.sheet-container .sheet-mage .sheet-gridplace .repcontainer .repitem div{margin:auto 0;text-align:center}.sheet-container .sheet-aspects{display:inherit}.sheet-container .sheet-stunts{display:inherit}.sheet-container .sheet-stunts .sheet-repeat-stunt:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-inventar{display:inherit}.sheet-container .sheet-inventar .sheet-rustung{padding-bottom:4px}.sheet-container .sheet-inventar input[type=text],.sheet-container .sheet-inventar input[type=number]{width:81px}.sheet-container .sheet-inventar input[name=attr_name],.sheet-container .sheet-inventar input[name=attr_ruestungName]{width:250px}.sheet-container .sheet-inventar .sheet-repeat-inv:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-notes{display:inherit}.sheet-container .sheet-notes .sheet-repeat-notes:hover .sheet-options-flag+span{display:block}.sheet-container .sheet-xp{display:inherit}.sheet-container .sheet-xp .sheet-totalxp{display:grid;grid-auto-flow:column;grid-gap:50px}.sheet-container .sheet-xp .sheet-totalxp input{width:100%;text-align:end}.sheet-container .sheet-xp .repcontainer{padding-top:15px}.sheet-container .sheet-xp .repcontainer .repitem{display:grid;grid-template-columns:210px 50px 10px 210px 50px 10px 210px 50px;grid-gap:5px;height:40px}.sheet-container .sheet-xp .repcontainer .repitem div{margin:auto 0}.sheet-container .sheet-xp .sheet-brackets{border-left:1px solid #aaa;border-right:1px solid #aaa;border-radius:12px}.sheet-container .sheet-xp .sheet-brackets input{border:none;text-align:center}.sheet-rolltemplate-butterfly .sheet-container{background-color:#fff;border-top-left-radius:10px;border-bottom-right-radius:10px;width:240px}.sheet-rolltemplate-butterfly .sheet-container .sheet-header{margin-bottom:4px;padding:2px 8px;background:#000;color:#fff;font-weight:bold;border-top-left-radius:10px;border-bottom-right-radius:10px}.sheet-rolltemplate-butterfly .sheet-container .sheet-header span{text-transform:uppercase}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div{padding:5px}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div:nth-child(even){background:#eee}.sheet-rolltemplate-butterfly .sheet-container .sheet-content div span{margin-left:15px;font-weight:bold}.sheet-rolltemplate-butterfly .sheet-container .sheet-content .sheet-desc{grid-column:span 2;padding:5px;text-align:center}.sheet-rolltemplate-butterfly .sheet-container .sheet-content .sheet-desc span{display:block;width:100%;margin:0}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult{background-color:transparent;border:none;position:relative;right:30px;float:right;margin:0}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.fullcrit{color:#3fb315}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.fullfail{color:#b31515}.sheet-rolltemplate-butterfly .sheet-container .inlinerollresult.importandivoll{color:#4a57ed}/*# sourceMappingURL=ButterflyAspect.css.map */ \ No newline at end of file diff --git a/ButterflyAspect/ButterflyAspect.css.map b/ButterflyAspect/ButterflyAspect.css.map index fd15a4f4d6..fb724df2b6 100644 --- a/ButterflyAspect/ButterflyAspect.css.map +++ b/ButterflyAspect/ButterflyAspect.css.map @@ -1 +1 @@ -{"version":3,"sources":["ButterflyAspect.sass"],"names":[],"mappings":"AAEA,4BACI,YAAA,CAEA,wLAEI,YAAA,CAER,iBACI,WAAA,CAEA,mCACI,UAAA,CACA,WAAA,CACA,SAAA,CACA,QAAA,CACA,2BAAA,CACA,+BAAA,CACA,mBAAA,CACA,qBAAA,CACA,4BAAA,CACA,qBAAA,CACA,0BAAA,CACA,6BAAA,CAEA,yCACI,gBAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CAEJ,yCACI,gBAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CAER,uBACI,sBAAA,CACA,UAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,oCACI,iBAAA,CACA,yBAAA,CACA,4BAAA,CAEJ,0BACI,sBAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,eAAA,CACA,qBAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,uBACI,UAAA,CAEJ,+EAEI,iBAAA,CACA,SAAA,CACA,UAAA,CAEJ,qCACI,SAAA,CACA,UAAA,CACA,eAAA,CACA,SAAA,CAEA,0CACI,kBAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,kBAAA,CACA,UAAA,CACA,cAAA,CACA,YAAA,CACA,YAAA,CAEJ,sDACI,YAAA,CAEJ,8DACI,eAAA,CAER,kCACI,cAAA,CAEJ,8BACI,UAAA,CACA,qBAAA,CACA,UAAA,CACA,YAAA,CACA,iBAAA,CAGA,6BACI,UAvGJ,CAsGA,sCACI,SAvGJ,CAsGA,6BACI,SAvGJ,CAsGA,gCACI,SAvGJ,CAyGJ,8BACI,UAAA,CAEJ,mCACI,iBAAA,CAEJ,iCACI,WAAA,CACA,eAAA,CACA,qBAAA,CACA,iBAAA,CAEA,uCACI,aAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,kBAAA,CAEJ,uCACI,qBAAA,CACA,QAAA,CAMA,uDACI,WAAA,CACA,QAAA,CAEJ,oKAGI,4BAAA,CACA,oBAAA,CAGA,eAAA,CAIA,yEACI,eAAA,CAER,iEACI,UAAA,CAEJ,gEACI,UAAA,CAEZ,+BACI,iBAAA,CACA,eAAA,CACA,eAAA,CACA,UAAA,CACA,gBAAA,CACA,2BAAA,CACA,+BAAA,CAEA,oCACI,wBAAA,CAEJ,sCACI,WAAA,CACA,WAAA,CACA,YAAA,CAEA,6CACI,WAAA,CACA,iBAAA,CAGR,8CACI,WAAA,CACA,qBAAA,CAEJ,yCACI,YAAA,CAIA,oDACI,4BAAA,CACA,oBAAA,CAER,8CACI,wBAAA,CAEA,qEACI,UAAA,CAII,qFACI,WAAA,CAER,2EACI,UAAA,CACA,qBAAA,CAEJ,8EACI,WAAA,CACA,WAAA,CAEJ,qFACI,iBAAA,CAEhB,mCACI,YAAA,CACA,UAAA,CACA,6BAAA,CAEA,uCACI,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,WAAA,CAEJ,yCACI,eAAA,CACA,WAAA,CACA,iBAAA,CAIA,yDACI,4BAAA,CACA,oBAAA,CAER,0CACI,aAAA,CACA,UAAA,CACA,gBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,qBAAA,CACA,iBAAA,CAIA,4DACI,UAAA,CACA,YAAA,CAER,iDACI,YAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,iBAAA,CAEA,uDACI,cAAA,CAEZ,iCACI,eAAA,CAEA,uDACI,YAAA,CACA,UAAA,CACA,4BAAA,CACA,kBAAA,CAEA,uEACI,SAAA,CACA,WAAA,CAEJ,6DACI,4BAAA,CACA,oBAAA,CACA,iBAAA,CAEJ,8DACI,aAAA,CACA,UAAA,CACA,gBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,qBAAA,CACA,iBAAA,CAIA,gFACI,UAAA,CACA,YAAA,CAOhB,+DAEI,eAAA,CAEA,uFARA,YAAA,CACA,qDAAA,CACA,YAAA,CASI,+FACI,qBAAA,CACA,gBAAA,CACA,iBAAA,CAIJ,6GACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAEJ,qIACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAMI,gXAhCZ,YAAA,CACA,qDAAA,CACA,YAAA,CAiCgB,eAAA,CAEJ,iMACI,WAAA,CACA,WAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,iKACI,WAAA,CAEJ,uJACI,aAAA,CACA,iBAAA,CAIA,2OACI,UAAA,CAEJ,uPACI,aAAA,CAUxB,6BACI,eAAA,CAEA,mCACI,WAAA,CAEJ,+CACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAEJ,yCAdA,YAAA,CAJA,kFAAA,CACA,YAAA,CAoBI,6CACI,qBAAA,CACA,gBAAA,CACA,iBAAA,CAQI,wFA5BZ,YAAA,CAJA,kFAAA,CACA,YAAA,CAiCgB,eAAA,CAEA,iHACI,UAAA,CAEJ,uHACI,aAAA,CAEJ,4GA1ChB,kFAAA,CACA,YAAA,CA2CoB,uBAAA,CACA,iPAAA,CAEA,6HACI,mBAAA,CAEJ,yHACI,eAAA,CAEJ,gIACI,sBAAA,CAEJ,4HACI,kBAAA,CAEZ,0FACI,UAAA,CACA,UAAA,CAEJ,yEACI,aAAA,CACA,iBAAA,CAEpB,gCACI,eAAA,CAEJ,+BACI,eAAA,CAEA,kFACI,aAAA,CAER,iCACI,eAAA,CAEA,gDACI,kBAAA,CAEJ,sGAEI,UAAA,CAEJ,sHAEI,WAAA,CAEJ,kFACI,aAAA,CAER,8BACI,eAAA,CAEA,iFACI,aAAA,CAER,2BACI,eAAA,CAEA,0CACI,YAAA,CACA,qBAAA,CACA,aAAA,CAEA,gDACI,UAAA,CACA,cAAA,CAER,yCACI,gBAAA,CAEA,kDACI,YAAA,CACA,gEAAA,CACA,YAAA,CACA,WAAA,CAEA,sDACI,aAAA,CAEZ,2CACI,0BAAA,CACA,2BAAA,CACA,kBAAA,CAEA,iDACI,WAAA,CACA,iBAAA,CAIZ,+CACI,qBAAA,CACA,2BAAA,CACA,+BAAA,CACA,WAAA,CAEA,6DACI,iBAAA,CACA,eAAA,CACA,eAAA,CACA,UAAA,CACA,gBAAA,CACA,2BAAA,CACA,+BAAA,CAEA,kEACI,wBAAA,CAIJ,kEACI,WAAA,CAEA,kFACI,eAAA,CAEJ,uEACI,gBAAA,CACA,gBAAA,CAER,0EACI,kBAAA,CACA,WAAA,CACA,iBAAA,CAEA,+EACI,aAAA,CACA,UAAA,CACA,QAAA,CAEZ,iEACI,4BAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CAEA,0EACI,aAAA,CAEJ,0EACI,aAAA,CAEJ,gFACI,aAAA","file":"ButterflyAspect.css"} \ No newline at end of file +{"version":3,"sources":["ButterflyAspect.sass"],"names":[],"mappings":"AAEA,4BACI,YAAA,CAEA,wLAEI,YAAA,CAER,iBACI,WAAA,CAEA,mCACI,UAAA,CACA,WAAA,CACA,SAAA,CACA,QAAA,CACA,2BAAA,CACA,+BAAA,CACA,mBAAA,CACA,qBAAA,CACA,4BAAA,CACA,qBAAA,CACA,0BAAA,CACA,6BAAA,CAEA,yCACI,gBAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CAEJ,yCACI,gBAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CAER,uBACI,sBAAA,CACA,UAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,oCACI,iBAAA,CACA,yBAAA,CACA,4BAAA,CAEJ,0BACI,sBAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,eAAA,CACA,qBAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,uBACI,UAAA,CAEJ,+EAEI,iBAAA,CACA,SAAA,CACA,UAAA,CAEJ,qCACI,SAAA,CACA,UAAA,CACA,eAAA,CACA,SAAA,CAEA,0CACI,kBAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,kBAAA,CACA,UAAA,CACA,cAAA,CACA,YAAA,CACA,YAAA,CAEJ,sDACI,YAAA,CAEJ,8DACI,eAAA,CAER,kCACI,cAAA,CAEJ,8BACI,UAAA,CACA,qBAAA,CACA,UAAA,CACA,YAAA,CACA,iBAAA,CAGA,6BACI,UAvGJ,CAsGA,sCACI,SAvGJ,CAsGA,6BACI,SAvGJ,CAsGA,gCACI,SAvGJ,CAyGJ,8BACI,UAAA,CAEJ,mCACI,iBAAA,CAEJ,iCACI,WAAA,CACA,eAAA,CACA,qBAAA,CACA,iBAAA,CAEA,uCACI,aAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,kBAAA,CAEJ,uCACI,qBAAA,CACA,QAAA,CAMA,uDACI,WAAA,CACA,QAAA,CAEJ,oKAGI,4BAAA,CACA,oBAAA,CAGA,eAAA,CAIA,yEACI,eAAA,CAER,iEACI,UAAA,CAEJ,gEACI,UAAA,CAEZ,+BACI,iBAAA,CACA,eAAA,CACA,eAAA,CACA,UAAA,CACA,gBAAA,CACA,2BAAA,CACA,+BAAA,CAEA,oCACI,wBAAA,CAEJ,sCACI,WAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CACA,cAAA,CACA,gBAAA,CAEA,6CACI,WAAA,CACA,iBAAA,CAGR,8CACI,WAAA,CACA,qBAAA,CAEJ,yCACI,YAAA,CAIA,oDACI,4BAAA,CACA,oBAAA,CAER,8CACI,wBAAA,CAEA,qEACI,UAAA,CAII,qFACI,WAAA,CAER,2EACI,UAAA,CACA,qBAAA,CAEJ,8EACI,WAAA,CACA,WAAA,CAEJ,qFACI,iBAAA,CAEhB,mCACI,YAAA,CACA,UAAA,CACA,6BAAA,CAEA,uCACI,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,WAAA,CAEJ,yCACI,eAAA,CACA,WAAA,CACA,iBAAA,CAIA,yDACI,4BAAA,CACA,oBAAA,CAER,0CACI,aAAA,CACA,UAAA,CACA,gBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,qBAAA,CACA,iBAAA,CAIA,4DACI,UAAA,CACA,YAAA,CAER,iDACI,YAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,iBAAA,CAEA,uDACI,cAAA,CAEZ,iCACI,eAAA,CAEA,uDACI,YAAA,CACA,UAAA,CACA,4BAAA,CACA,kBAAA,CAEA,uEACI,SAAA,CACA,WAAA,CAEJ,6DACI,4BAAA,CACA,oBAAA,CACA,iBAAA,CAEJ,8DACI,aAAA,CACA,UAAA,CACA,gBAAA,CACA,eAAA,CACA,uBAAA,CACA,aAAA,CACA,qBAAA,CACA,iBAAA,CAIA,gFACI,UAAA,CACA,YAAA,CAOhB,+DAEI,eAAA,CAEA,uFARA,YAAA,CACA,qDAAA,CACA,YAAA,CASI,+FACI,qBAAA,CACA,gBAAA,CACA,iBAAA,CAIJ,6GACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAEJ,qIACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAMI,gXAhCZ,YAAA,CACA,qDAAA,CACA,YAAA,CAiCgB,eAAA,CAEJ,iMACI,WAAA,CACA,WAAA,CACA,qBAAA,CACA,iBAAA,CAEJ,iKACI,WAAA,CAEJ,uJACI,aAAA,CACA,iBAAA,CAIA,2OACI,UAAA,CAEJ,uPACI,aAAA,CAUxB,6BACI,eAAA,CAEA,mCACI,WAAA,CAEJ,+CACI,WAAA,CACA,4BAAA,CACA,oBAAA,CAEJ,yCAdA,YAAA,CAJA,kFAAA,CACA,YAAA,CAoBI,6CACI,qBAAA,CACA,gBAAA,CACA,iBAAA,CAQI,wFA5BZ,YAAA,CAJA,kFAAA,CACA,YAAA,CAiCgB,eAAA,CAEA,iHACI,UAAA,CAEJ,uHACI,aAAA,CAEJ,4GA1ChB,kFAAA,CACA,YAAA,CA2CoB,uBAAA,CACA,iPAAA,CAEA,6HACI,mBAAA,CAEJ,yHACI,eAAA,CAEJ,gIACI,sBAAA,CAEJ,4HACI,kBAAA,CAEZ,0FACI,UAAA,CACA,UAAA,CAEJ,yEACI,aAAA,CACA,iBAAA,CAEpB,gCACI,eAAA,CAEJ,+BACI,eAAA,CAEA,kFACI,aAAA,CAER,iCACI,eAAA,CAEA,gDACI,kBAAA,CAEJ,sGAEI,UAAA,CAEJ,sHAEI,WAAA,CAEJ,kFACI,aAAA,CAER,8BACI,eAAA,CAEA,iFACI,aAAA,CAER,2BACI,eAAA,CAEA,0CACI,YAAA,CACA,qBAAA,CACA,aAAA,CAEA,gDACI,UAAA,CACA,cAAA,CAER,yCACI,gBAAA,CAEA,kDACI,YAAA,CACA,gEAAA,CACA,YAAA,CACA,WAAA,CAEA,sDACI,aAAA,CAEZ,2CACI,0BAAA,CACA,2BAAA,CACA,kBAAA,CAEA,iDACI,WAAA,CACA,iBAAA,CAIZ,+CACI,qBAAA,CACA,2BAAA,CACA,+BAAA,CACA,WAAA,CAEA,6DACI,iBAAA,CACA,eAAA,CACA,eAAA,CACA,UAAA,CACA,gBAAA,CACA,2BAAA,CACA,+BAAA,CAEA,kEACI,wBAAA,CAIJ,kEACI,WAAA,CAEA,kFACI,eAAA,CAEJ,uEACI,gBAAA,CACA,gBAAA,CAER,0EACI,kBAAA,CACA,WAAA,CACA,iBAAA,CAEA,+EACI,aAAA,CACA,UAAA,CACA,QAAA,CAEZ,iEACI,4BAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CAEA,0EACI,aAAA,CAEJ,0EACI,aAAA,CAEJ,gFACI,aAAA","file":"ButterflyAspect.css"} \ No newline at end of file diff --git a/ButterflyAspect/ButterflyAspect.html b/ButterflyAspect/ButterflyAspect.html index bc3e95a94e..591060ded2 100644 --- a/ButterflyAspect/ButterflyAspect.html +++ b/ButterflyAspect/ButterflyAspect.html @@ -26,19 +26,19 @@
- +
- +
- / - + / +
@@ -245,7 +245,7 @@
- y + y
+
- +
- +
diff --git a/ButterflyAspect/ButterflyAspect.sass b/ButterflyAspect/ButterflyAspect.sass index 2c1f7e46e8..7d358cc834 100644 --- a/ButterflyAspect/ButterflyAspect.sass +++ b/ButterflyAspect/ButterflyAspect.sass @@ -174,6 +174,9 @@ input.sheet-selector-switch border: none float: right height: unset + color: #fff + font-size: 15px + text-shadow: none &:before content: "t" diff --git a/ChroniquesGalactiques/ReadMe.md b/ChroniquesGalactiques/ReadMe.md index f8326c7641..49040d0d57 100644 --- a/ChroniquesGalactiques/ReadMe.md +++ b/ChroniquesGalactiques/ReadMe.md @@ -10,10 +10,18 @@ Le jeu complet est paru dans le magazine [Casus Belli](http://www.black-book-edi # Version courante -V3.112 [Screenshot](cog_v3.png) +V3.113 [Screenshot](cog_v3.png) # Notes de version +## V3.113 (2021.03.07) + +_Fiche de vaisseau_ + +- Correction d'un bug sur les jets d'attaque (en cas d'ajout d'une nouvelle ligne d'arme sans renseigner de canonnier) +- Correction du calcul de l'Initiative pour prise en compte d'un vaisseau sans pilote +- Ajout d'un champ d'attribut pour les points d'énergie perdus (@{PEV_DMG}) et modification du calcul des PEV max + ## V3.112 (2021.03.01) _Fiche de PJ_ diff --git a/ChroniquesGalactiques/cog.html b/ChroniquesGalactiques/cog.html index 0917edcdb4..25663e2b5f 100644 --- a/ChroniquesGalactiques/cog.html +++ b/ChroniquesGalactiques/cog.html @@ -1,8 +1,8 @@
- - + + @@ -83,7 +83,7 @@
-
@@ -2125,14 +2125,28 @@ = - + + + + - + + + - + + + + + + + + + + + - PE perdus + + + @@ -2218,11 +2232,11 @@ INITIATIVE   + title="@{INITV_CARAC}" value="@{DEX_TEST}" disabled /> + value="([[@{INITV_CARAC}]][Manoeuvrabilité]+[[@{INITV_PIL}]][DEX pilote])*[[@{POSTE_PIL_OQP}]][Poste de pilotage occupé]" disabled /> @@ -2331,7 +2345,7 @@ - + @@ -2342,7 +2356,7 @@ y
- +
ARMES / ATTAQUESATTAQUEATTAQUE CRIT. DM SPÉCIAL
@@ -2471,24 +2470,17 @@
-
@@ -2378,22 +2392,7 @@ ++
- - - - - - - -
- Jets  - - - Initiative variable  -
+
    +
  • Jets  + +
  • +
  • Initiative variable  + +
  • +
@@ -5209,45 +5201,45 @@ function updateShipDEF() { 'DEXTERITE', 'DEX_BUFF', 'POSTE_PIL_OQP', + 'DEFVPIL_BUFF', 'POSTE_PIL_BONUS', 'PERCEPTION', 'PER_BUFF', 'POSTE_SEN_OQP', - 'POSTE_SEN_BONUS', - 'DEFVPIL_BUFF', 'DEFVSEN_BUFF', + 'POSTE_SEN_BONUS', 'CONSTITUTION', ], function (values) { let defrap = 0; let defsol = 0; - const dexv = getMod(values.DEXTERITE); - const dexv_buff = parseInt(values.DEX_BUFF) || 0; + const mod_dex = getMod(values.DEXTERITE); + const dex_buff = parseInt(values.DEX_BUFF) || 0; const poste_pil_oqp = parseInt(values.POSTE_PIL_OQP) || 0; + const defvpil_buff = parseInt(values.DEFVPIL_BUFF) || 0; const poste_pil_bonus = parseInt(values.POSTE_PIL_BONUS) || 0; - const perv = getMod(values.PERCEPTION); - const perv_buff = parseInt(values.PER_BUFF) || 0; + const mod_per = getMod(values.PERCEPTION); + const per_buff = parseInt(values.PER_BUFF) || 0; const poste_sen_oqp = parseInt(values.POSTE_SEN_OQP) || 0; const poste_sen_bonus = parseInt(values.POSTE_SEN_BONUS) || 0; - const defvpil_buff = parseInt(values.DEFVPIL_BUFF) || 0; const defvsen_buff = parseInt(values.DEFVSEN_BUFF) || 0; - const conv = getMod(values.CONSTITUTION); + const con = getMod(values.CONSTITUTION); if (poste_pil_oqp !== 0) { defrap = 10 + - dexv + - dexv_buff + + mod_dex + + dex_buff + defvpil_buff + poste_pil_bonus + - perv + - perv_buff + + mod_per + + per_buff + poste_sen_oqp * (defvsen_buff + poste_sen_bonus); } defsol = 10 + - conv + - perv + - perv_buff + + con + + mod_per + + per_buff + poste_sen_oqp * (defvsen_buff + poste_sen_bonus); setAttrs({ DEFRAP: defrap, DEFSOL: defsol }); } @@ -5259,13 +5251,13 @@ on( 'change:dexterite', 'change:dex_buff', 'change:poste_pil_oqp', + 'change:defvpil_buff', 'change:poste_pil_bonus', 'change:perception', 'change:per_buff', 'change:poste_sen_oqp', - 'change:poste_sen_bonus', - 'change:defvpil_buff', 'change:defvsen_buff', + 'change:poste_sen_bonus', 'change:constitution', ].join(' '), function () { @@ -5277,19 +5269,28 @@ on( * Energy points management functions */ function updateShipEP() { - getAttrs(['type_fiche', 'NIVEAU', 'PEV_BUFF', 'FOR'], function (values) { - if (values.type_fiche !== 'vaisseau') return; - let pev_max = 0; - pev_max += parseInt(values.NIVEAU) || 0; - pev_max += parseInt(values.PEV_BUFF) || 0; - pev_max += parseInt(values.FOR) || 0; - setAttrs({ PEV_max: pev_max }); - }); + getAttrs( + ['type_fiche', 'NIVEAU', 'PEV_BUFF', 'FORCE', 'PEV_DMG'], + function (values) { + if (values.type_fiche !== 'vaisseau') return; + let pev_max = 0; + pev_max += parseInt(values.NIVEAU) || 0; + pev_max += parseInt(values.PEV_BUFF) || 0; + pev_max += getMod(values.FORCE) || 0; + pev_max -= parseInt(values.PEV_DMG) || 0; + setAttrs({ PEV_max: pev_max }); + } + ); } -on('change:niveau change:pev_buff change:for', function () { - updateShipEP(); -}); +on( + ['change:niveau', 'change:pev_buff', 'change:force', 'change:pev_dmg'].join( + ' ' + ), + function () { + updateShipEP(); + } +); on( [ diff --git a/ChroniquesGalactiques/sheet.json b/ChroniquesGalactiques/sheet.json index 622ea937c9..db16c75804 100644 --- a/ChroniquesGalactiques/sheet.json +++ b/ChroniquesGalactiques/sheet.json @@ -8,6 +8,6 @@ "1794854" ], "preview": "cog_v3.png", - "instructions": "Feuille de Personnage (incluant quelques jets) pour Chroniques Galactiques (Chroniques Oubliées Science-Fiction) paru dans le magazine Casus Belli 17,18 et 19 (http://www.black-book-editions.fr/catalogue.php?id=207). Version 3.112 (01/03/2021). [Lisez-moi](https://github.com/Roll20/roll20-character-sheets/blob/master/ChroniquesGalactiques/ReadMe.md).", + "instructions": "Feuille de Personnage (incluant quelques jets) pour Chroniques Galactiques (Chroniques Oubliées Science-Fiction) paru dans le magazine Casus Belli 17,18 et 19 (http://www.black-book-editions.fr/catalogue.php?id=207). Version 3.113 (07/03/2021). [Lisez-moi](https://github.com/Roll20/roll20-character-sheets/blob/master/ChroniquesGalactiques/ReadMe.md).", "legacy": true } diff --git a/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.css b/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.css index bae96945fa..9c0129a305 100644 --- a/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.css +++ b/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.css @@ -13,17 +13,6 @@ font-family: sans-serif; } - button[type=roll].sheet-blank-roll-button::before { - content: ''; - } - - button[type="roll"].sheet-blank-roll-button { - color: #444444 !important; - border: 2px solid #444444 !important; - background-color: rgba(255, 255, 255, 0.6) !important; - background-image: none !important; - padding: 2px 5px 2px 5px; - } .sheet-preload{opacity:0;position:absolute} .sheet-preload img{width:1px;height:1px} select { @@ -104,7 +93,7 @@ } .sheet-box .sheet-box { - background-color: rgba(255, 255, 255, 0.3) !important; + background-color: rgba(255, 255, 255, 0.3) border: 1px solid rgba(55, 55, 55, 0.3); } .sheet-skill { @@ -134,6 +123,13 @@ .sheet-trigger { font-size: small; } + + .sheet-trauma { + background-color: rgba(172, 23, 37, 0.25); + font-weight: 800 !important; + color: #ffffff !important; + } + h1 { font-size: 18px; line-height: 26px; @@ -175,6 +171,26 @@ display: block !important; } + button[type=roll].sheet-blank-roll-button::before { + content: ''; + } + + button[type="roll"].sheet-blank-roll-button { + color: #444444 !important; + border: 2px solid #444444 !important; + background-color: rgba(255, 255, 255, 0.6) !important; + width: 145px; + background-image: none !important; + padding: 2px 5px 2px 5px; + } + + .sheet-locked[name="attr_Portrait"][value^="PC"] + div.sheet-pc { + display: block !important; + } + .sheet-locked[name="attr_Portrait"][value^="Cat"] + div.sheet-catalyst { + display: block !important; + } + .sheet-locked + div span, .sheet-d0, .sheet-d4, @@ -186,6 +202,7 @@ .sheet-locked + div .sheet-hide, .sheet-locked + div.sheet-hide, .sheet-locked + div span, + .sheet-locked[value="2"] + div h4, .sheet-circle + div h4 { display: none; } @@ -203,31 +220,42 @@ width: 35px; height: 35px; } - .sheet-locked[value="PC0"] + div img[alt="PC0"], + .sheet-locked[value="PC0"] + div img[alt="PC0"] { + display: block; + width: 240px; + height: 250px; + } + .sheet-locked[value="PC1"] + div img[alt="PC1"], .sheet-locked[value="PC2"] + div img[alt="PC2"], .sheet-locked[value="PC3"] + div img[alt="PC3"], .sheet-locked[value="PC4"] + div img[alt="PC4"], .sheet-locked[value="PC5"] + div img[alt="PC5"], - .sheet-locked[value="PC6"] + div img[alt="PC6"] { + .sheet-locked[value="PC6"] + div img[alt="PC6"], + .sheet-locked[value="Cat1"] + div img[alt="Cat1"], + .sheet-locked[value="Cat2"] + div img[alt="Cat2"] { display: block; width: 234px; height: 244px; } - - + .sheet-locked[value="PC1"] + div.sheet-PC1, + .sheet-locked[value="PC2"] + div.sheet-PC2, + .sheet-locked[value="PC3"] + div.sheet-PC3, + .sheet-locked[value="PC4"] + div.sheet-PC4, + .sheet-locked[value="PC5"] + div.sheet-PC5, + .sheet-locked[value="PC6"] + div.sheet-PC6, + .sheet-locked[value="Cat1"] + div.sheet-Cat1, + .sheet-locked[value="Cat2"] + div.sheet-Cat2, + .sheet-locked[value="PC0"] + div div.sheet-PC0, + .sheet-locked[value="Cat1"] + div div.sheet-PC0, + .sheet-locked[value="Cat2"] + div div.sheet-PC0, .sheet-locked[value="PC1"] + div div.sheet-PC1, .sheet-locked[value="PC2"] + div div.sheet-PC2, .sheet-locked[value="PC3"] + div div.sheet-PC3, .sheet-locked[value="PC4"] + div div.sheet-PC4, .sheet-locked[value="PC5"] + div div.sheet-PC5, - .sheet-locked[value="PC6"] + div div.sheet-PC6 { - display: block !important; - } - - - + .sheet-locked[value="PC6"] + div div.sheet-PC6, .sheet-locked[value="0"] + div[class="sheet-d0"], .sheet-locked[value="4"] + div[class="sheet-d4"], .sheet-locked[value="6"] + div[class="sheet-d6"], @@ -240,8 +268,16 @@ .sheet-locked[value="8"] + div span[class="sheet-d8"], .sheet-locked[value="10"] + div span[class="sheet-d10"], .sheet-locked[value="12"] + div span[class="sheet-d12"] { - display: block; + display: block !important; } + + .sheet-locked[value|="PC"] + div button.sheet-pc { + display: inline-block !important; + } + .sheet-locked[value|="Cat"] + div button.sheet-catalyst { + display: inline-block !important; + } + .sheet-block-pc, .sheet-block-switch:checked ~ .sheet-block-mobnpc { display: block; diff --git a/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.html b/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.html index 2df8544a49..b4676e7e8a 100644 --- a/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.html +++ b/CortexPrime-Tales-of-Xadia-Playtest/ToX-CortexPrime.html @@ -1,16 +1,32 @@

Edit Dice Values

+
+

+ Catalyst or PC + +

+

Character

@@ -18,30 +34,33 @@

Attributes
[ - D10 - D8 - D8 - D8 - D6 - D6 + D10 + D8 + D8 + D8 + D6 + D6 ]

Agility


Awareness

@@ -49,255 +68,332 @@

Influence


Intellect


Spirit


Strength +


+

+ Catalyst +


 

Values
[ - D10 - D8 - D8 - D6 - D6 - D4 + D10 + D8 + D8 + D6 + D6 + D4 ]

Devotion


Liberty


Glory


Mastery


Justice


Truth


 

Specialties
[ - D8 - D6 + D8 + D6 / - D6 - D6 - D6 + D6 + D6 + D6 ]

Agriculture


Animal Training


Climbing


Crafting


Diplomacy


History


Politics


Spear Fighting


Sneaking +

+
+

+ Stewardship +


Strategy


Swordplay


Tracking


Dark Magic +

+
+

+ Sky Magic +


Sun Magic


Moon Magic


@@ -316,6 +412,8 @@ PC4 PC5 PC6 + Cat1 + Cat2
@@ -329,9 +427,22 @@ PC4 PC5 PC6 + Cat1 + Cat2 +
+
+ +
+ 4 + 6 + 8 + 10 + 12 +

 Catalyst

+
- +
4 6 @@ -342,7 +453,7 @@
- +
4 6 @@ -353,7 +464,7 @@
- +
4 6 @@ -364,7 +475,7 @@
- +
4 6 @@ -375,7 +486,7 @@
- +
4 6 @@ -386,7 +497,7 @@
- +
4 6 @@ -396,10 +507,9 @@

 Strength

-
- +
+
@@ -409,7 +519,7 @@

Description

- +
@@ -512,6 +622,8 @@
6 8 + 10 + 12
@@ -523,6 +635,8 @@
6 8 + 10 + 12
@@ -534,6 +648,8 @@
6 8 + 10 + 12
@@ -545,6 +661,8 @@
6 8 + 10 + 12
@@ -556,6 +674,8 @@
6 8 + 10 + 12
@@ -567,6 +687,8 @@
6 8 + 10 + 12
@@ -578,6 +700,8 @@
6 8 + 10 + 12
@@ -589,6 +713,8 @@
6 8 + 10 + 12
@@ -600,6 +726,8 @@
6 8 + 10 + 12
@@ -611,6 +739,8 @@
6 8 + 10 + 12
@@ -622,6 +752,8 @@
6 8 + 10 + 12
@@ -633,6 +765,8 @@
6 8 + 10 + 12
@@ -644,6 +778,8 @@
6 8 + 10 + 12
@@ -655,6 +791,8 @@
6 8 + 10 + 12
@@ -666,18 +804,20 @@
6 8 + 10 + 12
-

Stress [Added to your opponents pool]

+

Stress/Trauma [Added to your opponents pool]

- Afraid + Afraid Stress
6 @@ -687,10 +827,23 @@
- + +
+
+ Afraid Trauma + +
+ 6 + 8 + 10 + 12 +
+
+
+
- Angry + Angry Stress
@@ -701,10 +854,24 @@
- + +
+
+ Angry Trauma + +
+ + 6 + 8 + 10 + 12 +
+
+
+
- Corrupted + Corrupted Stress
@@ -715,10 +882,24 @@
- + +
+
+ Corrupted Trauma + +
+ + 6 + 8 + 10 + 12 +
+
+
+
- Exhausted + Exhausted Stress
@@ -729,10 +910,24 @@
- + +
+
+ Exhausted Trauma + +
+ + 6 + 8 + 10 + 12 +
+
+
+
- Injured + Injured Stress
@@ -743,10 +938,24 @@
- + +
+
+ Injured Trauma + +
+ + 6 + 8 + 10 + 12 +
+
+
+
- Insecure + Insecure Stress
@@ -757,158 +966,203 @@
+ +
+
+ Insecure Trauma + +
+ + 6 + 8 + 10 + 12 +
+
+

Distinctions

- +
-
Piloting Bonus +
@@ -820,7 +822,7 @@
- +
@@ -892,7 +894,7 @@
- +
@@ -1771,7 +1773,7 @@
- + @@ -1803,9 +1805,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -1919,7 +1923,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -1943,7 +1951,7 @@
- + @@ -1976,9 +1984,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2092,7 +2102,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2116,7 +2130,7 @@
- + @@ -2149,9 +2163,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2267,7 +2283,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2293,7 +2313,7 @@
- + @@ -2326,9 +2346,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2443,7 +2465,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2467,7 +2493,7 @@
- + @@ -2500,9 +2526,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2616,7 +2644,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2640,7 +2672,7 @@
- + @@ -2673,9 +2705,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2789,7 +2823,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2815,7 +2853,7 @@
- + @@ -2848,9 +2886,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -2964,7 +3004,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -2988,7 +3032,7 @@
- + @@ -3021,9 +3065,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -3137,7 +3183,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -3162,7 +3212,7 @@
- + @@ -3195,9 +3245,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -3311,7 +3363,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -3335,7 +3391,7 @@
- + @@ -3368,9 +3424,11 @@
RANGE:
-
TARGET: - -
+
POINT COST:
@@ -3484,7 +3542,11 @@
Activation Time:
Point Cost:
Range:
-
Target:
+
Duration: Concentration
@@ -4081,6 +4143,27 @@
GENERAL OPTIONS
+
@@ -4440,6 +4523,9 @@
+ + +
@@ -4473,6 +4559,9 @@
+ + +
@@ -4497,6 +4586,11 @@
How do you want to create this character?
+
Create an NPC
@@ -4504,1970 +4598,7 @@ Edit sheet direclty
-
-
-
-

Strength

- - -
-
-

Dexterity

- - -
-
-

Constitution

- - -
-
-

Intelligence

- - -
-
-

Wisdom

- - -
-
-

Charisma

- - -
-
-
- Hit Points: - Suggested Abilities: - Class Spellcasting Ability: -
-
- - -
-
-

Strength

- - -
-
-

Dexterity

- - -
-
-

Constitution

- - -
-
-

Intelligence

- - -
-
-

Wisdom

- - -
-
-

Charisma

- - -
-
-
- Hit Points: - Spellcasting DC: - -
-
- - - - - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
Removed spells will be marked with a r symbol so you can find it easily if you change your mind.
-
-
-
-
- - - - - - - - - - - - - - - -

- -
- - -
-
-

You can increase two of your abilities by 1, or one of your abilities by 2

-
-
- - - + -
- - -
-
Strength
-
-
- - - + -
- - -
-
Dexterity
-
-
- - - + -
- - -
-
Constitution
-
-
- - - + -
- - -
-
Intelligence
-
-
- - - + -
- - -
-
Wisdom
-
-
- - - + -
- - -
-
Charisma
-
-
-
-
- -
-
- - - - - - - - -
-
-
    -
-
- - -
-

Welcome to the Charactermancer!

-

The Charactermancer is step-by-step process that makes building a character simple and streamlined. Changes are saved as you progress, but have no fear. The character sheet is only updated when you have completed your review.

-

Your Compendium Awaits.

-

The Charactermancer currently supports Dungeons & Dragons 5th Edition SRD, Player's Handbook, and Guildmasters' Guide to Ravnica. You can add the Player's Handbook and Guildmasters' Guide to Ravnica to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.

-

Get started by clicking "Next".

- -
- - - -
-
-

Where would you like to go, traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
-
-
-
-
- -
- -
-
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
- -
-
-
-
- -
-
- -
-
-
-
-
- -
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard any choices made and let you edit your character sheet directly.

-
- - -
-
- - -
-
-
    -
-
-
-
-
- -
- -
-
-
-
- -
-
- Saving Throw Proficiency: - - - - - - - -
-
-
-
- -
- -
-
-
-
-
- - - - -
-
- - -
-
-

Equipment

- -
-
-
- -
- -
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
-
- - -
-
- -
-
-

Select your choices:

- -
-
-

Select your choices:

-

- - -

-
-
-

- We rolled your dice! Check the chat window to view your results in detail. Assign the results below to your preferred attributes: -

-
-
-

Select your choices:

-

- Available Points:   - -

-
-
-
-
-
- Strength: - -
-
- Dexterity: - -
-
- Constitution: - -
-
- Intelligence: - -
-
- Wisdom: - -
-
- Charisma: - -
-
-
-
-
- -

Input your scores:

-
-
-
- Strength: - -
-
- Dexterity: - -
-
- Constitution: - -
-
- Intelligence: - -
-
- Wisdom: - -
-
- Charisma: - -
-
-
-
-
- -
-
-
- -
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
-
-
-
- -
- -
-
-
-
-
- - -
-
- - - - -
-
-

- Equipment: - - -

-
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - - - - -
-
- - -
-
-
    -
-
-
- - - -
-

- You have not yet selected a class. -

-

- You have created a custom class; you can add equipment to the character sheet after you have finished the Charactermancer. -

-

- Pick your equipment: - Class: () -

-
-

- How would you like to choose your equipment? - Class: () -

- -
-
-
-

- Equipment from Class - () -

-

- Starting Cubil: -

-

- -

-

-

- -
-

-
-
-

- -

-

- -

- - -

- -

- - -

- -

- - -

- -

- - -
-
- NO CLASS HAS BEEN SELECTED OR SELECTED CLASS DOES NOT HAVE STANDARD EQUIPMENT. CLASS EQUIPMENT CANNOT BE CHOSEN AT THIS TIME. -
-
-

- You have not yet selected a background. -

-

- Equipment from Background - () -

-

- You have chosen starting cubil and do not get equipment from your background. -

-

- -

-
-

- -

- -

- -

- -

- -

- -

- -

- -
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
-
-
-

Cosmic forces are a mystery to you.

-

Your character doesn't have spells at this level. Click "Next" to review your character!

-
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - -
-
- - -
-
-
    -
-
-
-

A feat represents accomplishment, grit, determination, and expertise. It is the reward for hard work.

-

You really haven't done that much yet.

-
-
-
- -
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-

Expertise

- - - -
-
-

- - -

-
-
-

- - -

-
-
-

- - -

-
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- -
-
- - -
-
-
    -
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
-
-

The only choice left is to press on or turn back. If you're editing an existing character, all your existing data will be lost into the void when you apply your changes.

-

-

Review your choices:

-
-
-

Race

-
-
-
- Return to: - -
-
-
-

Class

-
-
-
- Return to: - -
-
-
-

Abilities

-
-
-
- Return to: - -
-
-
-

Background

-
-
-
- Return to: - -
-
-
-

Equipment

-
-
-
- Return to: - -
-
-
-

Powers

-
-
-
- Return to: - -
-
-
-

Feats

-
-
-
-
-

Bio

-
-
-
-
-
- -
- - - -
-
-

Where would you like to go, Traveler?

- - - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
-

Building your character...

-
-
-
-
- - -
-
-
-
-
    -
-
- - -
-

Welcome to the Charactermancer Level Up!

-

Look at you, with all that experience. Now it's time to claim your reward. You'll walk through the step-by-step process to make a few decisions, and your character will be at the next level in no time. Changes are saved as you move through the process, but if you change your mind, you'll need to revisit the steps and choices that come after.

-

Your Compendium Awaits.

-

The Charactermancer currently supports Dungeons & Dragons 5th Edition SRD, Player's Handbook, and Guildmasters' Guide to Ravnica. Xanathar's Guide to everything will be supported in the coming weeks. You can add the Player's Handbook and Guildmasters' Guide to Ravnica to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.

-

Get started by clicking "Next".

-
- - - -
-
-

Where would you like to go, traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - - - - -
-
- - -
-
-
    -
  1. -
-
-
-

Your existing class levels have been pre-populated for you. By default your primary class has been set to be increased by one level. You can change how many levels to increase below, as well as adding a new multiclass.

-

In each class section you'll have the option to take the average number of hit points or to roll randomly, choose class features for the levels you're advancing, and choose your subclass if appropriate.

-
-
-
-
-
- - - -
-
- The Level Up tool does not support custom classes at this time. -
-
-
- -
-
- - - -
-
-
-

HP

- - -
- -
-
- -
- 9 -
-
-
-

Class Features:

- -
-
-
-
- -
-
-
-

Subclass Features:

- -
-
-
-
-
-
- -
-
- - - -
-
-
-

HP

- - -
- -
-
- -
- 9 -
-
-
-

Class Features:

- -
-
-
-
- -
-
-
-

Subclass Features:

- -
-
-
-
-
-
-
- -
-
-
- - - -
-
-
-

HP

- - -
- -
-
- -
- 9 -
-
-
-

Class Features:

- -
-
-
-
- -
-
-
-

Subclass Features:

- -
-
-
-
-
-
- -
-
- - - -
-
-
-

HP

- - -
- -
-
- -
- 9 -
-
-
-

Class Features:

- -
-
-
-
- -
-
-
-

Subclass Features:

- -
-
-
-
-
- - -
-
-
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
-
    -
  1. -
-
-
-
- -
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
  1. -
-
-
-
- -
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
  1. -
-
- -
-

Listed here are the current spells your character already knows. If you gained access to more spells during your advancement you will be able to select them below. Check next to the spells you wish to learn. The Charactermancer will help you pick the right number of spells and from the correct list. If your class has the option to swap out spells, you can do so by unselecting currently known spells which will allow you to select new ones in their place.

-

-
-
- -
-
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - - -
-
- - -
-
-
    -
  1. -
-
-
-
-

Before Leveling

-
-
-
-

After Leveling

-
-
-
-
-

Features

-
-
-
-
-

Powers

-
-
-
- Return to: - -
-
-
- - - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
-
-
- - -
-
-
    -
  1. -
-
- -
-

-
- -
-
-
- -
- - -
-
-

Where would you like to go, Traveler?

- - -

Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

-
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
@@ -7118,11 +5249,6 @@ Range: {{range}}
{{/range}} - {{#target}} -
- Target: {{target}} -
- {{/target}} {{#pointcost}}
Point Cost: {{pointcost}} @@ -7605,7 +5731,9376 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Esper_Genesis_5E/EG_Sheet.pug b/Esper_Genesis_5E/EG_Sheet.pug index 137af841e7..cffbe6421b 100644 --- a/Esper_Genesis_5E/EG_Sheet.pug +++ b/Esper_Genesis_5E/EG_Sheet.pug @@ -1,5 +1,16 @@ - var imagePath = 'https://raw.githubusercontent.com/mperes/Esper-Images/main'; +- + const globalAttributesByCatagory = { + abilities: ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma'], + optionalAbilites: ['honor', 'sanity'], + alignments: ['Lawful Good', 'Neutral Good', 'Chaotic Good', 'Lawful Neutral', 'Neutral', 'Chaotic Neutral', 'Lawful Evil', 'Neutral Evil', 'Chaotic Evil'], + classes: ['artificer', 'bard', 'cleric', 'druid', 'paladin', 'ranger', 'sorcerer', 'warlock', 'wizard'], + sizes: ['Tiny', 'Small', 'Medium', 'Large', 'Huge', 'Gargantuan'], + diceSizes: ['d4', 'd6', 'd8', 'd10', 'd12'] + }; + + include src/mixins/mixins.pug input(name='attr_version' type='hidden' value!='3.0') @@ -9,6 +20,7 @@ input.licensedsheet(name='attr_licensedsheet' type='hidden') .licensecontainer.compendium-drop-target.monsters.ships(data-licensedsheet='attr_licensedsheet') input.npc_toggle(name='attr_npc' type='hidden' value!='0') + input.npcspellcastingflag(name='attr_npcspellcastingflag' type='hidden' value!='0') input.sheet-pc-type(name='attr_pc_sheet_type' type='hidden' value='pc') input.npcspellcastingflag(name='attr_npcspellcastingflag' type='hidden') input.toggleflag(name='attr_rtype' type='hidden') @@ -57,6 +69,10 @@ input.licensedsheet(name='attr_licensedsheet' type='hidden') .mancer_confirm span(style='line-height: 25px' data-i18n='do_you_want_mancer') How do you want to create this character? div(style='margin-top: 20px;') + // + div(style='position: relative; display: inline-block; width:130px;') + input.yes(type='checkbox' style='width:130px;' name='attr_mancer_confirm') + span.yes(style='width:130px;' data-i18n='mancer-confirm-yes') Use the Charactermancer div(style='position: relative; display: inline-block; width:80px;') input.yes(style='width:80px;' type='checkbox' name='attr_mancer_npc') span.yes(style='width:80px;' data-i18n='npc-new') Create an NPC @@ -64,12 +80,32 @@ input.licensedsheet(name='attr_licensedsheet' type='hidden') input.yes(type='checkbox' style='width:90px;' name='attr_mancer_cancel') span.yes(style='width:90px;' data-i18n='manual') Edit sheet direclty -include src/charactermancer/repeating/repeating.html -include src/charactermancer/l1/l1.html -include src/charactermancer/lp/lp.html -include src/hiddeninputs/hiddeninputs.pug - +//- ROLL TEMPLATES include src/rolltemplates/rolltemplates.html -script(type='text/worker') - include sheetworkers.js +//- CHARACTERMANCER REPEATING SECTIONS + include src/charactermancer/repeating/repeatingsections.html + +//- CHARACTERMANCER LEVEL 1 + include src/charactermancer/l1/l1.pug + +//- CHARACTERMANCER LEVEL UP + include src/charactermancer/lp/lp.pug + +//- HIDDEN INPUTS +include src/hiddeninputs/hiddeninputs.pug + +//- SHEET WORKERS +script(type="text/worker") + include src/helpers/helperFunctions.js + include src/classes/SheetUtils/SheetUtils.js + include src/classes/FlagManager/FlagManager.js + include src/classes/SheetUpdater/SheetUpdater.js + include src/classes/DropClasses/DropClasses.js + include src/dragndrop/dropFunctions.js + include src/dragndrop/DragAndDrop.js + include src/charactermancer/l1/l1.js + include src/charactermancer/lp/lp.js + + //include src/js/versioning.js + include sheetworkers.js diff --git a/Esper_Genesis_5E/EG_Sheet.sass b/Esper_Genesis_5E/EG_Sheet.sass index 03b6c2b67c..6ac492692a 100644 --- a/Esper_Genesis_5E/EG_Sheet.sass +++ b/Esper_Genesis_5E/EG_Sheet.sass @@ -60,7 +60,7 @@ input[type=radio] .sheet-advantagetoggle position: absolute top: 92px - left: 570px + left: 440px z-index: 1 input[type=radio] @@ -119,7 +119,7 @@ input[type=radio].sheet-tab-button:checked + span, .sheet-advantagetoggle input[ width: 110px .sheet-whispertoggle - left: 270px + left: 150px .sheet-advantagetoggle.sheet-whispertoggle input &.sheet-toggle-right @@ -182,7 +182,7 @@ input[type=radio].sheet-tab-button:checked + span, .sheet-advantagetoggle input[ visibility: visible .sheet-col - display: block + //display: block .sheet-hidden, .sheet-options .sheet-row.sheet-hidden display: none @@ -1317,11 +1317,29 @@ button[type=roll] * position: relative -.charsheet .sheet-spells .sheet-details span - font-size: 12px +.charsheet .sheet-spells .sheet-details + span + font-size: 12px - &[name="attr_spelldescription"] - white-space: pre-line + &[name="attr_spelldescription"] + white-space: pre-line + + > .sheet-italics + span + &:nth-last-child(3) + display: inline-block + width: 120px + text-align: left + text-transform: lowercase + &::first-letter + text-transform: uppercase + &:not(:first-child) + margin-left: 3px + + span[data-i18n="concentration"] + margin-left: -3px + &:after + content:', ' .repcontainer .sheet-spell .sheet-details-flag:not(:checked) ~ .sheet-wrapper display: none @@ -1371,6 +1389,7 @@ button[type=roll] * &.sheet-bold font-weight: bold + margin-right: 3px .sheet-italics font-style: italic @@ -2399,6 +2418,8 @@ span .sheet-display .sheet-red input, span color: #245485 + &:first-child + margin-right: 3px .sheet-npc_options input @@ -2507,6 +2528,9 @@ span &:before content: "(" + + &.sheet-xp:before + content: " (" &:after content: ")" @@ -3691,6 +3715,8 @@ span .sheet-topbar div.sheet-meta-info-container span, .sheet-leveler-topbar div.sheet-meta-info-container span font-size: 1.2em + .sheet-choice + display: none!important .sheet-topbar div.sheet-meta-info-container span.sheet-choice, .sheet-leveler-topbar div.sheet-meta-info-container span.sheet-choice display: none @@ -3955,6 +3981,120 @@ span .sheet-gold_option input[type=number] width: 4.5em + + .sheet-customize-origin + box-sizing: border-box + padding-right: 40px + position: relative + width: 100% + display: none + + label + span + display: block + + &:first-child + + &:last-child + font-weight: normal + width: calc(100% + 40px) + + .sheet-toggle + box-sizing: border-box + position: absolute + top: 0 + right: 0 + width: 40px + height: 20px + overflow: hidden + border-radius: 10px + border: 1px solid #CCC + + input + width: 100% + height: 100% + appearance: none + border: 0 + padding: 0 + margin: 0 + position: absolute + top: 0 + left: 0 + outline: none + + &:checked + background: #c43c41 + + .sheet-knob + width: 20px + height: 20px + background: #CCC + position: absolute + top: -1px + left: -1px + border-radius: 10px + pointer-events: none + + input:checked + .sheet-knob + right: -1px + left: auto + + input[value="1"] + .sheet-customize-origin + display: block + + span.sheet-tasha + select + margin-bottom: 10px + + @for $i from 1 through 20 + input[value='#{$i}'] + span.sheet-tasha:after + content: " (+#{$i}):" + + .sheet-asi-row + .sheet-asi + border-width: 1px!important + + .sheet-switch ~ .sheet-switch-container .sheet-feat-tab + pointer-events: all + + .sheet-asi, .sheet-feat + display: none + + .sheet-switchval + &[value="asi"] ~ .sheet-asi, &[value="feat"] ~ .sheet-feat + display: block + border-color: #888 + border-style: solid + border-width: 0 1px 1px 1px + border-radius: 0 0 4px 4px + padding: 1em + + &[value="asi"] ~ .sheet-switch-container .sheet-asi-tab, &[value="feat"] ~ .sheet-switch-container .sheet-feat-tab + border-bottom-width: 0 + background-color: white + + .sheet-spinnerloader + width: 40% + padding-right: 13px + height: 100px + background-image: url('https://app.roll20.net/images/load.gif') + background-repeat: no-repeat + background-position: center center + display: inline-block + box-sizing: border-box + position: relative + + .sheet-spinner-toggle + display: none + + &:empty + + .sheet-spinnerloader + display: none + + ~ .sheet-choices + display: block + + ~ .sheet-choices + display: none .sheet-manver .sheet-yes_spells display: -webkit-box @@ -4392,7 +4532,7 @@ span border-color: #888 border-style: solid border-radius: 4px 4px 0 0 - border-width: 1px + border-width: 1px 1px 0 1px background-color: #aaa padding: .25em .5em margin: 0 @@ -5717,8 +5857,7 @@ div.sheet-charmancer flex-flow: column margin-bottom: 1em - div.sheet-licensedsheet-flag:not(:empty) ~ - * .sheet-logos, .sheet-logos + .sheet-logos, .sheet-logos display: -webkit-box display: -ms-flexbox display: flex @@ -5730,7 +5869,7 @@ div.sheet-charmancer flex-flow: column margin-bottom: 1em - &.sheet-licensedsheet .sheet-charmancer-logo + .sheet-charmancer-logo margin: 0 auto background: url("https://raw.githubusercontent.com/mperes/Images-for-Roll20-5E-images/master/licensedsheet/charactermancer-1.png") background-position: center @@ -5742,8 +5881,7 @@ div.sheet-charmancer width: 70% height: 5em - div.sheet-licensedsheet-flag:not(:empty) ~ - * .sheet-charmancer-logo, .sheet-charmancer-logo + .sheet-charmancer-logo, .sheet-charmancer-logo margin: 0 auto background: url("https://raw.githubusercontent.com/mperes/Images-for-Roll20-5E-images/master/licensedsheet/charactermancer-1.png") background-position: center @@ -5757,7 +5895,7 @@ div.sheet-charmancer &.sheet-licensedsheet .sheet-compendium-logo margin: 0 auto - background: url("https://raw.githubusercontent.com/mperes/Images-for-Roll20-5E-images/master/licensedsheet/DnDlogored.png") + background: url("https://raw.githubusercontent.com/skydawn1/esper_genesis/master/EG_Logo.png") background-position: center background-size: contain background-repeat: no-repeat @@ -5767,10 +5905,9 @@ div.sheet-charmancer width: 50% height: 3em - div.sheet-licensedsheet-flag:not(:empty) ~ - * .sheet-compendium-logo, .sheet-compendium-logo + .sheet-compendium-logo, .sheet-compendium-logo margin: 0 auto - background: url("https://raw.githubusercontent.com/mperes/Images-for-Roll20-5E-images/master/licensedsheet/DnDlogored.png") + background: url("https://raw.githubusercontent.com/skydawn1/esper_genesis/master/EG_Logo.png") background-position: center background-size: contain background-repeat: no-repeat @@ -6658,7 +6795,7 @@ div.sheet-charmancer .sheet-table-header grid-template-columns: 45px 1fr 60px 30px 50px 70px grid-gap: 2px - max-width: calc(50% - 10px) + max-width: calc(50% - 30px) span font-size: 11px @@ -6669,6 +6806,21 @@ div.sheet-charmancer .repitem border-top: 2px solid #e2c285 + margin-right: 20px + + button[type='roll'] + position: absolute + top: 4px + right: -20px + background: none + border: none + color: black + box-shadow: none + margin: 0 + padding: 0 + font-weight: bold + &:hover + color: #00ba73 .sheet-table-body grid-template-columns: 45px 1fr 60px 30px 50px 70px diff --git a/Esper_Genesis_5E/sheetworkers.js b/Esper_Genesis_5E/sheetworkers.js index 4af2a6e1cf..4a84a8c1be 100644 --- a/Esper_Genesis_5E/sheetworkers.js +++ b/Esper_Genesis_5E/sheetworkers.js @@ -1,3 +1,59 @@ +// Create a collective list of attributs to reduce redundancy +var abilityList = ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"]; +var abilityListEnabledOptionals = []; +const globalAttributesByCategory = { + abilities: ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma'], + abilitiesWithAllOptionals: ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma', 'honor', 'sanity'], + //classes: ['artificer','barbarian','bard','cleric','druid','fighter','monk','paladin','ranger','rogue','sorcerer','warlock','wizard'], + classes: ['adept', 'cybermancer', 'engineer', 'hunter', 'melder', 'sentinel', 'specialist', 'warrior'], + hitDieTypes: ['d4', 'd6', 'd8', 'd10', 'd12'], + traitsTypes: ['Background', 'Feats', 'Racial', 'Class', 'Other'], + proficiencyTypes: ['LANGUAGE', 'ARMOR', 'WEAPON', 'OTHER'], + skills: { + strength: [ + 'athletics' + ], + constitution: [], + dexterity: [ + 'acrobatics', + 'sleight_of_hand', + 'stealth', + ], + intelligence: [ + 'arcana', + 'history', + 'investigation', + 'nature', + 'religion', + ], + wisdom: [ + 'animal_handling', + 'insight', + 'medicine', + 'perception', + 'survival' + ], + charisma: [ + 'deception', + 'intimidation', + 'performance', + 'persuasion', + ], + honor: [], + sanity: [], + all: () => { return [...globalAttributesByCategory.skills.strength, ...globalAttributesByCategory.skills.dexterity, ...globalAttributesByCategory.skills.intelligence, ...globalAttributesByCategory.skills.wisdom, ...globalAttributesByCategory.skills.charisma]; }, + getParentAbility: skill => { + let parent = ''; + globalAttributesByCategory['abilities'].forEach(ability => { + if(globalAttributesByCategory.skills[ability].indexOf(skill) > -1) { + parent = ability; + return; + } + }); + return parent; + } + } +}; on("sheet:opened", function(eventinfo) { versioning(function() { @@ -297,25 +353,6 @@ on("change:race change:subrace", function(eventinfo) { update_race_display(); }); -on("change:drop_category", function(eventinfo) { - if(eventinfo.newValue === "Monsters" || eventinfo.newValue === "Ships") { - getAttrs(["class","race","speed","hp"], function(v) { - if(eventinfo.newValue === "Ships") { - setAttrs({npc_tab: "ships"}); - } - if(v["class"] != "" || v["race"] != "" || v["speed"] != "" || v["hp"] != "") { - setAttrs({monster_confirm_flag: 1}); - } - else { - handle_drop(eventinfo.newValue); - } - }); - } - else { - handle_drop(eventinfo.newValue); - } -}); - on(`change:repeating_inventory:hasattack`, function(eventinfo) { if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {return;}; @@ -1136,1125 +1173,6 @@ var get_repeating_data = function(callback) { }); }; -var handle_drop = function(category, eventinfo) { - - getAttrs(["speed", "drop_name", "drop_data", "drop_content", "character_id", "npc_legendary_actions", "strength_mod", "dexterity_mod", "npc", "base_level", "strength_base", "dexterity_base", "constitution_base", "wisdom_base", "intelligence_base", "charisma_base", "class_resource_name", "other_resource_name", "multiclass1_lvl", "multiclass2_lvl", "multiclass3_lvl"], function(v) { - var pagedata = {}; - try { - pagedata = JSON.parse(v.drop_data); - } catch(e) { - pagedata = v.drop_data; - } - var page = { - name: v.drop_name, - data: pagedata, - content: v.drop_content - }; - var category = page.data["Category"]; - get_repeating_data(function(repeating) { - var results = processDrop(page, v, repeating); - setAttrs(results.update, {silent: true}, function() {results.callbacks.forEach(function(callback) {callback(); })} ); - }); - - }); - -}; - -var processDrop = function(page, currentData, repeating, looped) { - var jsonparse = function(data) { - var result = {}; - try { - result = JSON.parse(data); - } catch(e) { - result = data; - } - return result; - }; - var modStringToAttrib = function(modString) { - var finalAttrib = ""; - if (modString == "FIN") { - if (parseInt(currentData.strength_base) > parseInt(currentData.dexterity_base)) { - finalAttrib = "@{strength_mod}"; - } else { - finalAttrib = "@{dexterity_mod}"; - } - } else { - switch(modString) { - case "STR": - finalAttrib = "@{strength_mod}"; - break; - case "DEX": - finalAttrib = "@{dexterity_mod}"; - break; - case "CON": - finalAttrib = "@{constitution_mod}"; - break; - case "WIS": - finalAttrib = "@{wisdom_mod}"; - break; - case "INT": - finalAttrib = "@{intelligence_mod}"; - break; - case "CHA": - finalAttrib = "@{charisma_mod}"; - break; - } - } - return finalAttrib; - }; - var numUses = function(uses_string) { - uses_string = parseValues(uses_string); - - var terms = uses_string.split("+"); - var total = 0; - _.each(terms, function(term) { - total += parseInt(term); - }); - return uses_string === "" || uses_string === "-" ? uses_string : total; - }; - var parseValues = function(uses_string) { - var attribs = ["strength", "dexterity", "constitution", "wisdom", "intelligence", "charisma"]; - uses_string = uses_string ? uses_string.toLowerCase() : ""; - _.each(attribs, function(attrib) { - var attribMod = Math.floor((parseInt(currentData[attrib + "_base"]) - 10) / 2); - if (attribMod < 0 || isNaN(attribMod)) attribMod = 0; - uses_string = uses_string.replace(attrib, attribMod); - }); - uses_string = uses_string.replace(/half_level/g, Math.floor(classlevel/2)); - return uses_string.replace(/level/g, classlevel); - };// - var category = page.data["Category"]; - var callbacks = []; - var update = {}; - var id = generateRowID(); - var blobs = {}; - var classlevel = currentData.base_level ? parseInt(currentData.base_level) : 1; - repeating.traits = repeating.traits ? repeating.traits : []; - update["drop_category"] = ""; - update["drop_name"] = ""; - update["drop_data"] = ""; - update["drop_content"] = ""; - if(category === "Items") { - console.log(`%c ITEM: ${page.name} dropped`, "color: purple; font-size: 14px;"); - if(currentData.npc === "0") { - update["tab"] = "core"; - if(page.name) {update[`repeating_inventory_${id}_itemname`] = page.name}; - if(page.data["itemcount"]) {update[`repeating_inventory_${id}_itemcount`] = page.data["itemcount"]}; - - ["Properties", "Weight"].forEach((attr) => { - if (page.data[`${attr}`]) { - update[`repeating_inventory_${id}_item${attr.toLowerCase()}`] = page.data[`${attr}`] - }; - }); - - if(page.content) {update[`repeating_inventory_${id}_itemcontent`] = page.content}; - if(!page.data["Item Type"] || page.data["Item Type"] == "") {page.data["Item Type"] = category}; - var mods = "Item Type: " + page.data["Item Type"]; - if(page.data["AC"] && page.data["AC"] != "") { - mods += ", AC: " + page.data["AC"]; - if(!looped) { - callbacks.push(() => {update_ac();} ) - } - }; - - ["Damage", "Damage Type", "Secondary Damage", "Secondary Damage Type", "Alternate Damage", "Alternate Damage Type", "Alternate Secondary Damage", "Alternate Secondary Damage Type", "Range"].forEach((attr) => { - if (page.data[`${attr}`] && page.data[`${attr}`] != "") { - mods += `, ${attr}: ${page.data[`${attr}`]}` - }; - }); - - if(page.data["Modifiers"] && page.data["Modifiers"] != "") { mods += `, ${page.data["Modifiers"]}` }; - update[`repeating_inventory_${id}_itemmodifiers`] = mods; - if(page.data["Item Type"].indexOf("Weapon") > -1) { - update[`repeating_inventory_${id}_hasattack`] = 1; - callbacks.push(() => { - (page.data["Alternate Damage"] && page.data["Alternate Damage"] !== "") ? create_attack_from_item(id, {versatile: true}) : create_attack_from_item(id); - }); - } else if(page.data["Item Type"].indexOf("Ammunition") > -1) { - update[`repeating_inventory_${id}_useasresource`] = 1; - callbacks.push(() => { create_resource_from_item(id); }); - }; - - if(page.data["Modifiers"]) { - callbacks.push(() => { check_itemmodifiers(page.data["Modifiers"]); }); - }; - - if(!looped) { - callbacks.push(() => { update_weight(); }); - } - } else { - if(page.data["Item Type"] && page.data["Item Type"].toLowerCase().includes("weapon")) { - const type = (page.data["Item Type"]) ? page.data["Item Type"].toLowerCase().split(" ")[0] : " "; - const properties = (page.data["Properties"]) ? page.data["Properties"].toLowerCase() : undefined; - - const make_npc_attack_from_item = (rowid, options) => { - update[`repeating_npcaction_${rowid}_npc_options-flag`] = "0"; - update[`repeating_npcaction_${rowid}_attack_flag`] = "on"; - if(page.name) { - update[`repeating_npcaction_${rowid}_name`] = page.name; - if (options && options.versatile) { - update[`repeating_npcaction_${rowid}_name`] += " (" + (options.versatile === 1 ? "One-Handed" : "Two-Handed") + ")"; - } else if (options && options.thrown) { - update[`repeating_npcaction_${rowid}_name`] += " (Thrown)"; - }; - }; - if(page.content) { update[`repeating_npcaction_${rowid}_description`] = page.content; } - - update[`repeating_npcaction_${rowid}_attack_display_flag`] = "{{attack=1}}"; - update[`repeating_npcaction_${rowid}_attack_options`] = "{{attack=1}}"; - update[`repeating_npcaction_${rowid}_attack_type`] = page.data["Item Type"]; - update[`repeating_npcaction_${rowid}_attack_target`] = "one target"; - - - update[`repeating_npcaction_${rowid}_attack_range`] = - (page.data["Range"] && page.data["Range"] != "" && (!properties.includes("thrown") || (options && options.thrown))) ? page.data["Range"] : - (page.data["Properties"] && properties.includes("range")) ? "10 ft" : - "5 ft"; - - const weapon_attr_mod = (type.includes("ranged") || (properties && properties.includes("finesse") && currentData.dexterity_mod > currentData.strength_mod)) ? currentData.dexterity_mod : currentData.strength_mod; - update[`repeating_npcaction_${rowid}_attack_tohit`] = weapon_attr_mod; - - const dmgArray = (options && options.versatile === 2) ? - ["Alternate Damage", "Alternate Damage Type", "Alternate Secondary Damage", "Alternate Secondary Damage Type"] : - ["Damage", "Damage Type", "Secondary Damage", "Secondary Damage Type"]; - - dmgArray.forEach((attr) => { - if (page.data[`${attr}`]) { - // _attack_damage adds the weapon mod - const ending = (dmgArray.indexOf(`${attr}`) === 0) ? `+${weapon_attr_mod}` : ""; - //Remove Alternate for the attribute name. Then check for Secondary and remote it while adding 2. - let attrEdit = (attr.includes("Alternate") && attr.includes("Secondary")) ? attr.slice(20) + "2" : (attr.includes("Alternate") || attr.includes("Secondary")) ? attr.slice(10) : attr; - //Lower case everything and remove spaces - let name = attrEdit.toLowerCase().replace(" ", ""); - //Set all the necessary attack attributes - update[`repeating_npcaction_${rowid}_attack_${name}`] = page.data[`${attr}`] + [`${ending}`]; - }; - }); - - if(page.data["Modifiers"]) { - if(type === "melee" || type === "ranged") { - //+1 Weapons should be in the format of "Melee Attacks +1, Melee Damage +1" - const split = (page.data["Modifiers"].includes(",")) ? page.data["Modifiers"].split(", ") : page.data["Modifiers"]; - split.forEach((attr) => { - const name = attr.toLowerCase(); - if (name.includes("attacks")) { - update[`repeating_npcaction_${rowid}_attack_tohit`] = +update[`repeating_npcaction_${rowid}_attack_tohit`] + name.split("attacks ")[1]; - } else if (name.includes("damage")) { - update[`repeating_npcaction_${rowid}_attack_damage`] += name.split("damage ")[1]; - } else { - console.log(`%c ${page.name} modifiers format did not include damage or attacks`, "color:orange;"); - }; - }); - }; - }; - }; - - const versatile = (properties && properties.includes("versatile")) ? 1 : undefined; - make_npc_attack_from_item(id, {versatile: versatile}); - - if (properties && properties.includes("thrown")) { - make_npc_attack_from_item(generateRowID(), {thrown: true}); - } - if (versatile && page.data["Alternate Damage"]) { - make_npc_attack_from_item(generateRowID(), {versatile: 2}) - } - - if (page.data["Modifiers"]) { - callbacks.push(() => { check_itemmodifiers(page.data["Modifiers"]); }, () => { update_npc_action("all"); }); - } else { - callbacks.push(() => { update_npc_action("all"); }); - }; - } - } - }; - if(category === "Powers") { - console.log(`%c SPELL: ${page.name} dropped`, "color: purple; font-weight:14px;"); - let existing = {}; - var lvl = page.data["Level"] && page.data["Level"] > 0 ? page.data["Level"] : "prime"; - if (repeating[`spell-${lvl}`]) { - _.each(repeating[`spell-${lvl}`], (spell, spellid) => { - if (spell.spellname.toLowerCase() === page.name.toLowerCase()) { - id = spellid; - existing = spell; - }; - }); - } - if(currentData.npc && currentData.npc == 1) update['npcspellcastingflag'] = 1; - update[`repeating_spell-${lvl}_${id}_spelllevel`] = lvl; - update[`repeating_spell-${lvl}_${id}_spell_ability`] = (page.data["spellcasting_ability"]) ? `@{${page.data["spellcasting_ability"].toLowerCase()}_mod}+` : "spell"; - (page.name) ? update[`repeating_spell-${lvl}_${id}_spellname`] = page.name : false; - - ["spellclass", "spellsource", "data-description"].forEach((attr) => { - const suffix = (attr.includes("description")) ? "spelldescription" : attr; - (page.data[`${attr}`]) ? update[`repeating_spell-${lvl}_${id}_${suffix}`] = page.data[`${attr}`] : false; - }); - - ["Add Casting Modifier", "Activation Time", "Concentration", "Damage Type", "Damage", "Duration", "Healing", "Material", "Range", "Ritual", "Save", "Save Success", "Domain", "Secondary Damage", "Secondary Damage Type", "Target"].forEach((attr) => { - if(page.data[`${attr}`]) { - //Adjust the array entry to match the attribute name in the HTML - const name = (attr === "Add Casting Modifier") ? "dmgmod" : (attr === "Material") ? `comp_materials` : (attr.includes("Secondary Damage")) ? attr.split("Secondary ")[0] + "2" : attr; - const spellattribute = name.toLowerCase().replace(" ", ""); - //Concentration, Ritual, and Domain are exceptions to norm - const updateValue = (attr === "Concentration" || attr === "Ritual") ? `{{${spellattribute}=1}}` : (attr === "Domain") ? page.data["Domain"].toLowerCase() : page.data[`${attr}`]; - update[`repeating_spell-${lvl}_${id}_spell${spellattribute}`] = updateValue; - }; - }); - - ["Higher Power Slot Bonus", "Higher Power Slot Desc", "Higher Power Slot Dice", "Higher Power Slot Die"].forEach((attr) => { - if (page.data[`${attr}`]) { - const spellattribute = (attr.includes("Bonus")) ? "hlbonus" : (attr.includes("Desc")) ? "athigherlevels" : (attr.includes("Dice")) ? "hldie" : "hldietype"; - update[`repeating_spell-${lvl}_${id}_spell${spellattribute}`] = page.data[`${attr}`]; - }; - }); - - if(page.data["Components"]) { - ["v", "s", "m"].forEach((comp) => { - if(page.data["Components"].toLowerCase().indexOf(comp) === -1) {update[`repeating_spell-${lvl}_${id}_spellcomp_${comp}`] = "0"}; - }); - }; - - if (page.data["Power Attack"]) { - update[`repeating_spell-${lvl}_${id}_spellattack`] = page.data[`Power Attack`]; - }; - - if(page.data["Damage"] || page.data["Healing"]) { - update["repeating_spell-" + lvl + "_" + id + "_spelloutput"] = "ATTACK"; - if(!existing.spellattackid) callbacks.push( function() {create_attack_from_spell(lvl, id, currentData.character_id);}); - } - else if(page.data["Higher Power Slot Desc"] && page.data["Higher Power Slot Desc"] != "") { - var spelllevel = "?{Cast at what level?"; - for(i = 0; i < 10-lvl; i++) { - spelllevel = spelllevel + "|Level " + (parseInt(i, 10) + parseInt(lvl, 10)) + "," + (parseInt(i, 10) + parseInt(lvl, 10)); - }; - spelllevel = spelllevel + "}"; - update[`repeating_spell-${lvl}_${id}_rollcontent`] = `@{wtype}&{template:spell} {{level=@{spellschool} ${spelllevel}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; - }; - - if(page.data["data-Prime Scaling"] && lvl == "prime") {update[`repeating_spell-${lvl}_${id}_spell_damage_progression`] = "Prime " + page.data["data-Prime Scaling"].charAt(0).toUpperCase() + page.data["data-Prime Scaling"].slice(1);}; - update[`repeating_spell-${lvl}_${id}_options-flag`] = "0"; - }; - if(category === "Monsters" || category === "Ships") { - console.log(`%c MONSTERS: ${page.name} dropped`, "color: purple; font-weight:14px;"); - update["npc"] = "1"; - update["npc_options-flag"] = "0"; - update["licensedsheet"] = "0"; - if(page.name && page.name != "") {update["npc_name"] = page.name}; - - //ABILITY SCORES - const npcAbilites = ["strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma"]; - npcAbilites.forEach((ability) => { - const abbreviation = ability.slice(0, 3).toUpperCase(); - update[`${ability}_base`] = (page.data[`${abbreviation}`]) ? page.data[`${abbreviation}`] : ""; - callbacks.push(() => { - update_attr(`${ability}`); - }); - }); - - const npcExtras = ["Condition Immunities", "Immunities", "Languages", "Resistances", "Speed", "Sensor Range", "Token Size", "Vulnerabilities"]; - npcExtras.forEach((attr) => { - //console.log(`%c MONSTERS Drop: ${attr}`, "color:cornflowerblue;"); - const prefixExtra = (attr === "Token Size") ? "" : "npc_"; - let nameExtra = (attr.includes(" ")) ? attr.replace(" ", "_").toLowerCase() : attr.toLowerCase(); - update[`${prefixExtra}${nameExtra}`] = (page.data[`${attr}`]) ? page.data[`${attr}`] : ""; - }); - - //CHALLENGE RATING - if(page.data["Challenge Rating"] && page.data["Challenge Rating"] != "") { - callbacks.push( function() {update_challenge();} ); - update["npc_challenge"] = page.data["Challenge Rating"]; - } else { - update["npc_challenge"] = ""; - }; - - //XP - if(page.data["data-XP"]) { update["npc_xp"] = page.data["data-XP"].toString().replace(",",""); }; - - //SIZE, TYPE, ALIGNMENT - var type = ""; - if(page.data["Size"]) { type = page.data["Size"] }; - if(page.data["Type"]) { type = (type.length > 0) ? type + " " + page.data["Type"].toLowerCase() : page.data["Type"].toLowerCase(); }; - if(page.data["Alignment"]) { type = (type.length > 0) ? type + ", " + page.data["Alignment"] : page.data["Alignment"]; }; - update["npc_type"] = type; - - ["AC", "HP"].forEach((achp) => { - //console.log(`%c MONSTERS Drop: AC & HP ${achp}`, "color:cornflowerblue;"); - const array = (achp === "AC") ? ["npc_ac", "npc_actype"] : ["hp_max", "npc_hpformula"]; - if (page.data[`${achp}`] && page.data[`${achp}`].toString().indexOf("(") > -1) { - update[`${array[0]}`] = page.data[`${achp}`].toString().split(" (")[0]; - update[`${array[1]}`] = page.data[`${achp}`].toString().split(" (")[1].slice(0, -1); - } else { - update[`${array[0]}`] = (page.data[`${achp}`]) ? page.data[`${achp}`] : ""; - update[`${array[1]}`] = ""; - }; - }); - - var senses = page.data["Senses"] ? page.data["Senses"] : ""; - if(page.data["Passive Perception"]) { - senses = (senses.length > 0) ? senses + ", passive Perception " + page.data["Passive Perception"] : "passive Perception " + page.data["Passive Perception"]; - } - update["npc_senses"] = senses; - - //SAVES & SKILLS - const npcSavesSkills = ["str_save", "dex_save", "con_save", "int_save", "wis_save", "cha_save",'acrobatics','astrophysics','athletics','computers','deception','insight','intimidation','investigation','lore','mechanics','medicine','perception','performance','persuasion','piloting','sleight_of_hand','stealth','survival','xenobiology']; - npcSavesSkills.forEach((attr) => { - update[`npc_${attr}_base`] = ""; - }); - ["Saving Throws", "Skills"].forEach((attr) => { - //console.log(`%c MONSTERS Drop: Saving Throws & Skills: ${attr}`, "color:cornflowerblue;"); - const array = (page.data[`${attr}`]) ? page.data[`${attr}`].split(", ") : []; - _.each(array, (entry) => { - const kv = (entry.indexOf("-") > -1) ? entry.split(" ") : entry.split(" +"); - const attribute = (attr === "Saving Throws") ? kv[0].toLowerCase() + "_save" : kv[0].toLowerCase().split(' ').join('_'); - update[`npc_${attribute}_base`] = parseInt(kv[1], 10); - }); - (attr === "Saving Throws") ? callbacks.push(() => {update_npc_saves();} ) : callbacks.push(() => {update_npc_skills();} ); - }); - - const npcRepeating = ['npcaction-l', 'npcreaction', 'npcaction', 'npctrait']; - _.each(npcRepeating, (section) => { - getSectionIDs(`repeating_${section}`, (idarray) => { - _.each(idarray, (currentID, i) => { - removeRepeatingRow(`repeating_${section}_${currentID}`); - }); - }); - }); - // ACTIONS, LEGENDARY ACTIONS, REACTIONS, TRAITS - var contentarray = page.content; - if (page.data["data-Legendary Actions"]) { - const actionCount = (page.data["data-LANum"]) ? page.data["data-LANum"] : 3; - update["npc_legendary_actions"] = (page.data["data-LANum"]) ? page.data["data-LANum"] : 3; - if (page.data["Legendary Actions Desc"]) { - update["npc_legendary_actions_desc"] = page.data["Legendary Actions Desc"]; - } else { - update["npc_legendary_actions_desc"] = `The ${page.name} can take ${actionCount}, choosing from the options below. Only one legendary option can be used at a time and only at the end of another creature's turn. The ${page.name} regains spent legendary actions at the start of its turn.`; - }; - }; - // ACTIONS & LEGENDARY ACTIONS - ["Actions", "Legendary Actions"].forEach((attr) => { - if (page.data[`data-${attr}`]) { - const npcaction = (attr === "Actions") ? "npcaction" : "npcaction-l"; - let actionsobj = {}; - jsonparse(page.data[`data-${attr}`]).forEach((val) => { actionsobj[val.Name] = val; }); - _.each(actionsobj, (action, name) => { - newrowid = generateRowID(); - update[`repeating_${npcaction}_${newrowid}_npc_options-flag`] = "0"; - update[`repeating_${npcaction}_${newrowid}_name`] = name; - (action["Desc"]) ? update[`repeating_${npcaction}_${newrowid}_description`] = action["Desc"] : false; - if(action["Type Attack"]) { - update[`repeating_${npcaction}_${newrowid}_attack_display_flag`] = "{{attack=1}}"; - update[`repeating_${npcaction}_${newrowid}_attack_flag`] = "on"; - update[`repeating_${npcaction}_${newrowid}_attack_options`] = "{{attack=1}}"; - - ["Damage Type", "Damage", "Hit Bonus", "Reach", "Target", "Type"].forEach((attr) => { - if(action[`${attr}`]) { - const attributeName = (attr === "Hit Bonus") ? "tohit" : (attr === "Reach") ? "range" : attr.toLowerCase().replace(" ", ""); - update[`repeating_${npcaction}_${newrowid}_attack_${attributeName}`] = action[`${attr}`]; - }; - }); - - if(action["Damage 2"] && action["Damage 2 Type"]) { - update[`repeating_${npcaction}_${newrowid}_attack_damage2`] = action["Damage 2"]; - update[`repeating_${npcaction}_${newrowid}_attack_damagetype2`] = action["Damage 2 Type"]; - } - } - }); - (attr === "Actions") ? callbacks.push(() => {update_npc_action("all");} ) : false; - } else if(contentarray && contentarray.indexOf(`${attr}`) > -1) { - console.log(`%c ${attr} was not found for ${page.name}`, "color: orange;"); - }; - }); - //REACTIONS - if (page.data["data-Reactions"]) { - update["npcreactionsflag"] = 1; - let reactionsobj = {}; - jsonparse(page.data["data-Reactions"]).forEach((val) => { reactionsobj[val.Name] = val.Desc; }); - _.each(reactionsobj, (desc, name) => { - newrowid = generateRowID(); - update[`repeating_npcreaction_${newrowid}_name`] = name + "."; - if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") { - desc = desc.substring(2); - }; - update[`repeating_npcreaction_${newrowid}_desc`] = desc.trim(); - }); - } else if(contentarray && contentarray.indexOf("Reactions") > -1) { - console.log(`%c Reactions was not found for ${page.name}`, "color: orange;"); - }; - //TRAITS - if (page.data["data-Traits"]) { - //console.log(`%c MONSTERS Drop: NPC Traits`, "color:cornflowerblue;"); - let traitsobj = {}; - jsonparse(page.data["data-Traits"]).forEach((val) => { - traitsobj[val.Name] = (val.Name && val.Desc) ? val.Desc : ""; - if (val.Name && val.Desc) { - traitsobj[val.Name] = val.Desc; - } else if (val.Name) { - traitsobj[val.Name] = ""; - } else { - console.log(`%c Traits JSON is lacking a Name key`, "color: orange;") - }; - }); - _.each(traitsobj, (desc, name) => { - newrowid = generateRowID(); - update[`repeating_npctrait_${newrowid}_name`] = name + "."; - if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") { - desc = desc.substring(2); - } - update[`repeating_npctrait_${newrowid}_desc`] = desc.trim(); - // ESPER NPCS - if(name === "Spellcasting") { - var lvl = parseInt(desc.substring(desc.indexOf("-level")-4, desc.indexOf("-level")-2).trim(), 10); - lvl = !isNaN(lvl) ? lvl : 1; - var ability = desc.match(/casting ability is (.*?) /); - ability = ability && ability.length > 1 ? ability[1] : false; - ability = ability ? "@{" + ability.toLowerCase() + "_mod}+" : "0*"; - update["base_level"] = lvl; - update["caster_level"] = lvl; - update["class"] = "Wizard"; - update["level"] = lvl; - update["npcspellcastingflag"] = 1; - update["spellcasting_ability"] = ability; - callbacks.push(() => {update_pb();} ); - callbacks.push(() => {update_spell_slots();} ); - } - //Githzerai in MToF have (Psionics) - if (name.includes("Innate Spellcasting")) { - const ability = (page.data["Spellcasting Ability"]) ? `@{${page.data["Spellcasting Ability"].toLowerCase()}_mod}+` : "0*"; - update["npcspellcastingflag"] = 1; - update["spellcasting_ability"] = ability; - }; - }); - } else if(contentarray && contentarray.indexOf("Traits") > -1) { - console.log(`%c Traits was not found for ${page.name}`, "color: orange;"); - }; - //Powers - if (page.data["data-Powers"]) { - let spellsobj = []; - //Put together a list of spells to get from the Comepndium - ["spells", "innate"].forEach((type) => { - let spellList = jsonparse(page.data["data-Powers"])[`${type}`]; - if (spellList) { - Object.keys(spellList).map((objectKey, index) => { - spellList[objectKey].forEach((spell) => { - spellsobj.push(spell); - }); - }); - }; - }); - getCompendiumPage(spellsobj, (compendiumPages) => { - compendiumPages = removeDuplicatedPageData(compendiumPages); - const spellData = (compendiumPages.length === undefined || compendiumPages.length === 1) ? [compendiumPages] : compendiumPages; - const innate = (jsonparse(page.data["data-Powers"])[`innate`]) ? jsonparse(page.data["data-Powers"])[`innate`] : false; - let existing = {}; - let update = [], callbacks = []; - - spellData.forEach((page) => { - const spell = page.data; - const lvl = spell["Level"] && spell["Level"] > 0 ? spell["Level"] : "prime"; - const newrowid = generateRowID(); - const repeatingRow = `repeating_spell-${lvl}_${newrowid}`; - - update[`${repeatingRow}_spelllevel`] = lvl; - update[`${repeatingRow}_spell_ability`] = (update["spellcasting_ability"]) ? update["spellcasting_ability"] : "spell"; - (spell.Name) ? update[`${repeatingRow}_spellname`] = spell.Name : console.log(`%c ${JSON.stringify(page.name)} is incorrect. Update compendium data.`, "color: orange;"); - update[`${repeatingRow}_spelloutput`] = (page.data["Damage"] || page.data["Healing"]) ? "ATTACK" : "POWERCARD"; - - ["spellclass", "spellsource", "data-description"].forEach((attr) => { - const suffix = (attr.includes("description")) ? "spelldescription" : attr; - (spell[`${attr}`]) ? update[`${repeatingRow}_${suffix}`] = spell[`${attr}`] : false; - }); - - ["Add Casting Modifier", "Activation Time", "Concentration", "Damage Type", "Damage", "Duration", "Healing", "Material", "Range", "Ritual", "Save", "Save Success", "Domain", "Secondary Damage", "Secondary Damage Type", "Power Attack", "Target"].forEach((attr) => { - if (spell[`${attr}`]) { - //Adjust the array entry to match the attribute name in the HTML - const name = - (attr === "Add Casting Modifier") ? "dmgmod" : - (attr === "Material") ? `comp_materials` : - (attr === "Power Attack") ? `attack` : - (attr.includes("Secondary Damage")) ? attr.split("Secondary ")[0] + "2" : - attr; - const spellattribute = name.toLowerCase().replace(" ", ""); - //Concentration, Ritual, and Domain are exceptions to norm - const updateValue = - (attr === "Concentration" || attr === "Ritual") ? `{{${spellattribute}=1}}` : - (attr === "Domain") ? spell["Domain"].toLowerCase() : - spell[`${attr}`]; - update[`${repeatingRow}_spell${spellattribute}`] = updateValue; - }; - }); - - ["Higher Power Slot Bonus", "Higher Power Slot Desc", "Higher Power Slot Dice", "Higher Power Slot Die"].forEach((attr) => { - if (spell[`${attr}`]) { - const spellattribute = (attr.includes("Bonus")) ? "hlbonus" : (attr.includes("Desc")) ? "athigherlevels" : (attr.includes("Dice")) ? "hldie" : "hldietype"; - update[`${repeatingRow}_spell${spellattribute}`] = spell[`${attr}`]; - }; - }); - - if (spell["Components"]) { - ["v", "s", "m"].forEach((comp) => { - if (spell["Components"].toLowerCase().indexOf(comp) === -1) {update[`${repeatingRow}_spellcomp_${comp}`] = "0"}; - }); - }; - - if(page.data["Damage"] || page.data["Healing"]) { - //This needs to run the create_attack_from_spell - callbacks.push(() => { create_attack_from_spell(lvl, newrowid, currentData.character_id); }); - } else if (page.data["Higher Power Slot Desc"] && page.data["Higher Power Slot Desc"] != "") { - //This needs to run the update_spelloutput - }; - - if (spell["data-Prime Scaling"] && lvl == "prime") { - update[`${repeatingRow}_spell_damage_progression`] = "Prime " + spell["data-Prime Scaling"].charAt(0).toUpperCase() + spell["data-Prime Scaling"].slice(1); - }; - - if (innate) { - const spellName = (spell.Name).toLowerCase(); - //Search each keys in INNATE to see if spell name === one of the Values - Object.keys(innate).map((objectKey, index) => { - innate[objectKey].forEach((spell) => { - (spell === spellName) ? update[`${repeatingRow}_innate`] = objectKey : false; - }); - }); - }; - - update[`${repeatingRow}_options-flag`] = "0"; - }); - - setAttrs(update, {silent: true}, () => { - callbacks.forEach((callback) => { - callback(); - }) - }); - - return { - callbacks: callbacks - }; - }); - }; - }; - if(category === "Feats") { - update["tab"] = "core"; - var match = {name: page.name}; - var existing = _.findWhere(repeating.traits, match); - var newrowid = generateRowID(); - if(existing) { - newrowid = existing.id; - existing.name = page.name; - existing.source = "Feat"; - existing.type = page.data["Properties"] ? page.data["Properties"] : ""; - } else { - var newtrait = {}; - newtrait.id = newrowid; - newtrait.name = page.name; - newtrait.source = "Feat"; - newtrait.type = page.data["Properties"] ? page.data["Properties"] : ""; - repeating.traits.push(newtrait); - } - if(page.name) {update[`repeating_traits_${newrowid}_name`] = page.name}; - if(page.content) {update[`repeating_traits_${newrowid}_description`] = page.content}; - update[`repeating_traits_${newrowid}_source`] = "Feat"; - update[`repeating_traits_${newrowid}_source_type`] = page.data["Properties"] ? page.data["Properties"] : ""; - update[`repeating_traits_${newrowid}_options-flag`] = "0"; - update[`repeating_traits_${newrowid}_display_flag`] = "on"; - }; - if(category === "Proficiencies") { - var newrowid = generateRowID(); - var type = page.data["Type"] || ""; - if (type.toLowerCase() === "language" || type.toLowerCase() === "armor" || type.toLowerCase() === "weapon" || type.toLowerCase() === "other") { - if( repeating.prof_names.indexOf(page.name.toLowerCase()) == -1 ) { - update[`repeating_proficiencies_${newrowid}_prof_type`] = type.replace("custom", "").toUpperCase(); - update[`repeating_proficiencies_${newrowid}_name`] = page.name; - update[`repeating_proficiencies_${newrowid}_options-flag`] = 0; - repeating.prof_names.push(page.name.toLowerCase()); - }; - } else if(type.toLowerCase() === "tool" || type.toLowerCase() === "skillcustom") { - let existing = {}; - _.each(repeating.tool, (tool, id) => { - if(tool.toolname == page.name.toLowerCase()) { - newrowid = id; - existing = tool; - } - }); - if(!existing.toolname) repeating.tool[newrowid] = {toolname: page.name.toLowerCase()} - update[`repeating_tool_${newrowid}_toolname`] = page.name; - if(!existing.base) update[`repeating_tool_${newrowid}_toolattr_base`] = "?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}"; - update[`repeating_tool_${newrowid}_options-flag`] = 0; - if(page.data["toolbonus_base"]) update[`repeating_tool_${newrowid}_toolbonus_base`] = "(@{pb}*2)"; - repeating.prof_names.push(page.name.toLowerCase()); - callbacks.push( function() {update_tool(newrowid);} ); - } - if(type.toLowerCase() === "skill") { - var skill_string = page.name.toLowerCase().replace(/ /g, '_'); - update[`${skill_string}_prof`] = `(@{pb}*@{${skill_string}_type})`; - }; - }; - if(category === "Classes") { - update["tab"] = "core"; - if(page.data.multiclass) { - if(page.name && page.name !== "") { update[page.data.multiclass] = page.name; } - update[page.data.multiclass + "_flag"] = "1"; - classlevel = parseInt(currentData[page.data.multiclass + "_lvl"]); - } else { - if(page.name && page.name !== "") { update["class"] = page.name; } - if(page.data["Hit Die"] && page.data["Hit Die"] !== "") { - update["base_level"] = currentData.base_level ? currentData.base_level : "1"; - update["hit_dice_max"] = update["base_level"] + page.data["Hit Die"]; - update["hit_dice"] = update["base_level"]; - } - if(page.data["Spellcasting Ability"] && page.data["Spellcasting Ability"] !== "") { - update["spellcasting_ability"] = "@{" + page.data["Spellcasting Ability"].toLowerCase() + "_mod}+"; - } - } - if(page.data["data-Saving Throws"] && !page.data.multiclass) { - var saves = jsonparse(page.data["data-Saving Throws"]); - _.each(saves, function(value) { - update[value.toLowerCase() + "_save_prof"] = "(@{pb})"; - }); - } - - if(!looped) { - callbacks.push(update_class); - } - }; - if(category === "Subclasses") { - if(page.data.multiclass) { - if(page.name && page.name !== "") { update[page.data.multiclass + "_subclass"] = page.name; } - classlevel = parseInt(currentData[page.data.multiclass + "_lvl"]); - } else { - if(page.name && page.name !== "") { update["subclass"] = page.name; }; - } - if(page.data["Spellcasting Ability"]) { - if(page.data.Class == "Fighter") { - update["arcane_fighter"] = "1"; - } else if(page.data.Class == "Rogue") { - update["arcane_rogue"] = "1"; - } - } - if(!looped) { - callbacks.push(update_class); - }; - }; - if(category === "Races" || category === "Subraces") { - update["tab"] = "core"; - if(category === "Races") { - update["race"] = page.name; - if (page.name == "Halfling") { - update["halflingluck_flag"] = "1"; - } - } - else { - update["subrace"] = page.name; - }; - if(page.data["Speed"]) {update["speed"] = page.data["Speed"]}; - if(page.data["Size"]) {update["size"] = page.data["Size"]}; - if(!looped) { - callbacks.push(update_race_display); - } - }; - if(category === "Backgrounds") { - update["tab"] = "core"; - if(page.name && page.name !== "") { update["background"] = page.name; }; - }; - - if(page.data.theseblobs) { - _.each(page.data.theseblobs, function(blobname) { - if(page.data.blobs[blobname]) blobs[blobname] = page.data.blobs[blobname]; - }); - } else { - blobs = filterBlobs(page.data.blobs, {"Level": "1"}); - } - _.each(blobs, function(blob, blobname) { - if(blob["Traits"]) { - var traitsource = ""; - switch (category) { - case "Races": - case "Subraces": - traitsource = "Racial"; - break; - case "Classes": - case "Subclasses": - traitsource = "Class"; - break; - default: - traitsource = "Background"; - } - var trait_array = jsonparse(blob["Traits"]); - if(trait_array && trait_array.length) { - _.each(trait_array, function(trait) { - if(!trait.Input) { - var match = {name: trait["Name"], type: page.name}; - if(trait["Replace"]) { - match = {name: trait["Replace"]}; - } - var existing = _.findWhere(repeating.traits, match); - if(existing) { - newrowid = existing.id; - existing.name = trait["Name"]; - existing.source = traitsource; - existing.type = page.name; - } else { - var newtrait = {}; - newrowid = generateRowID(); - newtrait.id = newrowid; - newtrait.name = trait["Name"]; - newtrait.source = traitsource; - newtrait.type = page.name; - repeating.traits.push(newtrait); - } - update["repeating_traits_" + newrowid + "_name"] = trait["Name"].replace(/{{Input}}/g, ""); - update["repeating_traits_" + newrowid + "_description"] = trait["Desc"] ? trait["Desc"].replace(/{{Input}}/g, "") : ""; - update["repeating_traits_" + newrowid + "_source"] = removeExpansionInfo(traitsource); - update["repeating_traits_" + newrowid + "_source_type"] = page.name ? removeExpansionInfo(page.name) : ""; - update["repeating_traits_" + newrowid + "_options-flag"] = 0; - update["repeating_traits_" + newrowid + "_display_flag"] = "on"; - } - }); - }; - }; - if(blob["Language Proficiency"] || blob["Weapon Proficiency"] || blob["Armor Proficiency"] || blob["Tool Proficiency"]) { - if(blob["Language Proficiency"]) { - var lang_array = jsonparse(blob["Language Proficiency"]); - if(lang_array["Proficiencies"] && lang_array["Proficiencies"].length) { - _.each(lang_array["Proficiencies"], function(prof) { - if( repeating.prof_names.indexOf(prof.toLowerCase()) == -1 ) { - newrowid = generateRowID(); - update["repeating_proficiencies_" + newrowid + "_prof_type"] = "LANGUAGE"; - update["repeating_proficiencies_" + newrowid + "_name"] = prof; - update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0; - repeating.prof_names.push(prof.toLowerCase()); - } - }); - } - }; - if(blob["Weapon Proficiency"]) { - var weap_array = jsonparse(blob["Weapon Proficiency"]); - if(weap_array["Proficiencies"] && weap_array["Proficiencies"].length) { - _.each(weap_array["Proficiencies"], function(prof) { - if( repeating.prof_names.indexOf(prof.toLowerCase()) == -1 ) { - newrowid = generateRowID(); - update["repeating_proficiencies_" + newrowid + "_prof_type"] = "WEAPON"; - update["repeating_proficiencies_" + newrowid + "_name"] = prof; - update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0; - repeating.prof_names.push(prof.toLowerCase()); - } - }); - } - }; - if(blob["Armor Proficiency"]) { - var armor_array = jsonparse(blob["Armor Proficiency"]); - if(armor_array["Proficiencies"] && armor_array["Proficiencies"].length) { - _.each(armor_array["Proficiencies"], function(prof) { - if( repeating.prof_names.indexOf(prof.toLowerCase()) == -1 ) { - newrowid = generateRowID(); - update["repeating_proficiencies_" + newrowid + "_prof_type"] = "ARMOR"; - update["repeating_proficiencies_" + newrowid + "_name"] = prof; - update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0; - repeating.prof_names.push(prof.toLowerCase()); - } - }); - } - }; - if(blob["Tool Proficiency"]) { - var tool_array = jsonparse(blob["Tool Proficiency"]); - if(tool_array["Proficiencies"] && tool_array["Proficiencies"].length) { - _.each(tool_array["Proficiencies"], function(prof) { - //D&D 5e Mancer: Land Vehicles proficiency does not drop with Marine background (UC748) - //Generating ID that was coming empty for not existing rows. - //By Miguel Peres - let newrowid = generateRowID(); - - let existing = {}; - _.each(repeating.tool, function(tool, id) { - if(tool.toolname == prof.toLowerCase()) { - newrowid = id; - existing = tool; - } - }); - if(!existing.toolname) repeating.tool[newrowid] = {toolname: prof.toLowerCase()} - update["repeating_tool_" + newrowid + "_toolname"] = prof; - if(!existing.base) update["repeating_tool_" + newrowid + "_toolattr_base"] = "?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}"; - update["repeating_tool_" + newrowid + "_options-flag"] = 0; - repeating.prof_names.push(page.name.toLowerCase()); - callbacks.push( function() {update_tool(newrowid);} ); - }); - } - }; - }; - if(blob["Skill Proficiency"]) { - var skill_array = jsonparse(blob["Skill Proficiency"]); - if(skill_array["Proficiencies"] && skill_array["Proficiencies"].length) { - _.each(skill_array["Proficiencies"], function(prof) { - var skill_string = prof.toLowerCase().replace(/ /g, '_'); - update[skill_string + "_prof"] = "(@{pb}*@{" + skill_string + "_type})"; - }); - }; - }; - if(blob["Actions"]) { - var actionsobj = {}; - jsonparse(blob["Actions"]).forEach(function(val) { actionsobj[val.Name] = val; }); - _.each(actionsobj, function(action, name) { - newrowid = generateRowID(); - _.each(repeating.attack, function(atk, atkid) { - if(atk.atkname === name) newrowid = atkid; - }); - update["repeating_attack_" + newrowid + "_options-flag"] = "0"; - update["repeating_attack_" + newrowid + "_atkname"] = name; - if(action["Desc"]) { - update["repeating_attack_" + newrowid + "_atk_desc"] = action["Desc"]; - } - - if(action["Type Attack"]) { - if (action["Type"] == "Spell") { - update["repeating_attack_" + newrowid + "_atkflag"] = "0"; - update["repeating_attack_" + newrowid + "_attack_options"] = ""; - update["repeating_attack_" + newrowid + "_saveflag"] = "{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}" - } else { - update["repeating_attack_" + newrowid + "_attack_flag"] = "on"; - update["repeating_attack_" + newrowid + "_atkflag"] = "{{attack=1}}"; - update["repeating_attack_" + newrowid + "_attack_options"] = "{{attack=1}}"; - } - if(action["Reach"]) { update["repeating_attack_" + newrowid + "_atkrange"] = action["Reach"]; } - - if(action["Damage"]) { update["repeating_attack_" + newrowid + "_dmgbase"] = action["Damage"]; } - if(action["Damage Type"]) { update["repeating_attack_" + newrowid + "_dmgtype"] = action["Damage Type"]; } - if (action["Modifier"]) { - update["repeating_attack_" + newrowid + "_dmgattr"] = modStringToAttrib(action["Modifier"]); - update["repeating_attack_" + newrowid + "_atkattr_base"] = modStringToAttrib(action["Modifier"]); - } else { - update["repeating_attack_" + newrowid + "_dmgattr"] = "0"; - } - if (action["Save"]) { update["repeating_attack_" + newrowid + "_saveattr"] = action["Save"] } - if (action["Save DC"]) { update["repeating_attack_" + newrowid + "_savedc"] = "(" + modStringToAttrib(action["Save DC"]) + "+8+@{pb})" } - if (action["Save Effect"]) { update["repeating_attack_" + newrowid + "_saveeffect"] = action["Save Effect"] } - - if(action["Damage 2"] && action["Damage 2 Type"]) { - update["repeating_attack_" + newrowid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}"; - update["repeating_attack_" + newrowid + "_atk_dmg2base"] = action["Damage 2"]; - update["repeating_attack_" + newrowid + "_attack_damagetype2"] = action["Damage 2 Type"]; - if (action["Modifier 2"]) { - update["repeating_attack_" + newrowid + "_dmg2attr"] = modStringToAttrib(action["Modifier 2"]); - } else { - update["repeating_attack_" + newrowid + "_dmgattr"] = "0"; - } - } - } - }); - }; - if(blob["Global Damage"]) { - var dmgmod = jsonparse(blob["Global Damage"]); - var id = generateRowID(); - _.each(repeating.damagemod, function(name, rowid) { - if(name.toLowerCase() === dmgmod["Name"].toLowerCase()) id = rowid; - }); - update["repeating_damagemod_" + id + "_global_damage_name"] = `${dmgmod["Name"]}`; - update["repeating_damagemod_" + id + "_global_damage_damage"] = `${parseValues(dmgmod["Damage"])}`; - if(dmgmod["Active"] == "true") update["repeating_damagemod_" + id + "_global_damage_active_flag"] = "1"; - update["repeating_damagemod_" + id + "_options-flag"] = "0"; - update["repeating_damagemod_" + id + "_global_damage_type"] = dmgmod["Type"] ? dmgmod["Type"] : dmgmod["Name"]; - update["global_damage_mod_flag"] = "1"; - repeating.damagemod[id] = dmgmod["Name"]; - }; - if(blob["Resources"]) { - var resources = jsonparse(blob["Resources"]); - _.each(resources, function(value) { - var section = ""; - if(currentData["class_resource_name"] == "" || currentData["class_resource_name"] == value["Name"]) { - section = "class_resource"; - } else if (currentData["other_resource_name"] == "" || currentData["other_resource_name"] == value["Name"]) { - section = "other_resource"; - } else { - _.each(repeating.resource, function(resource, id) { - if(resource.left == "" && section == "" || resource.left == value["Name"]) { - section = "repeating_resource_" + id + "_resource_left"; - } - if(resource.right == "" && section == "" || resource.right == value["Name"]) { - section = "repeating_resource_" + id + "_resource_right"; - } - }) - } - if(section === "") { - var id = generateRowID(); - section = "repeating_resource_" + id + "_resource_left"; - repeating.resource[id] = {left: value["Name"], right: ""}; - } - update[section + "_name"] = value["Name"]; - if(value["Uses"]) update[section] = numUses(value["Uses"]); - update[section + "_max"] = value["Max"] ? numUses(value["Max"]) : numUses(value["Uses"]); - }); - }; - if(blob["Custom AC"]) { - var customac = jsonparse(blob["Custom AC"]); - update["custom_ac_flag"] = "1"; - update["custom_ac_base"] = customac.Base; - update["custom_ac_part1"] = customac["Attribute 1"]; - update["custom_ac_part2"] = customac["Attribute 2"] ? customac["Attribute 2"] : ""; - update["custom_ac_shield"] = customac.Shields; - if(!looped) { - callbacks.push( function() {update_ac();} ) - } - }; - if(blob["Hit Points Per Level"]) { - var id = generateRowID(); - update["repeating_hpmod_" + id + "_mod"] = blob["Hit Points Per Level"]; - update["repeating_hpmod_" + id + "_source"] = page.name ? page.name : "Subclass"; - if(category === "Races" || category === "Subraces") { - update["repeating_hpmod_" + id + "_levels"] = "total"; - } else { - update["repeating_hpmod_" + id + "_levels"] = "base"; - } - }; - if(blob["Global AC Mod"]) { - var globalac = jsonparse(blob["Global AC Mod"]); - var id = generateRowID(); - _.each(repeating.acmod, function(name, rowid) { - if(name.toLowerCase() === globalac["Name"].toLowerCase()) id = rowid; - }); - update["repeating_acmod_" + id + "_global_ac_val"] = globalac.Bonus; - if(globalac["Active"] !== "false") update["repeating_acmod_" + id + "_global_ac_active_flag"] = "1"; - update["repeating_acmod_" + id + "_options-flag"] = "0"; - update["repeating_acmod_" + id + "_global_ac_name"] = globalac.Name; - update["global_ac_mod_flag"] = "1"; - }; - if(blob["Global Save"]) { - var globalsave = jsonparse(blob["Global Save Mod"]); - var id = generateRowID(); - _.each(repeating.savemod, function(name, rowid) { - if(name.toLowerCase() === globalsave["Name"].toLowerCase()) id = rowid; - }); - update["repeating_savemod_" + id + "_global_save_roll"] = globalsave.Bonus; - if(globalsave["Active"] !== "false") update["repeating_savemod_" + id + "_global_save_active_flag"] = "1"; - update["repeating_savemod_" + id + "_options-flag"] = "0"; - update["repeating_savemod_" + id + "_global_save_name"] = globalsave.Name; - update["global_save_mod_flag"] = "1"; - } - if(blob["Global Attack"]) { - var globalattack = jsonparse(blob["Global Attack"]); - var id = generateRowID(); - _.each(repeating.tohitmod, function(name, rowid) { - if(name.toLowerCase() === globalattack["Name"].toLowerCase()) id = rowid; - }); - update["repeating_tohitmod_" + id + "_global_attack_rollstring"] = `${globalattack["Bonus"]}[${globalattack["Name"]}]`; - if(globalattack["Active"] !== "false") update["repeating_tohitmod_" + id + "_global_attack_active_flag"] = "1"; - update["repeating_tohitmod_" + id + "_options-flag"] = "0"; - update["global_attack_mod_flag"] = "1"; - }; - if(blob["Initiative"]) { - if(blob["Initiative"].toLowerCase() === "advantage") { - update["initiative_style"] = "{@{d20},@{d20}}kh1"; - } else if (blob["Initiative"].toLowerCase() === "disadvantage") { - update["initiative_style"] = "{@{d20},@{d20}}kl1"; - } else { - update.initmod = numUses(blob["Initiative"]); - } - }; - if(blob["Carry Multiplier"]) { - update["carrying_capacity_mod"] = "*" + blob["Carry Multiplier"]; - }; - if(blob["Speed"]) { - if(blob["Speed"][0] === "+") { - let prevspeed = update["speed"] || currentData["speed"]; - prevspeed = prevspeed && !isNaN(parseInt(prevspeed)) ? parseInt(prevspeed) : 0; - update["speed"] = prevspeed + parseInt(blob["Speed"]); - } else { - update["speed"] = parseInt(blob["Speed"]); - } - }; - if(blob["Jack of All Trades"]) { - update["jack_of_all_trades"] = "@{jack}"; - }; - if(blob["Saving Throws"]) { - var saves = jsonparse(blob["Saving Throws"]); - _.each(saves, function(value) { - update[value.toLowerCase() + "_save_prof"] = "(@{pb})"; - }); - }; - if(blob["Custom Powers"]) { - let spells = jsonparse(blob["Custom Powers"]); - _.each(spells, function(spell) { - var lvl = spell["Level"] && spell["Level"] > 0 ? spell["Level"] : "prime"; - let id = generateRowID(); - if(repeating["spell-" + lvl]) { - _.each(repeating["spell-" + lvl], function(spell, spellid) { - if(spell.spellname.toLowerCase() === page.name.toLowerCase()) { - id = spellid; - } - }); - } - update["repeating_spell-" + lvl + "_" + id + "_spelllevel"] = lvl; - if(spell["spellcasting_ability"]) { - update["repeating_spell-" + lvl + "_" + id + "_spell_ability"] = "@{" + spell["spellcasting_ability"].toLowerCase() + "_mod}+";; - } else { - update["repeating_spell-" + lvl + "_" + id + "_spell_ability"] = "spell"; - } - if(spell["spellclass"]) { - update["repeating_spell-" + lvl + "_" + id + "_spellclass"] = spell["spellclass"]; - } - if(spell["spellsource"]) { - update["repeating_spell-" + lvl + "_" + id + "_spellsource"] = spell["spellsource"]; - } - update["repeating_spell-" + lvl + "_" + id + "_spellname"] = spell.Name; - if(spell["Ritual"]) {update["repeating_spell-" + lvl + "_" + id + "_spellritual"] = "{{ritual=1}}"}; - if(spell["Domain"]) {update["repeating_spell-" + lvl + "_" + id + "_spellschool"] = spell["Domain"].toLowerCase()}; - if(spell["Activation Time"]) {update["repeating_spell-" + lvl + "_" + id + "_spellcastingtime"] = spell["Activation Time"]}; - if(spell["Point Cost"]) {update["repeating_spell-" + lvl + "_" + id + "_pointcost"] = spell["Point Cost"]}; - if(spell["Range"]) {update["repeating_spell-" + lvl + "_" + id + "_spellrange"] = spell["Range"]}; - if(spell["Target"]) {update["repeating_spell-" + lvl + "_" + id + "_spelltarget"] = spell["Target"]}; - if(spell["Components"]) { - if(spell["Components"].toLowerCase().indexOf("v") === -1) {update["repeating_spell-" + lvl + "_" + id + "_spellcomp_v"] = "0"}; - if(spell["Components"].toLowerCase().indexOf("s") === -1) {update["repeating_spell-" + lvl + "_" + id + "_spellcomp_s"] = "0"}; - if(spell["Components"].toLowerCase().indexOf("m") === -1) {update["repeating_spell-" + lvl + "_" + id + "_spellcomp_m"] = "0"}; - }; - if(spell["Material"]) {update["repeating_spell-" + lvl + "_" + id + "_spellcomp_materials"] = spell["Material"]}; - if(spell["Concentration"]) {update["repeating_spell-" + lvl + "_" + id + "_spellconcentration"] = "{{concentration=1}}"}; - if(spell["Duration"]) {update["repeating_spell-" + lvl + "_" + id + "_spellduration"] = spell["Duration"]}; - if(spell["Damage"] || spell["Healing"]) { - update["repeating_spell-" + lvl + "_" + id + "_spelloutput"] = "ATTACK"; - callbacks.push( function() {create_attack_from_spell(lvl, id, currentData.character_id);} ); - } - else if(spell["Higher Power Slot Desc"] && spell["Higher Power Slot Desc"] != "") { - var spelllevel = "?{Cast at what level?"; - for(i = 0; i < 10-lvl; i++) { - spelllevel = spelllevel + "|Level " + (parseInt(i, 10) + parseInt(lvl, 10)) + "," + (parseInt(i, 10) + parseInt(lvl, 10)); - } - spelllevel = spelllevel + "}"; - update["repeating_spell-" + lvl + "_" + id + "_rollcontent"] = `@{wtype}&{template:spell} {{level=@{spellschool} ${spelllevel}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; - }; - if(spell["Power Attack"]) {update["repeating_spell-" + lvl + "_" + id + "_spellattack"] = spell["Power Attack"]}; - if(spell["Damage"]) {update["repeating_spell-" + lvl + "_" + id + "_spelldamage"] = spell["Damage"]}; - if(spell["Damage Type"]) {update["repeating_spell-" + lvl + "_" + id + "_spelldamagetype"] = spell["Damage Type"]}; - if(spell["Secondary Damage"]) {update["repeating_spell-" + lvl + "_" + id + "_spelldamage2"] = spell["Secondary Damage"]}; - if(spell["Secondary Damage Type"]) {update["repeating_spell-" + lvl + "_" + id + "_spelldamagetype2"] = spell["Secondary Damage Type"]}; - if(spell["Healing"]) {update["repeating_spell-" + lvl + "_" + id + "_spellhealing"] = spell["Healing"];}; - if(spell["Add Casting Modifier"]) {update["repeating_spell-" + lvl + "_" + id + "_spelldmgmod"] = spell["Add Casting Modifier"]}; - if(spell["Save"]) {update["repeating_spell-" + lvl + "_" + id + "_spellsave"] = spell["Save"]}; - if(spell["Save Success"]) {update["repeating_spell-" + lvl + "_" + id + "_spellsavesuccess"] = spell["Save Success"]}; - if(spell["Higher Power Slot Dice"]) {update["repeating_spell-" + lvl + "_" + id + "_spellhldie"] = spell["Higher Power Slot Dice"]}; - if(spell["Higher Power Slot Die"]) {update["repeating_spell-" + lvl + "_" + id + "_spellhldietype"] = spell["Higher Power Slot Die"]}; - if(spell["Higher Power Slot Bonus"]) {update["repeating_spell-" + lvl + "_" + id + "_spellhlbonus"] = spell["Higher Power Slot Bonus"]}; - if(spell["Higher Power Slot Desc"]) {update["repeating_spell-" + lvl + "_" + id + "_spellathigherlevels"] = spell["Higher Power Slot Desc"]}; - if(spell["data-Prime Scaling"] && lvl == "prime") {update["repeating_spell-" + lvl + "_" + id + "_spell_damage_progression"] = "Prime " + spell["data-Prime Scaling"].charAt(0).toUpperCase() + spell["data-Prime Scaling"].slice(1);}; - if(spell["data-description"]) { update["repeating_spell-" + lvl + "_" + id + "_spelldescription"] = spell["data-description"]}; - update["repeating_spell-" + lvl + "_" + id + "_options-flag"] = "0"; - }) - }; - if(blob["Global Save Mod"]) { - update["globalsavemod"] = numUses(blob["Global Save Mod"]); - }; - if(blob["Proficiency Bonus"]) { - var bonus = jsonparse(blob["Proficiency Bonus"]); - _.each(bonus, function(value, prof) { - update[prof.replace(/ /g, "_").toLowerCase() + "_flat"] = numUses(value); - }); - }; - /**/ - }); - - return { - update: update, - repeating: repeating, - callbacks: callbacks - }; -}; - var check_itemmodifiers = function(modifiers, previousValue) { var mods = modifiers.toLowerCase().split(","); if(previousValue) { @@ -4203,16 +3121,7 @@ on("mancer:cancel", function(eventinfo) { setAttrs(update); }); -on("change:licensedsheet", function(eventinfo) { - //debugger -}); - -/* on("sheet:opened", function(eventinfo) { - getAttrs([licensedsheet], function(v) { - debugger - }); -}); */ - var v2_old_values_check = function() { +var v2_old_values_check = function() { // update_attacks("all"); var update = {}; var attrs = ["simpletraits","features_and_traits","initiative_bonus","npc","character_id"]; @@ -4662,6040 +3571,6 @@ var versioning = function(finished) { }; }); }; -/*********************************************************************/ -/*********************************************************************/ -/****** ******/ -/****** CHARACTERMANCER WORKERS ******/ -/****** ******/ -/*********************************************************************/ -/*********************************************************************/ - -var proficiencyList = ["Weapon", "Armor", "Skill", "Tool", "Language"]; -var abilityList = ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"]; -var changeListeners = "mancerchange:race_ability_choice1 mancerchange:race_ability_choice2 mancerchange:subrace_ability_choice1 mancerchange:subrace_ability_choice2 mancerchange:custom_hit_die mancerchange:feat_ability_choice"; -var proficiencyNum = 4; -var customListeners = ""; -_.each(abilityList, function(ability){ - changeListeners += " mancerchange:race_custom_" + ability.toLowerCase(); - changeListeners += " mancerchange:subrace_custom_" + ability.toLowerCase(); -}); - -/* HELPER FUNCTIONS */ -var recalcData = function(data) { - //Sets all the text in the top bar, returns ability information - var update = {"hit_points": "-"}; - var allAbilities = {race: {}, subrace: {}, feat: {}}; - var disableAbilities = {race: [], subrace: [], feat: []}; - var allProficiencies = {}; - var toSet = {}; - var mancerdata = data || getCharmancerData(); - var additionalHP = 0; - - if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Suggested Abilities"]) { - update["class_suggested_abilities"] = mancerdata["l1-class"].data.class["Suggested Abilities"]; - showChoices(["class_suggested_abilities_container"]); - } else { - update["class_suggested_abilities"] = ""; - hideChoices(["class_suggested_abilities_container"]); - } - if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"]) { - update["class_spellcasting_ability"] = mancerdata["l1-class"].data.class["Spellcasting Ability"]; - showChoices(["class_spellcasting_ability_container"]); - } else { - update["class_spellcasting_ability"] = ""; - hideChoices(["class_spellcasting_ability_container"]); - } - - _.each(mancerdata, function(page){ - _.each(page.values, function(value, name) { - if(name.search("ability") !== -1) { - var choiceSection = name.split("_")[0]; - if(page.data[choiceSection] && page.data[choiceSection]["data-Ability Score Choice"]) { - var increase = 1; - if(typeof page.data[choiceSection]["data-Ability Score Choice"] == "string") { - increase = parseInt( _.last( page.data[choiceSection]["data-Ability Score Choice"].split("+") ) ); - } - allAbilities[choiceSection] = allAbilities[choiceSection] || {}; - allAbilities[choiceSection][value.toLowerCase()] = increase; - disableAbilities[choiceSection] = disableAbilities[choiceSection] || []; - disableAbilities[choiceSection].push(value); - } - } - }); - _.each(page.data, function(pagedata, increaseSection) { - if(pagedata["data-Ability Score Increase"]) { - _.each(pagedata["data-Ability Score Increase"], function(amount, ability) { - allAbilities[increaseSection] = allAbilities[increaseSection] || {}; - allAbilities[increaseSection][ability.toLowerCase()] = amount; - disableAbilities[increaseSection] = disableAbilities[increaseSection] || []; - disableAbilities[increaseSection].push(ability.toLowerCase()); - }); - } - //TODO: Investigate if additional hitpoits at first level could be calculated and interted at this point - //By Miguel - if(pagedata["data-HP per level"]) { - additionalHP += pagedata["data-HP per level"]; - } - }); - }); - if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races") { - _.each(abilityList, function(ability){ - var custom = mancerdata["l1-race"].values["race_custom_" + ability.toLowerCase()] || false; - if(custom) { - allAbilities.race[ability.toLowerCase()] = parseInt(custom); - } - }); - } - if(mancerdata["l1-race"] && mancerdata["l1-race"].values.subrace == "Rules:Races") { - _.each(abilityList, function(ability){ - var custom = mancerdata["l1-race"].values["subrace_custom_" + ability.toLowerCase()] || false; - if(custom) { - allAbilities.subrace[ability.toLowerCase()] = parseInt(custom); - } - }); - } - var abilityTotals = {}; - _.each(allAbilities, function(abilities) { - _.each(abilities, function(amount, ability) { - abilityTotals[ability] = abilityTotals[ability] || {bonus: 0}; - abilityTotals[ability].bonus += parseInt(amount); - }); - }); - _.each(abilityList, function(upperAbility) { - var ability = upperAbility.toLowerCase(); - abilityTotals[ability] = abilityTotals[ability] || {bonus: 0, mod: 0}; - if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values[ability]) { - abilityTotals[ability].base = parseInt( mancerdata["l1-abilities"].values[ability].split("~")[0] ); - } else { - abilityTotals[ability].base = 0; - } - abilityTotals[ability].total = abilityTotals[ability].bonus + abilityTotals[ability].base; - abilityTotals[ability].mod = Math.floor((abilityTotals[ability].total - 10)/2); - update[ability + "_total"] = abilityTotals[ability].total == 0 ? "-" : abilityTotals[ability].total; - }); - allAbilities.totals = abilityTotals; - - if(mancerdata["l1-class"] && (mancerdata["l1-class"].data.class || mancerdata["l1-class"].values["custom_hit_die"])) { - var basehp = mancerdata["l1-class"].data.class ? mancerdata["l1-class"].data.class["Hit Die"] : mancerdata["l1-class"].values["custom_hit_die"]; - var conmod = abilityTotals.constitution.base > 0 ? abilityTotals.constitution.mod : 0; - //Calculating additional hitpoints at first level from things like Draconic Bloodline ad Hill Dwarf - //By Miguel - let additionalHitPointsFromClassAndRaceAtFirstLevel = getAdditionalHitPointsFromClassAndRaceAtFirstLevel(getRelevantBlobs(mancerdata, '1', 'l1')); - allAbilities.hp = parseInt(basehp.replace("d", "")) + additionalHitPointsFromClassAndRaceAtFirstLevel + additionalHP + conmod; - update["hit_points"] = allAbilities.hp; - } - - if(!data) { - _.each(disableAbilities, function(disable, disablesection) { - disableCharmancerOptions(disablesection + "_ability_choice1", disable); - disableCharmancerOptions(disablesection + "_ability_choice2", disable); - }); - setCharmancerText(update); - setAttrs(toSet); - } - return allAbilities; -}; - -var getProficiencies = function(data, currentSlide, blobs) { - //Disables taken proficiency choices, returns proficiency info - var auto = {}; - var allProficiencies = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": [], "Expertise": []}; - var toSet = {}; - var mancerdata = data || getCharmancerData(); - var thismancer = currentSlide && currentSlide != "finish" ? currentSlide.split("-")[0] : "l1"; - if(!blobs) { - blobs = thismancer == "l1" ? blobs = getRelevantBlobs(mancerdata, "1", "l1") : blobs = getAllLpBlobs(data, true); - } - if(thismancer !== "l1") allProficiencies = data["lp-welcome"].values["previous_proficiencies"] ? JSON.parse(data["lp-welcome"].values["previous_proficiencies"]) : allProficiencies; - currentSlide = currentSlide == "lp-finish" ? "finish" : currentSlide; - //For this first part, we're only concerned with choices that have already been made - //Get all of the "automatic" proficiencies - _.each(blobs.sorted, function(blobarray, section) { - _.each(blobarray, function(blob) { - _.each(proficiencyList, function(prof) { - if(blob[prof + " Proficiency"]) { - var json = JSON.parse(blob[prof + " Proficiency"]); - if(json.Proficiencies) { - auto[section] = auto[section] ? auto[section].concat(json.Proficiencies) : json.Proficiencies; - allProficiencies[prof] = allProficiencies[prof].concat(json.Proficiencies); - } - } - }); - if(blob.Expertise) { - var json = JSON.parse(blob.Expertise); - if(json.Proficiencies) { - allProficiencies.Expertise = allProficiencies.Expertise.concat(json.Proficiencies); - } - } - }); - }); - //Gather all of the chosen proficiencies - _.each(mancerdata, function(slide, slidename) { - if(slidename.split("-")[0] == thismancer) { - _.each(proficiencyList, function(prof) { - _.each(slide.values, function(value, name) { - if(name.split("_")[3] == prof.toLowerCase() && name.split("_")[4] == "choice") { - if(value != "custom") allProficiencies[prof].push(value.split(":")[1]); - } - }); - }); - //Get a list of chosen expertise - _.each(slide.values, function(value, name) { - if(name.substr(-16) == "expertise_choice") { - allProficiencies.Expertise.push(value.split(":")[1]); - } - }); - } - }); - //Gather proficiencies from custom choices - _.each(mancerdata, function(slide, slidename) { - if(slidename.split("-")[0] == thismancer) { - _.each(slide.values, function(value, name) { - if(name.substr(-18) == "proficiency_choice") { - if(value != "custom") allProficiencies[slide.values[name.replace("choice", "type")]].push(value.split(":")[1]); - } - }); - } - }); - //If the expertise choice is from the "known" list, make sure the choice is still available - //Reset to "" if not available. Don't do this if we're applying changes - if(currentSlide != "finish") { - _.each(mancerdata, function(slide, slidename) { - if(slidename.split("-")[0] == thismancer) { - _.each(slide.values, function(value, name) { - if(name.substr(-16) == "expertise_choice" && slide.values[name.replace("choice", "info")]) { - if(!(allProficiencies.Skill.includes(value.split(":")[1]) || allProficiencies.Tool.includes(value.split(":")[1]))) { - toSet[name] = ""; - } - } - }); - } - }); - setAttrs(toSet); - } - if(currentSlide && currentSlide != "finish") { - //Now we need to know all of the selects, even if a choice hasn't been made - //Getting a list of all the relevant selects - var repsecs = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": []}; - var repexp = []; - _.each(mancerdata[currentSlide].repeating, function(id) { - _.each(proficiencyList, function(prof) { - if(_.last(id.split("_")) == prof.toLowerCase()) repsecs[prof].push(id); - }); - if(_.last(id.split("_")) == "expertise") repexp.push(id); - if(_.last(id.split("_")) == "proficiency") { - if (mancerdata[currentSlide].values[id + "_type"]) repsecs[mancerdata[currentSlide].values[id + "_type"]].push(id); - } - }) - //Disable already chosen proficiencies - _.each(proficiencyList, function(prof) { - _.each(repsecs[prof], function(id) { - disableCharmancerOptions(id + "_choice", allProficiencies[prof], {category: "Proficiencies"}); - }); - }); - //Disable already chosen expertise, rebuild options if choice is from "known" list - _.each(repexp, function(id) { - if(mancerdata[currentSlide].values[id + "_info"]) { - var choices = allProficiencies.Skill; - var options = JSON.parse(mancerdata[currentSlide].values[id + "_info"]); - var settings = {category: "Proficiencies", disable: allProficiencies.Expertise, silent: true}; - options.shift(); - settings.add = options; - setCharmancerOptions(id + "_choice", choices, settings); - } else { - disableCharmancerOptions(id + "_choice", allProficiencies.Expertise, {category: "Proficiencies"}); - } - }); - }; - _.each(allProficiencies, function(section, name) { - allProficiencies[name] = _.without(section, ""); - }); - return({auto: auto, all: allProficiencies}); -}; - -var handleAbilities = function(data, section) { - var showList = []; - if(data["data-Ability Score Increase"]) { - showList.push(section + "_abilities"); - } - if(data["data-Ability Score Choice"]) { - showList.push(section + "_abilities"); - showList.push(section + "_ability_choice1"); - if(data["data-Ability Score Choice"].split("+")[0] == "2") { - showList.push(section + "_ability_choice2"); - } - }; - return showList; -}; - -var knownPowers = function(data) { - var mancerdata = data ? data : getCharmancerData(); - var allPowers = { - race: false, - class: false, - known: [], - all: [], - errors: {class: [], race: []} - }; - var stats = recalcData(data); //since this can get called in the finish step, make sure it doesn't call setAttrs() - var racename = getName("race", mancerdata, true); - var subracename = getName("subrace", mancerdata, true); - var classname = getName("class", mancerdata, true); - var subclassname = getName("subclass", mancerdata, true); - var classAbility = mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"] ? mancerdata["l1-class"].data.class["Spellcasting Ability"] : ""; - var expandedList = {}; - var additionalList = {}; - var blobs = getRelevantBlobs(mancerdata, "1", "l1"); - - //First look through all Blobs for any blob.Powers - _.each(blobs.all, function(blob) { - if(blob.Powers) { - var spells = JSON.parse(blob.Powers); - //Examine each spell to determine if it is "Extended List". "Extended List" adds to the classes spell list. - //Ravnica Guilds backgrounds such as Dimir Operative are examples of this - _.each(spells, function(spell) { - if(spell["Expanded List"]) { - expandedList[spell.Level] = expandedList[spell.Level] ? expandedList[spell.Level].concat(spell["Expanded List"]) : spell["Expanded List"]; - } - }); - } - }); - //Look through blobs.sorted. - _.each(blobs.sorted, function(sectionblobs, section) { - //Subclass needs to be changed to class. - var parentsection = section.replace("sub", ""); - additionalList[parentsection] = additionalList[parentsection] || [] - //Examine eaach blob for "Additional Spell List" - _.each(sectionblobs, function(blob) { - if(blob["Additional Spell List"]) { - additionalList[parentsection].push(blob["Additional Spell List"]); - } - }); - }); - //Process spell data from blobs - _.each(blobs.sorted, function(sectionblobs, section) { - var parentsection = section.replace("sub", ""); - _.each(sectionblobs, function(blob) { - //Looks through the blobs for Powers attribute - //class.Powers contains the information for how many spells are choosen at each level & Prepared spells to be selected based on ability modifer + 1 - //[subclass, background, race}.Powers will contain KNOWN, CHOSEN, or EXPANDED LIST for extra spells granted by these sections - if(blob.Powers) { - var spells = JSON.parse(blob.Powers); - allPowers[parentsection] = allPowers[parentsection] || {known: [], choices: []} - _.each(spells, function(spell) { - var numPowers = 0; - expandedList[spell.Level] = expandedList[spell.Level] || []; - //class.Powers will contain Prepared and Choose. - //These are used to populate the number of selects needed for each spell lists on the Powers slide - if(spell.Prepared) { - numPowers = Math.max(stats.totals[spell.Prepared.split("+")[0].toLowerCase()].mod, 0) + parseInt(spell.Prepared.split("+")[1]); - } - if(spell.Choose) { - numPowers = parseInt(spell.Choose); - } - //If Powers are to be Chosen or Prepared add them to a class list, expand the list, and set the Ability modifier & Level - if(numPowers > 0) { - _.times(numPowers, function(n) { - var thisspell = {Level: parseInt(spell.Level)}; - thisspell.List = spell.List ? spell.List : classname; - thisspell.AddList = additionalList[parentsection]; - thisspell.Ability = spell.Ability ? spell.Ability : classAbility; - if(parentsection == "class") thisspell["Expanded List"] = expandedList[spell.Level]; - allPowers[parentsection].choices.push(thisspell); - }); - } - //Add any spells that are already known from sections such as Forge Domain Cleric starts with identify & searing smite - _.each(spell.Known, function(known) { - var thisspell = {Name: known, Level: parseInt(spell.Level)}; - thisspell.Ability = spell.Ability ? spell.Ability : classAbility; - thisspell.Source = parentsection; - allPowers[parentsection].known.push(thisspell); - allPowers.known.push(known); - allPowers.all.push(thisspell); - }); - }); - } - }); - }); - //Collect custom race/subrace spells - if(mancerdata["l1-race"] && mancerdata["l1-race"].values.custom_race_spell_ability) { - var raceAbility = mancerdata["l1-race"].values.custom_race_spell_ability; - var numPowers = mancerdata["l1-race"].values.custom_race_spell_number; - var spellList = mancerdata["l1-race"].values.custom_race_spell_list; - if(spellList) { - allPowers.race = allPowers.race || {known: [], choices: []} - for(var x=1; x<=numPowers; x++) { - var thisSpell = { - Ability: raceAbility, - Level: 0, - List: spellList - }; - allPowers.race.choices.push(thisSpell); - } - } else { - allPowers.errors.race.push("custom_race_spell_list"); - } - } - //Collect custom class spells - if(mancerdata["l1-class"] && mancerdata["l1-class"].values.custom_class_spell_ability) { - var customAbility = mancerdata["l1-class"].values.custom_class_spell_ability; - var customList = mancerdata["l1-class"].values.custom_class_spell_list; - var customPowers = {"0": mancerdata["l1-class"].values.custom_class_prime_number, "1": mancerdata["l1-class"].values.custom_class_spell_number}; - if(customList && (customPowers["0"] > 0 || customPowers["1"] > 0)) { - allPowers.class = allPowers.class || {known: [], choices: []} - _.each(customPowers, function(number, level) { - for(var x=1; x<=number; x++) { - var thisSpell = { - Ability: customAbility, - Level: level, - List: customList - }; - allPowers.class.choices.push(thisSpell); - } - }); - } else { - allPowers.errors.class.push("custom_class_spell_list"); - allPowers.errors.class.push("custom_class_spell_number"); - } - } - //Collect custom subclass spells - if(mancerdata["l1-class"] && mancerdata["l1-class"].values.subclass == "Rules:Classes") { - var customPowers = {"0": mancerdata["l1-class"].values.custom_subclass_prime_number, "1": mancerdata["l1-class"].values.custom_subclass_spell_number}; - if(customPowers["0"] > 0 || customPowers["1"] > 0) { - allPowers.class = allPowers.class || {known: [], choices: []} - _.each(customPowers, function(number, level) { - var customList = classname.toLowerCase(); - if(level == "0" && mancerdata["l1-class"].values.custom_subclass_prime_list) customList = mancerdata["l1-class"].values.custom_subclass_prime_list; - if(level == "1" && mancerdata["l1-class"].values.custom_subclass_spell_list) customList = mancerdata["l1-class"].values.custom_subclass_spell_list; - for(var x=1; x<=number; x++) { - var thisSpell = { - Ability: classAbility, - Level: level, - List: customList - }; - allPowers.class.choices.push(thisSpell); - } - }); - } - } - //Collect data from choices - if(mancerdata["l1-spells"]) { - _.each(mancerdata["l1-spells"].repeating, function(id) { - if(mancerdata["l1-spells"].values[id + "_choice"]) { - var thisspell = {Name: mancerdata["l1-spells"].values[id + "_choice"].substring(7)}; - thisspell.Ability = mancerdata["l1-spells"].values[id + "_info"] ? mancerdata["l1-spells"].values[id + "_info"] : classAbility; - if(mancerdata["l1-spells"].values[id + "_custom"]) thisspell.Source = mancerdata["l1-spells"].values[id + "_custom"]; - allPowers.known.push(thisspell.Name); - allPowers.all.push(thisspell); - }; - }); - } - return allPowers; -}; - -var cleanEquipment = function(equipment) { - var current_string = "("; - var hasDouble = false; - var firstItem = true; - _.each(equipment, function(item) { - if (item.search("~DBL") != -1) { - hasDouble = true; - item.replace("~DBL",""); - } - item = item.replace(/"Item Type":(.|)Weapon.*\b/g, "Any Weapon"); - item = item.replace(/Subtype:(.|)Martial.*\b("|)/g, "Any Martial Weapon"); - item = item.replace(/Subtype:(.|)Simple.*\b("|)/g, "Any Simple Weapon"); - item = item.replace(/Subtype:(.|)Artisan's Tools.*\b("|)/g, "A Set of Artisan's Tools"); - item = item.replace(/Subtype:(.|)Gaming Set.*\b("|)/g, "A Gaming Set"); - item = item.replace(/Subtype:(.|)Musical Instrument.*\b("|)/g, "A Musical Instrument"); - if (!firstItem) current_string += " or "; - current_string += item; - firstItem = false; - }); - current_string += ")"; - if (hasDouble) { - current_string = "two of " + current_string; - } - return current_string.replace(/,/g, ", "); -}; - -const removeExpansionInfo = function(text) { - return text.replace(/\??expansion\=([0-9]+)?/gi, ""); -}; - -var removeDuplicatedPageData = function(data) { - if(!Array.isArray(data)) return data; - const getPageName = function(item) { - let category = ""; - if("data" in item && "Category" in item.data) category += item.data["Category"] + ": "; - return category+item.name; - } - let seen = {}; - return data.filter(function(item) { - let pageName = getPageName(item); - return seen.hasOwnProperty(pageName) ? false : (seen[pageName] = true); - }) -}; - -var getName = function(request, data, custom) { - data = data || getCharmancerData(); - var section = request.replace("sub", ""); - var result = ""; - var customString = custom ? "custom" : ""; - if( data["l1-" + section] && data["l1-" + section].values[request] ) { - result = data["l1-" + section].values[request + "_name"] || data["l1-" + section].values[request]; - } - result = result.split(":")[0] == "Rules" || result.split(":")[0] == "CategoryIndex" ? customString : result; - //Removing expansion name from result - result = removeExpansionInfo(result); - return _.last(result.split(":")); -}; - -var getGainedPowers = function() { - let gainedPowers = []; - const data = getCharmancerData(); - if("lp-spells" in data && "values" in data["lp-spells"]) { - Object.keys(data["lp-spells"].values).forEach(key => { - let found = false; - if(key.indexOf("_checked") === -1) return; - let spellNameKey = key.replace("_checked", "_name"); - let spellName = data["lp-spells"].values[spellNameKey]; - if(data["lp-welcome"].values.spellinfo) { - let previousPowers = JSON.parse(data["lp-welcome"].values.spellinfo); - Object.keys(previousPowers).forEach(spell => { - if(previousPowers[spell].spellname === spellName) found = true; - }); - } - if(!found) gainedPowers.push(spellName); - }); - } - return gainedPowers; -}; - -var getGainedFeatures = function() { - const data = getCharmancerData(); - if(!"lp-levels" in data) return; - let gainedFeatures = []; - for(let charclass=1; charclass<=4; charclass++) { - let levelsGained = data["lp-levels"].values["class"+ charclass +"_addlevel"] || 0; - if(levelsGained === 0) continue; //No leves gained in this class, just skip to the next one. - - //Now lets get the features got from each class at LP; - levelsGained = parseInt(levelsGained); - let currentLevel = parseInt(data["lp-levels"].values["class"+ charclass +"_currentlevel"]); - Object.keys(data["lp-levels"].data["class"+charclass].blobs).forEach(feature => { - let featureLevel = parseInt(data["lp-levels"].data["class"+charclass].blobs[feature]["Level"]); - if(featureLevel > currentLevel && featureLevel <= (currentLevel+levelsGained)) { - let sanitizedFeatureName = feature.replace(/\(.+\)/g,""); - sanitizedFeatureName = sanitizedFeatureName.replace(/ - .+/g,"").trim(); - if("Group" in data["lp-levels"].data["class"+charclass].blobs[feature]) return; - if("Choice" in data["lp-levels"].data["class"+charclass].blobs[feature]) { - Object.keys(data["lp-choices"].values).forEach(info => { - if(data["lp-choices"].values[info] === feature) { - let choice = info.replace("_info", "_choice"); - if(choice in data["lp-choices"].values) { - let choiceName = data["lp-choices"].values[choice].replace("Blob:", ""); - if(gainedFeatures.indexOf(choiceName) === -1) gainedFeatures.push(choiceName); - } - } - }); - } else { - if(gainedFeatures.indexOf(sanitizedFeatureName) === -1) gainedFeatures.push(sanitizedFeatureName); - } - } - }); - } - return gainedFeatures; -}; - -var filterBlobs = function(blobs, filters) { - var remove = filters.multiclass ? "no" : "yes"; - var results = {}; - delete filters.multiclass; - delete filters.slide; - _.each(blobs, function(blob, name) { - var match = true; - if(blob.Group && !filters.Group && !filters.name) match = false; - _.each(filters, function(v, k) { - if(k == "name") { - if(name != v) match = false; - } else if(v[0] === "<" && !isNaN(parseInt(v.substring(1)))) { - let blobval = isNaN(parseInt(blob[k])) ? 0 : parseInt(blob[k]); - if(blobval > parseInt(v.substring(1))) match = false; - } else { - if(blob[k] != v) match = false; - } - }); - if(match && name.split("(")[0].toLowerCase() != "spell slots") results[name] = blob; - }); - _.each(results, function(blob, name) { - if(blob.Multiclass == remove) { - delete results[name]; - } - }); - return results; -}; - -var handleBlobs = function(blobs, options) { - //Old parameters: (blobs, filters, section, element, thisblob) - - //Function to get blob parameter for Spell Pickers like Magical Secrets - //By Miguel - const getBlobDescription = function(blob) { - if("Description" in blob) { - return blob.Description; - } - else if("Traits" in blob) { - traits = JSON.parse(blob.Traits)[0]; - if("Desc" in traits) return traits.Desc; - } - return ""; - } - - const handleProficiencies = function(data, subsection) { - if(!data) { - return; - } - subsection = subsection ? subsection : element - _.each(proficiencyList, function(prof) { - if(data[prof + " Proficiency"]) { - addRepeatingSection(subsection, "row", function(rowid) { - var json = JSON.parse(data[prof + " Proficiency"]); - if(!json.Hidden) { - var repupdate = {}; - repupdate[rowid + " label span"] = json.Title ? json.Title : getTranslationByKey(prof.toLowerCase() + "-proficiencies"); - if(json.Desc) { - repupdate[rowid + " label p"] = json.Desc; - if(json.Proficiencies) { - repupdate[rowid + " label p"] += "
" + json.Proficiencies.join(", "); - } - } else if(json.Proficiencies) { - repupdate[rowid + " label p"] = json.Proficiencies.join(", "); - } - setCharmancerText(repupdate); - } - _.each(json.Choice, function(v) { - addRepeatingSection(rowid + " label", "choose", section + "_" + prof.toLowerCase(), function(id) { - var choices = ""; - var settings = {category: "Proficiencies", disable: profdata.all[prof]}; - if(prof == "Language") { - var customupdate = {}; - customupdate[id + " select"] = ''; - setCharmancerText(customupdate); - } - if(Array.isArray(v)) { - if(v[0].split(":").length > 1) { - choices = "Category:Proficiencies \"Type:" + prof + "\" " + v.shift(); - settings.add = v; - } else if (v[0] == "all") { - v.shift(); - choices = "Category:Proficiencies \"Type:" + prof + "\""; - settings.add = v; - } else { - choices = v; - } - } else { - choices = "Category:Proficiencies \"Type:" + prof + "\""; - if(v != "all" && v != "any") { - console.log("MISSED THE ALL CHECK") - console.log(v); - choices += " " + v; - } - } - setCharmancerOptions(id + "_choice", choices, settings); - }); - }); - }); - } - }); - if(data.Expertise) { - addRepeatingSection(subsection, "row", function(rowid) { - var json = JSON.parse(data.Expertise); - if(json.Title) { - var repupdate = {}; - repupdate[rowid + " label span"] = json.Title; - setCharmancerText(repupdate); - } - _.each(json.Choice, function(v) { - addRepeatingSection(rowid + " label", "choose", section + "_expertise", function(id) { - var choices = ""; - var settings = {category: "Proficiencies", disable: profdata.all.Expertise}; - if(v[0].split(":").length > 1) { - choices = "Category:Proficiencies \"Type:" + prof + "\" " + v.shift(); - settings.add = v; - } else if (v[0] == "KNOWN") { - var info = {}; - info[id + "_info"] = JSON.stringify(v); - setAttrs(info); - v.shift(); - choices = profdata.all.Skill; - settings.add = v; - } else { - choices = v; - } - setCharmancerOptions(id + "_choice", choices, settings); - }); - }); - }); - } - }; - const handleTraits = function(blob, subsection, name) { - var traits = JSON.parse(blob.Traits); - subsection = subsection ? subsection : element; - _.each(traits, function(trait) { - if(trait["Input Powers"]) { - addRepeatingSection(subsection, "utilityrow", function(rowid) { - let repupdate = {}; - let set = {}; - repupdate[`${rowid} label span .sheet-title`] = trait.Name.split("{{")[0]; - if(!trait.Hide) repupdate[`${rowid} label p`] = trait.Desc; - repupdate[`${rowid} button`] = trait["Input Powers"].ButtonText; - set[`${rowid}_info`] = JSON.stringify(trait["Input Powers"]); - set[`${rowid}_type`] = "trait"; - set[`${rowid}_blob`] = name; - set[`${rowid}_parent`] = options.parent; - set[`${rowid}_title`] = trait.Name; - set[`${rowid}_desc`] = trait.Desc; - setCharmancerText(repupdate); - setAttrs(set); - }); - } else if(!trait.Hide) { - addRepeatingSection(subsection, "row", function(rowid) { - let repupdate = {}; - if(trait.Input) { - //Fixing custom data in inputs not being remembered when switching tabs (UC809) - //By Miguel - const data = getCharmancerData(); - //The function below looks for valyes through all Mancer data that match a input rowid: - const getPreviousInputValue = function(data, rowid) { - let parsedId = rowid.match(/-.+_/g)[0]; - for(let attribute in data) { - if(!("values" in data[attribute])) continue; - for (let key in data[attribute].values){ - if(data[attribute].values.hasOwnProperty(key) && key.indexOf("_input") > -1 && key.indexOf(parsedId) > -1) { - return data[attribute].values[key]; - } - } - } - return ""; - } - const previousValue = getPreviousInputValue(data, rowid); - repupdate[`${rowid} label span`] = ``; - repupdate[`${rowid} label span`] += ``; - repupdate[`${rowid} label span`] += ``; - repupdate[`${rowid} label span`] += ``; - } else { - repupdate[`${rowid} label span`] = trait.Name; - repupdate[`${rowid} label p`] = blob.Prerequisite ? "

" + blob.Prerequisite + "

" : ""; - //Fixing undefined when selecting Ranger Favored Enemy and Land (UC809) - //By Miguel - repupdate[`${rowid} label p`] += (trait.Desc ? trait.Desc : ""); - } - setCharmancerText(repupdate); - handleProficiencies(blob, rowid); - }); - }; - }); - }; - const mancerdata = getCharmancerData(); - let filters = options.filters || {}; - let section = options.section || undefined; - let thisblob = options.thisblob || undefined; - let element = options.element ? options.element : section + "_holder"; - let sorted = {choices: {}, traits: {}, other: {}, spells: {}}; - let profdata = getProficiencies(mancerdata, options.slide); - let filtered = {}; - if(thisblob) { - filtered[thisblob] = blobs[thisblob]; - } else { - filtered = filterBlobs(blobs, filters); - } - _.each(filtered, function(blob, name) { - if(name.split(" ")[0] == "Proficiencies") { - sorted.proficiencies = blob; - } else if (blob["Pick Powers"]) { - sorted.spells[name] = blob; - } else if(blob.Choice) { - sorted.choices[name] = blob; - } else if(blob.Traits) { - sorted.traits[name] = blob; - } else { - sorted.other[name] = blob; - } - }); - - handleProficiencies(sorted.proficiencies); - _.each(sorted.choices, function(blob, name) { - addRepeatingSection(element, "row", function(rowid) { - var title = blob.Title ? blob.Title : name; - var choice = blob.Choice; - var settings = {}; - let choicenum = blob["Choice Number"] ? parseInt(blob["Choice Number"]) : 1; - if(blob.Choice.split(":")[0] == "Blob") { - choice = Object.keys(filterBlobs(blobs, {Group: blob.Choice.split(":")[1], Level: ("<" + (options.maxlevel || blob.Level))})).sort(); - settings.category = "Blob"; - } - var repupdate = {}; - repupdate[rowid + " label span"] = title; - if(blob.Description) { - repupdate[rowid + " label p"] = blob.Description; - } - setCharmancerText(repupdate); - if(section.indexOf("-") === -1) { - let match = /[0-9]+$/.exec(section); - if(match) { - section = [section.slice(0, match.index), "-", section.slice(match.index)].join(''); - section += "--" + blob.Level; - } - } - for(let x=1; x<=choicenum; x++) { - addRepeatingSection(rowid + " label", "choose", section + "_feature", function(id) { - var info = {}; - info[id + "_info"] = title; - setAttrs(info); - setCharmancerOptions(id + "_choice", choice, settings, function() { - if(mancerdata[options.slide].values[id + "_choice"] && mancerdata[options.slide].values[id + "_choice"].split(":")[0] == "Blob") { - handleBlobs(blobs, { - filters: {name: mancerdata[options.slide].values[id + "_choice"].split(":")[1]}, - section: section, - element: id + " span", - slide: options.slide, - parent: options.parent - }); - } - }); - }); - } - handleProficiencies(blob, rowid); - }); - }); - _.each(sorted.spells, function(blob, name) { - addRepeatingSection(element, "row", function(rowid) { - let title = blob.Title ? blob.Title : name; - let spells = JSON.parse(blob["Pick Powers"]); - let settings = {}; - let repupdate = {}; - repupdate[rowid + ">label>span"] = title; - - //This used to check for blob.Description which does not exist for Spell Pickers - //In such case the description is located at blob.Traits.Desc - //By Miguel - let description = getBlobDescription(blob); - if(description.length > 0) { - repupdate[rowid + ">label>p"] = description; - } - - _.each(spells, function(spell) { - addRepeatingSection(rowid, "utilityrow", function(rowid) { - let repupdate = {}; - let set = {}; - repupdate[`${rowid} button`] = spell.ButtonText; - set[`${rowid}_info`] = JSON.stringify(spell); - set[`${rowid}_type`] = "pick"; - set[`${rowid}_parent`] = options.parent; - set[`${rowid}_blob`] = name; - setCharmancerText(repupdate); - setAttrs(set); - }); - }) - setCharmancerText(repupdate); - handleProficiencies(blob, rowid); - }); - }); - _.each(sorted.other, function(blob, name) { - if(blob.Title || blob.Description) { - addRepeatingSection(element, "row", function(rowid) { - var title = blob.Title ? blob.Title : name; - var repupdate = {}; - repupdate[rowid + " label span"] = "" + title; - repupdate[`${rowid} label p`] = blob.Prerequisite ? "

" + blob.Prerequisite + "

" : ""; - if(blob.Description) repupdate[rowid + " label p"] += blob.Description; - setCharmancerText(repupdate); - handleProficiencies(blob, rowid); - }); - } else { - handleProficiencies(blob); - } - }); - _.each(sorted.traits, function(blob, name) { - var traitsObj = JSON.parse(blob.Traits); - var title = blob.Title ? blob.Title : name; - if(blob.Description || traitsObj.length > 1) { - addRepeatingSection(element, "row", function(rowid) { - if(blob.Description || blob.Title) { - var repupdate = {}; - repupdate[rowid + " label span"] = "" + title; - if(blob.Description) repupdate[rowid + " label p"] = "" + blob.Description; - setCharmancerText(repupdate); - } - handleTraits(blob, rowid, name); - handleProficiencies(blob, rowid); - }); - } else { - handleTraits(blob, undefined, name); - } - }); -}; - -var addCustomSections = function(section) { - var lower = section.toLowerCase(); - var page = "l1-" + lower.replace("sub", ""); - var mancerdata = getCharmancerData()[page]; - var repids = []; - var total = 0; - var current = 0; - var traits = []; - var profs = []; - console.log(mancerdata); - _.each(mancerdata.repeating, function(repid) { - if(_.last(repid.split("_")) == "trait") { - if(mancerdata.values[repid + "_name"] || mancerdata.values[repid + "_desc"]) { - var thistrait = {}; - thistrait.name = mancerdata.values[repid + "_name"] ? mancerdata.values[repid + "_name"] : ""; - thistrait.desc = mancerdata.values[repid + "_desc"] ? mancerdata.values[repid + "_desc"] : ""; - traits.push(thistrait); - total++; - } - } - if(_.last(repid.split("_")) == "proficiency") { - if(mancerdata.values[repid + "_type"]) { - var thisprof = {}; - thisprof.type = mancerdata.values[repid + "_type"]; - thisprof.choice = mancerdata.values[repid + "_choice"] ? mancerdata.values[repid + "_choice"] : ""; - profs.push(thisprof); - total++; - } - } - }); - if(traits.length == 0) { - traits.push({name: "", desc: ""}); - total++; - } - if(profs.length == 0) { - profs.push({type: "", choice: ""}); - total ++; - } - addRepeatingSection(lower + "_holder", "row", "customrow", function(rowid) { - var toset = {}; - toset[rowid + " label span"] = "Proficiencies"; - repids.push(rowid); - setCharmancerText(toset); - _.each(profs, function(prof) { - addRepeatingSection(rowid, "custom-proficiency", "custom_" + lower + "_proficiency", function(id) { - var toset = {}; - if(prof.type != "") toset[id + "_type"] = prof.type; - if(prof.choice != "") toset[id + "_choice"] = prof.choice; - setAttrs(toset); - current++; - repids.push(id); - if(current >= total) clearRepeating(repids, page, "customrow"); - }); - }); - }); - addRepeatingSection(lower + "_holder", "row", "customrow", function(rowid) { - var toset = {}; - toset[rowid + " label span"] = "Custom " + section + " Features"; - repids.push(rowid); - setCharmancerText(toset); - _.each(traits, function(trait) { - addRepeatingSection(rowid, "custom-trait", "custom_" + lower + "_trait", function(id) { - var toset = {}; - if(trait.name != "") toset[id + "_name"] = trait.name; - if(trait.desc != "") toset[id + "_desc"] = trait.desc; - //update[id + " span"] = trait.name; - setAttrs(toset); - current++; - repids.push(id); - if(current >= total) clearRepeating(repids, page, "customrow"); - }); - }); - }); -} - -var clearRepeating = function(repids, page, match) { - //This function removes all repeating sections that aren't in the repids array (except for the topbar). - //The optional third argument will only remove certain types of repeating sections - var mancerdata = getCharmancerData(); - _.each(mancerdata[page].repeating, function(repid) { - if(_.last(repid.split("_")) != "topbar" && !repids.includes(repid) && (!match || match && repid.includes(match))) clearRepeatingSectionById(repid); - }); -} - -//This function should be used to read additional hit points gained at first level by things like Draconic Bloodline or Hill Dwarf. Can be possbily be used in the future for Tough feat(?) -//By Miguel -var getAdditionalHitPointsFromClassAndRaceAtFirstLevel = function(blobs) { - let additionalHP = 0; - blobs.all.map(blob => { - if("Hit Points Per Level" in blob) { - additionalHP += parseInt(blob["Hit Points Per Level"]); - } - }); - return additionalHP; -}; - -var getRelevantBlobs = function(mancerdata, level, section) { - var results = []; - var sorted = {}; - var names = {}; - level = level ? "" + level : "1"; - _.each(mancerdata, function(slide, slidename) { - if(slidename.split("-")[0] == section) { - _.each(slide.data, function(data, section) { - if(data.blobs) { - var levelblobs = _.extend(filterBlobs(data.blobs, {"Level": level}), filterBlobs(data.blobs, {"Level": "every"})); - sorted[section] = []; - names[section] = []; - _.each(levelblobs, function(blob, blobname) { - results.push(blob); - sorted[section].push(blob); - names[section].push(blobname); - }); - }; - }); - _.each(slide.values, function(value, name) { - if((value + "").split(":")[0] == "Blob") { - var section = name.split("_")[2]; - var blobs = slide.data[section] && slide.data[section].blobs ? slide.data[section].blobs : []; - _.each(filterBlobs(blobs, {"name":value.split(":")[1]}), function(blob, blobname) { - results.push(blob); - sorted[section] = sorted[section] ? sorted[section] : []; - sorted[section].push(blob); - names[section] = names[section] ? names[section] : []; - names[section].push(blobname); - }); - }; - }); - } - }); - return {all: results, sorted: sorted, names: names}; -}; - -var costOfScore = function(score) { - if (isNaN(score) || score == 8) { - return 0; - } - var cost = 0; - if (score > 8) { - if (score < 14) { - cost = score - 8; - } else if (score == 14) { - cost = 7; - } else if (score == 15) { - cost = 9; - } else { // Score should never be higher, but let's cover our bases. - cost = 11; - } - } - return cost; -}; - -var recalcPoints = function() { - data = getCharmancerData(); - var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; - var maxPoints = 27; - - var scores = {}; - - _.each(attribs, function(attrib) { - scores[attrib] = parseInt(data["l1-abilities"].values[attrib]); - if (isNaN(scores[attrib])) { - scores[attrib] = 8; - } - }); - - var pointsAvailable = maxPoints; - - // Decrement points based on selected attribs - _.each(scores, function(score) { - if (!isNaN(score)) { - var cost = costOfScore(score); - pointsAvailable -= cost; - } - }); - - // Disable options if points are below a threshold. - if (pointsAvailable < 9) { - var choicesToDisable = ["15","14","13","12","11","10","9"]; - - _.each(attribs, function(attrib) { - var toDisableForThisAttrib = [] - _.each(choicesToDisable, function(choice) { - if (scores[attrib] <= Number(choice) && (costOfScore(scores[attrib]) + pointsAvailable < costOfScore(Number(choice)))) { - toDisableForThisAttrib.push(choice); - } - }); - disableCharmancerOptions(attrib, toDisableForThisAttrib); - }); - } else { - _.each(attribs, function(attrib) { - disableCharmancerOptions(attrib, []); - }); - } - - _.each(attribs, function(attrib) { - setCharmancerText({"points_available_display":String(pointsAvailable)}); - }); - - return String(pointsAvailable); -}; - -var setRollButton = function(name, data, title, hold) { - getAttrs(["licensedsheet"], function(v) { - var set = {}; - var holdstring = hold ? "r" + hold : ""; - title = title || name.split("_")[1]; - title = title[0].toUpperCase() + title.substring(1); - const licensedsheet = (v.licensedsheet && v.licensedsheet === "1") ? "licensedsheet" : ""; - if(title == "Personality") title += " Trait"; - var roll = `@{wtype}&{template:mancerroll} {{title=${title}}} {{c1=[[1d${data.length + holdstring}]]}} {{licensedsheet=${licensedsheet}}}`; - _.each(data, function(trait, x) { - roll += ' {{option' + (x+1) + '=' + trait + '}}'; - }); - set["roll_" + name + "_roll"] = roll; - if(!hold) { - set[name + "_array"] = JSON.stringify({name: title, array: data}); - } - setAttrs(set); - }); -}; - -/* MAIN CHOICE HANDLING */ -on("mancerchange:race", function(eventinfo) { - var mancerdata = getCharmancerData(); - getProficiencies(mancerdata, eventinfo.currentStep); - changeCompendiumPage("sheet-race-info", eventinfo.newValue); - hideChoices(); - - var reset = {}; - if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { - showChoices(["race_options"]); - } - recalcData(); - - if(eventinfo.sourceType == "player") { - reset = {race_ability_choice1: "", race_ability_choice2: "", subrace_ability_choice1: "", subrace_ability_choice2: "", subrace: "", race_name: "", subrace_name: ""}; - _.each(abilityList, function(ability){ - reset["race_custom_" + ability.toLowerCase()] = 0; - reset["subrace_custom_" + ability.toLowerCase()] = 0; - reset[ability.toLowerCase() + "_save"] = ""; - }); - reset["custom_race_spell_ability"] = ""; - reset["custom_race_spell_number"] = "1"; - reset["custom_race_spell_list"] = ""; - reset["race_name"] = ""; - reset["subrace_name"] = ""; - reset["has_subrace"] = ""; - clearRepeatingSections("race_holder"); - clearRepeatingSections("subrace_holder"); - } - - if(eventinfo.newValue === "Rules:Races") { - //Clears saved data for this field - getCompendiumPage(""); - setAttrs(reset, function() { - var update = {"race_text": ""}; - var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; - showChoices(["custom_race"]); - setCharmancerText(update); - addCustomSections("Race"); - deleteCharmancerData(["l1-feat"]); - }); - } else { - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - setAttrs(reset, function() { - mancerdata = getCharmancerData(); - var update = {}; - var showList = ["race_always", "race_traits"]; - var possibles = ["race_size", "race_speed", "race_ability_score", "race_traits"]; - var data = p["data"]; - - _.each(proficiencyList, function(type){ - possibles.push("race_" + type.toLowerCase() + "s"); - }); - _.each(possibles, function(key) { - update[key] = ""; - }); - - if(data["Size"]) {update["race_size"] = data["Size"];}; - if(data["Speed"]) {update["race_speed"] = data["Speed"];}; - - showList = showList.concat(handleAbilities(data, "race")); - if(data["data-Ability Score Increase"]) { - var abilityText = []; - var json = JSON.parse(data["data-Ability Score Increase"]); - _.each(json, function(increase, ability) { - abilityText.push(ability + " +" + increase); - }); - update["race_ability_score"] = abilityText.join(", "); - } - handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "race", slide: "l1-race"}); - - setCharmancerText(update); - - var race_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Races" ? eventinfo.newValue.split(":")[1] : false; - race_name = removeExpansionInfo(race_name); - if(race_name) { - var subOptions = {show_source: true}; - if(eventinfo.sourceType != "player") { - subOptions.silent = true; - } else { - subOptions.selected = ""; - } - - setCharmancerOptions("subrace","Category:Subraces data-Parent:" + race_name, subOptions, function(values) { - if (values.length) { - setAttrs({"has_subrace": "true"}); - showChoices(["subrace"]); - } - }); - } - else { - hideChoices(["subrace"]); - } - - showChoices(showList); - recalcData(); - }); - }); - } -}); - -on("mancerchange:subrace", function(eventinfo) { - var mancerdata = getCharmancerData(); - getProficiencies(mancerdata, eventinfo.currentStep); - changeCompendiumPage("sheet-race-info", eventinfo.newValue); - - var initHide = ["subrace_possible", "custom_trait_2", "custom_trait_3", "custom_trait_4"]; - var reset = {}; - if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { - initHide.push("subrace_options"); - } - else { - showChoices(["subrace_options"]); - } - hideChoices(initHide); - recalcData(); - if(eventinfo.sourceType == "player") { - reset = {subrace_ability_choice1: "", subrace_ability_choice2: "", subrace_name: ""}; - _.each(abilityList, function(ability){ - reset["race_custom_" + ability.toLowerCase()] = 0; - reset["subrace_custom_" + ability.toLowerCase()] = 0; - }); - reset["custom_race_spell_ability"] = ""; - reset["custom_race_spell_number"] = "1"; - reset["custom_race_spell_list"] = ""; - reset["subrace_name"] = ""; - clearRepeatingSections("subrace_holder"); - } - - if(eventinfo.newValue === "Rules:Races") { - //Clears saved data for this field - getCompendiumPage(""); - setAttrs(reset, function() { - var update = {"subrace_text": ""}; - var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; - showChoices(["custom_subrace"]); - setCharmancerText(update); - addCustomSections("Subrace"); - deleteCharmancerData(["l1-feat"]); - }); - } else { - hideChoices(["custom_subrace"]); - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - var update = {}; - var showList = ["subrace_choices"]; - var possibles = ["subrace_speed", "subrace_ability_score"]; - var data = p["data"]; - _.each(possibles, function(key) { - update[key] = ""; - }); - - if(!data["data-Feats"]) deleteCharmancerData(["l1-feat"], function() {recalcData();}); - - if(data["Speed"]) { - update["subrace_speed"] = data["Speed"]; - showList.push("subrace_speed_row"); - }; - - showList = showList.concat(handleAbilities(data, "subrace")); - if(data["data-Ability Score Increase"]) { - var abilityText = []; - var json = JSON.parse(data["data-Ability Score Increase"]); - _.each(json, function(increase, ability) { - abilityText.push(ability + " +" + increase); - }); - update["subrace_ability_score"] = abilityText.join(", "); - } - handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "subrace", slide: "l1-race"}); - - setCharmancerText(update); - showChoices(showList); - setAttrs(reset); - recalcData(); - }); - } -}); - -on("mancerchange:class", function(eventinfo) { - var mancerdata = getCharmancerData(); - getProficiencies(mancerdata, eventinfo.currentStep); - changeCompendiumPage("sheet-class-info", eventinfo.newValue); - hideChoices(); - - var initHide = ["class_possible", "subclass_choices"]; - var reset = {}; - if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { - showChoices(["classes_options"]); - } - var current = recalcData(); - - if(eventinfo.sourceType == "player") { - reset = {subclass: ""}; - _.each(abilityList, function(ability){ - reset[ability.toLowerCase() + "_save"] = ""; - }); - reset["custom_class_spell_ability"] = ""; - reset["custom_class_prime_number"] = "0"; - reset["custom_class_spell_number"] = "0"; - reset["custom_class_spell_list"] = ""; - reset["custom_hit_die"] = ""; - reset["class_name"] = ""; - reset["subclass_name"] = ""; - reset["class_equipment_choice1"] = ""; - reset["class_equipment_choice2"] = ""; - reset["class_equipment_choice3"] = ""; - reset["class_equipment_choice4"] = ""; - clearRepeatingSections("class_holder"); - clearRepeatingSections("subclass_holder"); - } - - if(eventinfo.newValue === "Rules:Classes") { - //Clears saved data for this field - getCompendiumPage(""); - setAttrs(reset, function() { - var update = {"class_text": "", "custom_feature_name": "Class Features"}; - var options = eventinfo.sourceType == "player" ? {selected: ""} : {} - showChoices(["custom_class"]); - update["custom_feature_name"] = "Custom Class Features"; - setCharmancerText(update); - addCustomSections("Class"); - }); - } else { - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - var update = {}; - var showList = []; - var data = p["data"]; - var hideList = []; - handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "class", slide: "l1-class"}); - - var class_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Classes" ? eventinfo.newValue.split(":")[1] : false; - class_name = removeExpansionInfo(class_name); - if(class_name && data["data-Subclass Level"] == 1) { - var subOptions = {show_source: true}; - if(eventinfo.sourceType != "player") { - subOptions.silent = true; - } else { - subOptions.selected = ""; - } - update["subclass_prompt"] = "Choose a " + data["Subclass Name"]; - setCharmancerOptions("subclass","Category:Subclasses data-Parent:" + class_name, subOptions, function(values) { - if (values.length) showChoices(["subclass"]); - }); - } - else { - hideList.push("subclass"); - } - - if (data["data-Equipment"]) { - showList.push("class_equipment_row"); - var equipment_string = ""; - var json = JSON.parse(data["data-Equipment"]); - if(json["default"]) { - equipment_string += json["default"].join(", "); - } - for (var i = 1; i < 5; i++) { - if(json[i]) { - if (!json["default"].length && i == 1) { - equipment_string += ""; - } else { - equipment_string += " and "; - } - - equipment_string += cleanEquipment(json[i]); - } - }; - update["class_standard_equipment"] = equipment_string; - } - - setCharmancerText(update); - showChoices(showList); - hideChoices(hideList); - recalcData(); - setAttrs(reset); - }); - } -}); - -on("mancerchange:subclass", function(eventinfo) { - var mancerdata = getCharmancerData(); - getProficiencies(mancerdata, eventinfo.currentStep); - changeCompendiumPage("sheet-class-info", eventinfo.newValue); - - var initHide = ["subclass_possible"]; - var reset = {}; - if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { - initHide.push("subclass_options"); - initHide.push("custom_subclass"); - } - else { - showChoices(["subclass_options"]); - if(eventinfo.newValue === "Rules:Classes") { - showChoices(["custom_subclass"]); - } - else { - initHide.push("custom_subclass"); - } - } - hideChoices(initHide); - var current = recalcData(); - - if(eventinfo.sourceType == "player") { - reset["custom_class_spell_ability"] = ""; - reset["custom_class_prime_number"] = "0"; - reset["custom_class_spell_number"] = "0"; - reset["custom_class_spell_list"] = ""; - reset["custom_subclass_prime_number"] = "0"; - reset["custom_subclass_prime_list"] = ""; - reset["custom_subclass_spell_number"] = "0"; - reset["custom_subclass_spell_list"] = ""; - reset["subclass_name"] = ""; - clearRepeatingSections("subclass_holder"); - } - - if(eventinfo.newValue === "Rules:Classes") { - //Clears saved data for this field - getCompendiumPage(""); - setAttrs(reset, function() { - var mancerdata = getCharmancerData(); - var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; - var subclassname = mancerdata["l1-class"].data.class["Subclass Name"]; - showChoices(["custom_subclass"]); - if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"]) { - showChoices(["custom_additional_spells"]); - } else { - showChoices(["custom_class_spells"]); - } - addCustomSections("Subclass"); - }); - } else { - hideChoices(["custom_subclass"]); - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - var data = p["data"]; - handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "subclass", slide: "l1-class"}); - - recalcData(); - setAttrs(reset); - }); - } -}); - -on("mancerchange:background", function(eventinfo) { - var mancerdata = getCharmancerData(); - getProficiencies(mancerdata, eventinfo.currentStep); - changeCompendiumPage("sheet-background-info", eventinfo.newValue); - - var initHide = ["background_possible", "custom_background"]; - var reset = {}; - if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { - initHide.push("backgrounds_options"); - } - else { - showChoices(["backgrounds_options"]); - } - hideChoices(initHide); - var current = recalcData(); - - if(eventinfo.sourceType == "player") { - reset = {}; - reset["background_detail_choice"] = ""; - reset["background_personality_choice1"] = ""; - reset["background_personality_choice2"] = ""; - reset["background_ideal_choice"] = ""; - reset["background_bond_choice"] = ""; - reset["background_flaw_choice"] = ""; - reset["custom_background_trait_name"] = ""; - reset["custom_background_trait_desc"] = ""; - clearRepeatingSections("background_holder"); - } - - if(eventinfo.newValue === "Rules:Backgrounds") { - //Clears saved data for this field - getCompendiumPage(""); - setAttrs(reset, function() { - var update = {"background_text": ""}; - var options = eventinfo.sourceType == "player" ? {selected: ""} : {} - hideChoices(["standardbg"]); - showChoices(["custom_background"]); - setCharmancerText(update); - addCustomSections("Background"); - }); - } else { - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - var update = {}; - var showList = ["standardbg"]; - var possibles = ["background_feature"]; - var data = p["data"]; - var hideList = []; - - _.each(proficiencyList, function(type){ - possibles.push("background_" + type.toLowerCase() + "s"); - }); - _.each(possibles, function(key) { - update[key] = ""; - }); - handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "background", slide: "l1-background"}); - - if (data["data-Background Choices"] && data["data-Background Choices"] != "") { - showList.push("background_detail_choice_row"); - var choices = JSON.parse(data["data-Background Choices"]); - showList.push("background_detail_choice"); - setCharmancerOptions("background_detail_choice", choices, {}, function(opts) { - setRollButton("background_detail_choice", opts, data["data-Background Choice Name"]); - }); - update["background_detail_choice_name"] = data["data-Background Choice Name"]; - } - if(eventinfo.sourceType == "player") { - reset["background_detail_choice"] = ""; - } - - if (data["data-Personality Traits"]) { - showList.push("background_personality_row"); - var choices = JSON.parse(data["data-Personality Traits"]); - setCharmancerOptions("background_personality_choice1", choices, {}, function(opts) { - setRollButton("background_personality_choice1", opts); - }); - setCharmancerOptions("background_personality_choice2", choices, {}, function(opts) { - setRollButton("background_personality_choice2", opts); - }); - showList.push("background_personality_choice1"); - showList.push("background_personality_choice2"); - } - if (data["data-Ideals"]) { - var choices = JSON.parse(data["data-Ideals"]); - setCharmancerOptions("background_ideal_choice", choices, {}, function(opts) { - setRollButton("background_ideal_choice", opts); - }); - showList.push("background_ideal_choice"); - } - if (data["data-Bonds"]) { - var choices = JSON.parse(data["data-Bonds"]); - setCharmancerOptions("background_bond_choice", choices, {}, function(opts) { - setRollButton("background_bond_choice", opts); - }); - showList.push("background_bond_choice"); - } - if (data["data-Flaws"]) { - var choices = JSON.parse(data["data-Flaws"]); - setCharmancerOptions("background_flaw_choice", choices, {}, function(data) { - setRollButton("background_flaw_choice", data); - }); - showList.push("background_flaw_choice"); - } - - if(eventinfo.sourceType == "player") { - reset = _.extend(reset, {"background_personality_choice1": "", "background_personality_choice2": "", "background_ideal_choice": "", "background_bond_choice": "", "background_flaw_choice": ""}); - } - - if (data["data-Equipment"]) { - showList.push("background_equipment_row"); - var equipment_string = ""; - var json = JSON.parse(data["data-Equipment"]); - if(json["default"]) { - equipment_string += json["default"].join(", "); - } - for (var i = 1; i < 5; i++) { - if(json[i]) { - if (!json["default"].length && i == 1) { - equipment_string += ""; - } else { - equipment_string += " and "; - } - - equipment_string += cleanEquipment(json[i]); - } - }; - update["background_standard_equipment"] = equipment_string; - } - - var background_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Backgrounds" ? eventinfo.newValue.split(":")[1] : false; - - setCharmancerText(update); - showChoices(showList); - hideChoices(hideList); - recalcData(); - setAttrs(reset); - }); - } -}); - -/* ABILITY SCORE */ -on("page:l1-abilities", function(eventinfo) { - var data = getCharmancerData(); - getCompendiumPage("Rules:Ability%20Scores", function(p) { - p = removeDuplicatedPageData(p); - var pagedata = p["data"]; - var allChoices = []; - if (pagedata["data-Generation Choices"]) { - var genChoices = JSON.parse(pagedata["data-Generation Choices"]); - _.each(genChoices, function(value, choice) { - allChoices.push(choice); - }); - } - setCharmancerOptions("abilities", allChoices); - - - if (data["l1-abilities"] && data["l1-abilities"].values && data["l1-abilities"].values.abilities) { - setAttrs({"abilities": data["l1-abilities"].values.abilities}); - } - }); -}); - -on("mancerchange:abilities", function(eventinfo) { - var data = getCharmancerData(); - var initHide = ["abilities_possible"]; - var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; - var standardArray = ["8", "10", "12", "13", "14", "15"]; - var pointbuyChoices = ["8", "9", "10", "11", "12", "13", "14", "15"]; - - hideChoices(initHide); - - - if (data["l1-abilities"].values.abilities == "Standard Array") { - showChoices(["abilities_stdarray", "abilities_selects"]); - _.each(attribs, function(attrib) { - setCharmancerOptions(attrib, standardArray); - }); - } - - if (data["l1-abilities"].values.abilities == "Roll for Stats") { - showChoices(["abilities_rollstats"]); - if (data["l1-abilities"].values.roll_results && data["l1-abilities"].values.roll_results.length) { - showChoices(["abilities_rollstats_rolled","abilities_selects"]); - var roll_results = typeof data["l1-abilities"].values.roll_results == "string" ? data["l1-abilities"].values.roll_results.split(",") : data["l1-abilities"].values.roll_results; - _.each(attribs, function(attrib) { - setCharmancerOptions(attrib, roll_results); - }); - } - } - - if (data["l1-abilities"].values.abilities == "Point Buy") { - showChoices(["abilities_pointbuy", "abilities_selects"]); - setCharmancerText({"points_available_display":data["l1-abilities"].values.pointbuy_points || "27"}); - _.each(attribs, function(attrib) { - setCharmancerOptions(attrib, pointbuyChoices); - }); - } - - if (data["l1-abilities"].values.abilities == "custom") { - showChoices(["abilities_custom"]); - } - - reset = {}; - if (eventinfo.sourceType == "player") { - _.each(attribs, function(attrib) { - reset[attrib] = ""; - }); - reset["pointbuy_points"] = "27" - } - - - recalcData(); - setAttrs(reset); -}); - -on("mancerchange:strength mancerchange:dexterity mancerchange:constitution mancerchange:intelligence mancerchange:wisdom mancerchange:charisma", function(eventinfo) { - data = getCharmancerData(); - var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; - var clearvalue = eventinfo.newValue; - var clearObject = { - strength: data["l1-abilities"].values.strength, - dexterity: data["l1-abilities"].values.dexterity, - constitution: data["l1-abilities"].values.constitution, - intelligence: data["l1-abilities"].values.intelligence, - wisdom: data["l1-abilities"].values.wisdom, - charisma: data["l1-abilities"].values.charisma}; - - if (data["l1-abilities"].values.abilities != "custom" && data["l1-abilities"].values.abilities != "Point Buy") { - attribs = _.reject(attribs, function(item) { return item == eventinfo.triggerName; }); - _.each(attribs, function(attrib) { - if (clearvalue == clearObject[attrib]) { - clearObject[attrib] = ""; - } - }); - } - - if (data["l1-abilities"].values.abilities == "Point Buy") { - clearObject.pointbuy_points = recalcPoints(); - } - - if (eventinfo.sourceType == "player") { - setAttrs(clearObject); - } - recalcData(); -}); - -on("mancerroll:rollstats", function(eventinfo) { - var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; - var results = []; - var i = 1; - _.each(eventinfo.roll, function(roll) { - results.push(roll.result + "~" + i); - i++; - }); - results.sort(function(a,b) {return Number(a.split("~")[0]) - Number(b.split("~")[0])}); - _.each(attribs, function(attrib) { - setCharmancerOptions(attrib, results); - }); - setAttrs({roll_results: results, strength: "", dexterity: "", constitution: "", intelligence: "", wisdom: "", charisma: ""}); - showChoices(["abilities_rollstats_rolled","abilities_selects"]); -}); - -on("clicked:clearstats", function(eventinfo) { - var data = getCharmancerData(); - var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; - reset = {}; - _.each(attribs, function(attrib) { - reset[attrib] = ""; - disableCharmancerOptions(attrib, []); - }); - - setAttrs(reset); -}); - -/* EQUIPMENT */ -on("page:l1-equipment", function(eventinfo) { - getAttrs(["licensedsheet"], function(v) { - var data = getCharmancerData(); - var class_string = getName("class", data, true); - var background_string = getName("background", data, true); - var class_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_class ? data["l1-equipment"].values.equipment_class : undefined; - var background_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_background ? data["l1-class"].values.equipment_background : undefined; - var update = {}; - var update_attr = {}; - var showList = []; - var hideList = []; - var allBlobs = getRelevantBlobs(data, "1", "l1"); - var equipmentType = data["l1-equipment"] && data["l1-equipment"].values.equipment_type ? data["l1-equipment"].values.equipment_type : ""; - const licensedsheet = (v.licensedsheet && v.licensedsheet === "1") ? "licensedsheet" : ""; - var handleChoices = function(type) { - var equipment = {}; - if(data["l1-" + type] && data["l1-" + type].data[type] && data["l1-" + type].data[type]["data-Equipment"]) { - equipment = data["l1-" + type].data[type]["data-Equipment"]; - }; - if(allBlobs.sorted[type]) { - _.each(allBlobs.sorted[type], function(blob) { - if(blob.Equipment) { - var blobstuff = blob.Equipment; - try { - blobstuff = JSON.parse(blob.Equipment); - } catch (e) {} - equipment.default = equipment.default ? equipment.default.concat(blobstuff) : blobstuff; - } - }); - }; - _.each(equipment, function(feature, num) { - if(num === "default") { - update[type + "_equipment"] = feature.join(", "); - } else { - - var dynamic_items = "Category:None"; - var static_items = []; - var hasDouble = false; - var doubleOffset = 4; - var equipmentTitle = cleanEquipment(feature).replace(/^\w/, function(char) { return char.toUpperCase(); }).replace(/(^\(|\)$)/g, ""); - if (equipmentTitle.search("Two of") == 0) { - equipmentTitle += ")"; - } - update[type + "_equipment_choice" + num + "_title"] = equipmentTitle; - _.each(feature, function(f) { - if(f.indexOf("Subtype:") > -1) { - dynamic_items = 'Category:Items "Item Rarity":Standard ' + f.split("~")[0]; - } else if (f.indexOf("*Weapon") > -1) { - dynamic_items = 'Category:Items "Item Rarity":Standard ' + f.split("~")[0]; - } else { - static_items.push(f); - } - if (f.split("~")[1] && f.split("~")[1] == "DBL") { - hasDouble = true; - } - }); - if (hasDouble) { - showList.push(type + "_equipment_choice" + num + "_double"); - var doubleChoiceNum = parseInt(num) + doubleOffset; - setCharmancerOptions(type + "_equipment_choice" + doubleChoiceNum, dynamic_items, {add:static_items, category:"Items"}); - } else { - hideList.push(type + "_equipment_choice" + num + "_double"); - } - setCharmancerOptions(type + "_equipment_choice" + num, dynamic_items, {add: static_items, category:"Items"}); - showList.push(type + "_equipment_choice" + num); - } - }); - }; - recalcData(); - - if(class_string) { - showList.push("has_class"); - update["class_label"] = class_string; - update_attr["equipment_class"] = class_string; - if(class_equipment && class_equipment != class_string) { - update["starting_cubil_btn_label"] = ""; - update["class_equipment"] = ""; - update_attr["starting_cubil"] = 0; - update_attr["equipment_type"] = ""; - equipmentType = ""; - update_attr["class_equipment_choice1"] = ""; - update_attr["class_equipment_choice2"] = ""; - update_attr["class_equipment_choice3"] = ""; - update_attr["class_equipment_choice4"] = ""; - update_attr["class_equipment_choice5"] = ""; - update_attr["class_equipment_choice6"] = ""; - update_attr["class_equipment_choice7"] = ""; - update_attr["class_equipment_choice8"] = ""; - }; - - if(class_string == "custom") { - update_attr["equipment_type"] = "cubil"; - hideList.push("equipment_type", "random_cubil_option") - showList.push("custom_class_cubil", "cubil_option", "eqp_custom_class"); - } else { - handleChoices("class"); - var startingCubil = data["l1-class"].data.class && data["l1-class"].data.class["Starting Cubil"] ? data["l1-class"].data.class["Starting Cubil"] : false; - if(startingCubil) { - update["starting_cubil_btn_label"] = startingCubil; - update_attr["roll_starting_cubil"] = `@{wtype}&{template:mancerroll} {{title=Starting Cubil}} {{r1=[[${startingCubil.replace("x", "*")}]]}} {{licensedsheet=${licensedsheet}}}`; - showList.push("random_cubil_option"); - } else { - update_attr["roll_starting_cubil"] = `@{wtype}&{template:mancerroll} {{title=Starting Cubil}} {{r1=[[0]]}} {{licensedsheet=${licensedsheet}}}`; - update_attr["equipment_type"] = "class"; - equipmentType = "class"; - hideList.push("equipment_type", "cubil_option"); - showList.push("class_option", "no_cubil_option"); - } - } - } else { - showList.push("no_class"); - }; - - if(background_string) { - update["background_label"] = background_string; - update_attr["equipment_background"] = background_string; - if(background_string != "custom") { - handleChoices("background"); - } - if(data["l1-equipment"] && data["l1-equipment"].values.equipment_type || class_string == "custom") { - if(data["l1-equipment"] && equipmentType == "class" || class_string == "custom") { - showList.push("has_background"); - if(background_equipment && background_equipment != background_string) { - update["background_equipment"] = ""; - update_attr["background_equipment_choice1"] = ""; - update_attr["background_equipment_choice2"] = ""; - update_attr["background_equipment_choice3"] = ""; - update_attr["background_equipment_choice4"] = ""; - }; - } - if(data["l1-equipment"] && equipmentType == "cubil" && class_string != "custom") { - showList.push("background_chose_starting_cubil"); - } - } - } else { - showList.push("no_background"); - } - - if(equipmentType === "" || equipmentType === undefined) { - hideList.push("cubil_option", "class_option"); - } else if(equipmentType === "cubil") { - if(background_string) showList.push("background_cubil_option"); - showList.push("cubil_option"); - hideList.push("class_option"); - } else if(equipmentType === "class") { - showList.push("class_option"); - hideList.push("cubil_option"); - } - - showChoices(showList); - hideChoices(hideList); - setCharmancerText(update); - setAttrs(update_attr); - }); -}); - -on("mancerchange:equipment_type", function(eventinfo) { - var showList = []; - var hideList = []; - var update = {}; - var reset = {}; - var data = getCharmancerData(); - var class_string = getName("class", data, true); - var background_string = getName("background", data, true); - if(eventinfo.sourceType == "player") { - if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { - hideList.push("cubil_option", "class_option", "background_cubil_option"); - } else if(eventinfo.newValue === "cubil") { - if(background_string) showList.push("background_cubil_option"); - if(class_string != "custom") showList.push("random_cubil_option") - showList.push("cubil_option"); - hideList.push("class_option"); - } else if(eventinfo.newValue === "class") { - showList.push("class_option"); - hideList.push("cubil_option", "background_cubil_option"); - } - } - showChoices(showList); - hideChoices(hideList); -}); - -on("mancerroll:starting_cubil", function(eventinfo) { - setAttrs({starting_cubil: eventinfo.roll[0].result}); -}); - -/* REPEATING SECTION LISTENERS */ -on("mancerchange:repeating_row", function(eventinfo) { - var mancerdata = getCharmancerData(); - var proficiencies = getProficiencies(mancerdata, eventinfo.currentStep); - var section = eventinfo.sourceSection.split("_")[2].split("-")[0].replace(/[0-9]+$/gm, ""); - var type = eventinfo.sourceSection.split("_")[3]; - var sourcepage = eventinfo.currentStep; - if(eventinfo.currentStep.split("-")[0] == "lp") { - var sectioninfo = eventinfo.sourceSection.split("_")[2].split("--")[0]; - if(sectioninfo.indexOf("-") === -1) { - let index = sectioninfo.indexOf(section) + section.length; - sectioninfo = [sectioninfo.slice(0, index), "-", sectioninfo.slice(index)].join(''); - } - sectioninfo = sectioninfo.split("-"); - if(sectioninfo.length > 1) { - sourcepage = "lp-levels"; - section = "class" + sectioninfo[1]; - if(sectioninfo[0] == "subclass") section += "_subclass"; - } else { - sourcepage = "lp-welcome"; - section = "lp-" + sectioninfo[0]; - } - } - var pagedata = mancerdata[sourcepage].data[section]; - if(_.last(eventinfo.sourceAttribute.split("_")) == "choice") { - if(type == "feature") { - if(eventinfo.previousValue !== eventinfo.newValue){ - clearRepeatingSections(eventinfo.sourceSection + " span"); - if(eventinfo.newValue.split(":")[0] == "Blob") { - console.log(pagedata.blobs[eventinfo.newValue.split(":")[1]]); - if(pagedata.blobs[eventinfo.newValue.split(":")[1]]["Pick Powers"] || pagedata.blobs[eventinfo.newValue.split(":")[1]].Powers) { - deleteCharmancerData(["lp-spells"]); - } - handleBlobs(pagedata.blobs, { - filters: {name: eventinfo.newValue.split(":")[1]}, - section: section, - element: eventinfo.sourceSection + " span", - slide: eventinfo.currentStep, - parent: section - }); - } - } - } - if(eventinfo.newValue == "custom") { - - showChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); - } else { - var toset = {}; - hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); - toset[eventinfo.sourceSection + "_custom"] = ""; - setAttrs(toset); - } - } -}); - -on("mancerchange:repeating_row", function(eventinfo) { - if(eventinfo.currentStep !== "lp-choices") return; - if(eventinfo.sourceAttribute.indexOf("feature_choice") === -1 && eventinfo.sourceAttribute.indexOf("feature_info") === -1) return; - - const data = getCharmancerData(); - const traits = JSON.parse(data["lp-welcome"].values.previous_repeating).traits || []; - const singleSelectionTraits = [ - {group: "Maneuvers", single: "Maneuver" } - ]; //Types of traits that can be taken only once. - let traitsAlreadyTaken = []; - - //Read the current type of a trait - const currentTrait = data["lp-choices"].values[eventinfo.sourceAttribute.replace("_choice", "_info")] || ""; - const traitIndex = singleSelectionTraits.map(trait => { return trait.group; }).indexOf(currentTrait); - - //Return if the trait is not among the ones set for single selection. - if(traitIndex === -1) return; - - //Get single item type - const traitType = singleSelectionTraits[traitIndex].single + ": "; - - const getRelevantChoices = function(data, choiceType) { - const choices = data["lp-choices"].values || []; - let relevantChoices = []; - for(choice in choices) { - if(choice.indexOf("_info") === -1) continue; - if(choices[choice] === choiceType) relevantChoices.push(choice.replace("_info", "")); - } - return relevantChoices; - }; - - //Reading traits set in previous Levels - for(trait in traits) { - if(traits[trait].name.indexOf(traitType) > -1) { - const selectedTrait = traits[trait].name.replace(traitType, ""); - traitsAlreadyTaken.push("Blob:" + selectedTrait); - } - } - - //Handling traits choosen at current LP - const choices = getRelevantChoices(data, singleSelectionTraits[traitIndex].group); - for(choice in choices) { - if(choices[choice]+"_choice" in data["lp-choices"].values) { - traitsAlreadyTaken.push(data["lp-choices"].values[choices[choice]+"_choice"]); - } - } - - //Disable elements - for(choice in choices) { - //Enables all options - disableCharmancerOptions(choices[choice]+"_choice", ""); - //Disable maneuvers arealdy selected at lv1 or during current LP - disableCharmancerOptions(choices[choice]+"_choice", traitsAlreadyTaken); - } -}); - -on("mancerchange:repeating_spellrow", function(eventinfo) { - if(eventinfo.sourceType == "player") { - changeCompendiumPage("sheet-spells-info", eventinfo.newValue, "card_only"); - } - var mancerdata = getCharmancerData(); - var known = knownPowers().known; - _.each(mancerdata["l1-spells"].repeating, function(id) { - disableCharmancerOptions(id + "_choice", known, {category: "Powers"}); - }); -}); - -//D&D 5e: Charactermancer Lvl+ Druid, Circle of Land feedback improvement (UC811) -//Land druids used to be able to change multiple lands once they levelup. This goes against the rules. This is a fix for that issue. -//By Miguel -on("mancerchange:repeating_row", function(eventinfo) { - const featureName = "Circle Powers"; - const feedback = "You must choose your Circle Land at 3rd level"; - - const data = getCharmancerData(); - //First we detect if this is circle spell, otherwise return. - if(eventinfo.currentStep !== "lp-choices") return; - if(eventinfo.sourceAttribute.indexOf("feature_choice") === -1 && eventinfo.sourceAttribute.indexOf("feature_info") === -1) return; - if(!eventinfo.sourceSection+"_info" in data["lp-choices"].values || !data["lp-choices"].values[eventinfo.sourceSection+"_info"] === featureName) return; - - const previousRepeating = JSON.parse(data["lp-welcome"].values.previous_repeating); - const previousTraits = previousRepeating.traits; - const initialCircleTrait = previousTraits.findIndex(item => item.name.indexOf(featureName+": ") > -1); - - //A land was had not been selected yet when Mancer was started (Ex: Levelling from LV 1st to 5th) - if(!(/repeating_-.+_subclass-.+--[^3]+_feature/g).test(eventinfo.sourceSection)) { - const choices = data["lp-choices"].values; - for(choice in choices) { - if(choices[choice] === featureName) { - //Set all non 3rd level pickers to the choose value - if((/repeating_-.+_subclass-.+--[^3]+_feature/g).test(choice) && choice.indexOf("_info") > -1 && choices[choice] === featureName) { - const pickerClass = choice.replace("_info", "_choice"); - const currentValue = eventinfo.newValue.replace("Blob:", ""); - const initialLand = currentValue.replace(featureName, "").trim(); - const choiceLevel = choice.match(/--./)[0].replace("--", ""); - const choiceValue = initialLand + " " + featureName + "(" + choiceLevel + ")"; - if((eventinfo.newValue === "" || eventinfo.newValue === featureName) && eventinfo.previousValue !== feedback) { - setCharmancerOptions(pickerClass, [feedback], { selected: feedback }, function() { - disableCharmancerOptions(pickerClass, [""]); - }); - } else { - setCharmancerOptions(pickerClass, [choiceValue], { category: "Blob", selected: "Blob:"+choiceValue }, function() { - disableCharmancerOptions(pickerClass, [""]); - }); - } - } - } - } - return; - } - //A land was already selected when Mancer was started (Ex: Levelling from LV 3rd to 5th) - else if(initialCircleTrait > -1) { - const initialLand = previousTraits[initialCircleTrait].name.replace(featureName+": ", ""); - const choiceLevel = eventinfo.sourceSection.match(/--./)[0].replace("--", ""); - const choiceValue = initialLand + " " + featureName + "(" + choiceLevel + ")"; - const choiceClass = eventinfo.sourceSection+"_choice"; - setCharmancerOptions(choiceClass, [choiceValue], { category: "Blob", selected: "Blob:"+choiceValue }, function() { - disableCharmancerOptions(choiceClass, [""]); - }); - } -}); - -on("clicked:repeating_spellrow", function(eventinfo) { - var spell_name = ""; - var data = getCharmancerData(); - var card = "card_only"; - if(_.last(eventinfo.sourceSection.split("_")) == "spellrow") { - spell_name = data["l1-spells"].values[eventinfo.sourceAttribute]; - } else { - spell_name = data["l1-spells"].values[eventinfo.sourceSection + "_choice"] ? data["l1-spells"].values[eventinfo.sourceSection + "_choice"] : "Rules:Powers"; - card = data["l1-spells"].values[eventinfo.sourceSection + "_choice"] ? card : ""; - } - changeCompendiumPage("sheet-spells-info", spell_name, card); -}); - -on("mancerchange:repeating_customrow", function(eventinfo) { - var mancerdata = getCharmancerData(); - var profdata = getProficiencies(mancerdata, eventinfo.currentStep); - if(eventinfo.sourceAttribute.substr(-10) == "trait_name") { - var update = {}; - update[eventinfo.sourceSection + " span"] = eventinfo.newValue; - setCharmancerText(update); - } - if(_.last(eventinfo.sourceSection.split("_")) == "proficiency") { - if(_.last(eventinfo.sourceAttribute.split("_")) == "type") { - var update = {}; - var prof = eventinfo.newValue; - var choices = prof == "" ? [] : "Category:Proficiencies \"Type:" + prof + "\""; - var settings = {category: "Proficiencies", disable: profdata.all[prof]}; - update[eventinfo.sourceSection + " span + select"] = ''; - if(prof == "Language") update[eventinfo.sourceSection + " span + select"] += ''; - update[eventinfo.sourceSection + " span"] = eventinfo.newValue; - setCharmancerText(update); - if(prof == "") { - var toset = {}; - toset[eventinfo.sourceSection + "_choice"] = ""; - toset[eventinfo.sourceSection + "_custom"] = ""; - setAttrs(toset); - hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); - } else { - setCharmancerOptions(eventinfo.sourceSection + "_choice", choices, settings); - } - } else if(_.last(eventinfo.sourceAttribute.split("_")) == "choice") { - if(eventinfo.newValue == "custom") { - showChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); - } else { - var toset = {}; - hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); - toset[eventinfo.sourceSection + "_custom"] = ""; - setAttrs(toset); - } - } - } -}); - -on("clicked:repeating_customrow", function(eventinfo) { - var mancerdata = getCharmancerData(); - getRepeatingSections(function(repeating) { - var target = ""; - var section = eventinfo.sourceSection.split("_")[3] - var type = _.last(eventinfo.sourceSection.split("_")); - _.each(repeating.tree, function(branch, parentid) { - _.each(branch, function(child, childid) { - if(childid == eventinfo.sourceSection) target = parentid; - }); - }); - addRepeatingSection(target, "custom-" + type, "custom_" + section + "_" + type); - }); -}); - -on(customListeners, function(eventinfo) { - var mancerdata = getCharmancerData(); - var num = parseInt(eventinfo.triggerName.substr(-1)); - var base = eventinfo.triggerName.slice(0, -1); - var section = eventinfo.triggerName.split("_")[0].replace("sub", ""); - if(mancerdata["l1-" + section].values[base.split("_")[0]] - && ["Rules", "CategoryIndex"].indexOf(mancerdata["l1-" + section].values[base.split("_")[0]].split(":")[0]) != -1 - && eventinfo.newValue) { - showChoices([base + (num+1)]); - } -}); - -on(changeListeners, function(eventinfo) { - recalcData(); -}); - -on("mancerchange:custom_race_spell_ability mancerchange:custom_class_spell_ability", function(eventinfo) { - var section = eventinfo.triggerName.split("_")[1]; - if(eventinfo.newValue) { - showChoices(["custom_spellcasting"]); - } else { - var set = {} - set["custom_" + section + "_spell_number"] = "1"; - set["custom_" + section + "_prime_number"] = "1"; - set["custom_" + section + "_spell_list"] = ""; - setAttrs(set); - hideChoices(["custom_spellcasting"]); - } -}); - -on("page:l1-welcome page:l1-class page:l1-race page:l1-abilities page:l1-background page:l1-equipment page:l1-spells page:l1-feat page:l1-bio page:l1-summary", function(eventinfo) { - var mancerdata = getCharmancerData(); - var buttons = ""; - var buttoninfo = { - welcome: "charmancer-start", - race: "race-u", - class: "class-u", - abilities: "abilities-u", - background: "background-u", - equipment: "equipment-u", - spells: "spells-u", - feat: "feats-u", - bio: "bio-u", - gear: "gear-u", - summary: "review-u" - } - _.each(buttoninfo, function(translation, page) { - var here = "l1-" + page == eventinfo.triggerName; - buttons += "
  • "; - }); - buttons += "
  • "; - setCharmancerText({steps: buttons}); - if(eventinfo.triggerName != "l1-welcome") { - addRepeatingSection("topbar-holder", "topbar"); - recalcData(); - getProficiencies(mancerdata, eventinfo.currentStep); - } - getAttrs(["licensedsheet"], function(v) { - if("licensedsheet" in v && v.licensedsheet === "1") { - setCharmancerText({"sheet-licensedsheet-flag":"true"}); - } - }); -}); - -on("mancerchange:class_feature_choice_1 mancerchange:class_feature_choice_2", function(eventinfo) { - var data = getCharmancerData(); - var featureNum = _.last( eventinfo.triggerName.split("_") ); - var update = {}; - var set = {}; - set["class_feature_choice_" + featureNum + "_desc"] = ""; - if(eventinfo.newValue) { - getCompendiumPage(data["l1-class"].values.class, function(p) { - p = removeDuplicatedPageData(p); - var data = p["data"]; - if(data["data-Feature Choices"]) { - var feature = JSON.parse(data["data-Feature Choices"])[featureNum-1]; - var featureName = feature.Name; - var offset = 3; - - if (eventinfo.newValue.split("~")[1] && eventinfo.newValue.split("~")[1] == "DBL") { - showChoices(["class_feature_row_" + featureNum + "_manual"]); - // var doubleChoiceNum = featureNum + offset; - // setCharmancerOptions("class_feature_choice_" + doubleChoiceNum, [eventinfo.newValue]); - } else { - hideChoices(["class_feature_row_" + featureNum + "_manual"]); - } - if(data["data-" + featureName + " Data"]) { - var json = JSON.parse(data["data-" + featureName + " Data"]); - var selected = _.findWhere(json, {Name: eventinfo.newValue}); - if(selected) { - update["class_feature_description_" + featureNum] = selected.Desc; - set["class_feature_choice_" + featureNum + "_desc"] = selected.Desc; - setAttrs(set); - setCharmancerText(update); - } - } - } - }); - } else { - update["class_feature_description_" + featureNum] = ""; - setAttrs(set); - setCharmancerText(update); - } -}); - -on("mancerchange:custom_subclass_prime_number mancerchange:custom_subclass_spell_number", function(eventinfo) { - var section = eventinfo.triggerName.split("_")[2]; - if(eventinfo.newValue && eventinfo.newValue > 0) { - showChoices(["custom_" + section + "_list"]); - } else { - var reset = {}; - reset["custom_subclass_" + section + "_list"] = ""; - hideChoices(["custom_" + section + "_list"]); - setAttrs(reset); - } -}); - -on("mancerchange:background_personality_choice1 mancerchange:background_personality_choice2", function(eventinfo) { - var mancerdata = getCharmancerData(); - var choices = []; - if(mancerdata["l1-background"].values["background_personality_choice1"]) choices.push(mancerdata["l1-background"].values["background_personality_choice1"]); - if(mancerdata["l1-background"].values["background_personality_choice2"]) choices.push(mancerdata["l1-background"].values["background_personality_choice2"]); - disableCharmancerOptions("background_personality_choice1", choices); - disableCharmancerOptions("background_personality_choice2", choices); -}); - -on("mancerroll:background_detail_choice_roll mancerroll:background_personality_choice1_roll mancerroll:background_personality_choice2_roll mancerroll:background_ideal_choice_roll mancerroll:background_bond_choice_roll mancerroll:background_flaw_choice_roll", function(eventinfo) { - var data = getCharmancerData(); - var index = eventinfo.roll[0].dice[0] - 1; - var baseName = eventinfo.triggerName.split(":")[1].slice(0,-5); - var choices = JSON.parse(data["l1-background"].values[baseName + "_array"]); - setCharmancerOptions(baseName, choices.array, {selected: choices.array[index]}); - if(baseName.slice(0, -1) == "background_personality_choice") { - var num = baseName.substr(-1) == "1" ? "2" : "1"; - setRollButton(baseName.slice(0, -1) + num, choices.array, choices.name, index + 1); - } -}); - -on("clicked:cancel", function() { - showChoices(["cancel-prompt"]); - var data = getCharmancerData(); - console.log(data); - //console.log(recalcData(data)); - //console.log(getProficiencies(data, "finish")); - //console.log(getRelevantBlobs(data, "1", "l1")); -}); - -on("clicked:continue", function() { - hideChoices(["cancel-prompt"]); -}); - -on("page:l1-spells", function(eventinfo) { - var stats = recalcData(); - var mancerdata = getCharmancerData(); - var spellData = knownPowers(); - var set = {}; - var titles = {}; - var sorted = {}; - var repids = []; - var totalchoices = 0; - var racename = getName("race", mancerdata, true); - var subracename = getName("subrace", mancerdata, true); - var classname = getName("class", mancerdata, true); - var subclassname = getName("subclass", mancerdata, true); - set["race_spells"] = racename + subracename; - set["class_spells"] = classname + subclassname; - set["race_number"] = spellData.race ? spellData.race.choices.length : 0; - set["class_number"] = spellData.class ? spellData.class.choices.length : 0; - - subracename = getName("subrace", mancerdata) == "" ? "" : " - " + getName("subrace", mancerdata); - subclassname = getName("subclass", mancerdata) == "" ? "" : " - " + getName("subclass", mancerdata); - setAttrs(set, function() { - spellData = knownPowers(); - titles["race"] = getName("race", mancerdata) + subracename; - titles["class"] = getName("class", mancerdata) + subclassname; - - _.each(["race", "class"], function(section) { - if(spellData[section]) { - _.each(spellData[section].known, function(spell) { - sorted[spell.Level] = sorted[spell.Level] ? sorted[spell.Level] : {}; - sorted[spell.Level][section] = sorted[spell.Level][section] ? sorted[spell.Level][section] : {known: [], choices: []}; - sorted[spell.Level][section].known.push(spell.Name); - }); - _.each(spellData[section].choices, function(spell) { - sorted[spell.Level] = sorted[spell.Level] ? sorted[spell.Level] : {}; - sorted[spell.Level][section] = sorted[spell.Level][section] ? sorted[spell.Level][section] : {known: [], choices: []}; - sorted[spell.Level][section].choices.push(spell); - }); - } - }); - //This is just to get the total number of repeating sections we need. when we've added enough, erase the rest - _.each(sorted, function(spellarray, level) { - _.each(spellarray, function(spells, section) { - totalchoices++; - _.each(spells.choices, function(spell) { - totalchoices++; - }); - }); - }); - _.each(sorted, function(spellarray, level) { - _.each(spellarray, function(spells, section) { - addRepeatingSection("spell_holder", "row", "spellrow", function(rowid) { - var repupdate = {}; - var knownspells = []; - var toset = {}; - repupdate[rowid + " label span"] = level == 0 ? titles[section] + " Primes" : titles[section] + " Level " + level; - _.each(spells.known, function(spell, index) { - var thisSpell = spell; - thisSpell += ""; - thisSpell += ""; - toset[rowid + "_known" + index] = "Powers:" + spell; - knownspells.push(thisSpell); - }); - repupdate[rowid + " label p"] = knownspells.join(", "); - setAttrs(toset); - setCharmancerText(repupdate); - repids.push(rowid); - _.each(spells.choices, function(spell) { - addRepeatingSection(rowid, "choose", section + "_spell-l" + spell.Level, function(id) { - var toset = {}; - var lists = [spell.List]; - if(spell.AddList) lists = lists.concat(spell.AddList); - var choices = "Category:Powers Classes:*" + lists.join("|*") + " Level:" + spell.Level; - var settings = {category: "Powers", disable: spellData.known, add: spell["Expanded List"]}; - toset[id + "_info"] = spell.Ability; - if(section != "class") toset[id + "_custom"] = section; - repids.push(id); - setCharmancerOptions(id + "_choice", choices, settings); - setAttrs(toset); - showChoices(["action[name=act_" + id + "_action]"]); - if(repids.length >= totalchoices) { - clearRepeating(repids, "l1-spells"); - } - }); - }); - }); - }) - }); - - if (!spellData.race && !spellData.class) { - showChoices(["no_spells"]); - clearRepeatingSections("spell_holder"); - } else { - showChoices(["spell-info-container"]); - hideChoices(["no_spells"]); - } - - setAttrs(set); - }); -}); - -on("page:l1-feat", function(eventinfo) { - var stats = recalcData(); - var mancerdata = getCharmancerData(); - var showList = []; - var hideList = []; - - if(mancerdata["l1-race"] && mancerdata["l1-race"].data.subrace && mancerdata["l1-race"].data.subrace["data-Feats"]) { - showList = ["yes_feat"]; - hideList = ["no_feat"]; - } else { - hideList = ["yes_feat"]; - showList = ["no_feat"]; - deleteCharmancerData(["l1-feat"]); - } - - showChoices(showList); - hideChoices(hideList); -}); - -on("mancerchange:feat", function(eventinfo) { - changeCompendiumPage("sheet-feat-info", eventinfo.newValue); - - var reset = {}; - if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { - showChoices(["feat_options"]); - } - hideChoices(["feat_possible"]); - - if(eventinfo.sourceType == "player") { - reset = {}; - for(var x=1; x<=proficiencyNum; x++) { - //reset["custom_race_prof_name_choice" + x] = ""; - //reset["custom_race_prof_type_choice" + x] = ""; - } - reset["feat_ability_choice"] = ""; - setCharmancerText({"feat_text": ""}); - } - - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - setAttrs(reset, function() { - var mancerdata = getCharmancerData(); - var data = p["data"]; - var showList = []; - var update = {}; - - if(data["data-Ability Score Increase"]) { - var abilityText = []; - var json = JSON.parse(data["data-Ability Score Increase"]); - _.each(json, function(increase, ability) { - abilityText.push(ability + " +" + increase); - }); - update["feat_ability_score"] = abilityText.join(", "); - showList.push("feat_ability"); - } - - if(data["data-Ability Score Choice"]) { - var json = JSON.parse(data["data-Ability Score Choice"]); - setCharmancerOptions("feat_ability_choice", json); - showList.push("feat_ability", "feat_ability_choice"); - } - - if(data["Prerequisite"]) { - showList.push("feat_prereq") - update["feat_prerequisite"] = data["Prerequisite"]; - } - //feat_ability_choice - - setCharmancerText(update); - showChoices(showList); - recalcData(); - }); - }); -}); - -/* BIO PAGE */ -on("page:l1-bio", function(eventinfo) { - const attrs = ["age", "character_name", "eyes", "hair", "height", "weight", "skin"]; - const mancerdata = getCharmancerData(); - const biodata = mancerdata["l1-bio"] || undefined; - const race = getName("race"); - - //Check for any data that has already been filled in and populate the Bio slide - if (biodata === undefined) { - getAttrs(attrs, function(v) { - let update = {}; - - _.each(attrs, function(value) { - if (v[`${value}`] != "" || v[`${value}`] != undefined) { - update[`${value}`] = v[`${value}`]; - }; - }); - - setAttrs(update); - }); - }; - - //Set the previous_race so the Summary page can offer a warning if needed - if (biodata === undefined || biodata.values["previous_race"] === undefined || biodata.values["previous_race"] != race) { - - setAttrs({ - previous_race: race - }); - }; - - if (mancerdata["l1-race"] != undefined) { - const raceInfo = mancerdata["l1-race"].values.race; - changeCompendiumPage("sheet-race-info", raceInfo); - }; -}); - -/* SUMMARY PAGE */ -on("page:l1-summary", function() { - var mancerdata = getCharmancerData(); - var profdata = getProficiencies(mancerdata); - var set = {}; - var racename = getName("race", mancerdata); - var subracename = getName("subrace", mancerdata); - var classname = getName("class", mancerdata); - var subclassname = getName("subclass", mancerdata); - var bgname = getName("background", mancerdata); - var spelldata = knownPowers(); - var racePowers = spelldata.race ? spelldata.race.choices.length : 0; - var classPowers = spelldata.class ? spelldata.class.choices.length : 0; - var ready = true; - - var handleMissing = function(section, sectionName) { - var page = mancerdata["l1-" + section.replace("sub", "")] || false; - var missing = {}; - var warnings = ""; - sectionName = sectionName || section; - if(page && page.data && page.data[section]) { - if(page.data[section]["data-Ability Score Choice"]) { - var choices = 1; - if(typeof page.data[section]["data-Ability Score Choice"] == "string") { - choices = parseInt( page.data[section]["data-Ability Score Choice"].split("+")[0] ); - } - var total = choices; - if(choices >= 2 && page.values[section + "_ability_choice2"]) choices--; - if(page.values[section + "_ability_choice"]) choices--; - if(page.values[section + "_ability_choice1"]) choices--; - if(choices > 0) missing.ability = [total, choices]; - } - _.each(page.repeating, function(id) { - if(id.split("_")[2] == section && id.split("_")[3] == "feature") { - var featurename = page.values[id + "_info"]; - if(page.values[id + "_choice"]) { - warnings += '

    Your ' + featurename + ' is ' + _.last(page.values[id + "_choice"].split(":")) + '.

    ' - } else { - warnings += '

    Your have not chosen a ' + featurename + '.

    '; - }; - } - }); - _.each(proficiencyList, function(prof) { - var numChoices = 0; - var totalChoices = 0; - _.each(page.repeating, function(id) { - if(id.split("_")[2] == section && id.split("_")[3] == prof.toLowerCase()) { - totalChoices++; - numChoices++; - if(page.values[id + "_choice"]) { - numChoices--; - var thischoice = _.last(page.values[id + "_choice"].split(":")); - if(thischoice == "custom" && !page.values[id + "_choice"]) { - warnings += '

    You\'ve chosen a custom language, but you haven\'t entered a custom language name.

    '; - } - _.each(profdata.auto, function(profs, source) { - if(profs.includes(thischoice)) { - warnings += '

    You\'ve chosen the ' + prof.toLowerCase() + ' ' + thischoice; - warnings += ', but you already have that ' + prof.toLowerCase() + ' from your ' + source + '.

    '; - }; - }); - } - } - }); - if(numChoices > 0) missing[prof] = [totalChoices, numChoices]; - }); - var total = 0; - var choices = 0; - _.each(page.repeating, function(id) { - if(id.split("_")[2] == section && id.split("_")[3] == "expertise") { - total++; - choices++; - if(page.values[id + "_choice"]) choices--; - if(choices > 0) missing.expertise = [total, choices]; - } - }); - } - _.each(missing, function(number, type) { - var singular = type == "ability" ? "an" : "a" - if(type == "ability") { - type = 'ability score increase' - } - warnings += '

    Your ' + sectionName; - if(type == "expertise") { - warnings += " gives you expertise in "; - warnings += number[0] > 1 ? 'up to ' + number[0] + ' skills' : " a skill"; - } else { - warnings += " allows you to choose "; - warnings += number[0] > 1 ? "up to " + number[0] + ' ' + type.toLowerCase() + 's' : singular + " " + type.toLowerCase(); - } - if(number[0] - number[1] > 0) { - warnings += ', but you\'ve only chosen ' + number[1] + '!

    '; - } else { - warnings += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen one!

    '; - } - }); - return warnings; - }; - - ///Show the bio info we need to put in places - if(mancerdata["l1-bio"]) { - let length = Object.keys(mancerdata["l1-bio"].values).length; - set["bio_info"] = ""; - - //Check if race has changed since entering data and add a warning - if(length < 2) { - set["bio_info"] += '

    You have not added new information to the Bio tab.

    '; - } else { - if(mancerdata["l1-bio"].values.character_name) { - set["bio_info"] += '

    Your name is ' + mancerdata["l1-bio"].values.character_name + '.

    ';}; - - if(mancerdata["l1-bio"].values.age) { - set["bio_info"] += '

    Your age is ' + mancerdata["l1-bio"].values.age + '.

    ';}; - - if(mancerdata["l1-bio"].values["height"]) { - set["bio_info"] += '

    Your height is ' + mancerdata["l1-bio"].values["height"] + '.

    ';}; - - if(mancerdata["l1-bio"].values.weight) { - set["bio_info"] += '

    Your weight is ' + mancerdata["l1-bio"].values.weight + '.

    ';}; - - if(mancerdata["l1-bio"].values.eyes) { - set["bio_info"] += '

    Your eye color is ' + mancerdata["l1-bio"].values.eyes + '.

    ';}; - - if(mancerdata["l1-bio"].values.hair) { - set["bio_info"] += '

    Your hair is ' + mancerdata["l1-bio"].values.hair + '.

    ';}; - - if(mancerdata["l1-bio"].values.skin) { - set["bio_info"] += '

    Your skin is ' + mancerdata["l1-bio"].values.skin + '.

    ';}; - - if (mancerdata["l1-bio"].values.previous_race != racename) { - setCharmancerText({ - race_warning: '

    Each race has unique look and different names. You might want to adjust your choices to reflect your race.

    ' - }); - }; - }; - }; - - if(mancerdata["l1-race"] && racename) { - set["race_info"] = '

    Your race is ' + racename + '

    '; - if(!mancerdata["l1-race"].values.alignment) set["race_info"] += '

    You haven\'t chosen your alignment.

    '; - set["race_info"] += handleMissing("race"); - if(mancerdata["l1-race"].values["has_subrace"] == "true") { - if(subracename) { - set["race_info"] += '

    Your subrace is ' + subracename + '

    '; - set["race_info"] += handleMissing("subrace"); - } else { - if(mancerdata["l1-race"].values.subrace == "Rules:Races" && !mancerdata["l1-race"].values.subrace_name) { - set["race_info"] = '

    You need to pick a name for your custom subrace!

    '; - } else { - set["race_info"] += '

    You have not selected a subrace!

    '; - } - ready = false; - showChoices(["race_button"]); - } - } - _.each(spelldata.errors.race, function(error) { - switch(error) { - case "custom_race_spell_list": - set["race_info"] += '

    You have not selected spell list for your innate spellcasting!

    '; - ready = false; - break; - default: - console.log("Unknown race spell error: " + error); - } - }); - if(mancerdata["l1-race"].values.race == "Rules:Races") { - if(!mancerdata["l1-race"].values.size) set["race_info"] += '

    You have not selected a size for your custom race!

    '; - if(!mancerdata["l1-race"].values.speed) set["race_info"] += '

    You have not selected a walking speed for your custom race!

    '; - } - } else { - if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races" && !mancerdata["l1-race"].values.race_name) { - set["race_info"] = '

    You need to pick a name for your custom race!

    '; - } else { - set["race_info"] = '

    You have not selected a race!

    '; - } - ready = false; - showChoices(["race_button"]); - } - - if(mancerdata["l1-class"] && classname) { - set["class_info"] = '

    Your class is ' + classname + '.

    '; - set["class_info"] += handleMissing("class"); - if(mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.custom_hit_die) { - set["class_info"] = '

    You need to pick a hit die for your custom class!

    '; - } - if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) { - if(subclassname && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) { - set["class_info"] += '

    Your ' + mancerdata["l1-class"].data.class["Subclass Name"] + ' is ' + subclassname + '.

    '; - set["class_info"] += handleMissing("subclass", mancerdata["l1-class"].data.class["Subclass Name"]); - } else { - if(mancerdata["l1-class"].values.subclass == "Rules:Classes" && !mancerdata["l1-class"].values.subrace_name) { - set["class_info"] = '

    You need to pick a name for your custom ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!

    '; - } else { - set["class_info"] += '

    You have not selected a ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!

    '; - } - ready = false; - showChoices(["class_button"]); - } - } - _.each(spelldata.errors.class, function(error) { - switch(error) { - case "custom_class_spell_list": - set["race_info"] += '

    You have selected a spellcasting ability for your custom class, but you have not selected a spell list.

    '; - ready = false; - showChoices(["class_button"]); - break; - case "custom_class_spell_number": - set["race_info"] += '

    You have selected a spellcasting ability for your custom class, but you have not selected a number of spells.

    '; - ready = false; - showChoices(["class_button"]); - break; - default: - console.log("Unknown class spell error: " + error); - } - }); - } else { - if(mancerdata["l1-class"] && mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.race_name) { - set["class_info"] = '

    You need to pick a name for your custom class!

    '; - } else { - set["class_info"] = '

    You have not selected a class!

    '; - } - ready = false; - showChoices(["class_button"]); - } - - if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values.abilities) { - switch(mancerdata["l1-abilities"].values.abilities) { - case "Standard Array": - set["ability_info"] = '

    You generated your stats from the standard array.

    '; - break; - case "Roll for Stats": - set["ability_info"] = '

    You generated your stats by rolling.

    '; - break; - case "Point Buy": - set["ability_info"] = '

    You generated your stats with the point buy method.

    '; - break; - case "custom": - set["ability_info"] = '

    You entered custom values for your stats.

    '; - break; - } - var x = 0; - _.each(abilityList, function(ability) { - if(!mancerdata["l1-abilities"].values[ability.toLowerCase()]) { - x++; - set["ability_info"] += '

    You have not selected a score for your ' + ability.toLowerCase() + '!

    '; - ready = false; - showChoices(["abilities_button"]); - } - }); - if(x == 6) set["ability_info"] = '

    You have not selected your ability scores!

    '; - } else { - set["ability_info"] = '

    You have not generated your ability scores!

    '; - ready = false; - showChoices(["abilities_button"]); - } - - if(mancerdata["l1-background"] && bgname) { - set["background_info"] = '

    You come from a ' + bgname + ' background.

    '; - if(mancerdata["l1-background"].data.background && mancerdata["l1-background"].data.background["data-Background Choice Name"]) { - if(!mancerdata["l1-background"].values["background_detail_choice"]) { - set["background_info"] += '

    You haven\'t chosen your '; - set["background_info"] += mancerdata["l1-background"].data.background["data-Background Choice Name"] +'.

    '; - } - } - if(!mancerdata["l1-background"].values["background_personality_choice1"] && !mancerdata["l1-background"].values["background_personality_choice2"]) { - set["background_info"] += '

    You haven\'t picked your personality traits.

    '; - } else if(!mancerdata["l1-background"].values["background_personality_choice1"] || !mancerdata["l1-background"].values["background_personality_choice2"]) { - set["background_info"] += '

    You haven\'t picked one of your personality traits.

    '; - } - if(!mancerdata["l1-background"].values["background_ideal_choice"]) { - set["background_info"] += '

    You haven\'t chosen your ideal.

    '; - } - if(!mancerdata["l1-background"].values["background_bond_choice"]) { - set["background_info"] += '

    You haven\'t chosen your bond.

    '; - } - if(!mancerdata["l1-background"].values["background_flaw_choice"]) { - set["background_info"] += '

    You haven\'t chosen your flaw.

    '; - } - set["background_info"] += handleMissing("background"); - } else { - set["background_info"] = '

    You have not selected a background!

    '; - ready = false; - showChoices(["background_button"]); - } - - if(mancerdata["l1-equipment"] && mancerdata["l1-equipment"].values["equipment_type"]) { - switch(mancerdata["l1-equipment"].values["equipment_type"]) { - case "class": - set["equipment_info"] = '

    You got starting equipment based on your class and background.

    '; - break; - case "cubil": - set["equipment_info"] = '

    You opted for cubil instead of starting equipment.

    '; - break; - } - if(mancerdata["l1-equipment"].values["equipment_type"] == "class") { - var choices = {"class": [0,0], "background": [0,0]}; - _.each(choices, function(numbers, section) { - var equipment = mancerdata["l1-" + section].data[section] && mancerdata["l1-" + section].data[section]["data-Equipment"] ? mancerdata["l1-" + section].data[section]["data-Equipment"] : {}; - _.each(equipment, function(choice, choicekey) { - if(choicekey != "default") numbers[0]++; - }); - _.each(mancerdata["l1-equipment"].values, function(val, key) { - if(key.includes(section + "_equipment_choice")) numbers[1]++; - }); - }); - _.each(choices, function(number, type) { - if(number[0] - number[1] > 0) { - set["equipment_info"] += '

    Your ' + type + ' gives you '; - set["equipment_info"] += number[0] > 1 ? number[0] + " equipment choices" : "an equipment choice"; - if(number[1] > 0) { - set["equipment_info"] += ', but you\'ve only chosen ' + number[1] + '!

    '; - } else { - set["equipment_info"] += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen it!

    '; - } - } - }); - } - if(mancerdata["l1-equipment"].values["equipment_type"] == "cubil" && mancerdata["l1-equipment"].values["starting_cubil"] == "0") { - set["equipment_info"] = '

    You selected starting wealth for your equipment, but you don\'t have any cubil yet!

    '; - } - if(mancerdata["l1-equipment"].values["equipment_class"] != getName("class", mancerdata, true) || (mancerdata["l1-equipment"].values["equipment_background"] != getName("background", mancerdata, true) && mancerdata["l1-equipment"].values["equipment_type"] != "cubil")) { - set["equipment_info"] = '

    Your equipment options have changed, you\'ll need to choose again.

    '; - ready = false; - showChoices(["equipment_button"]); - } - } else { - set["equipment_info"] = '

    You have not selected any equipment!

    '; - ready = false; - showChoices(["equipment_button"]); - } - - var spellsready = true; - var toDelete = []; - if(mancerdata["l1-spells"]) { - prevRace = mancerdata["l1-spells"].values.race_spells || ""; - prevClass = mancerdata["l1-spells"].values.class_spells || ""; - currentRace = getName("race", mancerdata, true) + getName("subrace", mancerdata, true); - currentClass = getName("class", mancerdata, true) + getName("subclass", mancerdata, true); - set["spell_info"] = ""; - if((racePowers + classPowers) == 0) { - set["spell_info"] += '

    The arcane is a mystery to you.

    '; - deleteCharmancerData(["l1-spells"]); - spellsready = false; - } else if(prevRace != currentRace || prevClass != currentClass || mancerdata["l1-spells"].values.race_number != racePowers || mancerdata["l1-spells"].values.class_number != classPowers) { - if(prevRace != currentRace || mancerdata["l1-spells"].values.race_number > racePowers) { - for(var x = 1; x<=9; x++) { - toDelete.push("race_level0_choice" + x); - toDelete.push("race_level1_choice" + x); - } - if(racePowers > 0 && mancerdata["l1-spells"].values.race_number > 0) { - set["spell_info"] += '

    Your racial spells were reset because your options have changed.

    '; - } - } - if(prevClass != currentClass || mancerdata["l1-spells"].values.class_number > classPowers) { - for(var x = 1; x<=9; x++) { - toDelete.push("class_level0_choice" + x); - toDelete.push("class_level1_choice" + x); - } - if(classPowers > 0 && mancerdata["l1-spells"].values.class_number > 0) { - set["spell_info"] += '

    Your class spells were reset because your options have changed.

    '; - } - } - } - } else if((racePowers + classPowers) > 0) { - set["spell_info"] = '

    You haven\'t selected your spells!

    '; - spellsready = false; - showChoices(["spells_button"]); - } else { - set["spell_info"] = '

    The arcane is a mystery to you.

    '; - spellsready = false - } - - if(mancerdata["l1-race"] && mancerdata["l1-race"].data.subrace && mancerdata["l1-race"].data.subrace["data-Feats"]) { - if(mancerdata["l1-feat"] && mancerdata["l1-feat"].values.feat) { - set["feat_info"] = '

    You\'ve selected the ' + mancerdata["l1-feat"].values.feat.split(":")[1] + ' feat.

    '; - set["feat_info"] += handleMissing("feat"); - } else { - set["feat_info"] = '

    You have access to a feat, but you have not yet selected one!

    '; - } - } else { - set["feat_info"] = '

    As you exchange your novice notions of the world for experience, a feat may become within reach. Not today, however.

    '; - deleteCharmancerData(["l1-feat"]); - } - - if(ready) { - set.ready_message = "If you're ready to build your " + racename; - set.ready_message += subracename == "" ? " " : " (" + subracename + ") "; - set.ready_message += subclassname == "" ? classname : classname + " (" + subclassname + ")"; - set.ready_message += " from a " + bgname + " background, click \"Apply Changes.\""; - showChoices(["apply_changes", "ready_text"]); - } else { - set.ready_message = "Hold on there! You've missed some required fields, which have been marked with a ."; - } - //If you're ready to build your race class from a background background, click "Apply Changes." - deleteCharmancerData([{"l1-spells":toDelete}], function() { - spelldata = knownPowers(); - if(spellsready) { - if (spelldata.known && spelldata.known.length) { - set["spell_info"] += '

    You know these spells: ' + removeExpansionInfo(spelldata.known.join(", ")) + '.

    '; - } - var choices = {"prime": [0,0], "spell": [0,0]}; - _.each(spelldata, function(section) { - _.each(section.choices, function(spell) { - if(spell.Level == 0) choices.prime[0]++; - if(spell.Level == 1) choices.spell[0]++; - }); - }); - choices.prime[1] = choices.prime[0]; - choices.spell[1] = choices.spell[0]; - _.each(mancerdata["l1-spells"].values, function(val, name) { - if(name.split("_")[3] == "spell-l0" && _.last(name.split("_")) == "choice") choices.prime[1]--; - if(name.split("_")[3] == "spell-l1" && _.last(name.split("_")) == "choice") choices.spell[1]--; - }); - _.each(choices, function(number, type) { - if(number[1] > 0) { - set["spell_info"] += '

    You can choose '; - set["spell_info"] += number[0] > 1 ? "up to " + number[0] + ' ' + type + 's' : "a " + type; - if(number[1] < number[0]) { - set["spell_info"] += ', but you\'ve only chosen ' + (number[0] - number[1]) + '!

    '; - } else { - set["spell_info"] += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen one!

    '; - } - } - }); - } - setCharmancerText(set); - }); -}); - -/* Info Button Listeners */ -on("clicked:info_race", function(eventinfo) { - var data = getCharmancerData(); - var race = data["l1-race"] && data["l1-race"].values.race ? data["l1-race"].values.race : "Rules:Races"; - changeCompendiumPage("sheet-race-info", race); -}); - -on("clicked:info_subrace", function(eventinfo) { - var data = getCharmancerData(); - var subrace = data["l1-race"] && data["l1-race"].values.subrace ? data["l1-race"].values.subrace : data["l1-race"].values.race; - changeCompendiumPage("sheet-race-info", subrace); -}); - -on("clicked:info_class", function(eventinfo) { - var data = getCharmancerData(); - var oclass = data["l1-class"] && data["l1-class"].values.class ? data["l1-class"].values.class : "Rules:Classes"; - changeCompendiumPage("sheet-class-info", oclass); -}); - -on("clicked:info_subclass", function(eventinfo) { - var data = getCharmancerData(); - var osubclass = data["l1-class"] && data["l1-class"].values.subclass ? data["l1-class"].values.subclass : data["l1-class"].values.class; - changeCompendiumPage("sheet-class-info", osubclass); -}); - -on("mancerfinish:l1-mancer", function(eventinfo) { - var doAllDrops = function(dropArray, callback) { - getAttrs(["character_id"], function(v) { - _.each(stats.totals, function(scores, name) { - v[name + "_base"] = scores.total; - v[name + "_mod"] = scores.mod; - }); - v.base_level = "1"; - v.npc = "0"; - v["class_resource_name"] = ""; - v["other_resource_name"] = ""; - var update = {}; - var callbacks = []; - var totalDrops = dropArray.length; - var x = 0; - callbacks.push(update_class); - callbacks.push(update_race_display); - get_repeating_data(function(repeating) { - _.each(dropArray, function(page) { - page.data.Category = page.data.Category.replace("@@!!@@", ""); - var dropUpdate = processDrop(page, v, repeating, true); - callbacks = callbacks.concat(dropUpdate.callbacks); - repeating.prof_names = _.uniq(repeating.prof_names.concat(dropUpdate.prof_names)); - update = _.extend(update, dropUpdate.update); - x++; - setCharmancerText({"mancer_progress" :'
    '}); - }); - - callbacks.push( function() {update_ac();} ); - callbacks.push( function() {update_weight();} ); - callbacks.push(callback); - console.log(update); - setAttrs(update, {silent: true}, function() { - setCharmancerText({"mancer_progress" :'
    '}); - _.each(callbacks, function(callback) { - callback(); - }); - });/**/ - }); - }); - }; - var getOtherDrops = function(pagedata) { - var results = []; - if(pagedata["data-Equipment"]) { - console.log("ADDING ADDITIONAL ITEMS:"); - var json = {}; - try { - json = JSON.parse(pagedata["data-Equipment"]); - } catch(e) { - json = pagedata["data-Equipment"]; - } - var newItems = makeItemData(json.default); - results = results.concat(newItems); - } - if(pagedata["data-Bundle"]) { - console.log("ADDING ADDITIONAL ITEMS (FROM BUNDLE):"); - var json = {}; - try { - json = JSON.parse(pagedata["data-Bundle"]); - } catch(e) { - json = pagedata["data-Bundle"]; - } - var newItems = makeItemData(json); - results = results.concat(newItems); - } - return results; - }; - var getAllPages = function(pageArray, callback) { - var getNames = []; - _.each(pageArray, function(page){ - if(page.name) { - getNames.push(page.name); - } else { - getNames.push(page); - } - }); - getCompendiumPage(getNames, function(data) { - data = removeDuplicatedPageData(data); - var nextGet = []; - if (getNames.length === 1) { data = {0:data} }; //Fix single spell selections failing. - _.each(data, function(page, index) { - var pagedata = false; - _.each(pageArray, function(arrayData) { - if(arrayData.name.toLowerCase() == (page.data.Category + ":" + page.name).toLowerCase()) { - pagedata = arrayData; - } - }); - if(pagedata && pagedata.data) { - page.data = _.extend(page.data, pagedata.data); - } - if(!page.id) page.data.Source = "Charactermancer"; - page.name = page.name.replace(/@@!!@@/g,""); // Hacky bugfix to prevent custom names from matching unavailable content - nextGet = nextGet.concat(getOtherDrops(page.data)); - if(page.data["data-Starting Cubil"] && !noEquipmentDrop) { - set["cu"] += parseInt(page.data["data-Starting Cubil"]); - } - allPageData.push(page); - }); - - if(nextGet.length > 0) { - console.log("DOING ANOTHER GET!!"); - getAllPages(nextGet, callback); - } else { - callback(); - } - - }); - }; - var makeItemData = function(items) { - if (noEquipmentDrop) { - return []; - } else { - var itemArray = []; - var splitItems = []; - _.each(items, function(item) { - item = item.split(","); - _.each(item, function(splitItem) { - splitItems.push(splitItem.trim()); - }); - }) - _.each(splitItems, function(item) { - var itemname = item.split("(")[0].trim().replace("Items:", ""); - itemname = itemname.substring(0,4) == "and " ? itemname.substr(4) : itemname; - var itemdata = {name:"Items:" + itemname, data:{}} - if(item.includes("(")) { - var par = item.split("(")[1].split(")")[0]; - if( !isNaN(parseInt(par)) ) { - itemdata.data["itemcount"] = parseInt(par); - } - } - if(itemname != "") { - itemArray.push(itemdata); - } - }); - return itemArray; - } - }; - var eraseRepeating = function(sectionArray, callback) { - var thisSection = sectionArray.shift(); - getSectionIDs(thisSection, function(itemids) { - _.each(itemids, function(item) { - removeRepeatingRow("repeating_" + thisSection + "_" + item); - }); - if(sectionArray.length > 0) { - eraseRepeating(sectionArray, callback); - } else { - callback(); - } - - }); - }; - var noEquipmentDrop = false; - var startTime = Date.now(); - var allPageData = []; - if(eventinfo.data["l1-equipment"]) { - noEquipmentDrop = eventinfo.data["l1-equipment"].values["equipment_type"] == "cubil"; - } - var data = eventinfo.data; - var stats = recalcData(data); - var profs = getProficiencies(data, "finish"); - var spells = knownPowers(data); - var blobs = getRelevantBlobs(data, "1", "l1"); - var customtraits = {race: [], subrace: [], class: [], subclass: [], background: []}; - var equipment = []; - var silentset = {}; - var silentattrs = ["class_resource_name", "class_resource", "class_resource_max", "other_resource_name", "other_resource", "other_resource_max", "other_resource_itemid", "class", "class_display", "subclass", "hitdietype", "hitdie_final", "race", "subrace", "race_display", "custom_class", "cust_classname"]; - var clearset = {}; - var clearattrs = ["hp", "hp_max", "size", "speed", "cu", "alignment", "global_damage_mod_flag", "spellcasting_ability", "cust_hitdietype", "cust_spellslots", "cust_spellcasting_ability", "ac", "jack_bonus", "jack_attr", "death_save_bonus", "weighttotal", "initiative_bonus", "hit_dice", "hit_dice_max", "pb", "jack", "caster_level", "spell_attack_mod", "spell_attack_bonus", "spell_save_dc", "passive_wisdom", "custom_ac_base", "custom_ac_part1", "custom_ac_part2", "custom_ac_shield", "background", "global_ac_mod_flag", "global_attack_mod_flag", "global_save_mod_flag", "global_skill_mod_flag"]; - var classname = ""; - var set = {cu: 0}; - var allDrops = []; - var currentDrop = 0; - var totalDrops = 1; - var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "astrophysics", "lore", "investigation", "xenobiology", "computers", "mechanics", "insight", "medicine", "perception", "survival", "deception", "intimidation", "performance", "persuasion", "piloting"]; - var allAbilities = abilityList.map(function(x) {return x.toLowerCase()}); - var eraseSections = ["attack", "inventory", "traits", "resource", "proficiencies", "tool", "damagemod", "spell-prime", "hpmod", "acmod", "tohitmod", "savemod", "skillmod"]; - console.log(blobs); - console.log(spells); - for(var x=1; x<=9; x++) { - eraseSections.push("spell-" + x); - } - //first set is silent to make sure certain things don't trigger workers - _.each(silentattrs, function(attr) { - silentset[attr] = ""; - }); - //Set up setAttrs to erase some fields - _.each(clearattrs, function(attr) { - clearset[attr] = ""; - }); - clearset["halflingluck_flag"] = "0"; - clearset["tab"] = "core"; - clearset["base_level"] = "1"; - clearset["level"] = "1"; - clearset["armorwarningflag"] = "hide"; - clearset["customacwarningflag"] = "hide"; - clearset["custom_ac_flag"] = "0"; - clearset["custom_attack_flag"] = "0"; - clearset["custom_ac_flag"] = "0"; - clearset["multiclass1_flag"] = "0"; - clearset["multiclass1_lvl"] = "1"; - clearset["multiclass2_flag"] = "0"; - clearset["multiclass2_lvl"] = "1"; - clearset["multiclass3_flag"] = "0"; - clearset["multiclass3_lvl"] = "1"; - clearset["custom_class"] = "0"; - _.each(allSkills, function(skill) { - clearset[skill + "_prof"] = "";//0 - clearset[skill + "_type"] = "";//1 - clearset[skill + "_bonus"] = ""; - }); - _.each(allAbilities, function(ability) { - clearset[ability + "_save_prof"] = ""; - clearset[ability + "_save_bonus"] = ""; - clearset[ability + "_bonus"] = "0"; - clearset["cust_" + ability + "_save_prof"] = ""; - }); - clearset["personality_traits"] = ""; - _.each(["ideal", "bond", "flaw"], function(type) { - clearset[type + "s"] = ""; - }); - //Set up second setAttrs with ability scores - _.each(stats.totals, function(scores, name) { - clearset[name + "_base"] = scores.total; - }); - // Build new blobs for traits with inputs, collect custom traits and languages - _.each(data, function(slide, pagename) { - _.each(slide.values, function(value, name) { - if(name.substr(-11) == "trait_input") { - var sectionid = name.substring(0, name.length - 6); - var thisblob = {}; - var thistrait = {}; - thistrait.Name = slide.values[sectionid + "_name"].replace(/{{Input}}/g, value); - thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"].replace(/{{Input}}/g, value) : ""; - thisblob.Traits = JSON.stringify([thistrait]); - blobs.names[slide.values[sectionid + "_section"]].push(sectionid); - slide.data[slide.values[sectionid + "_section"]].blobs[sectionid] = thisblob; - } - if(name.split("_")[2] == "custom" && name.substr(-10) == "trait_name") { - var sectionid = name.substring(0, name.length - 5); - var thistrait = {}; - thistrait.Name = slide.values[sectionid + "_name"]; - thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"] : ""; - customtraits[name.split("_")[3]].push(thistrait); - } - if(value == "custom" && name.substr(-18) == "proficiency_choice") { - var sectionid = name.substring(0, name.length - 7); - if(slide.values[sectionid + "_custom"] && slide.values[sectionid + "_type"]) { - profs.all[slide.values[sectionid + "_type"]].push(slide.values[sectionid + "_custom"]) - } - } - }) - }); - //Set up drops. start with class, subclass, race, subrace, background - if(data["l1-class"].values["class_name"] && !data["l1-class"].data.class) { - classname = removeExpansionInfo(data["l1-class"].values["class_name"]); - var customClass = {name: classname, data: {Category: "Classes", blobs:{}}}; - set["custom_class"] = "1"; - set["cust_classname"] = data["l1-class"].values["class_name"]; - set["cust_hitdietype"] = data["l1-class"].values["custom_hit_die"]; - if(data["l1-class"].values["custom_class_spell_ability"]) { - set["cust_spellslots"] = "full"; - set["cust_spellcasting_ability"] = "@{" + data["l1-class"].values["custom_class_spell_ability"].toLowerCase() + "_mod}+"; - } - if(customtraits.class.length > 0) { - customClass.data.theseblobs = ["customblob"]; - customClass.data.blobs.customblob = {Traits: JSON.stringify(customtraits.class)}; - } - _.each(allAbilities, function(ability) { - if(data["l1-class"].values[ability.toLowerCase() + "_save"]) { - set["cust_" + ability + "_save_prof"] = "(@{pb})"; - } - }); - allPageData.push(customClass); - } else { - //allDrops.push(data["l1-class"].values.class); - classname = removeExpansionInfo( _.last(data["l1-class"].values.class.split(":")) ); - var thisdata = {name: classname, data: data["l1-class"].data.class}; - thisdata.data.theseblobs = blobs.names.class; - allPageData.push(thisdata); - }; - //set up subclass drop - if(data["l1-class"].values.subclass && data["l1-class"].values["subclass_name"]) { - var customSubclass = {name: removeExpansionInfo (data["l1-class"].values["subclass_name"] ), data: {Category: "Subclasses", blobs:{}}}; - if(customtraits.subclass.length > 0) { - customSubclass.data.theseblobs = ["customblob"]; - customSubclass.data.blobs.customblob = {Traits: JSON.stringify(customtraits.subclass)}; - } - allPageData.push(customSubclass); - } else if(data["l1-class"].values.subclass) { - //allDrops.push(data["l1-class"].values.subclass); - var thisdata = {name: removeExpansionInfo( _.last(data["l1-class"].values.subclass.split(":")) ), data: data["l1-class"].data.subclass}; - thisdata.data.theseblobs = blobs.names.subclass; - allPageData.push(thisdata); - }; - //set up race drop - if(data["l1-race"].values["race_name"] && !data["l1-race"].data.race) { - var customRace = {name: removeExpansionInfo(data["l1-race"].values["race_name"]), data: {Category: "Races", blobs:{}}}; - if(data["l1-race"].values.size) { - customRace.data.Size = data["l1-race"].values.size; - } - if(data["l1-race"].values.speed) { - customRace.data.Speed = data["l1-race"].values.speed; - } - if(customtraits.race.length > 0) { - customRace.data.theseblobs = ["customblob"]; - customRace.data.blobs.customblob = {Traits: JSON.stringify(customtraits.race)}; - } - allPageData.push(customRace); - } else { - //allDrops.push(data["l1-race"].values.race); - var thisdata = {name: removeExpansionInfo(_.last(data["l1-race"].values.race.split(":"))), data: data["l1-race"].data.race}; - thisdata.data.theseblobs = blobs.names.race; - allPageData.push(thisdata); - } - //set up subrace drop - if(data["l1-race"].values.subrace && data["l1-race"].values["subrace_name"]) { - var customSubrace = {name: removeExpansionInfo(data["l1-race"].values["subrace_name"]), data: {Category: "Subraces", blobs:{}}}; - customSubrace.data["data-Parent"] = data["l1-race"].values.race.split(":")[1]; - if(data["l1-race"].values.speed) { - customSubrace.data.Speed = data["l1-race"].values.speed; - } - if(customtraits.subrace.length > 0) { - customSubrace.data.theseblobs = ["customblob"]; - customSubrace.data.blobs.customblob = {Traits: JSON.stringify(customtraits.subrace)}; - } - allPageData.push(customSubrace); - } else if(data["l1-race"].values.subrace) { - //allDrops.push(data["l1-race"].values.subrace); - var thisdata = {name: removeExpansionInfo(_.last(data["l1-race"].values.subrace.split(":"))), data: data["l1-race"].data.subrace}; - thisdata.data.theseblobs = blobs.names.subrace; - allPageData.push(thisdata); - }; - //set up feat drop - if(data["l1-feat"] && data["l1-feat"].values.feat) { - var feat = {name: data["l1-feat"].values.feat, data: {Properties: "1st Level"}}; - allDrops.push(feat); - } - //set up background drop - if(data["l1-background"].values.background) { - if(data["l1-background"].values.background == "Rules:Backgrounds") { - var customBg = {name: removeExpansionInfo(data["l1-background"].values["background_name"]), data: {Category: "Backgrounds", blobs:{}}}; - if(customtraits.background.length > 0) { - customBg.data.theseblobs = ["customblob"]; - customBg.data.blobs.customblob = {Traits: JSON.stringify(customtraits.background)}; - } - allPageData.push(customBg); - } else { - var thisdata = {name: removeExpansionInfo(_.last(data["l1-background"].values.background.split(":"))), data: data["l1-background"].data.background}; - thisdata.data.theseblobs = blobs.names.background; - allPageData.push(thisdata); - } - } - - //Now add proficiency drops - _.each(["Armor", "Language", "Tool", "Weapon"], function(proftype) { - _.each(profs.all[proftype], function(prof) { - var profdata = {name: "Proficiencies:" + prof, data: {Type: proftype}} - if(profs.all.Expertise.indexOf(prof) != -1) { - profdata.data["toolbonus_base"] = "(@{pb}*2)"; - allDrops.unshift(profdata); - } else { - allDrops.push(profdata); - } - }); - }); - - //Next, add spell drops - _.each(spells.all, function(spell) { - console.log(spell); - var spelldata = {name: "Powers:" + spell.Name}; - spelldata.data = {"spellcasting_ability": spell.Ability}; - if(spell.Source == "race") { - spelldata.data.spellclass = "Racial"; - } else { - spelldata.data.spellclass = classname; - }; - allDrops.push(spelldata); - }); - //Add equipment choice drops unless starting cubil was chosen - if (data["l1-equipment"].values["equipment_type"] != "cubil") { - _.each(data["l1-equipment"].values, function(val, name) { - if(name.includes("background_equipment_choice")) { - equipment = equipment.concat(val.split(" and ")); - } - }); - _.each(blobs.all, function(blob) { - if(blob.Equipment) { - var blobstuff = blob.Equipment; - try { - blobstuff = JSON.parse(blob.Equipment); - } catch (e) {} - equipment = equipment.concat(blobstuff); - } - }) - } - - //Here there is a window to modify the hitpoints, however additional hitpoints inserted here would not appear on charatermancer header - //By Miguel - - //Set up the final setAttrs() - set["alignment"] = data["l1-race"].values.alignment || ""; - set["hp"] = stats.hp; - set["hp_max"] = stats.hp; - set["l1mancer_status"] = "completed"; - set["options-class-selection"] = "0"; - if(data["l1-equipment"].values["equipment_type"] == "class") { - _.each(data["l1-equipment"].values, function(val, name) { - if(name.includes("class_equipment_choice")) { - equipment = equipment.concat(val.split(" and ")); - } - }); - } else if(data["l1-equipment"].values["equipment_type"] == "cubil" && data["l1-equipment"].values["starting_cubil"]) { - set["cu"] = parseInt(data["l1-equipment"].values["starting_cubil"]); - } - //Add the bio info - if(data["l1-bio"]) { - _.each(["character_name", "age", "height", "weight", "eyes", "hair", "skin"], function(type) { - if(data["l1-bio"].values[type]) { - set[type] = data["l1-bio"].values[type] || ""; - } - }); - } - //Add skill proficiencies - _.each(_.uniq(profs.all.Skill.concat(profs.all.Expertise)), function(prof) { - var profName = prof.toLowerCase().replace(/ /g, "_"); - set[profName + "_prof"] = "(@{pb}*@{" + profName + "_type})"; - if(profs.all.Expertise.indexOf(prof) != -1) { - set[profName + "_type"] = 2; - } - }); - //Add background traits - if(data["l1-background"].values["background_personality_choice1"] || data["l1-background"].values["background_personality_choice2"]) { - var choice1 = data["l1-background"].values["background_personality_choice1"] || false; - var choice2 = data["l1-background"].values["background_personality_choice2"] || false; - choice1 = choice1 || choice2; - if(choice1) { - set["personality_traits"] = choice1; - } - if(choice2) { - set["personality_traits"] += "\n\n" + choice2; - } - set["options-flag-personality"] = 0; - } - _.each(["ideal", "bond", "flaw"], function(type) { - if(data["l1-background"].values["background_" + type + "_choice"]) { - set[type + "s"] = data["l1-background"].values["background_" + type + "_choice"]; - set["options-flag-" + type + "s"] = 0; - } - }); - if(data["l1-background"].values["background_detail_choice"]) { - set["background"] = removeExpansionInfo(_.last(data["l1-background"].values["background"].split(":"))) + " (" + data["l1-background"].values["background_detail_choice"] + ")"; - } - allDrops = allDrops.concat(makeItemData(equipment)); - totalDrops += allDrops.length; - _.each(allPageData, function(page) { - allDrops = allDrops.concat(getOtherDrops(page.data)); - }); - - //erase all repeating sections - eraseRepeating(eraseSections, function() { - setCharmancerText({"mancer_progress" :'
    '}); - //first set is silent to prevent unwanted sheet workers - setAttrs(silentset, {silent:true}, function() { - setCharmancerText({"mancer_progress" :'
    '}); - //reset remaining attributes, and set ability scores/custom info - setAttrs(clearset, function() { - setCharmancerText({"mancer_progress" :'
    '}); - getAllPages(allDrops, function() { - setCharmancerText({"mancer_progress" :'
    '}); - doAllDrops(allPageData, function() { - console.log("DOING THE FINAL SET!!"); - setAttrs(set, function() { - setCharmancerText({"mancer_progress" :'
    '}); - update_class(); - organize_section_proficiencies(); - update_skills(allSkills); - update_attacks("all"); - var endTime = Date.now(); - console.log("Elapsed time: "); - console.log((endTime-startTime)/1000); - finishCharactermancer(); - }); - }); - }); - }); - }); - }); - /* */ -}); - -/*********************************************************************/ -/****** LEVEL UP MANCER WORKERS ******/ -/*********************************************************************/ - -//Helper function to update the text in the top bar -var recalcLpData = function(blobs) { - var mancerdata = getCharmancerData(); - var abilities = getAbilityTotals(mancerdata, blobs); - var update = {}; - _.each(abilityList, function(ability) { - var selector = "attr-container .sheet-" + ability.toLowerCase() + "_total"; - update[selector] = abilities[ability.toLowerCase()] + " | " + abilities[ability.toLowerCase() + "_mod"]; - }); - update["hit_points"] = getHpTotal(mancerdata, blobs, abilities); - setCharmancerText(update); -}; -//Helper function to get ability totals, including asi -var getAbilityTotals = function(mancerdata, blobs) { - mancerdata = mancerdata || getCharmancerData(); - blobs = blobs || getAllLpBlobs(mancerdata, true); - var abilities = mancerdata["lp-welcome"].values["previous_abilities"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_abilities"]) : {}; - var lcAbilities = abilityList.map(function(x) {return x.toLowerCase()}); - //Set previous scores first - _.each(lcAbilities, function(ability) { - abilities[ability + "_previous"] = abilities[ability]; - abilities[ability + "_previous_mod"] = abilities[ability + "_mod"]; - abilities[ability + "_maximum"] = abilities[ability + "_maximum"] ? parseInt(abilities[ability + "_maximum"]) : 20; - }); - _.each(blobs.all, function(blob) { - if(blob["Ability Score Increase"]) { - var asi = JSON.parse(blob["Ability Score Increase"]); - _.each(asi, function(increase, ability) { - abilities[ability.toLowerCase()] += parseInt(increase); - }); - } - if(blob["Ability Score Max"]) { - var max = JSON.parse(blob["Ability Score Max"]); - _.each(max, function(increase, ability) { - abilities[ability.toLowerCase() + "_maximum"] = parseInt(increase); - }); - } - }) - //Now add asi if it exists - if(mancerdata["lp-asi"]) { - _.each(mancerdata["lp-asi"].repeating, function(repid) { - if(repid.substr(31) == "asi-row" && mancerdata["lp-asi"].values[repid + "_switch"] != "feat") { - _.each(lcAbilities, function(ability) { - abilities[ability] += mancerdata["lp-asi"].values[repid + "_" + ability] ? parseInt(mancerdata["lp-asi"].values[repid + "_" + ability]) : 0; - abilities[ability + "_mod"] = Math.floor((abilities[ability] - 10)/2); - }); - } - }); - } - return abilities; -}; -//Helper function to get hp total -var getHpTotal = function(mancerdata, blobs, abilities) { - mancerdata = mancerdata || getCharmancerData(); - var leveldata = getLevelingData(mancerdata); - var abilities = abilities || getAbilityTotals(mancerdata, blobs); - var previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; - var prev_repeat = JSON.parse(mancerdata["lp-welcome"].values["previous_repeating"]), hpmod = prev_repeat["hpmod"]; - var newhp = 0; - var additionalhp = 0; - var totalpreviouslevel = parseInt(previous["base_level"]); - for(var x=1; x<=3; x++) { - if(previous["multiclass" + x + "_flag"] != "0") totalpreviouslevel += parseInt(previous["multiclass" + x + "_lvl"]); - }; - - //Calculate HP Mods things like Hill Dwarf - let levelbonus = 0; - _.each(hpmod, (mod) => { - const bonus = mod["mod"]; - if (mod["levels"] === "total") { - levelbonus += parseInt(bonus); - }; - }); - - //Add up the hp per level - _.each(leveldata, function(level) { - newhp += level.addhp > 0 ? level.addhp + (level.addlevel * abilities["constitution_mod"]) + (level.addlevel * levelbonus) : 0; - }); - - additionalhp = totalpreviouslevel * (abilities["constitution_mod"] - abilities["constitution_previous_mod"]) - return parseInt(previous["hp_max"]) + newhp + additionalhp; -}; - -var recalcButtons = function(mancerdata, thispage) { - mancerdata = mancerdata || getCharmancerData(); - var buttons = ""; - var buttoninfo = { - welcome: "charmancer-start", - levels: "levels-u", - choices: "features-u", - asi: "asi-u", - spells: "spells-u", - summary: "review-u" - }; - _.each(buttoninfo, function(translation, page) { - let here = "lp-" + page == thispage; - let disabled = false; - if(thispage === "lp-spellchoice") disabled = true; - if(!here && page !== "levels" && thispage === "lp-welcome") disabled = true; - if(mancerdata["lp-levels"]) { - if (!here && page === "asi" && mancerdata["lp-levels"].values.asi !== "true") disabled = true; - if (!here && page === "spells" && mancerdata["lp-levels"].values.spells !== "true") disabled = true; - } else { - if (!here && (page === "asi" || page === "spells")) disabled = true; - } - buttons += "
  • "; - }); - buttons += "
  • "; - setCharmancerText({steps: buttons}); -} -//Worker for every page to add topbar/buttons -on("page:lp-welcome page:lp-levels page:lp-choices page:lp-asi page:lp-spells page:lp-summary page:lp-spellchoice", function(eventinfo) { - var mancerdata = getCharmancerData(); - recalcButtons(mancerdata, eventinfo.triggerName); - if(eventinfo.triggerName != "lp-welcome" && eventinfo.triggerName != "lp-summary") { - addRepeatingSection("topbar-holder", "leveler-topbar"); - if(eventinfo.triggerName != "lp-choices" && eventinfo.triggerName != "lp-spells") recalcLpData(); - getProficiencies(mancerdata, eventinfo.currentStep); - } - getAttrs(["licensedsheet"], function(v) { - if("licensedsheet" in v && v.licensedsheet === "1") { - setCharmancerText({"sheet-licensedsheet-flag":"true"}); - } - }); -}); - -on("page:lp-welcome", function(eventinfo) { - var getInfo = (sections, callback, results) => { - results = results || {}; - if(sections.length > 0) { - var section = sections.pop(); - getSectionIDs(section, function(ids) { - results[section] = ids; - getInfo(sections, callback, results); - }); - } else { - callback(results); - } - }; - var capitalize = function(string) { - return string.split(" ").map((x) => { - x = x.toLowerCase(); - return x[0].toUpperCase() + x.substr(1, x.length); - }).join(" "); - }; - var spellSections = ["spell-prime"]; - var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "astrophysics", "lore", "investigation", "xenobiology", "computers", "mechanics", "insight", "medicine", "perception", "survival", "deception", "intimidation", "performance", "persuasion", "piloting"]; - var skillget = []; - for(var x=1; x<=9; x++) { - spellSections.push("spell-" + x); - } - - getInfo(spellSections, function(results) { - var getList = []; - _.each(results, function(sectionids, sectionname) { - _.each(sectionids, function(spellid) { - getList.push("repeating_" + sectionname + "_" + spellid + "_spellname"); - getList.push("repeating_" + sectionname + "_" + spellid + "_spellclass"); - getList.push("repeating_" + sectionname + "_" + spellid + "_spelllevel"); - getList.push("repeating_" + sectionname + "_" + spellid + "_spellsource"); - }); - }); - getAttrs(getList, function(attrs) { - var spellInfo = {}; - _.each(attrs, function(data, name) { - var namearray = name.split("_"); - var thisattr = namearray.pop(); - var thisname = namearray.join("_"); - spellInfo[thisname] = spellInfo[thisname] || {}; - spellInfo[thisname][thisattr] = data; - }); - setAttrs({spellinfo: JSON.stringify(spellInfo)}); - }); - }); - getAttrs(["strength", "strength_mod", "dexterity", "dexterity_mod", "constitution", "constitution_mod", "intelligence", "intelligence_mod", "wisdom", "wisdom_mod", "charisma", "charisma_mod", "strength_maximum", "dexterity_maximum", "constitution_maximum", "intelligence_maximum", "wisdom_maximum", "charisma_maximum"], function(attrs) { - _.each(attrs, function(x, y) { - attrs[y] = parseInt(x); - }); - setAttrs({previous_abilities: JSON.stringify(attrs)}); - }); - getAttrs(["class", "subclass", "base_level", "multiclass1_flag", "multiclass2_flag", "multiclass3_flag", "multiclass1", "multiclass1_lvl", "multiclass1_subclass", "multiclass2", "multiclass2_lvl", "multiclass2_subclass", "multiclass3", "multiclass3_lvl", "multiclass3_subclass", "hp_max", "class_resource_name", "other_resource_name", "speed", "race", "subrace", "background", "custom_class", "cust_classname", "cust_hitdietype"], function(v) { - let set = {}; - set["previous_attributes"] = JSON.stringify(v); - set["lp-race"] = "Races:" + v.race; - set["lp-subrace"] = "Subraces:" + v.subrace; - set["lp-background"] = "Backgrounds:" + v.background.split("(")[0].trim(); - setAttrs(set); - }); - _.each(allSkills, function(skill) { - skillget.push(skill + "_prof"); - skillget.push(skill + "_type"); - }); - getAttrs(skillget, function(v) { - var proficiencies = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": [], "Expertise": []}; - _.each(allSkills, function(skill) { - if(v[skill + "_prof"] !== "0") { - proficiencies.Skill.push(capitalize(skill.replace(/_/g, " "))); - } - if(v[skill + "_type"] !== "1" && v[skill + "_prof"] !== "0") { - proficiencies.Expertise.push(capitalize(skill.replace(/_/g, " "))); - } - }); - getSectionIDs("tool", function(ids) { - var getList = []; - _.each(ids, function(id) { - getList.push("repeating_tool_" + id + "_toolname"); - getList.push("repeating_tool_" + id + "_toolbonus_base"); - }); - getAttrs(getList, function(v) { - _.each(ids, function(id) { - proficiencies.Tool.push(v["repeating_tool_" + id + "_toolname"]); - if(v["repeating_tool_" + id + "_toolbonus_base"] == "(@{pb}*2)") { - proficiencies.Expertise.push(v["repeating_tool_" + id + "_toolname"]); - }; - }); - getSectionIDs("proficiencies", function(ids) { - var getList = []; - _.each(ids, function(id) { - getList.push("repeating_proficiencies_" + id + "_name"); - getList.push("repeating_proficiencies_" + id + "_prof_type"); - }); - getAttrs(getList, function(v) { - _.each(ids, function(id) { - proficiencies[capitalize(v["repeating_proficiencies_" + id + "_prof_type"])].push(v["repeating_proficiencies_" + id + "_name"]); - }); - setAttrs({previous_proficiencies: JSON.stringify(proficiencies)}); - }); - }); - }); - }); - }); - get_repeating_data(function(repeating) { - console.log("REPEATING"); - console.log(repeating); - setAttrs({previous_repeating: JSON.stringify(repeating)}); - }); -}); - -on("mancerchange:lp-race mancerchange:lp-subrace mancerchange:lp-background", function(eventinfo) { - getCompendiumPage(eventinfo.newValue, function(results) {}); -}); - -on("page:lp-levels", function(eventinfo) { - const mancerdata = getCharmancerData(); - const previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; - let levelclass = ["class1"]; - let set = {}; - let update = {}; - let baseclass = previous["class"]; - let classcompend = ["Classes:"] + previous["class"]; - let custom_lock = 0; - - if(previous["custom_class"] && previous["custom_class"] == 1) { - baseclass = previous["cust_classname"]; - classcompend = "Rules:Classes"; - custom_lock = 1; - set["class1_addlevel"] = 0; - }; - - set["lockcustomclass"] = custom_lock; - set["class1"] = 'Classes:' + baseclass; - set["class1_currentlevel"] = previous["base_level"]; - update["class1_selector"] = '' + baseclass + ''; - if (previous["subclass"] && previous["custom_class"] === "0") { - update[`subclass1_selector`] = `
    ` + previous["subclass"] + `
    `; - if((mancerdata["lp-levels"] && mancerdata["lp-levels"].values["class1_subclass"] !== "Subclasses" + previous["subclass"]) - || !mancerdata["lp-levels"]) set["class1_subclass"] = "Subclasses:" + previous["subclass"]; - }; - const multiclass = parseInt(previous["multiclass1_flag"]) + parseInt(previous["multiclass2_flag"]) + parseInt(previous["multiclass3_flag"]); - set["multiclass"] = mancerdata["lp-levels"] && mancerdata["lp-levels"].values["multiclass"] ? mancerdata["lp-levels"].values["multiclass"] : multiclass; - set["multiclass_initial"] = multiclass; - - for (x = 1; x <= 3; x++) { - const x1 = x + 1; - if(previous[`multiclass${x}_flag`] === "1") { - set[`class${x1}`] = "Classes:" + previous[`multiclass${x}`]; - set[`class${x1}_currentlevel`] = previous[`multiclass${x}_lvl`]; - update[`class${x1}_selector`] = `${previous[`multiclass${x}`]}`; - if (previous[`multiclass${x}_subclass`]) { - set[`class${x1}_subclass`] = "Subclasses:" + previous[`multiclass${x}_subclass`]; - update[`subclass${x1}_selector`] = `
    ` + previous[`multiclass${x}_subclass`] + `
    `; - }; - levelclass.push(`class${x1}`); - } else { - set[`class${x1}_currentlevel`] = 0; - }; - - //This is handling classes that have been multiclassed into while in the leveler - if (mancerdata["lp-levels"] && mancerdata["lp-levels"].values[`class${x1}`] && parseInt(mancerdata["lp-levels"].values[`class${x1}_addlevel`]) > 0 && !levelclass.includes(`class${x1}`)) { - levelclass.push(`class${x1}`); - }; - }; - - setAttrs(set, () => { update_hp(true, levelclass) }); - setCharmancerText(update); - - changeCompendiumPage("sheet-levels-info", classcompend); -}); - -on("mancerchange:class1 mancerchange:class2 mancerchange:class3 mancerchange:class4", function(eventinfo) { - if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); - const mancerdata= getCharmancerData(); - const leveldata = mancerdata["lp-levels"]; - const levelclass= eventinfo.sourceAttribute; - const previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; - - getCompendiumPage(eventinfo.newValue, function(p) { - p = removeDuplicatedPageData(p); - const data = p.data; - const class_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Classes" ? eventinfo.newValue.split(":")[1] : false; - const subclass_name = data["Subclass Name"]; - let set = {}; - let update = {}; - - if (levelclass === "class1" && (!previous["custom_class"] || previous["custom_class"] == 0)) { - set[`${levelclass}_addlevel`] = leveldata.values[`${levelclass}_addlevel`] ? leveldata.values[`${levelclass}_addlevel`] : 1; - } else { - set[`${levelclass}_addlevel`] = leveldata.values[`${levelclass}_addlevel`] ? leveldata.values[`${levelclass}_addlevel`] : 0; - }; - - set[`${levelclass}_hitdie`] = data["Hit Die"]; - update[`sub${levelclass}_name`] = `

    ${subclass_name}

    `; - - //Need to add a check here if a previous subclass value exists, skip this part if so. - if(class_name) { - var subOptions = {show_source: true}; - let reset = {}; - reset[levelclass + "_subclass"] = ""; - //setCharmancerText(reset) - - (eventinfo.sourceType != "player") ? subOptions.silent = true : subOptions.selected = ""; - - setCharmancerOptions(levelclass + "_subclass","Category:Subclasses data-Parent:" + class_name, subOptions, function(values) { - }); - }; - - const presets = [leveldata.values.class1, leveldata.values.class2, leveldata.values.class3, leveldata.values.class4]; - for (x = 2; x <= 4; x++) { - disableCharmancerOptions(`class${x}`, presets); - }; - - setCharmancerText(update); - setAttrs(set, function() { - let set = {}; - set[eventinfo.sourceAttribute] = eventinfo.newValue; - setAttrs(set, {silent: true}); - }); - }); -}); - - //Trigger a change event when subclass changes -["class1", "class2", "class3", "class4"].forEach(levelclass => { - on(`mancerchange:${levelclass}_subclass`, (eventinfo) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const repeating = mancerdata["lp-levels"].repeating || []; - let set = {}; - - if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); - getCompendiumPage(eventinfo.newValue, function(data) { - data = removeDuplicatedPageData(data); - updateClassLevel(undefined, eventinfo.sourceAttribute.slice(0, 6)); - }); - - //This will update the results inputs with new hp values if the subclass is Draconic - if (eventinfo.sourceType !== "worker") { - const newValue = (eventinfo.newValue) ? eventinfo.newValue : " "; - const previousValue = (eventinfo.previousValue) ? eventinfo.previousValue : " "; - let repids = [], updateArray = []; - _.each(repeating, (repid) => { - if (repid.includes(`_${levelclass}-`)) { updateArray.push(repid); }; - }); - _.each(updateArray, (repid) => { - if (newValue.includes("Draconic Bloodline") || previousValue.includes("Draconic Bloodline")) { repids.push(repid); }; - }); - - if (repids.length > 0) { - updateButtons(levelclass, repids); - updateResults(levelclass, repids, eventinfo); - }; - }; - - setAttrs(set); - }); -}); - -on("mancerchange:class1_addlevel mancerchange:class2_addlevel mancerchange:class3_addlevel mancerchange:class4_addlevel", function(eventinfo) { - if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"]; - const levelclass = eventinfo.sourceAttribute.slice(0, 6); - const classlevel = (parseInt(eventinfo.newValue) || 0) + (parseInt(leveldata.values[`${levelclass}_currentlevel`]) || 0); - const subclasslevel = (leveldata.data[`${levelclass}`] && leveldata.data[`${levelclass}`]["data-Subclass Level"]) ? parseInt(leveldata.data[`${levelclass}`]["data-Subclass Level"]) : 3; - let set = {}; - let update = {}; - if(eventinfo.currentStep === "lp-levels") updateClassLevel(mancerdata, levelclass); - - set[`${levelclass}_classlevel`] = classlevel; - if (classlevel >= subclasslevel) { - update[`sub${levelclass}_warning`] = ``; - showChoices([`sub${levelclass}`]); - } else { - update[`sub${levelclass}_warning`] = `

    Subclass chosen at level ${subclasslevel}. Your total level is ${classlevel}.

    `; - hideChoices([`sub${levelclass}`]); - }; - - const level = (leveldata.values[`${levelclass}_currentlevel`] === undefined) ? 0 : leveldata.values[`${levelclass}_currentlevel`]; - update[`${levelclass}_update`] = `level ${level} + `; - update[`${levelclass}_tot`] = `= level ${classlevel}`; - - setCharmancerText(update); - setAttrs(set); -}); - -const updateClassLevel = function(mancerdata, levelclass) { - mancerdata = mancerdata || getCharmancerData(); - const leveling = getLevelingData(mancerdata); - const blobs = getAllLpBlobs(mancerdata, true); - const spells = getNewPowers(mancerdata, leveling, blobs); - let set = {}; - let update = {}; - let asi = false; - - for(let x = 0; x <= 4; x++) { - update["class" + x + "_features"] = ""; - update["subclass" + x + "_features"] = ""; - } - - _.each(leveling, function(thislevel) { - _.each(["", "sub"], function(prefix) { - let thiskey = "class" + thislevel.classnumber; - let final = []; - if(prefix === "sub") thiskey += "_subclass"; - _.each(blobs.names[thiskey], function(blobname) { - if(blobname.substr(0,30) == "Ability Score Increase - Level") { - asi = true; - final.push("Ability Score Increase"); - } else if ((thislevel[prefix + "class"].blobs[blobname].Title || thislevel[prefix + "class"].blobs[blobname].Description || thislevel[prefix + "class"].blobs[blobname].Traits) && !thislevel[prefix + "class"].blobs[blobname].Group) { - final.push(thislevel[prefix + "class"].blobs[blobname].Title || blobname); - } - }); - update[prefix + "class" + thislevel.classnumber + "_features"] = _.uniq(final).join(", "); - }); - }); - - set.asi = asi.toString(); - set.spells = spells.toString(); - - setCharmancerText(update); - setAttrs(set, () => { - update_hp(false, [`${levelclass}`]); - recalcButtons(undefined, "lp-levels"); - }); -}; - -//Build a function to update the level & class each time they change -on("mancerchange:class1_classlevel mancerchange:class2_classlevel mancerchange:class3_classlevel mancerchange:class4_classlevel", function(eventinfo) { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"]; - const class1levels = parseInt(leveldata.values["class1_classlevel"]) || 0, class2levels = parseInt(leveldata.values["class2_classlevel"]) || 0, class3levels = parseInt(leveldata.values["class3_classlevel"]) || 0, class4levels = parseInt(leveldata.values["class4_classlevel"]) || 0; - const characterlevel = class1levels + class2levels + class3levels + class4levels; - let update = {}; - let set = {}; - let end = []; - - for (x = 1; x <= 4; x++) { - let name = (leveldata.values[`class${x}`]) ? leveldata.values[`class${x}`].slice(8) : ""; - let lvl = parseInt(leveldata.values[`class${x}_classlevel`]) || 0; - (lvl > 0 && x === 1) ? end.push(`${name} ${lvl}`) : (lvl > 0 && x > 1) ? end.push(` ${name} ${lvl}`) : false; - }; - - update["levels_message"] = `

    Character will be level ${characterlevel} (${end})

    `; - set[`characterlevel`] = characterlevel; - - setAttrs(set); - setCharmancerText(update); -}); - -const recalcHpByLevel = (section) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const repeating = mancerdata["lp-levels"].repeating || []; - let set = {}; - const sections = section ? [section] : ["class1", "class2", "class3", "class4"]; - - _.each(sections, (levelclass) => { - let thishp = 0; - let first = true; - let rollflag = ""; - _.each(repeating, function(repid) { - if(repid.split("_")[2].split("-")[0] == levelclass && leveldata[`${repid}_result`]) { - let thisflag = leveldata[`${repid}_rollflag`] || "average"; - thishp += parseInt(leveldata[`${repid}_result`]); - if(first) { - rollflag = thisflag; - first = false; - } - if(rollflag !== thisflag) rollflag = "none"; - } - }); - set[`${levelclass}_hp_flag`] = rollflag; - set[`${levelclass}_addhp`] = thishp; - }); - setAttrs(set, () => {recalcLpData()}); -}; - -const update_hp = (firstTime, levelclass) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const repeating = mancerdata["lp-levels"].repeating || []; - - const updateByLevel = (firstTime, levelclass) => { - _.each(levelclass, (levelclass) => { - const current = leveldata[`${levelclass}_currentlevel`] ? parseInt(leveldata[`${levelclass}_currentlevel`]) : 0, - addlevel = leveldata[`${levelclass}_addlevel`] ? parseInt(leveldata[`${levelclass}_addlevel`]) : 0; - let levelarray = [], addarray = [], removearray = [], existing = []; - - for(let x = current+1; x<=current+addlevel; x++) { - levelarray.push(`${levelclass}-${x}`); - } - addarray = levelarray; - if(!firstTime) { - _.each(repeating, function(id) { - addarray = _.without(addarray, id.split("_")[2]); - }); - } - _.each(repeating, function(id) { - if(id.split("_")[2].split("-")[0] == levelclass && !levelarray.includes(id.split("_")[2]) && !existing.includes(id.split("_")[2])) { - removearray.push(id); - existing.push(id.split("_")[2]); - }; - }); - - if(addarray.length > 0) { - const last = addarray[addarray.length - 2]; - let set = {}, update = {}, rowid = "", repids = []; - _.each(repeating, (repid) => { - if(repid.split("_")[2] == `${levelclass}hprow`) rowid = repid; - }); - _.each(addarray, (repname) => { - addRepeatingSection(rowid, "hpbylevel", repname, function(repid) { - repids.push(repid); - if (repid.includes(last) || addarray.length == 1) { - updateResults(levelclass, repids); - updateButtons(levelclass, repids); - }; - update[`${repid} label`] = `Level ${_.last(repname.split("-"))}`; - if(repname == _.last(addarray)) { - setCharmancerText(update); - setAttrs(set, () => { - clearRepeatingSectionById(removearray, () => { - recalcHpByLevel(levelclass); - }); - }); - } - }); - }); - } else { - clearRepeatingSectionById(removearray, () => { - recalcHpByLevel(levelclass); - }); - }; - }); - }; - - if(firstTime) { - addRepeatingSection("class1_by-levels", "row", "class1hprow", function() { - addRepeatingSection("class2_by-levels", "row", "class2hprow", function() { - addRepeatingSection("class3_by-levels", "row", "class3hprow", function() { - addRepeatingSection("class4_by-levels", "row", "class4hprow", function() { - updateByLevel(true, levelclass); - }); - }); - }); - }); - } else { - updateByLevel(false, levelclass); - }; -}; - -const updateButtons = (levelclass, repids) => { - getAttrs(["licensedsheet"], function(v) { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const addlevel = leveldata[`${levelclass}_addlevel`] ? parseInt(leveldata[`${levelclass}_addlevel`]) : 0; - const hitdie = leveldata[`${levelclass}_hitdie`]; - let average = getDieAvg(hitdie), set = {}, bonus = hpBonus(levelclass), hpbonus = bonus[0], bonusSource = bonus[1]; - const templateBonus = (hpbonus > 0) ? `+${hpbonus}[${bonusSource}]` : ""; - const licensedsheet = (v.licensedsheet && v.licensedsheet === "1") ? "licensedsheet" : ""; - - _.each(repids, (repid) => { - set[`roll_${repid}_rollhp`] = `@{wtype}&{template:mancerhproll} {{title=Roll for HP Level ${_.last(repid.split(`${levelclass}-`))}}} {{r1=[[1${hitdie}${templateBonus}]]}} {{licensedsheet=${licensedsheet}}}`; - set[`roll_${repid}_averagehp`] = `@{wtype}&{template:mancerhproll} {{title=Average for HP Level ${_.last(repid.split(`${levelclass}-`))}}} {{a1=[[${average}${templateBonus}]]}} {{licensedsheet=${licensedsheet}}}`; - - if (addlevel && hitdie) { - let dice = []; - //Set the roll buttons - for (x = 1; x <= addlevel; x++) { dice.push(`{{r${x}=[[1${hitdie}${templateBonus}]]}}`); }; - set[`roll_${levelclass}_rollhp`] = `@{wtype}&{template:mancerhproll} {{title=Roll for HP}} ` + dice.join() - - //Set the average hp button - set[`roll_${levelclass}_averagehp`] = `@{wtype}&{template:mancerhproll} {{title=Average for HP}}{{a1=[[${average}${templateBonus}]]}} {{licensedsheet=${licensedsheet}}}` - }; - }); - - setAttrs(set); - }); -}; - -const hpBonus = (levelclass) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - - //HP Bonus from subclass hp mods like Draconic Bloodline for Sorcerers - const prev_repeat = JSON.parse(mancerdata["lp-welcome"].values["previous_repeating"]), hpmod = prev_repeat["hpmod"], subclass = leveldata[`${levelclass}_subclass`];; - let hpbonus = 0, bonusSource = []; - _.each(hpmod, (mod) => { - if (mod["levels"] === "base" && subclass && subclass.includes(mod["source"])) { - bonusSource.push(mod["source"]); - hpbonus += parseInt(mod["mod"]); - }; - }); - - //Multiclassing into Sorcerer Draconic needs to update buttons - if (subclass && subclass.includes("Draconic Bloodline") && !bonusSource.includes("Draconic Bloodline")) { - bonusSource.push("Draconic Bloodline"); - hpbonus += parseInt(1); - }; - - return [hpbonus, bonusSource]; -}; - -const updateResults = (levelclass, repids, eventinfo) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const hitdie = leveldata[`${levelclass}_hitdie`]; - let average = getDieAvg(hitdie), bonus = hpBonus(levelclass), hpbonus = bonus[0], set = {}; - - _.each(repids, (repid) => { - console.log(repid); - if (!leveldata[`${repid}_result`]) { - set[`${repid}_result`] = parseInt(average) + parseInt(hpbonus); - } else if (eventinfo && (eventinfo.newValue).includes("Draconic Bloodline")) { - set[`${repid}_result`] = parseInt(leveldata[`${repid}_result`]) + parseInt(hpbonus); - } else if (eventinfo && (eventinfo.previousValue).includes("Draconic Bloodline")) { - set[`${repid}_result`] = parseInt(leveldata[`${repid}_result`]) - 1; - } else { - false - }; - }); - - setAttrs(set); -}; - -const getDieAvg = (hitdie) => { - if(!hitdie) return 0; - const size = hitdie.slice(1); - let num = [], sum = 0; - - //Push an array of numbers - for(x = 1; x <= size; x++) { num.push(x); }; - - //Add up the nummbers above - for(i = 0; i < num.length; i++) { sum += num[i]; }; - - return Math.ceil(sum / num.length); -}; - -//Roll & Average buttons inside the repeating hp section for each level -["class1", "class2", "class3", "class4"].forEach(levelclass => { - on(`mancerroll:repeating_${levelclass}hprow`, (eventinfo) => { - const source = eventinfo.sourceAttribute, flag = source.includes("rollhp") ? "roll" : "average"; - let set = {}; - - set[`${eventinfo.sourceSection}_result`] = eventinfo.roll[0].result; - set[`${eventinfo.sourceSection}_rollflag`] = flag; - setAttrs(set, () => {recalcHpByLevel()}) - }); -}); - -//Roll & Average top level buttons for each class -["class1", "class2", "class3", "class4"].forEach(levelclass => { - on(`mancerroll:${levelclass}_rollhp mancerroll:${levelclass}_averagehp`, (eventinfo) => { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"].values; - const repeating = mancerdata["lp-levels"].repeating || []; - const source = eventinfo.sourceAttribute, flag = source.includes("rollhp") ? "roll" : "average"; - let set = {}, sum = 0, rows = "", num = 0; - - repeating.forEach(row => { - if (row.includes(`${levelclass}-`) && source.includes("rollhp")) { - set[row + "_result"] = eventinfo.roll[`${num}`].result; - set[row + "_rollflag"] = flag; - num += 1; - } else if (row.includes(`${levelclass}-`) && source.includes("average")) { - set[row + "_result"] = eventinfo.roll[0].result; - set[row + "_rollflag"] = flag; - } else { - false - }; - }); - - //Add up the results for rollhp or multiply the average option by added levels - if (source.includes("rollhp")) { - _.each(eventinfo.roll, function(roll) { - sum += parseInt(roll.result); - }); - } else { - sum = parseInt(eventinfo.roll[0].result) * leveldata[`${levelclass}_addlevel`]; - }; - - // Set addhp to the total - set[`${levelclass}_addhp`] = sum; - - //Set hp_flag to be roll or average so the CSS will highlight the appropriate button - set[`${levelclass}_hp_flag`] = flag; - - setAttrs(set, function() { recalcLpData(); }); - }); -}); - -on("clicked:multiclass_add clicked:multiclass_remove", function(eventinfo) { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"]; - const levelclass = "class" + (parseInt(leveldata.values["multiclass"]) + 1); - const repeating = mancerdata["lp-levels"].repeating || []; - let set = {}; - let update = {}; - - if (eventinfo.sourceAttribute === "multiclass_add") { - (leveldata.values["multiclass"] < 3) ? set["multiclass"] = parseInt(leveldata.values["multiclass"]) + 1 : false; - update["add_multiclass"] = ``; - //set[`${levelclass}_addlevel`] = 1; - } else { - if (leveldata.values["multiclass"] > leveldata.values["multiclass_initial"]) { - const multiclass = parseInt(leveldata.values["multiclass"]); - let rows = ""; - - set["multiclass"] = multiclass - 1; - update["add_multiclass"] = ``; - - repeating.forEach(row => { - if (row.includes(`${levelclass}-`)) { - set[row + "_result"] = ""; - }; - }); - - set[`${levelclass}_addhp`] = 0; - set[`${levelclass}_hp_flag`] = ""; - } else { - false - }; - }; - - setAttrs(set, function() { recalcLpData(); }); - setCharmancerText(update); -}); - -on("mancerchange:class1_addhp mancerchange:class2_addhp mancerchange:class3_addhp mancerchange:class4_addhp", function(eventinfo) { - if (eventinfo.sourceType === "player") { - const mancerdata = getCharmancerData(), levelclass = eventinfo.sourceAttribute.slice(0, 6); - const repeating = mancerdata["lp-levels"].repeating || []; - let set = {}; - - repeating.forEach(row => { - if (row.includes(`${levelclass}-`)) { - set[row + "_result"] = ""; - }; - }); - - set[`${levelclass}_hp_flag`] = ""; - - setAttrs(set); - }; -}); - -on("mancerchange:multiclass", function () { - const mancerdata = getCharmancerData(); - const leveldata = mancerdata["lp-levels"]; - const tot = isNaN(parseInt(leveldata.values["multiclass"])) ? 1 : parseInt(leveldata.values["multiclass"]) + 1; - let update = {}; - let presets = []; - - for(var x=1; x<=tot-1; x++) { - if(leveldata.values["class" + x]) presets.push(_.last(leveldata.values["class" + x].split(":"))) - } - setCharmancerOptions("class" + tot, "Category:Classes", {disable: presets, category: "Classes"}); - update["multiclass_message"] = `

    Multiclass (${tot}/4)

    `; - setCharmancerText(update); -}); - -on("clicked:class1 clicked:class2 clicked:class3 clicked:class4 clicked:class1_subclass clicked:class2_subclass clicked:class3_subclass clicked:class4_subclass", function(eventinfo) { - const mancerdata = getCharmancerData(); - const source = eventinfo.sourceAttribute; - const page = mancerdata["lp-levels"].values[`${source}`]; - - changeCompendiumPage("sheet-levels-info", page); - getCompendiumPage(page, function(p) { - }); -}); - -var getLevelingData = function(mancerdata) { - mancerdata = mancerdata || getCharmancerData(); - var leveling = []; - if(!mancerdata["lp-levels"]) return leveling; - var multiclass = mancerdata["lp-levels"].values.multiclass ? parseInt(mancerdata["lp-levels"].values.multiclass) : 0; - for(var x=1; x<=multiclass + 1; x++) { - if(mancerdata["lp-levels"].data["class" + x] && mancerdata["lp-levels"].values["class" + x + "_addlevel"] && mancerdata["lp-levels"].values["class" + x + "_addlevel"] != "0") { - var thisclass = {}; - var maxspell = 0; - thisclass.class = mancerdata["lp-levels"].data["class" + x]; - thisclass.subclass = mancerdata["lp-levels"].data["class" + x + "_subclass"] || {}; - thisclass.classname = _.last(mancerdata["lp-levels"].values["class" + x].split(":")); - thisclass.subclassname = mancerdata["lp-levels"].values["class" + x + "_subclass"] ? _.last(mancerdata["lp-levels"].values["class" + x + "_subclass"].split(":")) : ""; - thisclass.currentlevel = mancerdata["lp-levels"].values["class" + x + "_currentlevel"] ? parseInt(mancerdata["lp-levels"].values["class" + x + "_currentlevel"]) : 0; - thisclass.addlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"]); - thisclass.addhp = mancerdata["lp-levels"].values["class" + x + "_addhp"] ? parseInt(mancerdata["lp-levels"].values["class" + x + "_addhp"]) : 0; - thisclass.classnumber = x; - if(thisclass.subclass["Spellcasting Ability"]) { - thisclass.spellcasting = thisclass.subclass["Spellcasting Ability"]; - } else if(thisclass.class["Spellcasting Ability"]) { - thisclass.spellcasting = thisclass.class["Spellcasting Ability"]; - } - _.each(thisclass.class.blobs, function(blob) { - if(blob["Spell Slots"] && parseInt(blob.Level) <= (thisclass.currentlevel + thisclass.addlevel)) { - _.each(JSON.parse(blob["Spell Slots"]), function(slots, name) { - if(parseInt(_.last(name.split(" "))) > maxspell) maxspell = parseInt(_.last(name.split(" "))); - }); - } - }); - thisclass.maxspell = maxspell; - leveling.push(thisclass); - } - } - return leveling; -}; - -var getLpRaceData = function(mancerdata, leveldata) { - mancerdata = mancerdata || getCharmancerData(); - leveldata = leveldata || getLevelingData(mancerdata); - let results = {}; - let currentlevel = 0; - let addlevel = 0; - _.each(leveldata, function(level) { - addlevel += level.addlevel; - currentlevel += level.currentlevel; - }); - currentlevel = currentlevel === 0 ? 1 : currentlevel; - _.each(["race", "background"], function(section) { - results[section] = {addlevel: addlevel, currentlevel: currentlevel}; - results[section][section] = mancerdata["lp-welcome"].data["lp-" + section] || {}; - results[section]["sub" + section] = mancerdata["lp-welcome"].data["lp-sub" + section] || {}; - results[section].type = section; - results[section].name = _.last(mancerdata["lp-welcome"].values["lp-" + section].split(":")) || ""; - results[section].name += mancerdata["lp-welcome"].values["lp-sub" + section] ? " - " + _.last(mancerdata["lp-welcome"].values["lp-sub" + section].split(":")) : ""; - }); - return results; -}; - -var getLpBlobs = function(data, include_asi, verbose) { - const type = data.type || "class"; - var asi = type == "class" ? data[type]["data-Ability Score Levels"] : []; - var allblobs = {}; - allblobs[type] = {}; - allblobs["sub" + type] = {}; - _.times(data.addlevel, function(x) { - var thislevel = data.currentlevel + x + 1; - allblobs[type] = _.extend(allblobs[type], filterBlobs(data[type].blobs, {"Level": "" + thislevel, multiclass: true})); - allblobs["sub" + type] = _.extend(allblobs["sub" + type], filterBlobs(data["sub" + type].blobs, {"Level": "" + thislevel, multiclass: true})); - if(asi.includes("" + thislevel) && include_asi) { - allblobs[type]["Ability Score Increase - Level " + thislevel] = {Level: thislevel, parentSection: type}; - data[type].blobs["Ability Score Increase - Level " + thislevel] = { - Level: thislevel, - Title: ("Ability Score Increase - Level " + thislevel) - }; - } - }); - allblobs[type] = _.extend(allblobs[type], filterBlobs(data[type].blobs, {"Level": "every", multiclass: true})); - allblobs["sub" + type] = _.extend(allblobs["sub" + type], filterBlobs(data["sub" + type].blobs, {"Level": "every", multiclass: true})); - var remove = {}; - remove[type] = []; - remove["sub" + type] = []; - //Figure out which blobs are just the same feature at a different level, add them to a list to remove (unless we're useing the verbose option) - if(!verbose) { - _.each(allblobs, function(blobs, section) { - _.each(blobs, function(blob, name) { - var basename = name.split("(")[0]; - blob.Level = parseInt(blob.Level); - if(basename.trim().toLowerCase() == "spell slots") { - remove[section].push(name); - } else if(basename.trim().toLowerCase() != "proficiencies") { - _.each(allblobs, function(otherblobs, othersection) { - _.each(otherblobs, function(otherblob, othername) { - if(name != othername && basename == othername.split("(")[0]) { - if(blob.Level > parseInt(otherblob.Level)) { - remove[section].push(othername); - } else { - remove[section].push(name); - } - } - }) - }); - } - }); - }); - } - //remove any blobs that are the same feature - _.each(remove, function(removeArray, section) { - _.each(_.uniq(removeArray), function(thisblob) { - delete allblobs[section][thisblob]; - }); - }); - //here we build the final list of blobs that will be added - var filteredblobs = {}; - filteredblobs[type] = []; - filteredblobs["sub" + type] = []; - _.each(allblobs, function(blobs, section) { - _.each(blobs, function(blob, name) { - var thisblob = { - Level: blob.Level, - name: name - }; - filteredblobs[section].push(thisblob); - }); - }); - _.each(filteredblobs, function(bloblist) { - bloblist = _.sortBy(bloblist, "Level"); - }) - filteredblobs.allblobs = _.extend(data[type].blobs, data["sub" + type].blobs); - return filteredblobs; -}; - -var getAllLpBlobs = function(mancerdata, include_asi) { - const pickBlobs = function(theseblobs, allblobs, key, section) { - blobs.names[key] = _.pluck(theseblobs, "name") || []; - if(mancerdata["lp-choices"]) { - _.each(mancerdata["lp-choices"].values, function(value, id) { - if((value + "").split(":")[0] == "Blob" && id.split("_")[2].split("--")[0] == section) { - blobs.names[key].push(value.split(":")[1]); - }; - }); - }; - _.each(blobs.names[key], function(blobname){ - _.each(filterBlobs(allblobs, {"name": blobname, multiclass: true}), function(blob, blobname) { - blobs.all.push(blob); - blobs.sorted[key] = blobs.sorted[key] ? blobs.sorted[key] : []; - blobs.sorted[key].push(blob); - }); - }); - }; - mancerdata = mancerdata || getCharmancerData(); - const leveldata = getLevelingData(mancerdata); - const racedata = getLpRaceData(mancerdata, leveldata); - var blobs = {all: [], sorted: {}, names: {}}; - _.each(leveldata, function(level) { - var name = "class" + level.classnumber; - var theseblobs = getLpBlobs(level, include_asi, true); - pickBlobs(theseblobs.class, level.class.blobs, name, "class-" + level.classnumber); - if(level.subclass) { - pickBlobs(theseblobs.subclass, level.subclass.blobs, name + "_subclass", "subclass-" + level.classnumber); - }; - }); - _.each(racedata, function(level) { - var name = level.type; - var theseblobs = getLpBlobs(level, include_asi, true); - pickBlobs(theseblobs[name], level[name].blobs, name, name); - if(level["sub" + name]) { - pickBlobs(theseblobs["sub" + name], level["sub" + name].blobs, "sub" + name, "sub" + name); - }; - }); - return blobs; -}; - -on("page:lp-choices", function(eventinfo) { - const resortBlobs = function(blobs, section) { - _.each(blobs[section], function(x) { x.parentSection = section }); - _.each(blobs["sub" + section], function(x) { x.parentSection = "sub" + section}); - let filteredblobs = _.sortBy(blobs[section].concat(blobs["sub" + section]), "Level"); - let resorted = []; - _.each(filteredblobs, function(blob) { - if(blob.name.split(" ")[0] == "Proficiencies") { - resorted.unshift(blob); - } else { - resorted.push(blob); - } - }); - return resorted; - } - const mancerdata = getCharmancerData(); - const leveling = getLevelingData(mancerdata); - const racedata = getLpRaceData(mancerdata, leveling); - _.each(racedata, function(data, section) { - const blobs = getLpBlobs(data, true); - const relevant = resortBlobs(blobs, section); - if(relevant.length > 0) { - addRepeatingSection("choices", "row", function(thisrow) { - let update = {}; - update[thisrow] = "

    " + removeExpansionInfo(data.name) + ""; - update[thisrow] += data.addlevel > 1 ? " Levels " + (data.currentlevel + 1) + " - " + (data.currentlevel + data.addlevel) : " Level " + (data.currentlevel + 1); - update[thisrow] += "

    "; - setCharmancerText(update); - _.each(relevant, function(blob, y) { - handleBlobs(blobs.allblobs, { - filters: {multiclass: true}, - slide: "lp-choices", - section: blob.parentSection + "--" + blob.Level, - element: thisrow, - thisblob: blob.name, - maxlevel: data.currentlevel + data.addlevel, - parent: section - }); - if(y === (relevant.length -1)) { - recalcLpData(); - } - }); - }); - }; - }); - _.each(leveling, function(data) { - var x = data.classnumber; - var blobs = getLpBlobs(data, true); - addRepeatingSection("choices", "row", function(classrow) { - var classname = data.subclassname ? removeExpansionInfo(data.subclassname) + " " + removeExpansionInfo(data.classname) : removeExpansionInfo(data.classname); - var update = {}; - update[classrow] = "

    " + classname + ""; - update[classrow] += data.addlevel > 1 ? " Levels " + (data.currentlevel + 1) + " - " + (data.currentlevel + data.addlevel) : " Level " + (data.currentlevel + 1); - update[classrow] += "

    "; - setCharmancerText(update); - resorted = resortBlobs(blobs, "class"); - _.each(resorted, function(blob, y) { - handleBlobs(blobs.allblobs, { - filters: {multiclass: true}, - slide: "lp-choices", - section: blob.parentSection + "-" + x + "--" + blob.Level, - element: classrow, - thisblob: blob.name, - maxlevel: data.currentlevel + data.addlevel, - parent: "class" + data.classnumber + (blob.parentSection === "class" ? "" : "_subclass") - }); - if(y === (resorted.length -1)) { - recalcLpData(); - } - }); - }); - }); - if(leveling[0] && leveling[0].classname) { - changeCompendiumPage("sheet-class-info", "Classes:" + leveling[0].classname); - } -}); - -on("page:lp-asi", function(eventinfo) { - var mancerdata = getCharmancerData(); - var leveling = getLevelingData(mancerdata); - var asis = []; - var update = {}; - var multiclass = mancerdata["lp-levels"].values.multiclass ? parseInt(mancerdata["lp-levels"].values.multiclass) : 0; - for(var x=1; x<=multiclass + 1; x++) { - if(mancerdata["lp-levels"].data["class" + x]) { - var thisclass = {}; - thisclass.class = mancerdata["lp-levels"].data["class" + x]; - thisclass.classname = _.last(mancerdata["lp-levels"].values["class" + x].split(":")); - thisclass.currentlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_currentlevel"]); - thisclass.addlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"]); - leveling["class" + x] = thisclass; - } - } - _.each(leveling, function(data) { - var asi = data.class["data-Ability Score Levels"]; - _.times(data.addlevel, function(x) { - var thislevel = data.currentlevel + x + 1; - if(asi.includes("" + thislevel)) { - asis.push(data.classname + " Level " + thislevel); - } - }); - }); - _.each(asis, function(asi) { - addRepeatingSection("choices", "asi-row", function(rowid) { - update[rowid + " .sheet-title"] = "Ability Score Increase: " + removeExpansionInfo(asi); - setCharmancerOptions(rowid + "_feat", "Category:Feats"); - updateAbilityLock(rowid); - if(asi == _.last(asis)) { - setCharmancerText(update); - } - }) - }) -}); - -var getKnownLpPowers = function(mancerdata) { - mancerdata = mancerdata || getCharmancerData(); - var leveldata = getLevelingData(mancerdata); - var previousspells = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; - var spelldata = {}; - var totallevel = 0; - var prevtotallevel = 0; - _.each(previousspells, function(spell) { - spelldata[spell.spellname] = {level: spell.spelllevel}; - if(spell.spellclass) spelldata[spell.spellname].spellclass = spell.spellclass; - if(spell.spellclass && spell.spellclass.toLowerCase() == "racial") spelldata[spell.spellname].known = "Racial"; - if(spell.spellsource) spelldata[spell.spellname].known = spell.spellsource; - }); - _.each(leveldata, function(level) { - totallevel += level.currentlevel + level.addlevel; - prevtotallevel += level.currentlevel; - }); - //Gather known spells - _.each(mancerdata, function(page, pagename) { - if(pagename.split("-")[0] == "lp") { - let choices = []; - let choicepage = ["lp-welcome", "lp-levels"].includes(pagename) ? (mancerdata["lp-choices"] ? mancerdata["lp-choices"].values : []) : page.values; - _.each(choicepage, function(val) { - if((val + "").split(":")[0] === "Blob") choices.push(val.split(":")[1]); - }); - _.each(page.data, function(data, dataname) { - var thislevel = 0; - var prevlevel = 0; - var thisclass = {}; - if(dataname.substring(0,5) == "class") { - thisclass = _.findWhere(leveldata, {classnumber: parseInt(dataname[5])}); - thislevel = thisclass ? thisclass.currentlevel + thisclass.addlevel : 0; - prevlevel = 0; - } else { - thislevel = totallevel; - prevlevel = prevtotallevel; - } - _.each(data.blobs, function(blob, blobname) { - if(blob.Multiclass != "no" && ((parseInt(blob.Level) <= thislevel || blob.Level == "all") && !blob.Group) || choices.includes(blobname)) { - if(blob.Powers) { - var blobspells = JSON.parse(blob.Powers); - _.each(blobspells, function(blobspell) { - if(blobspell.Known) { - _.each(blobspell.Known, function(spell) { - spelldata[spell] = spelldata[spell] || {level: blobspell.Level}; - spelldata[spell].known = blobspell.Source || data.Category.substring(0, data.Category.length - 2); - spelldata[spell].spellclass = thisclass.classname; - if(dataname.substring(0,5) != "class") { - spelldata[spell].known = data.Category.substring(0, data.Category.length - 1); - spelldata[spell].spellclass = data.Category == "Races" ? "Racial" : data.Category.substring(0, data.Category.length - 1); - } - if(blobspell.Ability) { - spelldata[spell].ability = blobspell.Ability; - } else if(thisclass.class && thisclass.class["Spellcasting Ability"]) { - spelldata[spell].ability = thisclass.class["Spellcasting Ability"]; - } else if (thisclass.subclass && thisclass.subclass["Spellcasting Ability"]) { - spelldata[spell].ability = thisclass.subclass["Spellcasting Ability"]; - } - }); - } - }); - } - } - }); - }); - //Gater spells from class features - _.each(page.values, function(value, name) { - if(name.substr(-18) === "_utilityrow_spells") { - console.log("UTILITYROW SPELLS!"); - console.log(JSON.parse(value)); - spelldata = _.extend(spelldata, JSON.parse(value)); - } - }); - } - }); - /**/ - return spelldata; -}; - -var getNewPowers = function(mancerdata, leveldata, blobs) { - mancerdata = mancerdata || getCharmancerData(); - leveldata = leveldata || getCharmancerData(); - blobs = blobs || getAllLpBlobs(mancerdata, false); - var result = false; - _.each(leveldata, function(level) { - var prevlevel = level.currentlevel; - var thislevel = level.addlevel + prevlevel; - var thisclass = {class: level.classname, number: level.classnumber, newlevel: thislevel, additional: []}; - var prevknown = 0; - var currentknown = 0; - var prevprimes = 0; - var currentprimes = 0; - var spelladd = 0; - thisclass.newspells = 0; - _.each(["class", "subclass"], function(section) { - if(level[section]) { - _.each(level[section].blobs, function(blob) { - if(blob.Level == thislevel) { - if(blob["Powers Known"]) { - currentknown = parseInt(blob["Powers Known"]); - if(level.class["data-Spell Replace"]) result = true; - } - if(blob.Primes) { - thisclass.primes = true; - currentprimes = parseInt(blob.Primes); - } - if(blob["Powers Prepared"]) { - result = true; - } - } - if(blob.Level == prevlevel || (prevlevel === 0 && blob.Level == 1)) { - if(blob["Powers Known"]) { - prevknown = prevlevel === 0 ? 0 : parseInt(blob["Powers Known"]); - if(prevlevel === 0) thisclass.newspells = parseInt(blob["Powers Known"]); - } - if(blob.Primes) { - thisclass.primes = true; - prevprimes = prevlevel === 0 ? 0 : parseInt(blob.Primes); - } - } - if(level[section]["data-Spell Add"]) { - spelladd = parseInt(level[section]["data-Spell Add"]); - } - }); - } - }); - if(spelladd) { - thisclass.newspells += prevlevel === 0 ? spelladd * (thislevel - prevlevel -1) : spelladd * (thislevel - prevlevel); - } else { - thisclass.newspells = currentknown - prevknown; - } - thisclass.newprimes = currentprimes - prevprimes; - _.each(["", "_subclass"], function(section) { - if(blobs.sorted[`class${level.classnumber}${section}`]) { - _.each(blobs.sorted[`class${level.classnumber}${section}`], function(blob) { - if(blob.Powers) { - let spells = JSON.parse(blob.Powers); - _.each(spells, function(spell) { - if(spell.Choose) { - result = true; - } - }); - } - }); - } - }); - if(thisclass.newprimes || thisclass.newspells) result = true; - }); - return result; -}; - -on("page:lp-spells", function(eventinfo) { - var mancerdata = getCharmancerData(); - var queries = []; - var blobs = getAllLpBlobs(mancerdata, false); - var leveldata = getLevelingData(mancerdata); - var classes = []; - var knownprimes = 0; - var knownspells = 0; - var newprimes = 0; - var newspells = 0; - var replace = 0; - var totallevel = 0; - var spellmaxlevel = 0; - var prepared = true; - var prevspells = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; - var spelldata = getKnownLpPowers(mancerdata); - var abilities = getAbilityTotals(mancerdata, blobs); - _.each(spelldata, function(spell, spellname) { - if(spell.level == "prime") { - knownprimes++; - } else { - knownspells++; - } - }); - recalcLpData(blobs); - //Gather spell data about each class - _.each(leveldata, function(level) { - var prevlevel = level.currentlevel; - var thislevel = level.addlevel + prevlevel; - var thisclass = {class: level.classname, number: level.classnumber, newlevel: thislevel, additional: []}; - var toSwap = level.class["data-Spell Replace"] ? parseInt(level.class["data-Spell Replace"]) : 0; - var prevknown = 0; - var currentknown = 0; - var prevprimes = 0; - var currentprimes = 0; - var spelladd = 0; - thisclass.list = [thisclass.class]; - totallevel += thislevel; - thisclass.newspells = 0; - _.each(["class", "subclass"], function(section) { - if(level[section]) { - if(level[section]["data-Spell List"]) thisclass.list = [level[section]["data-Spell List"]]; - if(level[section]["Spellcasting Ability"]) thisclass.ability = level[section]["Spellcasting Ability"]; - _.each(level[section].blobs, function(blob) { - if(blob.Level == thislevel) { - if(blob["Spell Slots"]) { - var slots = JSON.parse(blob["Spell Slots"]); - thisclass.maxlevel = JSON.parse(_.last(_.last(_.keys(slots).sort()).split(" "))); - spellmaxlevel = Math.max(thisclass.maxlevel, spellmaxlevel); - } - if(blob["Powers Known"]) { - currentknown = parseInt(blob["Powers Known"]); - } - if(blob.Primes) { - thisclass.primes = true; - currentprimes = parseInt(blob.Primes); - } - if(blob["Powers Prepared"]) { - var splitted = blob["Powers Prepared"].split("+").map((x) => {return x.trim()}); - thisclass.prepared = 0; - _.each(splitted, function(term, x) { - if(isNaN(parseInt(term))) { - thisclass.prepared += abilities[term.toLowerCase() + "_mod"] ? abilities[term.toLowerCase() + "_mod"] : 0; - } else { - thisclass.prepared += parseInt(term); - } - }); - thisclass.prepared = Math.max(thisclass.prepared, 1); - } - } - if(blob.Level == prevlevel || (prevlevel === 0 && blob.Level == 1)) { - if(blob["Powers Known"]) { - prevknown = prevlevel === 0 ? 0 : parseInt(blob["Powers Known"]); - if(prevlevel === 0) thisclass.newspells = parseInt(blob["Powers Known"]); - } - if(blob.Primes) { - thisclass.primes = true; - prevprimes = prevlevel === 0 ? 0 : parseInt(blob.Primes); - if(knownprimes < prevprimes) prevprimes = knownprimes; - } - } - if(blob.Level == "every" || blob.Level == thislevel) { - if(blob["Additional Spell List"]) thisclass.list.push(blob["Additional Spell List"]); - } - if(level[section]["data-Spell Add"]) { - spelladd = parseInt(level[section]["data-Spell Add"]); - } - }); - } - }); - if(spelladd) { - thisclass.newspells += prevlevel === 0 ? spelladd * (thislevel - prevlevel -1) : spelladd * (thislevel - prevlevel); - } else { - thisclass.newspells = currentknown - prevknown; - } - if(thisclass.prepared) thisclass.newspells = thisclass.prepared; - thisclass.newprimes = currentprimes - prevprimes; - thisclass.replace = toSwap * (thislevel - prevlevel); - _.each(["", "_subclass"], function(section) { - if(blobs.sorted[`class${level.classnumber}${section}`]) { - _.each(blobs.sorted[`class${level.classnumber}${section}`], function(blob) { - if(blob.Powers) { - let spells = JSON.parse(blob.Powers); - _.each(spells, function(spell) { - if(spell.Choose && spell.Level === "0") { - thisclass.newprimes += parseInt(spell.Choose); - } - }); - } - }); - } - }); - if(thisclass.newprimes || thisclass.newspells) classes.push(thisclass); - }); - if(classes.length > 0) { - var existinglist = _.pluck(prevspells, "spellname"); - var knownlist = _.keys(spelldata); - //Look through all the data to see if there's any expanded lists - _.each(mancerdata, function(page, pagename) { - if(pagename.split("-")[0] == "lp") { - _.each(page.data, function(data, dataname) { - var thislevel = 0; - if(dataname.substring(0,5) == "class") { - var thisclass = _.findWhere(leveldata, {classnumber: parseInt(dataname[5])}); - thislevel = thisclass ? thisclass.currentlevel + thisclass.addlevel : 0; - } else { - thislevel = totallevel; - } - _.each(data.blobs, function(blob, blobname) { - if((parseInt(blob.Level) <= thislevel || blob.Level == "every") && blob.Multiclass != "no") { - if(blob.Powers) { - var blobspells = JSON.parse(blob.Powers); - _.each(blobspells, function(thisspell) { - if(parseInt(thisspell.Level) <= spellmaxlevel) { - if(thisspell["Expanded List"]) { - knownlist = knownlist.concat(thisspell["Expanded List"]); - } - } - }); - } - } - }); - }) - } - }); - if(knownlist) { - queries.push("Category:Powers Name:" + knownlist.join("|")); - } - _.each(classes, function(thisclass) { - if(thisclass.maxlevel || thisclass.newprimes) { - newprimes += thisclass.newprimes || 0; - newspells += thisclass.newspells; - replace += thisclass.replace; - if(!thisclass.prepared) prepared = false; - thisquery = "Category:Powers Classes:*" + _.uniq(thisclass.list).join("|*") + " Level:"; - if(thisclass.primes) thisquery += "0|" - for(var x = 1; x <= thisclass.maxlevel; x++) { - thisquery += x; - if(x != thisclass.maxlevel) thisquery += "|"; - } - _.each(thisclass.additional, function(lvl) { - thisquery += "|" + lvl; - }); - queries.push(thisquery); - } - }); - var toSet = {}; - toSet.knownprimes = knownprimes; - toSet.knownspells = knownspells; - toSet.newprimes = newprimes; - toSet.newspells = newspells; - toSet.replace = replace; - setAttrs(toSet); - var update = {}; - update["spells-summary"] = ""; - if(newprimes != 0 || knownprimes != 0) update["spells-summary"] = "
    Primes:
    "; - _.times(spellmaxlevel, function(x) { - update["spells-summary"] += "
    Level " + (x + 1) + ":
    "; - }); - if(classes.length > 1) { - update["primeinfo"] = ""; - _.each(classes, function(thisclass) { - if(thisclass.newspells) { - update["primeinfo"] += "

    You can add " + thisclass.newprimes + " " + thisclass.class + " primes.

    "; - } - }); - } - setCharmancerText(update); - getCompendiumQuery(queries, (data) => { - data = removeDuplicatedPageData(data); - let byLevel = {}; - _.each(data, (spell) => { - let classes = []; - if (spell.data.Classes) { - classes = spell.data.Classes; - //Ravinca introduced Powers without Classes - } else { - ["class1", "class2", "class3", "class4"].forEach(levelclass => { - //Get the class name out of values & confirm its a spellcaster using data Spellcasting Ability - const name = (mancerdata["lp-levels"].values[`${levelclass}`]) ? mancerdata["lp-levels"].values[`${levelclass}`].split("Classes:")[1] : false; - const ability = - //Check if the class has a Spellcasting Ability attribute - (mancerdata["lp-levels"].data[`${levelclass}`] && mancerdata["lp-levels"].data[`${levelclass}`]["Spellcasting Ability"]) ? true : - //Check if the subclass has a Spellcasting Ability attribute - (mancerdata["lp-levels"].data[`${levelclass}_subclass`] && mancerdata["lp-levels"].data[`${levelclass}_subclass`]["Spellcasting Ability"]) ? true : - //Set to false if the class is not a spellcaster - false; - if (name && ability) { - //Spell casters have thier class name pushed to the array above - classes.push(name); - }; - }); - - if (classes.length > 0) { - classes = classes.join(', '); - }; - }; - - /* This will set the information for populating the spell list */ - if (classes.length > 0) { - byLevel[spell.data.Level] = byLevel[spell.data.Level] || []; - byLevel[spell.data.Level].push({ - name: spell.name, - classes: classes.split(",").map(x => x.trim()), - level: parseInt(spell.data.Level) - }); - }; - }); - addSpellSections(byLevel, { - newspells: newspells, - newprimes: newprimes, - replace: replace, - prepared: prepared, - classes: classes, - spelldata: spelldata, - existinglist: existinglist - }); - }); - } -}); - -const addSpellSections = function(byLevel, settings) { - settings = settings || {}; - let newspells = settings.newspells || 0; - let newprimes = settings.newprimes || 0; - let replace = settings.replace || 0; - let prepared = settings.prepared || false; - let classes = settings.classes || []; - let spelldata = settings.spelldata || []; - let existinglist = settings.existinglist || []; - let spellnumber = 0; - //D&D 5e Lvl+ Mancer: Powers tab "Level undefined" (UC605) - //When invoking Lvl+ from an incomplete manually levelled character, an undefined lv is generated due to missing information. - //This code prevents an incomplete list from being displayed. - //By Miguel - if('undefined' in byLevel) { - delete byLevel.undefined; - } - _.each(byLevel, function(level) { - spellnumber += level.length; - }); - byLevel["0"] = byLevel["0"] || []; - addRepeatingSection("choices", "row", "spellsrow", function(spellsrow) { - let toSet = {}; - let update = {}; - _.each(byLevel, function(spells, x) { - addRepeatingSection(spellsrow, "spell-holder", "spell-holder-" + x, function(levelrow) { - if(x == "0") { - if(newspells > 0) { - if(classes.length > 1) { - update[levelrow + " .sheet-spellstext .sheet-summary"] = ""; - _.each(classes, function(thisclass) { - if(thisclass.newspells) { - update[levelrow + " .sheet-spellstext .sheet-summary"] += "

    You can add " + thisclass.newspells + " " + thisclass.class + " spells.

    "; - } - }); - } else { - update[levelrow + " .sheet-spellstext .sheet-summary"] = "

    You can add " + newspells + " new spells.

    "; - } - } - if(replace > 0) { - if(classes.length > 1) { - update[levelrow + " .sheet-replacetext .sheet-summary"] = ""; - _.each(classes, function(thisclass) { - if(thisclass.replace) { - update[levelrow + " .sheet-replacetext .sheet-summary"] += "

    You can replace " + thisclass.replace + " " + thisclass.class + " spells.

    "; - } - }); - } else { - update[levelrow + " .sheet-replacetext .sheet-summary"] = "

    You can replace " + replace + " spells.

    "; - } - showChoices([levelrow + " .sheet-replace-info"]); - } - } else { - update[levelrow + " .sheet-spellinfo"] = ""; - } - update[levelrow + " label .sheet-title"] = x == "0" ? "Primes" : "Level " + x; - update[levelrow + " label .sheet-title"] += "r" - if(x == "0" && newprimes == 0) { - toSet[levelrow + "_show"] = "1"; - update[levelrow + " .sheet-controller"] = "1"; - } - if(spells.length === 0) hideChoices([levelrow + " label"]); - spells = _.sortBy(spells, "name"); - setCharmancerText(update); - _.each(spells, function(spell) { - addRepeatingSection(levelrow + " .sheet-container", "spell-item", function(spellid) { - var update = {}; - toSet[spellid + "_name"] = spell.name; - toSet[spellid + "_level"] = x; - update[spellid + " .sheet-name"] = spell.name; - update[spellid + " .sheet-classes"] = ""; - if(x == "0" && newprimes == 0) update[spellid + " .sheet-hardlock"] = "locked"; - var spellclasses = []; - _.each(classes, function(thisclass, y) { - if(spell.classes.includes(thisclass.list) && spell.level <= thisclass.maxlevel) { - spellclasses.push({class: thisclass.class, ability: thisclass.ability}); - if(classes.length > 1) { - update[spellid + " .sheet-classes"] += "" + thisclass.class + ""; - } - } - }); - if(spellclasses.length == 1 || classes.length == 1) { - toSet[spellid + "_class"] = spellclasses[0] ? spellclasses[0].class : classes[0].class; - toSet[spellid + "_ability"] = spellclasses[0] ? spellclasses[0].ability : classes[0].ability; - } - _.each(spelldata, function(thisspell, spellname) { - if(spellname == spell.name) { - toSet[spellid + "_checked"] = "1"; - if(!prepared || x == "0") { - toSet[spellid + "_existing"] = "1"; - if(x == "0" || replace == 0) update[spellid + " .sheet-hardlock"] = "locked"; - } - if(thisspell.known) { - toSet[spellid + "_checked"] = "1"; - toSet[spellid + "_existing"] = "1"; - toSet[spellid + "_source"] = thisspell.known; - update[spellid + " .sheet-classes"] = "" + thisspell.known + " Spell"; - update[spellid + " .sheet-hardlock"] = "locked"; - } - if(thisspell.spellclass) toSet[spellid + "_class"] = thisspell.spellclass; - if(thisspell.ability) toSet[spellid + "_ability"] = thisspell.ability; - } - }); - if(settings.selected && settings.selected.includes(spell.name)) { - toSet[spellid + "_checked"] = "1"; - } - if(settings.locked && settings.locked.includes(spell.name)) { - toSet[spellid + "_checked"] = "1"; - toSet[spellid + "_existing"] = "1"; - update[spellid + " .sheet-hardlock"] = "locked"; - } - spellnumber--; - setCharmancerText(update); - if(spellnumber <= 0) { - setAttrs(toSet, {silent: true}, function() { - updateSpellSummary("all", undefined, settings.page); - }); - } - }); - }); - }); - }); - }); -}; - -const updateSpellSummary = function(sourcelevel, data, thispage) { - var mancerdata = data || getCharmancerData(); - var spellpage = thispage ? mancerdata[thispage] : mancerdata["lp-spells"]; - var replist = spellpage.repeating || []; - var primesection = replist.find((x) => {return x.includes("_spell-holder-0")}); - var update = {}; - var sections = []; - var perlevel = {}; - var allowed = 0; - var allowedreplace = 0; - //first, list spells you already know - _.each(replist, function(repid) { - if(spellpage.values[repid + "_existing"]) { - var selector = "spells-summary .sheet-level_" + spellpage.values[repid + "_level"] + " .sheet-list"; - update[selector] = update[selector] || ""; - update[selector] += spellpage.values[repid + "_checked"] ? "" : ""; - update[selector] += spellpage.values[repid + "_name"] + ""; - } - }); - //then, list new spells you've checked - _.each(replist, function(repid) { - if(spellpage.values[repid + "_checked"] && !spellpage.values[repid + "_existing"]) { - var selector = "spells-summary .sheet-level_" + spellpage.values[repid + "_level"] + " .sheet-list"; - update[selector] = update[selector] || ""; - update[selector] += "" + spellpage.values[repid + "_name"] + ""; - } - }); - if(sourcelevel == "0") { - sections.push(primesection); - allowed = spellpage.values.newprimes || 0; - } else { - update[primesection + " .sheet-spellstext .sheet-levels"] = ""; - for(var x=1; x <= 9; x++) { - var thissection = replist.find((y) => {return y.includes("_spell-holder-" + x)}); - allowed = spellpage.values.newspells; - allowedreplace = spellpage.values.replace; - if(thissection) { - perlevel[x + ""] = {number: 0, section: thissection, replaced: false}; - sections.push(thissection); - } - } - } - getRepeatingSections(replist.find((x) => {return x.includes("spellsrow")}), function(repeating) { - var toSet = {}; - var spellids = []; - var newspells = 0; - var replaced = 0; - _.each(repeating.tree, function(spells, levelrow) { - if(sections.includes(levelrow)) { - spellids = spellids.concat(_.keys(spells)); - } - }); - _.each(spellids, function(id) { - if(spellpage.values[id + "_checked"] && !spellpage.values[id + "_existing"]) { - newspells++; - if(perlevel[spellpage.values[id + "_level"]]) perlevel[spellpage.values[id + "_level"]].number++; - } - if(!spellpage.values[id + "_checked"] && spellpage.values[id + "_existing"]) { - replaced++; - if(perlevel[spellpage.values[id + "_level"]]) perlevel[spellpage.values[id + "_level"]].replaced = true; - } - }); - //now lock/unlock spells depending on if we've selected as many as we're allowed - _.each(spellids, function(id) { - if(!spellpage.values[id + "_checked"]) { - update[id + " .sheet-lock"] = newspells >= (allowed + replaced) ? "locked" : ""; - } else if(spellpage.values[id + "_checked"] && spellpage.values[id + "_existing"]) { - update[id + " .sheet-lock"] = allowedreplace <= replaced ? "locked" : ""; - } - }); - if(sourcelevel == "0") { - var known = (thispage != "lp-spellchoice" && spellpage.values.knownprimes) ? spellpage.values.knownprimes : 0; - update[primesection + " label .sheet-number"] = (known + newspells) + " / " + (known + allowed); - } else { - if(thispage != "lp-spellchoice") { - update[primesection + " .sheet-spellstext .sheet-total"] = newspells + " / " + (allowed + replaced) + " spells chosen."; - if(replaced > 0) { - update[primesection + " .sheet-spellstext .sheet-total"] += "
    (" + allowed + " new, " + replaced + " replaced)"; - } - if(allowedreplace > 0) { - update[primesection + " .sheet-replacetext .sheet-total"] = replaced + " / " + allowedreplace + " spells replaced."; - } - } - _.each(perlevel, function(info, level) { - if(thispage != "lp-spellchoice") update[primesection + " .sheet-spellstext .sheet-levels"] += "

    " + info.number + " Level " + level + " spells added.

    "; - update[info.section + " label .sheet-number"] = ""; - if(info.number > 0) update[info.section + " label .sheet-number"] = "+" + info.number; - if(info.replaced) { - showChoices([info.section + " .sheet-spellheader .sheet-title span"]); - } else { - hideChoices([info.section + " .sheet-spellheader .sheet-title span"]); - } - }); - } - setCharmancerText(update); - if(sourcelevel == "all") updateSpellSummary("0", mancerdata, thispage); - setCharmancerText({pagelock: "unlock"}) - }); -}; - -on("clicked:repeating_spell-item", function(eventinfo) { - if(eventinfo.sourceAttribute.indexOf("spell-item_info") === -1) return; - var mancerdata = getCharmancerData(); - changeCompendiumPage("sheet-spells-info", "Powers:" + mancerdata[eventinfo.currentStep].values[eventinfo.sourceSection + "_name"], "card_only"); -}); - -on("mancerchange:repeating_spellsrow", function(eventinfo) { - var mancerdata = getCharmancerData(); - if(eventinfo.sourceAttribute && _.last(eventinfo.sourceAttribute.split("_")) == "show") { - var update = {}; - update[eventinfo.sourceSection + " .sheet-controller"] = eventinfo.newValue || ""; - setCharmancerText(update); - } else { - updateSpellSummary(mancerdata[eventinfo.currentStep].values[eventinfo.sourceSection + "_level"], mancerdata, eventinfo.currentStep); - } -}); - -on("mancerchange:repeating_asi-row", function(eventinfo) { - var trigger = eventinfo.sourceAttribute.substr(39); - if(trigger == "switch") { - var update = {}; - update[eventinfo.sourceSection + " .sheet-switch"] = eventinfo.newValue == "feat" ? "feat" : ""; - setCharmancerText(update); - } else if(trigger == "feat") { - - } else { - updateAbilityLock(eventinfo.sourceSection); - //This will lock other ASI when leveling up multiple levels at once - //By Miguel - var repeatingData = getCharmancerData()['lp-asi'].repeating || []; - for(data in repeatingData) { - if(repeatingData[data].indexOf('_asi-row') > -1) { - updateAbilityLock(repeatingData[data]); - } - } - } - recalcLpData(); -}); - -on("clicked:repeating_asi-row", function(eventinfo) { - var mancerdata = getCharmancerData(); - var thischange = eventinfo.sourceAttribute.substr(0, eventinfo.sourceAttribute.length - 2); - var currentvalue = mancerdata["lp-asi"].values[thischange] ? parseInt(mancerdata["lp-asi"].values[thischange]) : 0; - var totalincrease = 0; - var update = {}; - var lockinfo = {}; - _.each(abilityList, function(ability) { - var thisincrease = mancerdata["lp-asi"].values[eventinfo.sourceSection + "_" + ability.toLowerCase()] || 0; - totalincrease += parseInt(thisincrease); - }); - if(_.last(eventinfo.sourceAttribute) == "u" && totalincrease < 2 && currentvalue < 2) { - update[thischange] = currentvalue + 1; - mancerdata["lp-asi"].values[thischange] = currentvalue + 1; - } else if(_.last(eventinfo.sourceAttribute) == "d" && currentvalue > 0) { - update[thischange] = currentvalue - 1; - mancerdata["lp-asi"].values[thischange] = currentvalue - 1; - } - setAttrs(update, function() { - recalcLpData(); - }); -}); - -var updateAbilityLock = function(sourceSection, mancerdata) { - mancerdata = mancerdata || getCharmancerData(); - var abilities = getAbilityTotals(mancerdata); - var totalincrease = 0; - var update = {}; - //First, get the total increase for this section - _.each(abilityList, function(ability) { - var thisincrease = mancerdata["lp-asi"].values[sourceSection + "_" + ability.toLowerCase()] || 0; - totalincrease += parseInt(thisincrease); - }); - //Then, figure out what to lock (based on increase) - _.each(abilityList, function(ability) { - var thisincrease = mancerdata["lp-asi"].values[sourceSection + "_" + ability.toLowerCase()] || 0; - update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-down"] = thisincrease > 0 ? "" : "lock"; - update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-up"] = thisincrease < 2 && totalincrease < 2 ? "" : "lock"; - }); - //Now, figure out if any stats are maxed out - _.each(abilityList, function(ability) { - if(abilities[ability.toLowerCase()] >= abilities[ability.toLowerCase() + "_maximum"]) { - update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-up"] = "lock"; - }; - }); - setCharmancerText(update); -}; - -on("page:lp-summary", function() { - var mancerdata = getCharmancerData(); - var abilities = getAbilityTotals(mancerdata); - var previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; - var spelldata = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; - var lcAbilities = abilityList.map(function(x) {return x.toLowerCase()}); - var update = {}; - update["before div"] = "

    Class: "; - if(previous.subclass) update["before div"] += previous.subclass + " "; - update["before div"] += previous.class + " " + previous.base_level; - for(var x=1; x<=3; x++) { - if(previous["multiclass" + x + "_flag"] != "0") { - update["before div"] += ", " + previous["multiclass" + x] + " " + previous["multiclass" + x + "_lvl"]; - } - }; - update["before div"] += "

    "; - update["before div"] += "

    Hit Points: " + previous.hp_max + "

    "; - update["before div"] += "
    "; - _.each(lcAbilities, function(ability) { - update["before div"] += "
    "; - update["before div"] += "" + abilities[ability + "_previous"] + " "; - update["before div"] += "("; - update["before div"] += abilities[ability + "_previous_mod"] >= 0 ? "+" + abilities[ability + "_previous_mod"] : abilities[ability + "_previous_mod"]; - update["before div"] += ")
    "; - }); - update["before div"] += "
    "; - update["after div"] = "

    Class: "; - for(var x=1; x<=4; x++) { - if(mancerdata["lp-levels"].values["class" + x]) { - if(x !== 1) update["after div"] += ", " - if(mancerdata["lp-levels"].values["class" + x + "_subclass"]) { - if((x == 1 && !previous.subclass) || (x != 1 && previous["multiclass" + x + "_flag"] != "0" && !previous["multiclass" + x + "_subclass"])) { - update["after div"] += ""; - } else { - update["after div"] += ""; - } - update["after div"] += removeExpansionInfo(mancerdata["lp-levels"].values["class" + x + "_subclass"].split(":")[1]) + " "; - } - if(x != 1 && previous["multiclass" + x + "_flag"] != "0" && !previous["multiclass" + x + "_subclass"]) { - update["after div"] += ""; - } else { - update["after div"] += ""; - } - update["after div"] += removeExpansionInfo(mancerdata["lp-levels"].values["class" + x].split(":")[1]) + " "; - if(mancerdata["lp-levels"].values["class" + x + "_addlevel"]) { - update["after div"] += ""; - } else { - update["after div"] += ""; - } - var prevlevel = 0; - if(x == 1) { - prevlevel = parseInt(previous["base_level"]); - } else { - prevlevel = previous["multiclass" + x + "_flag"] == "0" ? 0 : parseInt(previous["multiclass" + x + "_lvl"]) - } - update["after div"] += (prevlevel + parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"])) + " "; - } - }; - update["after div"] += "

    "; - update["after div"] += "

    Hit Points: " + getHpTotal(mancerdata) + "

    "; - update["after div"] += "
    "; - _.each(lcAbilities, function(ability) { - update["after div"] += abilities[ability] == abilities[ability + "_previous"] ? "
    " : "
    " - update["after div"] += "
    "; - update["after div"] += abilities[ability] == abilities[ability + "_previous"] ? "" : ""; - update["after div"] += abilities[ability] + " ("; - update["after div"] += abilities[ability + "_mod"] == abilities[ability + "_previous_mod"] ? "" : ""; - update["after div"] += abilities[ability + "_mod"] >= 0 ? "+" + abilities[ability + "_mod"] : abilities[ability + "_mod"]; - update["after div"] += ")
    "; - }); - update["after div"] += "
    "; - - //Powers - let selectedPowers = getGainedPowers(); - update["spell_info"] = "

    You haven't gained any spells

    "; - if(selectedPowers.length > 0) update["spell_info"] = '

    You have learnt these spells: '+ selectedPowers.sort().join(", ") +'

    '; - - let gainedFeatures = getGainedFeatures(); - update["feature_info"] = (gainedFeatures.length > 0) ? '

    You have gained these class features: '+ gainedFeatures.sort().join(", ") +'

    ' : - "You haven't gained any class features."; - - setCharmancerText(update); - showChoices(["apply_changes"]); - console.log(mancerdata["lp-levels"].values); - console.log(abilities); - console.log(previous); -}); - -on("clicked:lp-choices_next", function(eventinfo) { - const mancerdata = getCharmancerData(); - if(mancerdata["lp-levels"].values.asi === "true") { - changeCharmancerPage("lp-asi"); - } else if(mancerdata["lp-levels"].values.spells === "true") { - changeCharmancerPage("lp-spells"); - } else { - changeCharmancerPage("lp-summary"); - } -}); -on("clicked:lp-asi_next", function(eventinfo) { - const mancerdata = getCharmancerData(); - if(mancerdata["lp-levels"].values.spells === "true") { - changeCharmancerPage("lp-spells"); - } else { - changeCharmancerPage("lp-summary"); - } -}); -on("clicked:lp-spells_back", function(eventinfo) { - const mancerdata = getCharmancerData(); - if(mancerdata["lp-levels"].values.asi === "true") { - changeCharmancerPage("lp-asi"); - } else { - changeCharmancerPage("lp-choices"); - } -}); -on("clicked:lp-summary_back", function(eventinfo) { - const mancerdata = getCharmancerData(); - if(mancerdata["lp-levels"].values.spells === "true") { - changeCharmancerPage("lp-spells"); - } else if(mancerdata["lp-levels"].values.asi === "true") { - changeCharmancerPage("lp-asi"); - } else { - changeCharmancerPage("lp-choices"); - } -}); - -//Fixing Bard's Magical Secrets (UC-10) -//By Miguel -//The ways this was being handled before, binded to clicked:repeating_utilityrow_launch, was not being triggered due to the way the DOM is built. -on("clicked:repeating_utilityrow", function(eventinfo) { - if(eventinfo.triggerName.indexOf('utilityrow_launch') === -1) return; - const mancerdata = getCharmancerData(); - var querysettings = {}; - var spelldata = getKnownLpPowers(mancerdata); - var leveldata = _.findWhere(getLevelingData(mancerdata), {classnumber: parseInt(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_parent`][5])}); - var query = ""; - let newspells = 0; - let newprimes = 0; - var spellnames = []; - var current = []; - var locked = []; - var update = {}; - update[`${eventinfo.sourceSection} .sheet-warning`] = ""; - try { - querysettings = JSON.parse(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]); - } catch(e) { - querysettings = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]; - }; - if(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`]) current = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`].split(", "); - if(mancerdata["lp-spells"] && mancerdata["lp-spells"].repeating) { - _.each(mancerdata["lp-spells"].repeating, function(repid) { - if(mancerdata["lp-spells"].values[`${repid}_checked`]) { - spelldata[mancerdata["lp-spells"].values[`${repid}_name`]] = { - level: mancerdata["lp-spells"].values[`${repid}_level`], - spellclass: mancerdata["lp-spells"].values[`${repid}_class`] - } - } - }); - } - _.each(current, function(currentspell) { - delete spelldata[currentspell]; - }) - if(querysettings.Known) { - if(querysettings.Level + "" === "0") { - newprimes = 1; - } else { - newspells = 1; - } - _.each(spelldata, function(spell, spellname) { - if(!querysettings.Level || (querysettings.Level && querysettings.Level == spell.level)) spellnames.push(spellname); - }); - if(spellnames.length > 0) { - query = "Category:Powers Name:" + spellnames.join("|"); - } else { - update[`${eventinfo.sourceSection} .sheet-warning`] = `You do not currently know any level ${querysettings.Level} spells.`; - setCharmancerText(update); - } - } else { - query = "Category:Powers"; - if(querysettings.Level) { - let levels = [querysettings.Level]; - if(querysettings.Level == "max") { - levels = []; - for(let x=1; x<=leveldata.maxspell; x++) { - levels.push(x); - } - } - query += " Level:" + levels.join("|"); - }; - if(querysettings.List && querysettings.List.toLowerCase() !== "any") { - query += " Classes:*" + querysettings.List; - }; - if(querysettings.Level + "" === "0") { - newprimes = querysettings.Number ? parseInt(querysettings.Number) : 1; - } else { - newspells = querysettings.Number ? parseInt(querysettings.Number) : 1; - } - locked = _.keys(spelldata); - } - if(query) { - setCharmancerText(update); - changeCharmancerPage("lp-spellchoice", function() { - getCompendiumQuery([query], function(data) { - data = removeDuplicatedPageData(data); - let byLevel = {}; - let filters = {}; - let filtered = []; - let toSet = {}; - let update = {}; - update["instructions"] = querysettings.HelpText; - console.log(data); - _.each(querysettings, function(setting, key) { - if(!["Level","List","Number","Type","ButtonText","HelpText", "Known", "Class"].includes(key)) { - filters[key] = setting; - } - }); - console.log(filters); - if(querysettings.Known) { - delete querysettings.Level; - } - delete querysettings.Known; - _.each(data, function(spell) { - let match = true; - _.each(filters, function(value, name) { - if(spell.data[name] !== value) match = false; - }) - if(match) filtered.push(spell); - }); - console.log(filtered); - _.each(filtered, function(spell) { - if(spell.data.Classes) { - byLevel[spell.data.Level] = byLevel[spell.data.Level] || []; - byLevel[spell.data.Level].push({ - name: spell.name, - classes: spell.data.Classes.split(",").map(x => x.trim()), - level: parseInt(spell.data.Level) - }); - } - }); - toSet.newspells = newspells; - toSet.newprimes = newprimes; - toSet.valid = "now"; - toSet.source = eventinfo.sourceSection; - setCharmancerText(update); - setAttrs(toSet, function() { - addSpellSections(byLevel, { - newprimes: newprimes, - newspells: newspells, - page: "lp-spellchoice", - selected: current, - locked: locked - }); - }); - }); - });/**/ - } -}); - -//TODO: Investigate if the duplicated event below listener can be removed -//By Miguel -on("clicked:repeating_utilityrow_launch", function(eventinfo) { - const mancerdata = getCharmancerData(); - var querysettings = {}; - var spelldata = getKnownLpPowers(mancerdata); - var leveldata = _.findWhere(getLevelingData(mancerdata), {classnumber: parseInt(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_parent`][5])}); - var query = ""; - let newspells = 0; - let newprimes = 0; - var spellnames = []; - var current = []; - var locked = []; - var update = {}; - update[`${eventinfo.sourceSection} .sheet-warning`] = ""; - try { - querysettings = JSON.parse(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]); - } catch(e) { - querysettings = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]; - }; - if(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`]) current = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`].split(", "); - if(mancerdata["lp-spells"] && mancerdata["lp-spells"].repeating) { - _.each(mancerdata["lp-spells"].repeating, function(repid) { - if(mancerdata["lp-spells"].values[`${repid}_checked`]) { - spelldata[mancerdata["lp-spells"].values[`${repid}_name`]] = { - level: mancerdata["lp-spells"].values[`${repid}_level`], - spellclass: mancerdata["lp-spells"].values[`${repid}_class`] - } - } - }); - } - _.each(current, function(currentspell) { - delete spelldata[currentspell]; - }) - if(querysettings.Known) { - if(querysettings.Level + "" === "0") { - newprimes = 1; - } else { - newspells = 1; - } - _.each(spelldata, function(spell, spellname) { - if(!querysettings.Level || (querysettings.Level && querysettings.Level == spell.level)) spellnames.push(spellname); - }); - if(spellnames.length > 0) { - query = "Category:Powers Name:" + spellnames.join("|"); - } else { - update[`${eventinfo.sourceSection} .sheet-warning`] = `You do not currently know any level ${querysettings.Level} spells.`; - setCharmancerText(update); - } - } else { - query = "Category:Powers"; - if(querysettings.Level) { - let levels = [querysettings.Level]; - if(querysettings.Level == "max") { - levels = []; - for(let x=1; x<=leveldata.maxspell; x++) { - levels.push(x); - } - } - query += " Level:" + levels.join("|"); - }; - if(querysettings.List && querysettings.List.toLowerCase() !== "any") { - query += " Classes:*" + querysettings.List; - }; - if(querysettings.Level + "" === "0") { - newprimes = querysettings.Number ? parseInt(querysettings.Number) : 1; - } else { - newspells = querysettings.Number ? parseInt(querysettings.Number) : 1; - } - locked = _.keys(spelldata); - } - if(query) { - setCharmancerText(update); - changeCharmancerPage("lp-spellchoice", function() { - getCompendiumQuery([query], function(data) { - data = removeDuplicatedPageData(data); - let byLevel = {}; - let filters = {}; - let filtered = []; - let toSet = {}; - let update = {}; - update["instructions"] = querysettings.HelpText; - console.log(data); - _.each(querysettings, function(setting, key) { - if(!["Level","List","Number","Type","ButtonText","HelpText", "Known", "Class"].includes(key)) { - filters[key] = setting; - } - }); - console.log(filters); - if(querysettings.Known) { - delete querysettings.Level; - } - delete querysettings.Known; - _.each(data, function(spell) { - let match = true; - _.each(filters, function(value, name) { - if(spell.data[name] !== value) match = false; - }) - if(match) filtered.push(spell); - }); - console.log(filtered); - _.each(filtered, function(spell) { - if(spell.data.Classes) { - byLevel[spell.data.Level] = byLevel[spell.data.Level] || []; - byLevel[spell.data.Level].push({ - name: spell.name, - classes: spell.data.Classes.split(",").map(x => x.trim()), - level: parseInt(spell.data.Level) - }); - } - }); - toSet.newspells = newspells; - toSet.newprimes = newprimes; - toSet.valid = "now"; - toSet.source = eventinfo.sourceSection; - setCharmancerText(update); - setAttrs(toSet, function() { - addSpellSections(byLevel, { - newprimes: newprimes, - newspells: newspells, - page: "lp-spellchoice", - selected: current, - locked: locked - }); - }); - }); - });/**/ - } -}); - -on("page:lp-spellchoice", function() { - const mancerdata = getCharmancerData(); - if(mancerdata["lp-spellchoice"] && mancerdata["lp-spellchoice"].values.valid === "now") { - changeCharmancerPage("lp-choices", function() { - deleteCharmancerData(["lp-spellchoice"]); - }); - } -}); - -on("mancerchange:repeating_utilityrow_result", function(eventinfo) { - if(eventinfo.sourceSection) { - const mancerdata = getCharmancerData(); - let update = {}; - console.log(`${eventinfo.sourceSection}_title`); - update[`${eventinfo.sourceSection} label span .sheet-result`] = eventinfo.newValue; - console.log(update); - setCharmancerText(update); - } -}); - -on("clicked:lp-spellchoice_back", function(eventinfo) { - const mancerdata = getCharmancerData(); - const leveldata = getLevelingData(mancerdata); - let result = []; - let source = mancerdata["lp-spellchoice"].values.source; - let newspells = false; - let spellsettings = {}; - if(mancerdata["lp-choices"].values[`${source}_info`]) { - spellsettings = JSON.parse(mancerdata["lp-choices"].values[`${source}_info`]); - } - _.each(mancerdata["lp-spellchoice"].repeating, function(repid) { - if(mancerdata["lp-spellchoice"].values[`${repid}_checked`] && !mancerdata["lp-spellchoice"].values[`${repid}_existing`]) result.push(mancerdata["lp-spellchoice"].values[`${repid}_name`]); - }); - if(mancerdata["lp-choices"].values[`${source}_type`] !== "trait") { - const thisclass = _.findWhere(leveldata, {classnumber: parseInt(mancerdata["lp-choices"].values[`${source}_parent`][5])}); - newspells = {} - _.each(mancerdata["lp-spellchoice"].repeating, function(repid) { - if(mancerdata["lp-spellchoice"].values[`${repid}_checked`] && !mancerdata["lp-spellchoice"].values[`${repid}_existing`]) { - let thisspell = { - ability: thisclass.spellcasting, - spellclass: thisclass.classname, - level: mancerdata["lp-spellchoice"].values[`${repid}_level`] === "0" ? "prime" : mancerdata["lp-spellchoice"].values[`${repid}_level`] - } - if(spellsettings.Type) thisspell.known = spellsettings.Type; - newspells[mancerdata["lp-spellchoice"].values[`${repid}_name`]] = thisspell; - } - }); - } - changeCharmancerPage("lp-choices", function() { - deleteCharmancerData(["lp-spellchoice"]); - let set = {}; - set[`${source}_result`] = result.join(", "); - if(newspells) set[`${source}_spells`] = JSON.stringify(newspells); - setAttrs(set); - }); -}); - -on("mancerfinish:lp-mancer", function(eventinfo) { - console.log("****************************************"); - console.log("****** STARTING FINISH FUNCTION ******"); - console.log("****************************************"); - var doAllDrops = function(dropArray, callback) { - getAttrs(["character_id"], function(v) { - _.each(allAbilities, function(ability) { - v[ability + "_base"] = abilities[ability]; - v[ability + "_mod"] = abilities[ability]; - }); - v.base_level = set["base_level"]; - v["multiclass1_lvl"] = initial["multiclass1_lvl"]; - v["multiclass2_lvl"] = initial["multiclass2_lvl"]; - v["multiclass3_lvl"] = initial["multiclass3_lvl"]; - v.npc = "0"; - v["class_resource_name"] = previous["class_resource_name"]; - v["other_resource_name"] = previous["other_resource_name"]; - v.speed = previous.speed; - var update = {}; - var callbacks = []; - var totalDrops = dropArray.length; - var x = 0; - callbacks.push(set_level); - callbacks.push(update_race_display); - _.each(dropArray, function(page) { - page.data.Category = page.data.Category ? page.data.Category.replace("@@!!@@", "") : ""; - var dropUpdate = processDrop(page, v, repeating, true); - callbacks = callbacks.concat(dropUpdate.callbacks); - repeating.prof_names = _.uniq(repeating.prof_names.concat(dropUpdate.prof_names)); - update = _.extend(update, dropUpdate.update); - x++; - setCharmancerText({"mancer_progress" :'
    '}); - }); - - callbacks.push( function() {update_ac();} ); - callbacks.push( function() {update_weight();} ); - callbacks.push(callback); - console.log(update); - setAttrs(update, {silent: true}, function() { - setCharmancerText({"mancer_progress" :'
    '}); - _.each(callbacks, function(callback) { - callback(); - }); - });/**/ - }); - }; - var getOtherDrops = function(pagedata) { - var results = []; - if(pagedata["data-Equipment"]) { - console.log("ADDING ADDITIONAL ITEMS:"); - var json = {}; - try { - json = JSON.parse(pagedata["data-Equipment"]); - } catch(e) { - json = pagedata["data-Equipment"]; - } - var newItems = makeItemData(json.default); - results = results.concat(newItems); - } - if(pagedata["data-Bundle"]) { - console.log("ADDING ADDITIONAL ITEMS (FROM BUNDLE):"); - var json = {}; - try { - json = JSON.parse(pagedata["data-Bundle"]); - } catch(e) { - json = pagedata["data-Bundle"]; - } - var newItems = makeItemData(json); - results = results.concat(newItems); - } - return results; - }; - var getAllPages = function(pageArray, callback) { - if(pageArray.length < 1) { - callback(); - return; - } - var getNames = []; - _.each(pageArray, function(page){ - if(page.name) { - getNames.push(page.name); - } else { - getNames.push(page); - } - }); - getCompendiumPage(getNames, function(data) { - data = removeDuplicatedPageData(data); - var nextGet = []; - if (getNames.length === 1) { data = {0:data} }; //Fix single spell selections failing. - _.each(data, function(page, index) { - var pagedata = false; - _.each(pageArray, function(arrayData) { - if(arrayData.name.toLowerCase() == (page.data.Category + ":" + page.name).toLowerCase()) { - pagedata = arrayData; - } - }); - if(pagedata && pagedata.data) { - page.data = _.extend(page.data, pagedata.data); - } - if(!page.id) page.data.Source = "Charactermancer"; - page.name = page.name.replace(/@@!!@@/g,""); // Hacky bugfix to prevent custom names from matching unavailable content - nextGet = nextGet.concat(getOtherDrops(page.data)); - if(page.data["data-Starting Cubil"] && !noEquipmentDrop) { - set["cu"] += parseInt(page.data["data-Starting Money"]); - } - allPageData.push(page); - }); - - if(nextGet.length > 0) { - console.log("DOING ANOTHER GET!!"); - getAllPages(nextGet, callback); - } else { - callback(); - } - - }); - }; - var startTime = Date.now(); - var allPageData = []; - var data = eventinfo.data; - var blobs = getAllLpBlobs(data, true); - var leveldata = getLevelingData(data); - var racedata = getLpRaceData(data, leveldata); - var abilities = getAbilityTotals(data, blobs); - var previous = data["lp-welcome"].values["previous_attributes"] ? JSON.parse(data["lp-welcome"].values["previous_attributes"]) : {}; - var repeating = data["lp-welcome"].values["previous_repeating"] ? JSON.parse(data["lp-welcome"].values["previous_repeating"]) : {}; - var spelldata = data["lp-welcome"].values["spellinfo"] ? JSON.parse(data["lp-welcome"].values["spellinfo"]) : {}; - var customtraits = {race: [], subrace: [], class: [], subclass: [], background: []}; - var profs = getProficiencies(data, "lp-finish", blobs); - var removesections = []; - var loudset = {}; - var set = {}; - var initial = {}; - var allDrops = []; - var currentDrop = 0; - var totalDrops = 1; - var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "astrophysics", "lore", "investigation", "xenobiology", "computers", "mechanics", "insight", "medicine", "perception", "survival", "deception", "intimidation", "performance", "persuasion", "piloting"]; - var allAbilities = abilityList.map(function(x) {return x.toLowerCase()}); - set["lp-mancer_status"] = ""; - console.log(blobs); - // Build new blobs for traits with inputs, collect custom traits and languages - _.each(["lp-choices", "lp-asi"], function(pagename) { - var slide = data[pagename]; - if(slide) { - console.log(slide); - _.each(slide.values, function(value, name) { - if(name.substr(-11) == "trait_input") { - let sectionid = name.substring(0, name.length - 6); - let thisblob = {}; - let thistrait = {}; - let classnumber = _.last(slide.values[sectionid + "_section"].split("--")[0].split("-")); - let sectionname = "class" + classnumber; - if(slide.values[sectionid + "_section"].includes("subclass")) sectionname += "_subclass"; - let thissection = _.findWhere(leveldata, {classnumber: parseInt(classnumber)}); - thistrait.Name = slide.values[sectionid + "_name"].replace(/{{Input}}/g, value); - thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"].replace(/{{Input}}/g, value) : ""; - thisblob.Traits = JSON.stringify([thistrait]); - blobs.names[sectionname].push(sectionid); - thissection[slide.values[sectionid + "_section"].includes("subclass") ? "subclass" : "class"].blobs[sectionid] = thisblob; - } - if(name.split("_")[2] == "custom" && name.substr(-10) == "trait_name") { - var sectionid = name.substring(0, name.length - 5); - var thistrait = {}; - thistrait.Name = slide.values[sectionid + "_name"]; - thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"] : ""; - customtraits[name.split("_")[3]].push(thistrait); - } - if(value == "custom" && name.substr(-18) == "proficiency_choice") { - var sectionid = name.substring(0, name.length - 7); - if(slide.values[sectionid + "_custom"] && slide.values[sectionid + "_type"]) { - profs.all[slide.values[sectionid + "_type"]].push(slide.values[sectionid + "_custom"]) - } - } - if(name.substr(-17) === "utilityrow_result") { - let sectionid = name.substring(0, name.length - 7); - let thissection = _.findWhere(leveldata, {classnumber: parseInt(slide.values[sectionid + "_parent"][5])}); - let section = slide.values[sectionid + "_parent"].includes("subclass") ? "subclass" : "class"; - if(thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits) thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits = thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits.replace(/{{Input}}/g, value); - } - }); - } - }); - _.each(leveldata, function(level) { - var name = "class" + level.classnumber; - var mc = "multiclass" + (level.classnumber - 1); - var thisclass = {name: removeExpansionInfo(level.classname), data: level.class}; - //if this is an mc class, add mc data - if(name != "class1") thisclass.data.multiclass = mc; - thisclass.data.theseblobs = blobs.names[name]; - allPageData.push(thisclass); - if(level.subclass) { - var thissubclass = {name: removeExpansionInfo(level.subclassname), data: level.subclass}; - //if this is an mc subclass, add mc data - if(name != "class1") thissubclass.data.multiclass = mc; - thissubclass.data.theseblobs = blobs.names[name + "_subclass"]; - allPageData.push(thissubclass); - } - //set up the setAttrs for this class - if(name === "class1") { - set["base_level"] = parseInt(previous["base_level"]) + level.addlevel; - } else { - initial[mc + "_lvl"] = previous[mc + "_flag"] === "0" ? level.addlevel : parseInt(previous[mc + "_lvl"]) + level.addlevel; - } - }); - _.each(racedata, function(level, label) { - _.each(["", "sub"], function(prefix) { - let section = prefix + label; - if(previous[section] && blobs.names[section] && blobs.names[section].length > 0) { - let thisDrop = {name: previous[section], data: {Category: section[0].toUpperCase() + section.substring(1, section.length) + "s"}}; - thisDrop.data.blobs = data["lp-welcome"].data["lp-" + section].blobs; - thisDrop.data.theseblobs = blobs.names[section]; - allPageData.push(thisDrop); - } - }); - }); - //Set up proficiency drops - _.each(["Armor", "Language", "Tool", "Weapon"], function(proftype) { - _.each(profs.all[proftype], function(prof) { - if(prof) { - var profdata = {name: "Proficiencies:" + prof, data: {Type: proftype}} - if(profs.all.Expertise.includes(prof)) { - profdata.data["toolbonus_base"] = "(@{pb}*2)"; - allDrops.unshift(profdata); - } else { - allDrops.push(profdata); - } - }; - }); - }); - console.log(profs.all); - //Set up expertise drops - _.each(_.uniq(profs.all.Skill.concat(profs.all.Expertise)), function(prof) { - var profName = prof.toLowerCase().replace(/ /g, "_"); - initial[profName + "_prof"] = "(@{pb}*@{" + profName + "_type})"; - if(profs.all.Expertise.indexOf(prof) != -1) { - set[profName + "_type"] = 2; - } - }); - //Set up Ability scores - initial["hp"] = getHpTotal(data, blobs); - initial["hp_max"] = initial["hp"]; - _.each(allAbilities, function(ability) { - loudset[ability + "_base"] = abilities[ability]; - loudset[ability + "_maximum"] = abilities[ability + "_maximum"]; - }); - //Set up spell drops - if(data["lp-spells"] && data["lp-spells"].repeating) { - _.each(data["lp-spells"].repeating, function(repid) { - if(data["lp-spells"].values[repid + "_checked"]) { - var spelldata = {name: "Powers:" + data["lp-spells"].values[repid + "_name"], data: {}}; - if(data["lp-spells"].values[repid + "_ability"]) spelldata.data["spellcasting_ability"] = data["lp-spells"].values[repid + "_ability"]; - if(data["lp-spells"].values[repid + "_class"]) spelldata.data["spellclass"] = data["lp-spells"].values[repid + "_class"]; - if(data["lp-spells"].values[repid + "_source"]) spelldata.data["spellsource"] = data["lp-spells"].values[repid + "_source"]; - allDrops.push(spelldata); - } - if(data["lp-spells"].values[repid + "_existing"] && !data["lp-spells"].values[repid + "_checked"]) { - var lvl = data["lp-spells"].values[repid + "_level"]; - var id = ""; - _.each(repeating["spell-" + lvl], function(spell, spellid) { - if(spell.spellname.toLowerCase() == data["lp-spells"].values[repid + "_name"].toLowerCase()) { - id = spellid; - if(spell.spellattackid) removesections.push("repeating_attack_" + spell.spellattackid); - }; - }); - removesections.push("repeating_spell-" + lvl + "_" + id); - } - }); - } else { - //If there was no spell page, need to drop any new "known" spells - _.each(blobs.sorted, function(section, name) { - _.each(section, function(blob) { - if(blob.Powers) { - spells = JSON.parse(blob.Powers); - _.each(spells, function(spell) { - if(spell.Known) { - _.each(spell.Known, function(spellname) { - var thisspell = {name: "Powers:" + spellname, data: {}}; - var thisclass = name.substring(0,5) === "class" ? _.last(data["lp-levels"].values[name.split("_")[0]].split(":")) : "Racial"; - if(spell.Ability) thisspell.data["spellcasting_ability"] = spell.Ability; - if(spell.Source) thisspell.data["spellsource"] = spell.Source; - thisspell.data["spellclass"] = thisclass; - allDrops.push(thisspell); - }); - }; - }); - }; - }); - }); - }; - //Gater spells from class features - _.each(data, function(page, pagename) { - if(pagename.split("-")[0] == "lp") { - _.each(page.values, function(value, name) { - if(name.substr(-18) === "_utilityrow_spells") { - let featurespells = JSON.parse(value); - _.each(featurespells, function(spell, spellname) { - var thisspell = {name: "Powers:" + spellname, data: {}}; - if(spell.ability) thisspell.data["spellcasting_ability"] = spell.ability; - if(spell.known) thisspell.data["spellsource"] = spell.known; - if(spell.spellclass) thisspell.data["spellclass"] = spell.spellclass; - allDrops.push(thisspell); - }) - } - }); - } - }); - //unset charmancer step - set["lpmancer_status"] = ""; - set["charactermancer_step"] = "lp-welcome"; - console.log(allDrops); - console.log(allPageData); - _.each(removesections, function(rowid) { - removeRepeatingRow(rowid); - }); - setCharmancerText({"mancer_progress" :'
    '}); - //first set is silent to prevent unwanted sheet workers - setAttrs(initial, {silent:true}, function() { - setCharmancerText({"mancer_progress" :'
    '}); - //reset remaining attributes, and set ability scores/custom info - setAttrs(loudset, function() { - setCharmancerText({"mancer_progress" :'
    '}); - getAllPages(allDrops, function() { - setCharmancerText({"mancer_progress" :'
    '}); - doAllDrops(allPageData, function() { - console.log("DOING THE FINAL SET!!"); - setAttrs(set, function() { - setCharmancerText({"mancer_progress" :'
    '}); - organize_section_proficiencies(); - update_skills(allSkills); - update_attacks("all"); - deleteCharmancerData(["lp-welcome", "lp-levels", "lp-choices", "lp-asi", "lp-spells","lp-summary"]); - var endTime = Date.now(); - console.log("Elapsed time: "); - console.log((endTime-startTime)/1000); - finishCharactermancer(); - }); - }); - }); - }); - }); -}); const classRelatedAttrs = ['class', 'subclass', 'base_level', 'multiclass1_flag', 'multiclass1', 'multiclass1_subclass', 'multiclass1_lvl', 'multiclass2_flag','multiclass2', 'multiclass2_subclass', 'multiclass2_lvl', 'multiclass3_flag', 'multiclass3', 'multiclass3_subclass', 'multiclass3_lvl']; const getTalentPointsAndMastery = callback => { @@ -10753,24 +3628,66 @@ const getTalentPointsAndMastery = callback => { }); }; +const setTalentPointsAndMastery = () => { + getTalentPointsAndMastery((talentPoints, mastery) => { + console.log('CALCULATING TALENT POINTS AND ESPER MASTERY'); + let update = { + tp_max:talentPoints, + mastery_6th: 0, + mastery_7th: 0, + mastery_8th: 0, + mastery_9th: 0 + } + for(let i=0; i { on(`change:${attr}`, evenInfo => { - getTalentPointsAndMastery((talentPoints, mastery) => { - console.log('CALCULATING TALENT POINTS AND ESPER MASTERY'); - let update = { - tp_max:talentPoints, - mastery_6th: 0, - mastery_7th: 0, - mastery_8th: 0, - mastery_9th: 0 - } - for(let i=0; i=1; i--) { + damagec = damagec.replace(`${i}d`, `${i*2}d`); + } + damagec = damagec.replace(/\bd(?=[0-9])/g, '2d'); + return damagec; +}; +var addShipDamageType = function(damage, type) { + if(!damage || !type) return damage; + return `${damage} [${type}]`; +} +on("change:repeating_weapon-systems", eventinfo => { + if(!eventinfo.sourceType || eventinfo.sourceType != 'player' || eventinfo.sourceAttribute.includes('atkdmg')) return; + const id = SheetUtils.getUID(eventinfo.triggerName); + const pre = `repeating_weapon-systems_${id}`; + const weaponAttributes = ['gunner', 'weapon', 'range', 'tohit', 'damage', 'dmgtype', 'special', 'ammo', 'recharge'].map(attr => { return `${pre}_${attr}`; }); + getAttrs(weaponAttributes, values => { + if(values[`${pre}_damage`]) { + const damage = addShipDamageType(values[`${pre}_damage`], values[`${pre}_dmgtype`]); + const damagec = addShipDamageType(calcShipAtkdmgc(values[`${pre}_damage`]), values[`${pre}_dmgtype`]); + const atkdmg = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damage}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{pc_ship_name} {{licensedsheet=@{licensedsheet}}}`; + const atkdmgc = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damagec}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{pc_ship_name} {{licensedsheet=@{licensedsheet}}}`; + const update = { + [`${pre}_atkdmg`]: atkdmg, + [`${pre}_atkdmgc`]: atkdmgc, + } + setAttrs(update, {silent: true}); + } + }); +}); + + //# sourceURL=espergenesis.js diff --git a/Esper_Genesis_5E/src/charactermancer/l1/class.html b/Esper_Genesis_5E/src/charactermancer/l1/class.html new file mode 100644 index 0000000000..1e61e4916a --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/l1/class.html @@ -0,0 +1,164 @@ + + +
    +
      +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    + + Saving Throw Proficiency: + + + + + + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + + + +
    +
    + + +
    +
    +

    Equipment

    + +
    +
    +
    + +
    + +
    +
    +
    +
    + + + +
    +
    +

    Where would you like to go, Traveler?

    + + + +

    Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly.

    +
    +
    +
    diff --git a/Esper_Genesis_5E/src/charactermancer/l1/l1.html b/Esper_Genesis_5E/src/charactermancer/l1/l1.html index ecef1b17d3..9e8aa76784 100644 --- a/Esper_Genesis_5E/src/charactermancer/l1/l1.html +++ b/Esper_Genesis_5E/src/charactermancer/l1/l1.html @@ -1,6 +1,5 @@
    -
    @@ -33,7 +32,6 @@
    -
    @@ -55,25 +53,56 @@
    @@ -499,6 +579,14 @@ Charisma:
    +
    + Honor: + +
    +
    + Sanity: + +
    @@ -525,7 +613,6 @@
    -
    @@ -539,7 +626,7 @@
    @@ -639,14 +726,14 @@
    -
    - + +

    You have not yet selected a class. @@ -654,7 +741,7 @@

    You have created a custom class; you can add equipment to the character sheet after you have finished the Charactermancer.

    -

    +

    Pick your equipment: Class: ()

    @@ -666,24 +753,24 @@
    -
    -

    +

    +

    Equipment from Class ()

    - Starting Cubil: + Starting Gold:

    - +

    -

    - +
    +

    @@ -739,8 +826,8 @@ Equipment from Background ()

    -

    - You have chosen starting cubil and do not get equipment from your background. +

    + You have chosen starting gold and do not get equipment from your background.

    @@ -793,18 +880,17 @@

    -
    -

    Cosmic forces are a mystery to you.

    -

    Your character doesn't have spells at this level. Click "Next" to review your character!

    +

    The Arcane is a mystery to you.

    +

    Your character doesn't have spells at this level. Click “Next” to review your character!

    -
    +
    @@ -828,7 +914,6 @@
    -
    @@ -991,6 +1076,14 @@

    +
    + +
    @@ -1014,7 +1107,6 @@
    -
    @@ -1078,7 +1170,6 @@
    -
    @@ -1132,7 +1223,7 @@
    -

    Powers

    +

    Spells

    @@ -1170,7 +1261,6 @@
    -

    Building your character...

    diff --git a/Esper_Genesis_5E/src/charactermancer/l1/l1.js b/Esper_Genesis_5E/src/charactermancer/l1/l1.js new file mode 100644 index 0000000000..ccc374ce66 --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/l1/l1.js @@ -0,0 +1,3834 @@ + + /*********************************************************************/ + /*********************************************************************/ + /****** ******/ + /****** CHARACTERMANCER WORKERS ******/ + /****** ******/ + /*********************************************************************/ + /*********************************************************************/ + + var proficiencyList = ["Weapon", "Armor", "Skill", "Tool", "Language"]; + var changeListeners = "mancerchange:race_ability_choice1 mancerchange:race_ability_choice2 mancerchange:subrace_ability_choice1 mancerchange:subrace_ability_choice2 mancerchange:custom_hit_die mancerchange:feat_ability_choice"; + var tashaListeners = []; + for(let i=1; i<=6; i++) { + tashaListeners.push(`mancerchange:tasha_race_ability_choice${i}`); + tashaListeners.push(`mancerchange:tasha_subrace_ability_choice${i}`); + } + changeListeners += ' ' + tashaListeners.join(' '); + var proficiencyNum = 4; + var customListeners = ""; + _.each(abilityList, function(ability){ + changeListeners += " mancerchange:race_custom_" + ability.toLowerCase(); + changeListeners += " mancerchange:subrace_custom_" + ability.toLowerCase(); + }); + + /* HELPER FUNCTIONS */ + var showOptionalAttributeFields = function() { + const optionalAttributesClasses = SheetUtils.toLowerCase(abilityListEnabledOptionals).map(key => `sheet-${key}_toggle`); + optionalAttributesClasses.forEach(attribute => { + showChoices([attribute]); + }); + } + var setValidExpertiseOptions = function(slide, selector, addOptions) { + addOptions = addOptions || []; + const selectedSkills = getProficiencies(getCharmancerData(), slide)['all']['Skill']; + const newOptions = Array.from(new Set(selectedSkills.concat(addOptions))); + setCharmancerOptions(selector, newOptions, {category:"Expertise"}); + } + var recalcData = function(data) { + //Sets all the text in the top bar, returns ability information + var update = {"hit_points": "-"}; + var allAbilities = {race: {}, subrace: {}, feat: {}}; + var disableAbilities = {race: [], subrace: [], feat: []}; + var allProficiencies = {}; + var toSet = {}; + var mancerdata = data || getCharmancerData(); + var additionalHP = 0; + const usingTasha = isTashaEnabled(mancerdata); + + if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Suggested Abilities"]) { + update["class_suggested_abilities"] = mancerdata["l1-class"].data.class["Suggested Abilities"]; + showChoices(["class_suggested_abilities_container"]); + } else { + update["class_suggested_abilities"] = ""; + hideChoices(["class_suggested_abilities_container"]); + } + if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"]) { + update["class_spellcasting_ability"] = mancerdata["l1-class"].data.class["Spellcasting Ability"]; + showChoices(["class_spellcasting_ability_container"]); + } else { + update["class_spellcasting_ability"] = ""; + hideChoices(["class_spellcasting_ability_container"]); + } + + _.each(mancerdata, function(page) { + if(usingTasha) { + _.each(page.values, function(value, name) { + if(name.search("ability") !== -1 && name.search("tasha") !== -1 && (name.length == 26 || name.length == 29) && page.values[`${name}_increase`]) { + const choiceSection = name.split("_")[1]; + const increase = parseInt(page.values[`${name}_increase`]); + allAbilities[choiceSection] = allAbilities[choiceSection] || {}; + allAbilities[choiceSection][value.toLowerCase()] = increase; + disableAbilities[choiceSection] = disableAbilities[choiceSection] || []; + disableAbilities[choiceSection].push(value); + } + }); + } else { + _.each(page.values, function(value, name) { + if(name.search("ability") !== -1) { + var choiceSection = name.split("_")[0]; + if(page.data[choiceSection] && page.data[choiceSection]["data-Ability Score Choice"]) { + var increase = 1; + if(typeof page.data[choiceSection]["data-Ability Score Choice"] == "string") { + increase = parseInt( _.last( page.data[choiceSection]["data-Ability Score Choice"].split("+") ) ); + } + allAbilities[choiceSection] = allAbilities[choiceSection] || {}; + allAbilities[choiceSection][value.toLowerCase()] = increase; + disableAbilities[choiceSection] = disableAbilities[choiceSection] || []; + disableAbilities[choiceSection].push(value); + } + } + }); + _.each(page.data, function(pagedata, increaseSection) { + if(!usingTasha) + if(pagedata["data-Ability Score Increase"]) { + _.each(pagedata["data-Ability Score Increase"], function(amount, ability) { + allAbilities[increaseSection] = allAbilities[increaseSection] || {}; + allAbilities[increaseSection][ability.toLowerCase()] = amount; + disableAbilities[increaseSection] = disableAbilities[increaseSection] || []; + disableAbilities[increaseSection].push(ability.toLowerCase()); + }); + } + //TODO: Investigate if additional hitpoits at first level could be calculated and interted at this point + //By Miguel + if(pagedata["data-HP per level"]) { + additionalHP += pagedata["data-HP per level"]; + } + }); + } + }); + if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races") { + _.each(abilityList, function(ability){ + var custom = mancerdata["l1-race"].values["race_custom_" + ability.toLowerCase()] || false; + if(custom) { + allAbilities.race[ability.toLowerCase()] = parseInt(custom); + } + }); + } + if(mancerdata["l1-race"] && mancerdata["l1-race"].values.subrace == "Rules:Races") { + _.each(abilityList, function(ability){ + var custom = mancerdata["l1-race"].values["subrace_custom_" + ability.toLowerCase()] || false; + if(custom) { + allAbilities.subrace[ability.toLowerCase()] = parseInt(custom); + } + }); + } + var abilityTotals = {}; + _.each(allAbilities, function(abilities) { + _.each(abilities, function(amount, ability) { + abilityTotals[ability] = abilityTotals[ability] || {bonus: 0}; + abilityTotals[ability].bonus += parseInt(amount); + }); + }); + _.each(abilityList, function(upperAbility) { + var ability = upperAbility.toLowerCase(); + abilityTotals[ability] = abilityTotals[ability] || {bonus: 0, mod: 0}; + if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values[ability]) { + abilityTotals[ability].base = parseInt( mancerdata["l1-abilities"].values[ability].split("~")[0] ); + } else { + abilityTotals[ability].base = 0; + } + abilityTotals[ability].total = abilityTotals[ability].bonus + abilityTotals[ability].base; + abilityTotals[ability].mod = Math.floor((abilityTotals[ability].total - 10)/2); + update[ability + "_total"] = abilityTotals[ability].total == 0 ? "-" : abilityTotals[ability].total; + }); + allAbilities.totals = abilityTotals; + + if(mancerdata["l1-class"] && (mancerdata["l1-class"].data.class || mancerdata["l1-class"].values["custom_hit_die"])) { + var basehp = mancerdata["l1-class"].data.class ? mancerdata["l1-class"].data.class["Hit Die"] : mancerdata["l1-class"].values["custom_hit_die"]; + var conmod = abilityTotals.constitution.base > 0 ? abilityTotals.constitution.mod : 0; + //Calculating additional hitpoints at first level from things like Draconic Bloodline ad Hill Dwarf + //By Miguel + let additionalHitPointsFromClassAndRaceAtFirstLevel = getAdditionalHitPointsFromClassAndRaceAtFirstLevel(getRelevantBlobs(mancerdata, '1', 'l1')); + allAbilities.hp = parseInt(basehp.replace("d", "")) + additionalHitPointsFromClassAndRaceAtFirstLevel + additionalHP + conmod; + update["hit_points"] = allAbilities.hp; + } + + if(!data) { + let tashaDisabled = []; + _.each(disableAbilities, function(disable, disablesection) { + disableCharmancerOptions(disablesection + "_ability_choice1", disable); + disableCharmancerOptions(disablesection + "_ability_choice2", disable); + tashaDisabled = tashaDisabled.concat(disable); + }); + if(isTashaEnabled()) { + for(let i=1; i<=6; i++) { + disableCharmancerOptions(`tasha_race_ability_choice${i}`, tashaDisabled); + disableCharmancerOptions(`tasha_subrace_ability_choice${i}`, tashaDisabled); + } + } + setCharmancerText(update); + showOptionalAttributeFields(); + setAttrs(toSet); + } + return allAbilities; + }; + + var getProficiencies = function(data, currentSlide, blobs) { + //Disables taken proficiency choices, returns proficiency info + var auto = {}; + var allProficiencies = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": [], "Expertise": []}; + var toSet = {}; + var mancerdata = data || getCharmancerData(); + var thismancer = currentSlide && currentSlide != "finish" ? currentSlide.split("-")[0] : "l1"; + if(!blobs) { + blobs = thismancer == "l1" ? blobs = getRelevantBlobs(mancerdata, "1", "l1") : blobs = getAllLpBlobs(data, true); + } + if(thismancer !== "l1") allProficiencies = data["lp-welcome"].values["previous_proficiencies"] ? JSON.parse(data["lp-welcome"].values["previous_proficiencies"]) : allProficiencies; + currentSlide = currentSlide == "lp-finish" ? "finish" : currentSlide; + //For this first part, we're only concerned with choices that have already been made + //Get all of the "automatic" proficiencies + _.each(blobs.sorted, function(blobarray, section) { + _.each(blobarray, function(blob) { + _.each(proficiencyList, function(prof) { + if(blob[prof + " Proficiency"]) { + var json = JSON.parse(blob[prof + " Proficiency"]); + if(json.Proficiencies) { + auto[section] = auto[section] ? auto[section].concat(json.Proficiencies) : json.Proficiencies; + allProficiencies[prof] = allProficiencies[prof].concat(json.Proficiencies); + } + } + }); + if(blob.Expertise) { + var json = JSON.parse(blob.Expertise); + if(json.Proficiencies) { + allProficiencies.Expertise = allProficiencies.Expertise.concat(json.Proficiencies); + } + } + }); + }); + //Gather all of the chosen proficiencies + _.each(mancerdata, function(slide, slidename) { + if(slidename.split("-")[0] == thismancer) { + _.each(proficiencyList, function(prof) { + _.each(slide.values, function(value, name) { + if(name.split("_")[3] == prof.toLowerCase() && name.split("_")[4] == "choice") { + if(value && value != "custom" && value.includes(':')) allProficiencies[prof].push(value.split(":")[1]); + } + }); + }); + //Get a list of chosen expertise + _.each(slide.values, function(value, name) { + if(name.includes("expertise_choice")) { + allProficiencies.Expertise.push(value.split(":")[1]); + } + }); + } + }); + //Gather proficiencies from custom choices + _.each(mancerdata, function(slide, slidename) { + if(slidename.split("-")[0] == thismancer) { + _.each(slide.values, function(value, name) { + if(name.substr(-18) == "proficiency_choice") { + if(value != "custom") allProficiencies[slide.values[name.replace("choice", "type")]].push(value.split(":")[1]); + } + }); + } + }); + //If the expertise choice is from the "known" list, make sure the choice is still available + //Reset to "" if not available. Don't do this if we're applying changes + if(currentSlide != "finish") { + _.each(mancerdata, function(slide, slidename) { + if(slidename.split("-")[0] == thismancer) { + _.each(slide.values, function(value, name) { + if(name.substr(-16) == "expertise_choice" && slide.values[name.replace("choice", "info")]) { + if(!(allProficiencies.Skill.includes(value.split(":")[1]) || allProficiencies.Tool.includes(value.split(":")[1]))) { + toSet[name] = ""; + } + } + }); + } + }); + setAttrs(toSet); + } + if(currentSlide && currentSlide != "finish") { + //Now we need to know all of the selects, even if a choice hasn't been made + //Getting a list of all the relevant selects + var repsecs = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": []}; + var repexp = []; + _.each(mancerdata[currentSlide].repeating, function(id) { + _.each(proficiencyList, function(prof) { + if(_.last(id.split("_")) == prof.toLowerCase()) repsecs[prof].push(id); + }); + if(_.last(id.split("_")) == "expertise") repexp.push(id); + if(_.last(id.split("_")) == "proficiency") { + if (mancerdata[currentSlide].values[id + "_type"]) repsecs[mancerdata[currentSlide].values[id + "_type"]].push(id); + } + }) + //Disable already chosen proficiencies + _.each(proficiencyList, function(prof) { + _.each(repsecs[prof], function(id) { + disableCharmancerOptions(id + "_choice", allProficiencies[prof], {category: "Proficiencies"}); + }); + }); + //Disable already chosen expertise, rebuild options if choice is from "known" list + _.each(repexp, function(id) { + if(mancerdata[currentSlide].values[id + "_info"]) { + var choices = allProficiencies.Skill; + var options = JSON.parse(mancerdata[currentSlide].values[id + "_info"]); + var settings = {category: "Proficiencies", disable: allProficiencies.Expertise, silent: true}; + options.shift(); + settings.add = options; + setCharmancerOptions(id + "_choice", choices, settings); + } else { + disableCharmancerOptions(id + "_choice", allProficiencies.Expertise, {category: "Proficiencies"}); + } + }); + }; + _.each(allProficiencies, function(section, name) { + allProficiencies[name] = _.without(section, ""); + }); + return({auto: auto, all: allProficiencies}); + }; + + var handleAbilities = function(data, section, usingTasha) { + usingTasha = usingTasha || false; + var showList = []; + if(usingTasha) { + let total = []; + if(data["data-Ability Score Increase"]) { + const increase = JSON.parse(data["data-Ability Score Increase"]); + Object.keys(increase).forEach(attr => { + total.push(parseInt(increase[attr])); + }); + + } + if(data["data-Ability Score Choice"]) { + const attrs = parseInt(data["data-Ability Score Choice"][0]); + const bonus = parseInt(data["data-Ability Score Choice"][2]); + for(let i=0; i 0) { + showList.push(section + "_abilities"); + showList.push(`tasha_${section}_enabled`); + let update = {}; + for(let i=1; i<=total.length; i++) { + showList.push(`tasha_${section}_ability_choice${i}`); + update[`tasha_${section}_ability_choice${i}_increase`] = total[i-1]; + } + setAttrs(update); + } + } else { + if(data["data-Ability Score Increase"]) { + showList.push(section + "_abilities"); + showList.push(`tasha_${section}_disabled`); + } + if(data["data-Ability Score Choice"]) { + showList.push(section + "_abilities"); + showList.push(`tasha_${section}_disabled`); + showList.push(section + "_ability_choice1"); + if(data["data-Ability Score Choice"].split("+")[0] == "2") { + showList.push(section + "_ability_choice2"); + } + }; + } + return showList; + }; + + var knownSpells = function(data) { + var mancerdata = data ? data : getCharmancerData(); + var allSpells = { + race: false, + class: false, + known: [], + all: [], + errors: {class: [], race: []} + }; + var stats = recalcData(data); //since this can get called in the finish step, make sure it doesn't call setAttrs() + var racename = getName("race", mancerdata, true); + var subracename = getName("subrace", mancerdata, true); + var classname = getName("class", mancerdata, true); + var subclassname = getName("subclass", mancerdata, true); + var classAbility = mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"] ? mancerdata["l1-class"].data.class["Spellcasting Ability"] : ""; + var expandedList = {}; + var additionalList = {}; + var blobs = getRelevantBlobs(mancerdata, "1", "l1"); + + //First look through all Blobs for any blob.Powers + _.each(blobs.all, function(blob) { + if(blob.Powers) { + var spells = JSON.parse(blob.Powers); + //Examine each spell to determine if it is "Extended List". "Extended List" adds to the classes spell list. + //Ravnica Guilds backgrounds such as Dimir Operative are examples of this + _.each(spells, function(spell) { + if(spell["Expanded List"]) { + expandedList[spell.Level] = expandedList[spell.Level] ? expandedList[spell.Level].concat(spell["Expanded List"]) : spell["Expanded List"]; + } + }); + } + }); + //Look through blobs.sorted. + _.each(blobs.sorted, function(sectionblobs, section) { + //Subclass needs to be changed to class. + var parentsection = section.replace("sub", ""); + additionalList[parentsection] = additionalList[parentsection] || [] + //Examine eaach blob for "Additional Spell List" + _.each(sectionblobs, function(blob) { + if(blob["Additional Spell List"]) { + additionalList[parentsection].push(blob["Additional Spell List"]); + } + }); + }); + //Process spell data from blobs + _.each(blobs.sorted, function(sectionblobs, section) { + var parentsection = section.replace("sub", ""); + _.each(sectionblobs, function(blob) { + //Looks through the blobs for Spells attribute + //class.Powers contains the information for how many spells are choosen at each level & Prepared spells to be selected based on ability modifer + 1 + //[subclass, background, race}.Powers will contain KNOWN, CHOSEN, or EXPANDED LIST for extra spells granted by these sections + if(blob.Powers) { + var spells = JSON.parse(blob.Powers); + allSpells[parentsection] = allSpells[parentsection] || {known: [], choices: []} + _.each(spells, function(spell) { + var numSpells = 0; + expandedList[spell.Level] = expandedList[spell.Level] || []; + //class.Powers will contain Prepared and Choose. + //These are used to populate the number of selects needed for each spell lists on the Spells slide + if(spell.Prepared) { + numSpells = Math.max(stats.totals[spell.Prepared.split("+")[0].toLowerCase()].mod, 0) + parseInt(spell.Prepared.split("+")[1]); + } + if(spell.Choose) { + numSpells = parseInt(spell.Choose); + } + //If Spells are to be Chosen or Prepared add them to a class list, expand the list, and set the Ability modifier & Level + if(numSpells > 0) { + _.times(numSpells, function(n) { + var thisspell = {Level: parseInt(spell.Level)}; + thisspell.List = spell.List ? spell.List : classname; + thisspell.AddList = additionalList[parentsection]; + thisspell.Ability = spell.Ability ? spell.Ability : classAbility; + if(parentsection == "class") thisspell["Expanded List"] = expandedList[spell.Level]; + allSpells[parentsection].choices.push(thisspell); + }); + } + //Add any spells that are already known from sections such as Forge Domain Cleric starts with identify & searing smite + _.each(spell.Known, function(known) { + var thisspell = {Name: known, Level: parseInt(spell.Level)}; + thisspell.Ability = spell.Ability ? spell.Ability : classAbility; + thisspell.Source = parentsection; + allSpells[parentsection].known.push(thisspell); + allSpells.known.push(known); + allSpells.all.push(thisspell); + }); + }); + } + }); + }); + //Collect custom race/subrace spells + if(mancerdata["l1-race"] && mancerdata["l1-race"].values.custom_race_spell_ability) { + var raceAbility = mancerdata["l1-race"].values.custom_race_spell_ability; + var numSpells = mancerdata["l1-race"].values.custom_race_spell_number; + var spellList = mancerdata["l1-race"].values.custom_race_spell_list; + if(spellList) { + allSpells.race = allSpells.race || {known: [], choices: []} + for(var x=1; x<=numSpells; x++) { + var thisSpell = { + Ability: raceAbility, + Level: 0, + List: spellList + }; + allSpells.race.choices.push(thisSpell); + } + } else { + allSpells.errors.race.push("custom_race_spell_list"); + } + } + //Collect custom class spells + if(mancerdata["l1-class"] && mancerdata["l1-class"].values.custom_class_spell_ability) { + var customAbility = mancerdata["l1-class"].values.custom_class_spell_ability; + var customList = mancerdata["l1-class"].values.custom_class_spell_list; + var customSpells = {"0": mancerdata["l1-class"].values.custom_class_cantrip_number, "1": mancerdata["l1-class"].values.custom_class_spell_number}; + if(customList && (customSpells["0"] > 0 || customSpells["1"] > 0)) { + allSpells.class = allSpells.class || {known: [], choices: []} + _.each(customSpells, function(number, level) { + for(var x=1; x<=number; x++) { + var thisSpell = { + Ability: customAbility, + Level: level, + List: customList + }; + allSpells.class.choices.push(thisSpell); + } + }); + } else { + allSpells.errors.class.push("custom_class_spell_list"); + allSpells.errors.class.push("custom_class_spell_number"); + } + } + //Collect custom subclass spells + if(mancerdata["l1-class"] && mancerdata["l1-class"].values.subclass == "Rules:Classes") { + var customSpells = {"0": mancerdata["l1-class"].values.custom_subclass_cantrip_number, "1": mancerdata["l1-class"].values.custom_subclass_spell_number}; + if(customSpells["0"] > 0 || customSpells["1"] > 0) { + allSpells.class = allSpells.class || {known: [], choices: []} + _.each(customSpells, function(number, level) { + var customList = classname.toLowerCase(); + if(level == "0" && mancerdata["l1-class"].values.custom_subclass_cantrip_list) customList = mancerdata["l1-class"].values.custom_subclass_cantrip_list; + if(level == "1" && mancerdata["l1-class"].values.custom_subclass_spell_list) customList = mancerdata["l1-class"].values.custom_subclass_spell_list; + for(var x=1; x<=number; x++) { + var thisSpell = { + Ability: classAbility, + Level: level, + List: customList + }; + allSpells.class.choices.push(thisSpell); + } + }); + } + } + //Collect data from choices + if(mancerdata["l1-spells"]) { + _.each(mancerdata["l1-spells"].repeating, function(id) { + if(mancerdata["l1-spells"].values[id + "_choice"]) { + var thisspell = {Name: mancerdata["l1-spells"].values[id + "_choice"].substring(7)}; + thisspell.Ability = mancerdata["l1-spells"].values[id + "_info"] ? mancerdata["l1-spells"].values[id + "_info"] : classAbility; + if(mancerdata["l1-spells"].values[id + "_custom"]) thisspell.Source = mancerdata["l1-spells"].values[id + "_custom"]; + allSpells.known.push(thisspell.Name); + allSpells.all.push(thisspell); + }; + }); + } + return allSpells; + }; + + var cleanEquipment = function(equipment) { + var current_string = "("; + var hasDouble = false; + var firstItem = true; + _.each(equipment, function(item) { + if (item.search("~DBL") != -1) { + hasDouble = true; + item.replace("~DBL",""); + } + item = item.replace(/"Item Type":(.|)Weapon.*\b/g, "Any Weapon"); + item = item.replace(/Subtype:(.|)Martial.*\b("|)/g, "Any Martial Weapon"); + item = item.replace(/Subtype:(.|)Simple.*\b("|)/g, "Any Simple Weapon"); + item = item.replace(/Subtype:(.|)Artisan's Tools.*\b("|)/g, "A Set of Artisan's Tools"); + item = item.replace(/Subtype:(.|)Gaming Set.*\b("|)/g, "A Gaming Set"); + item = item.replace(/Subtype:(.|)Musical Instrument.*\b("|)/g, "A Musical Instrument"); + if (!firstItem) current_string += " or "; + current_string += item; + firstItem = false; + }); + current_string += ")"; + if (hasDouble) { + current_string = "two of " + current_string; + } + return current_string.replace(/,/g, ", "); + }; + + const removeExpansionInfo = function(text) { + if(!text) return ""; + return text.replace(/\??expansion\=([0-9]+)?/gi, ""); + }; + + var removeDuplicatedPageData = function(data) { + if(!Array.isArray(data)) return data; + const getPageName = function(item) { + let category = ""; + if("data" in item && "Category" in item.data) category += item.data["Category"] + ": "; + return category+item.name; + } + let seen = {}; + return data.filter(function(item) { + let pageName = getPageName(item); + return seen.hasOwnProperty(pageName) ? false : (seen[pageName] = true); + }) + }; + + var getName = function(request, data, custom) { + data = data || getCharmancerData(); + var section = request.replace("sub", ""); + var result = ""; + var customString = custom ? "custom" : ""; + if( data["l1-" + section] && data["l1-" + section].values[request] ) { + result = data["l1-" + section].values[request + "_name"] || data["l1-" + section].values[request]; + } + result = result.split(":")[0] == "Rules" || result.split(":")[0] == "CategoryIndex" ? customString : result; + //Removing expansion name from result + result = removeExpansionInfo(result); + return _.last(result.split(":")); + }; + + var getGainedSpells = function() { + let gainedSpells = []; + const data = getCharmancerData(); + if("lp-spells" in data && "values" in data["lp-spells"]) { + Object.keys(data["lp-spells"].values).forEach(key => { + let found = false; + if(key.indexOf("_checked") === -1) return; + let spellNameKey = key.replace("_checked", "_name"); + let spellName = data["lp-spells"].values[spellNameKey]; + if(data["lp-welcome"].values.spellinfo) { + let previousSpells = JSON.parse(data["lp-welcome"].values.spellinfo); + Object.keys(previousSpells).forEach(spell => { + if(previousSpells[spell].spellname === spellName) found = true; + }); + } + if(!found) gainedSpells.push(spellName); + }); + } + return gainedSpells; + }; + + var getGainedFeatures = function() { + const data = getCharmancerData(); + if(!"lp-levels" in data) return; + let gainedFeatures = []; + for(let charclass=1; charclass<=4; charclass++) { + let levelsGained = data["lp-levels"].values["class"+ charclass +"_addlevel"] || 0; + if(levelsGained === 0) continue; //No leves gained in this class, just skip to the next one. + + //Now lets get the features got from each class at LP; + levelsGained = parseInt(levelsGained); + let currentLevel = parseInt(data["lp-levels"].values["class"+ charclass +"_currentlevel"]); + Object.keys(data["lp-levels"].data["class"+charclass].blobs).forEach(feature => { + let featureLevel = parseInt(data["lp-levels"].data["class"+charclass].blobs[feature]["Level"]); + if(featureLevel > currentLevel && featureLevel <= (currentLevel+levelsGained)) { + let sanitizedFeatureName = feature.replace(/\(.+\)/g,""); + sanitizedFeatureName = sanitizedFeatureName.replace(/ - .+/g,"").trim(); + if("Group" in data["lp-levels"].data["class"+charclass].blobs[feature]) return; + if("Choice" in data["lp-levels"].data["class"+charclass].blobs[feature]) { + Object.keys(data["lp-choices"].values).forEach(info => { + if(data["lp-choices"].values[info] === feature) { + let choice = info.replace("_info", "_choice"); + if(choice in data["lp-choices"].values) { + let choiceName = data["lp-choices"].values[choice].replace("Blob:", ""); + if(gainedFeatures.indexOf(choiceName) === -1) gainedFeatures.push(choiceName); + } + } + }); + } else { + if(gainedFeatures.indexOf(sanitizedFeatureName) === -1) gainedFeatures.push(sanitizedFeatureName); + } + } + }); + } + return gainedFeatures; + }; + + var filterBlobs = function(blobs, filters) { + var remove = filters.multiclass ? "no" : "yes"; + var results = {}; + delete filters.multiclass; + delete filters.slide; + _.each(blobs, function(blob, name) { + var match = true; + if(blob.Group && !filters.Group && !filters.name) match = false; + _.each(filters, function(v, k) { + if(k == "name") { + if(name != v) match = false; + } else if(v[0] === "<" && !isNaN(parseInt(v.substring(1)))) { + let blobval = isNaN(parseInt(blob[k])) ? 0 : parseInt(blob[k]); + if(blobval > parseInt(v.substring(1))) match = false; + } else { + if(blob[k] != v) match = false; + } + }); + if(match && name.split("(")[0].toLowerCase() != "spell slots") results[name] = blob; + }); + _.each(results, function(blob, name) { + if(blob.Multiclass == remove) { + delete results[name]; + } + }); + return results; + }; + + var handleBlobs = function(blobs, options) { + //Old parameters: (blobs, filters, section, element, thisblob) + + //Function to get blob parameter for Spell Pickers like Magical Secrets + //By Miguel + const getBlobDescription = function(blob) { + if("Description" in blob) { + return blob.Description; + } + else if("Traits" in blob) { + traits = JSON.parse(blob.Traits)[0]; + if("Desc" in traits) return traits.Desc; + } + return ""; + } + + const handleProficiencies = function(data, subsection) { + if(!data) { + return; + } + subsection = subsection ? subsection : element + _.each(proficiencyList, function(prof) { + if(data[prof + " Proficiency"]) { + addRepeatingSection(subsection, "row", function(rowid) { + var json = JSON.parse(data[prof + " Proficiency"]); + let extraChoices = 0; + if(!json.Hidden) { + if(prof === "Skill" && options.section && options.section === "background") { + let allAutoSkills = []; + Object.keys(profdata.auto).forEach(section => { + if(options.section && section !== options.section) allAutoSkills = allAutoSkills.concat(profdata.auto[section]); + }); + const duplicatedSkills = json.Proficiencies.filter(skill => { return allAutoSkills.indexOf(skill) > -1; }); + json.Proficiencies = json.Proficiencies.filter(skill => { return duplicatedSkills.indexOf(skill) === -1; }); + extraChoices = duplicatedSkills.length; + } + var repupdate = {}; + repupdate[rowid + " label span"] = json.Title ? json.Title : getTranslationByKey(prof.toLowerCase() + "-proficiencies"); + if(json.Desc) { + repupdate[rowid + " label p"] = json.Desc; + if(json.Proficiencies) { + repupdate[rowid + " label p"] += "
    " + json.Proficiencies.join(", "); + } + } else if(json.Proficiencies) { + repupdate[rowid + " label p"] = json.Proficiencies.join(", "); + } + setCharmancerText(repupdate); + } + _.each(json.Choice, function(v) { + addRepeatingSection(rowid + " label", "choose", section + "_" + prof.toLowerCase(), function(id) { + var choices = ""; + var settings = {category: "Proficiencies", disable: profdata.all[prof]}; + if(prof == "Language") { + var customupdate = {}; + customupdate[id + " select"] = ''; + setCharmancerText(customupdate); + } + if(Array.isArray(v)) { + if(v[0].split(":").length > 1) { + choices = "Category:Proficiencies \"Type:" + prof + "\" " + v.shift(); + settings.add = v; + } else if (v[0] == "all") { + v.shift(); + choices = "Category:Proficiencies \"Type:" + prof + "\""; + settings.add = v; + } else { + choices = v; + } + } else { + choices = "Category:Proficiencies \"Type:" + prof + "\""; + if(v != "all" && v != "any") { + choices += " " + v; + } + } + setCharmancerOptions(id + "_choice", choices, settings); + }); + }); + for(let i=0; i 1) { + choices = "Category:Proficiencies \"Type:" + prof + "\" " + v.shift(); + settings.add = v; + } else if (v[0] == "KNOWN") { + var info = {}; + info[id + "_info"] = JSON.stringify(v); + setAttrs(info); + v.shift(); + choices = profdata.all.Skill; + settings.add = v; + } else { + choices = v; + } + setCharmancerOptions(id + "_choice", choices, settings); + }); + }); + }); + } + }; + const handleTraits = function(blob, subsection, name) { + var traits = JSON.parse(blob.Traits); + subsection = subsection ? subsection : element; + _.each(traits, function(trait) { + if(trait["Input Spells"]) { + addRepeatingSection(subsection, "utilityrow", function(rowid) { + let repupdate = {}; + let set = {}; + repupdate[`${rowid} label span .sheet-title`] = trait.Name.split("{{")[0]; + if(!trait.Hide) repupdate[`${rowid} label p`] = trait.Desc; + repupdate[`${rowid} button`] = trait["Input Spells"].ButtonText; + set[`${rowid}_info`] = JSON.stringify(trait["Input Spells"]); + set[`${rowid}_type`] = "trait"; + set[`${rowid}_blob`] = name; + set[`${rowid}_parent`] = options.parent; + set[`${rowid}_title`] = trait.Name; + set[`${rowid}_desc`] = trait.Desc; + setCharmancerText(repupdate); + setAttrs(set); + }); + } else if(!trait.Hide) { + addRepeatingSection(subsection, "row", function(rowid) { + let repupdate = {}; + if(trait.Input) { + //Fixing custom data in inputs not being remembered when switching tabs (UC809) + //By Miguel + const data = getCharmancerData(); + //The function below looks for valyes through all Mancer data that match a input rowid: + const getPreviousInputValue = function(data, rowid) { + let parsedId = rowid.match(/-.+_/g)[0]; + for(let attribute in data) { + if(!("values" in data[attribute])) continue; + for (let key in data[attribute].values){ + if(data[attribute].values.hasOwnProperty(key) && key.indexOf("_input") > -1 && key.indexOf(parsedId) > -1) { + return data[attribute].values[key]; + } + } + } + return ""; + } + const previousValue = getPreviousInputValue(data, rowid); + repupdate[`${rowid} label span`] = ``; + repupdate[`${rowid} label span`] += ``; + repupdate[`${rowid} label span`] += ``; + repupdate[`${rowid} label span`] += ``; + } else { + repupdate[`${rowid} label span`] = trait.Name; + repupdate[`${rowid} label p`] = blob.Prerequisite ? "

    " + blob.Prerequisite + "

    " : ""; + //Fixing undefined when selecting Ranger Favored Enemy and Land (UC809) + //By Miguel + repupdate[`${rowid} label p`] += (trait.Desc ? trait.Desc : ""); + } + setCharmancerText(repupdate); + handleProficiencies(blob, rowid); + }); + }; + }); + }; + const mancerdata = getCharmancerData(); + let filters = options.filters || {}; + let section = options.section || undefined; + let thisblob = options.thisblob || undefined; + let element = options.element ? options.element : section + "_holder"; + let sorted = {swaps: {}, choices: {}, traits: {}, other: {}, spells: {}}; + let profdata = getProficiencies(mancerdata, options.slide); + let filtered = {}; + if(thisblob) { + filtered[thisblob] = blobs[thisblob]; + } else { + filtered = filterBlobs(blobs, filters); + } + _.each(filtered, function(blob, name) { + if(name.split(" ")[0] == "Proficiencies") { + sorted.proficiencies = blob; + } else if (blob["Pick Spells"]) { + sorted.spells[name] = blob; + } else if(blob.Swap) { + sorted.swaps[name] = blob; + } else if(blob.Choice) { + sorted.choices[name] = blob; + } else if(blob.Traits) { + sorted.traits[name] = blob; + } else { + sorted.other[name] = blob; + } + }); + + handleProficiencies(sorted.proficiencies); + _.each(sorted.swaps, function(blob, name) { + addRepeatingSection(element, "row", function(rowid) { + var title = blob.Title ? blob.Title : name; + var choice = blob.Change; + var settings = {}; + let choicenum = blob["Choice Number"] ? parseInt(blob["Choice Number"]) : 1; + const getSwapable = function() { + let swapable = []; + if(!SheetUtils.checkPath(mancerdata, "['lp-welcome']['values']['previous_repeating']")) { + return swapable; + } + const previousRepeating = JSON.parse(mancerdata['lp-welcome']['values']['previous_repeating']); + if(!previousRepeating['traits']) return swapable; + previousRepeating['traits'].forEach(trait => { + const blobtype = blob.Swap.split(":")[1].replace(/s$/gi,''); + if(trait.name.indexOf(`${blobtype}:`) > -1) swapable.push(trait); + }); + return swapable; + } + const swapable = getSwapable(); + if(blob.Swap.split(":")[0] == "Blob") { + choice = Object.keys(filterBlobs(blobs, {Group: blob.Swap.split(":")[1], Level: ("<" + (options.maxlevel || blob.Level))})).sort(); + settings.category = "Blob"; + } + var repupdate = {}; + repupdate[rowid + " label span"] = title; + if(blob.Description) { + repupdate[rowid + " label p"] = blob.Description; + } + setCharmancerText(repupdate); + if(section.indexOf("-") === -1) { + let match = /[0-9]+$/.exec(section); + if(match) { + section = [section.slice(0, match.index), "-", section.slice(match.index)].join(''); + section += "--" + blob.Level; + } + } + for(let x=1; x<=choicenum; x++) { + addRepeatingSection(rowid + " label", "swap", section + "_feature", function(id) { + const swapChoices = swapable.map(entry => { return entry.name.split(':')[1].trim(); }); + const category = blob.Swap.split(":")[1].replace(/s$/gi,''); + setCharmancerOptions(id + "_swap", swapChoices, {category: category}, function() { + var info = {}; + info[id + "_info"] = title; + setAttrs(info); + settings.disable = swapChoices; + setCharmancerOptions(id + "_for", choice, settings, function() { + if(mancerdata[options.slide].values[id + "_for"] && mancerdata[options.slide].values[id + "_for"].split(":")[0] == "Blob") { + handleBlobs(blobs, { + filters: {name: mancerdata[options.slide].values[id + "_for"].split(":")[1]}, + section: section, + element: id + " span", + slide: options.slide, + parent: options.parent + }); + } + }); + }); + }); + } + handleProficiencies(blob, rowid); + }); + }); + _.each(sorted.choices, function(blob, name) { + addRepeatingSection(element, "row", function(rowid) { + var title = blob.Title ? blob.Title : name; + var choice = blob.Choice; + var settings = {}; + let choicenum = blob["Choice Number"] ? parseInt(blob["Choice Number"]) : 1; + if(blob.Choice.split(":")[0] == "Blob") { + choice = Object.keys(filterBlobs(blobs, {Group: blob.Choice.split(":")[1], Level: ("<" + (options.maxlevel || blob.Level))})).sort(); + settings.category = "Blob"; + } + var repupdate = {}; + repupdate[rowid + " label span"] = title; + if(blob.Description) { + repupdate[rowid + " label p"] = blob.Description; + } + setCharmancerText(repupdate); + if(section.indexOf("-") === -1) { + let match = /[0-9]+$/.exec(section); + if(match) { + section = [section.slice(0, match.index), "-", section.slice(match.index)].join(''); + section += "--" + blob.Level; + } + } + for(let x=1; x<=choicenum; x++) { + addRepeatingSection(rowid + " label", "choose", section + "_feature", function(id) { + var info = {}; + info[id + "_info"] = title; + setAttrs(info); + setCharmancerOptions(id + "_choice", choice, settings, function() { + if(mancerdata[options.slide].values[id + "_choice"] && mancerdata[options.slide].values[id + "_choice"].split(":")[0] == "Blob") { + handleBlobs(blobs, { + filters: {name: mancerdata[options.slide].values[id + "_choice"].split(":")[1]}, + section: section, + element: id + " span", + slide: options.slide, + parent: options.parent + }); + } + }); + }); + } + handleProficiencies(blob, rowid); + }); + }); + _.each(sorted.spells, function(blob, name) { + addRepeatingSection(element, "row", function(rowid) { + let title = blob.Title ? blob.Title : name; + let spells = JSON.parse(blob["Pick Spells"]); + let settings = {}; + let repupdate = {}; + repupdate[rowid + ">label>span"] = title; + + //This used to check for blob.Description which does not exist for Spell Pickers + //In such case the description is located at blob.Traits.Desc + //By Miguel + let description = getBlobDescription(blob); + if(description.length > 0) { + repupdate[rowid + ">label>p"] = description; + } + + _.each(spells, function(spell) { + addRepeatingSection(rowid, "utilityrow", function(rowid) { + let repupdate = {}; + let set = {}; + repupdate[`${rowid} button`] = spell.ButtonText; + set[`${rowid}_info`] = JSON.stringify(spell); + set[`${rowid}_type`] = "pick"; + set[`${rowid}_parent`] = options.parent; + set[`${rowid}_blob`] = name; + setCharmancerText(repupdate); + setAttrs(set); + }); + }) + setCharmancerText(repupdate); + handleProficiencies(blob, rowid); + }); + }); + _.each(sorted.other, function(blob, name) { + if(blob.Title || blob.Description) { + addRepeatingSection(element, "row", function(rowid) { + var title = blob.Title ? blob.Title : name; + var repupdate = {}; + repupdate[rowid + " label span"] = "" + title; + repupdate[`${rowid} label p`] = blob.Prerequisite ? "

    " + blob.Prerequisite + "

    " : ""; + if(blob.Description) repupdate[rowid + " label p"] += blob.Description; + setCharmancerText(repupdate); + handleProficiencies(blob, rowid); + }); + } else { + handleProficiencies(blob); + } + }); + _.each(sorted.traits, function(blob, name) { + var traitsObj = JSON.parse(blob.Traits); + var title = blob.Title ? blob.Title : name; + if(blob.Description || traitsObj.length > 1) { + addRepeatingSection(element, "row", function(rowid) { + if(blob.Description || blob.Title) { + var repupdate = {}; + repupdate[rowid + " label span"] = "" + title; + if(blob.Description) repupdate[rowid + " label p"] = "" + blob.Description; + setCharmancerText(repupdate); + } + handleTraits(blob, rowid, name); + handleProficiencies(blob, rowid); + }); + } else { + handleTraits(blob, undefined, name); + } + }); + }; + + var addCustomSections = function(section) { + var lower = section.toLowerCase(); + var page = "l1-" + lower.replace("sub", ""); + var mancerdata = getCharmancerData()[page]; + var repids = []; + var total = 0; + var current = 0; + var traits = []; + var profs = []; + _.each(mancerdata.repeating, function(repid) { + if(_.last(repid.split("_")) == "trait") { + if(mancerdata.values[repid + "_name"] || mancerdata.values[repid + "_desc"]) { + var thistrait = {}; + thistrait.name = mancerdata.values[repid + "_name"] ? mancerdata.values[repid + "_name"] : ""; + thistrait.desc = mancerdata.values[repid + "_desc"] ? mancerdata.values[repid + "_desc"] : ""; + traits.push(thistrait); + total++; + } + } + if(_.last(repid.split("_")) == "proficiency") { + if(mancerdata.values[repid + "_type"]) { + var thisprof = {}; + thisprof.type = mancerdata.values[repid + "_type"]; + thisprof.choice = mancerdata.values[repid + "_choice"] ? mancerdata.values[repid + "_choice"] : ""; + profs.push(thisprof); + total++; + } + } + }); + if(traits.length == 0) { + traits.push({name: "", desc: ""}); + total++; + } + if(profs.length == 0) { + profs.push({type: "", choice: ""}); + total ++; + } + addRepeatingSection(lower + "_holder", "row", "customrow", function(rowid) { + var toset = {}; + toset[rowid + " label span"] = "Proficiencies"; + repids.push(rowid); + setCharmancerText(toset); + _.each(profs, function(prof) { + addRepeatingSection(rowid, "custom-proficiency", "custom_" + lower + "_proficiency", function(id) { + var toset = {}; + if(prof.type != "") toset[id + "_type"] = prof.type; + if(prof.choice != "") toset[id + "_choice"] = prof.choice; + setAttrs(toset); + current++; + repids.push(id); + if(current >= total) clearRepeating(repids, page, "customrow"); + }); + }); + }); + addRepeatingSection(lower + "_holder", "row", "customrow", function(rowid) { + var toset = {}; + toset[rowid + " label span"] = "Custom " + section + " Features"; + repids.push(rowid); + setCharmancerText(toset); + _.each(traits, function(trait) { + addRepeatingSection(rowid, "custom-trait", "custom_" + lower + "_trait", function(id) { + var toset = {}; + if(trait.name != "") toset[id + "_name"] = trait.name; + if(trait.desc != "") toset[id + "_desc"] = trait.desc; + //update[id + " span"] = trait.name; + setAttrs(toset); + current++; + repids.push(id); + if(current >= total) clearRepeating(repids, page, "customrow"); + }); + }); + }); + } + + var clearRepeating = function(repids, page, match) { + //This function removes all repeating sections that aren't in the repids array (except for the topbar). + //The optional third argument will only remove certain types of repeating sections + var mancerdata = getCharmancerData(); + _.each(mancerdata[page].repeating, function(repid) { + if(_.last(repid.split("_")) != "topbar" && !repids.includes(repid) && (!match || match && repid.includes(match))) clearRepeatingSectionById(repid); + }); + } + + //This function should be used to read additional hit points gained at first level by things like Draconic Bloodline or Hill Dwarf. Can be possbily be used in the future for Tough feat(?) + //By Miguel + var getAdditionalHitPointsFromClassAndRaceAtFirstLevel = function(blobs) { + let additionalHP = 0; + blobs.all.map(blob => { + if("Hit Points Per Level" in blob) { + additionalHP += parseInt(blob["Hit Points Per Level"]); + } + }); + return additionalHP; + }; + + var getRelevantBlobs = function(mancerdata, level, section) { + var results = []; + var sorted = {}; + var names = {}; + level = level ? "" + level : "1"; + _.each(mancerdata, function(slide, slidename) { + if(slidename.split("-")[0] == section) { + _.each(slide.data, function(data, section) { + if(data.blobs) { + var levelblobs = _.extend(filterBlobs(data.blobs, {"Level": level}), filterBlobs(data.blobs, {"Level": "every"})); + sorted[section] = []; + names[section] = []; + _.each(levelblobs, function(blob, blobname) { + results.push(blob); + sorted[section].push(blob); + names[section].push(blobname); + }); + }; + }); + _.each(slide.values, function(value, name) { + if((value + "").split(":")[0] == "Blob") { + var section = name.split("_")[2]; + var blobs = slide.data[section] && slide.data[section].blobs ? slide.data[section].blobs : []; + _.each(filterBlobs(blobs, {"name":value.split(":")[1]}), function(blob, blobname) { + results.push(blob); + sorted[section] = sorted[section] ? sorted[section] : []; + sorted[section].push(blob); + names[section] = names[section] ? names[section] : []; + names[section].push(blobname); + }); + }; + }); + } + }); + return {all: results, sorted: sorted, names: names}; + }; + + var costOfScore = function(score) { + if (isNaN(score) || score == 8) { + return 0; + } + var cost = 0; + if (score > 8) { + if (score < 14) { + cost = score - 8; + } else if (score == 14) { + cost = 7; + } else if (score == 15) { + cost = 9; + } else { // Score should never be higher, but let's cover our bases. + cost = 11; + } + } + return cost; + }; + + var recalcPoints = function() { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + const optionalArray = optionalAttributes.map(key => "11"); + const pointbuyPoints = 3 * optionalAttributes.length + 27; + data = getCharmancerData(); + var attribs = globalAttributesByCategory.abilities.concat(optionalAttributes); + var maxPoints = pointbuyPoints; + + var scores = {}; + + _.each(attribs, function(attrib) { + scores[attrib] = parseInt(data["l1-abilities"].values[attrib]); + if (isNaN(scores[attrib])) { + scores[attrib] = 8; + } + }); + + var pointsAvailable = maxPoints; + + // Decrement points based on selected attribs + _.each(scores, function(score) { + if (!isNaN(score)) { + var cost = costOfScore(score); + pointsAvailable -= cost; + } + }); + + // Disable options if points are below a threshold. + if (pointsAvailable < 9) { + var choicesToDisable = ["15","14","13","12","11","10","9"]; + + _.each(attribs, function(attrib) { + var toDisableForThisAttrib = [] + _.each(choicesToDisable, function(choice) { + if (scores[attrib] <= Number(choice) && (costOfScore(scores[attrib]) + pointsAvailable < costOfScore(Number(choice)))) { + toDisableForThisAttrib.push(choice); + } + }); + disableCharmancerOptions(attrib, toDisableForThisAttrib); + }); + } else { + _.each(attribs, function(attrib) { + disableCharmancerOptions(attrib, []); + }); + } + + _.each(attribs, function(attrib) { + setCharmancerText({"points_available_display":String(pointsAvailable)}); + }); + + return String(pointsAvailable); + }; + + var setRollButton = function(name, data, title, hold) { + var set = {}; + var holdstring = hold ? "r" + hold : ""; + title = title || name.split("_")[1]; + title = title[0].toUpperCase() + title.substring(1); + if(title == "Personality") title += " Trait"; + var roll = "@{wtype}&{template:mancerroll} {{title=" + title + "}} {{c1=[[1d" + data.length + holdstring +"]]}}"; + _.each(data, function(trait, x) { + roll += ' {{option' + (x+1) + '=' + trait + '}}'; + }); + set["roll_" + name + "_roll"] = roll; + if(!hold) { + set[name + "_array"] = JSON.stringify({name: title, array: data}); + } + setAttrs(set); + }; + + var isTashaEnabled = data => { + data = data || getCharmancerData(); + let enabled = false; + const customizeOrigin = (SheetUtils.checkPath(data, "['l1-race']['values']['customize_origin']") && data['l1-race']['values']['customize_origin'] == 1) + if(SheetUtils.checkPath(data, "['l1-welcome']['values']['has_tasha']") && data['l1-welcome']['values']['has_tasha'] == 1 && customizeOrigin) enabled = true; + //return enabled; + return false; + }; + + var hasTasha = callback => { + getCompendiumPage('Customizing Your Origin', eventInfo => { + let enabled = false; + if(eventInfo.expansion && SheetUtils.checkPath(eventInfo, "['data']['Category']") && eventInfo['data']['Category'] === 'Rules') enabled = true; + //callback(enabled); + return false; + }); + }; + + var clearTasha = (eventinfo, subraceOnly, callback) => { + if(isTashaEnabled() && eventinfo.sourceType && eventinfo.sourceType == "player") { + let update = {}; + for(let i=1; i<=6; i++) { + update[`tasha_subrace_ability_choice${i}`] = ''; + update[`tasha_subrace_ability_choice${i}_increase`] = ''; + if(!subraceOnly) { + update[`tasha_race_ability_choice${i}`] = ''; + update[`tasha_race_ability_choice${i}_increase`] = ''; + } + } + setAttrs(update, () => { + if(callback) callback(); + }); + } else { + callback(); + } + }; + + /* MAIN CHOICE HANDLING */ + on("mancerchange:race", function(eventinfo) { + clearTasha(eventinfo, false, () => { + var mancerdata = getCharmancerData(); + getProficiencies(mancerdata, eventinfo.currentStep); + changeCompendiumPage("sheet-race-info", eventinfo.newValue); + hideChoices(); + + var reset = {}; + if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { + showChoices(["race_options"]); + } + recalcData(); + + if(eventinfo.sourceType == "player") { + reset = {race_ability_choice1: "", race_ability_choice2: "", subrace_ability_choice1: "", subrace_ability_choice2: "", subrace: "", race_name: "", subrace_name: ""}; + _.each(abilityList, function(ability){ + reset["race_custom_" + ability.toLowerCase()] = 0; + reset["subrace_custom_" + ability.toLowerCase()] = 0; + reset[ability.toLowerCase() + "_save"] = ""; + }); + reset["custom_race_spell_ability"] = ""; + reset["custom_race_spell_number"] = "1"; + reset["custom_race_spell_list"] = ""; + reset["race_name"] = ""; + reset["subrace_name"] = ""; + reset["has_subrace"] = ""; + clearRepeatingSections("race_holder"); + clearRepeatingSections("subrace_holder"); + } + + if(eventinfo.newValue === "Rules:Races") { + //Clears saved data for this field + getCompendiumPage(""); + setAttrs(reset, function() { + var update = {"race_text": ""}; + var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; + showChoices(["custom_race"]); + setCharmancerText(update); + addCustomSections("Race"); + deleteCharmancerData(["l1-feat"]); + }); + } else { + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + setAttrs(reset, function() { + const usingTasha = isTashaEnabled(); + mancerdata = getCharmancerData(); + var update = {}; + var showList = ["race_always", "race_traits"]; + var possibles = ["race_size", "race_speed", "race_ability_score", "race_traits"]; + var data = p["data"]; + + _.each(proficiencyList, function(type){ + possibles.push("race_" + type.toLowerCase() + "s"); + }); + _.each(possibles, function(key) { + update[key] = ""; + }); + + if(data["Size"]) {update["race_size"] = data["Size"];}; + if(data["Speed"]) {update["race_speed"] = data["Speed"];}; + + showList = showList.concat(handleAbilities(data, "race", usingTasha)); + if(data["data-Ability Score Increase"]) { + var abilityText = []; + var json = JSON.parse(data["data-Ability Score Increase"]); + _.each(json, function(increase, ability) { + abilityText.push(ability + " +" + increase); + }); + update["race_ability_score"] = abilityText.join(", "); + } + handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "race", slide: "l1-race"}); + + setCharmancerText(update); + + var race_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Races" ? eventinfo.newValue.split(":")[1] : false; + race_name = removeExpansionInfo(race_name); + if(race_name) { + var subOptions = {show_source: true}; + if(eventinfo.sourceType != "player") { + subOptions.silent = true; + } else { + subOptions.selected = ""; + } + + setCharmancerOptions("subrace","Category:Subraces data-Parent:" + race_name, subOptions, function(values) { + if (values.length) { + setAttrs({"has_subrace": "true"}); + showChoices(["subrace"]); + } + }); + } + else { + hideChoices(["subrace"]); + } + + showChoices(showList); + recalcData(); + }); + }); + } + }); + }); + + on("mancerchange:subrace", function(eventinfo) { + clearTasha(eventinfo, true, () => { + var mancerdata = getCharmancerData(); + getProficiencies(mancerdata, eventinfo.currentStep); + changeCompendiumPage("sheet-race-info", eventinfo.newValue); + + var initHide = ["subrace_possible", "custom_trait_2", "custom_trait_3", "custom_trait_4"]; + var reset = {}; + if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { + initHide.push("subrace_options"); + } + else { + showChoices(["subrace_options"]); + } + hideChoices(initHide); + recalcData(); + if(eventinfo.sourceType == "player") { + reset = {subrace_ability_choice1: "", subrace_ability_choice2: "", subrace_name: ""}; + _.each(abilityList, function(ability){ + reset["race_custom_" + ability.toLowerCase()] = 0; + reset["subrace_custom_" + ability.toLowerCase()] = 0; + }); + reset["custom_race_spell_ability"] = ""; + reset["custom_race_spell_number"] = "1"; + reset["custom_race_spell_list"] = ""; + reset["subrace_name"] = ""; + clearRepeatingSections("subrace_holder"); + } + + if(eventinfo.newValue === "Rules:Races") { + //Clears saved data for this field + getCompendiumPage(""); + setAttrs(reset, function() { + var update = {"subrace_text": ""}; + var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; + showChoices(["custom_subrace"]); + setCharmancerText(update); + addCustomSections("Subrace"); + deleteCharmancerData(["l1-feat"]); + }); + } else { + const usingTasha = isTashaEnabled(); + hideChoices(["custom_subrace"]); + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + var update = {}; + var showList = ["subrace_choices"]; + var possibles = ["subrace_speed", "subrace_ability_score"]; + var data = p["data"]; + _.each(possibles, function(key) { + update[key] = ""; + }); + + if(!data["data-Feats"]) deleteCharmancerData(["l1-feat"], function() {recalcData();}); + + if(data["Speed"]) { + update["subrace_speed"] = data["Speed"]; + showList.push("subrace_speed_row"); + }; + + showList = showList.concat(handleAbilities(data, "subrace", usingTasha)); + if(data["data-Ability Score Increase"]) { + var abilityText = []; + var json = JSON.parse(data["data-Ability Score Increase"]); + _.each(json, function(increase, ability) { + abilityText.push(ability + " +" + increase); + }); + update["subrace_ability_score"] = abilityText.join(", "); + } + handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "subrace", slide: "l1-race"}); + + setCharmancerText(update); + showChoices(showList); + setAttrs(reset); + recalcData(); + }); + } + }); + }); + + on("mancerchange:class", function(eventinfo) { + var mancerdata = getCharmancerData(); + getProficiencies(mancerdata, eventinfo.currentStep); + changeCompendiumPage("sheet-class-info", eventinfo.newValue); + hideChoices(); + + var initHide = ["class_possible", "subclass_choices"]; + var reset = {}; + if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { + showChoices(["classes_options"]); + } + var current = recalcData(); + + if(eventinfo.sourceType == "player") { + reset = {subclass: ""}; + _.each(abilityList, function(ability){ + reset[ability.toLowerCase() + "_save"] = ""; + }); + reset["custom_class_spell_ability"] = ""; + reset["custom_class_cantrip_number"] = "0"; + reset["custom_class_spell_number"] = "0"; + reset["custom_class_spell_list"] = ""; + reset["custom_hit_die"] = ""; + reset["class_name"] = ""; + reset["subclass_name"] = ""; + reset["class_equipment_choice1"] = ""; + reset["class_equipment_choice2"] = ""; + reset["class_equipment_choice3"] = ""; + reset["class_equipment_choice4"] = ""; + clearRepeatingSections("class_holder"); + clearRepeatingSections("subclass_holder"); + } + + if(eventinfo.newValue === "Rules:Classes") { + //Clears saved data for this field + getCompendiumPage(""); + setAttrs(reset, function() { + var update = {"class_text": "", "custom_feature_name": "Class Features"}; + var options = eventinfo.sourceType == "player" ? {selected: ""} : {} + showChoices(["custom_class"]); + update["custom_feature_name"] = "Custom Class Features"; + setCharmancerText(update); + addCustomSections("Class"); + }); + } else { + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + var update = {}; + var showList = []; + var data = p["data"]; + var hideList = []; + handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "class", slide: "l1-class"}); + + var class_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Classes" ? eventinfo.newValue.split(":")[1] : false; + class_name = removeExpansionInfo(class_name); + if(class_name && data["data-Subclass Level"] == 1) { + var subOptions = {show_source: true}; + if(eventinfo.sourceType != "player") { + subOptions.silent = true; + } else { + subOptions.selected = ""; + } + update["subclass_prompt"] = "Choose a " + data["Subclass Name"]; + setCharmancerOptions("subclass","Category:Subclasses data-Parent:" + class_name, subOptions, function(values) { + if (values.length) showChoices(["subclass"]); + }); + } + else { + hideList.push("subclass"); + } + + if (data["data-Equipment"]) { + showList.push("class_equipment_row"); + var equipment_string = ""; + var json = JSON.parse(data["data-Equipment"]); + if(json["default"]) { + equipment_string += json["default"].join(", "); + } + for (var i = 1; i < 5; i++) { + if(json[i]) { + if (!json["default"].length && i == 1) { + equipment_string += ""; + } else { + equipment_string += " and "; + } + + equipment_string += cleanEquipment(json[i]); + } + }; + update["class_standard_equipment"] = equipment_string; + } + + setCharmancerText(update); + showChoices(showList); + hideChoices(hideList); + recalcData(); + setAttrs(reset); + }); + } + }); + + on("mancerchange:subclass", function(eventinfo) { + var mancerdata = getCharmancerData(); + getProficiencies(mancerdata, eventinfo.currentStep); + changeCompendiumPage("sheet-class-info", eventinfo.newValue); + + var initHide = ["subclass_possible"]; + var reset = {}; + if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { + initHide.push("subclass_options"); + initHide.push("custom_subclass"); + } + else { + showChoices(["subclass_options"]); + if(eventinfo.newValue === "Rules:Classes") { + showChoices(["custom_subclass"]); + } + else { + initHide.push("custom_subclass"); + } + } + hideChoices(initHide); + var current = recalcData(); + + if(eventinfo.sourceType == "player") { + reset["custom_class_spell_ability"] = ""; + reset["custom_class_cantrip_number"] = "0"; + reset["custom_class_spell_number"] = "0"; + reset["custom_class_spell_list"] = ""; + reset["custom_subclass_cantrip_number"] = "0"; + reset["custom_subclass_cantrip_list"] = ""; + reset["custom_subclass_spell_number"] = "0"; + reset["custom_subclass_spell_list"] = ""; + reset["subclass_name"] = ""; + clearRepeatingSections("subclass_holder"); + } + + if(eventinfo.newValue === "Rules:Classes") { + //Clears saved data for this field + getCompendiumPage(""); + setAttrs(reset, function() { + var mancerdata = getCharmancerData(); + var options = eventinfo.sourceType == "player" ? {selected: ""} : {}; + var subclassname = mancerdata["l1-class"].data.class["Subclass Name"]; + showChoices(["custom_subclass"]); + if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Spellcasting Ability"]) { + showChoices(["custom_additional_spells"]); + } else { + showChoices(["custom_class_spells"]); + } + addCustomSections("Subclass"); + }); + } else { + hideChoices(["custom_subclass"]); + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + var data = p["data"]; + handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "subclass", slide: "l1-class"}); + + recalcData(); + setAttrs(reset); + }); + } + }); + + on("mancerchange:background", function(eventinfo) { + var mancerdata = getCharmancerData(); + getProficiencies(mancerdata, eventinfo.currentStep); + changeCompendiumPage("sheet-background-info", eventinfo.newValue); + + var initHide = ["background_possible", "custom_background"]; + var reset = {}; + if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { + initHide.push("backgrounds_options"); + } + else { + showChoices(["backgrounds_options"]); + } + hideChoices(initHide); + var current = recalcData(); + + if(eventinfo.sourceType == "player") { + reset = {}; + reset["background_detail_choice"] = ""; + reset["background_personality_choice1"] = ""; + reset["background_personality_choice2"] = ""; + reset["background_ideal_choice"] = ""; + reset["background_bond_choice"] = ""; + reset["background_flaw_choice"] = ""; + reset["custom_background_trait_name"] = ""; + reset["custom_background_trait_desc"] = ""; + clearRepeatingSections("background_holder"); + } + + if(eventinfo.newValue === "Rules:Personality%20and%20Background") { + //Clears saved data for this field + getCompendiumPage(""); + setAttrs(reset, function() { + var update = {"background_text": ""}; + var options = eventinfo.sourceType == "player" ? {selected: ""} : {} + hideChoices(["standardbg"]); + showChoices(["custom_background"]); + setCharmancerText(update); + addCustomSections("Background"); + }); + } else { + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + var update = {}; + var showList = ["standardbg"]; + var possibles = ["background_feature"]; + var data = p["data"]; + var hideList = []; + + _.each(proficiencyList, function(type){ + possibles.push("background_" + type.toLowerCase() + "s"); + }); + _.each(possibles, function(key) { + update[key] = ""; + }); + handleBlobs(data.blobs, {filters: {"Level": "1"}, section: "background", slide: "l1-background"}); + + if (data["data-Background Choices"] && data["data-Background Choices"] != "") { + showList.push("background_detail_choice_row"); + var choices = JSON.parse(data["data-Background Choices"]); + showList.push("background_detail_choice"); + setCharmancerOptions("background_detail_choice", choices, {}, function(opts) { + setRollButton("background_detail_choice", opts, data["data-Background Choice Name"]); + }); + update["background_detail_choice_name"] = data["data-Background Choice Name"]; + } + if(eventinfo.sourceType == "player") { + reset["background_detail_choice"] = ""; + } + + if (data["data-Personality Traits"]) { + showList.push("background_personality_row"); + var choices = JSON.parse(data["data-Personality Traits"]); + setCharmancerOptions("background_personality_choice1", choices, {}, function(opts) { + setRollButton("background_personality_choice1", opts); + }); + setCharmancerOptions("background_personality_choice2", choices, {}, function(opts) { + setRollButton("background_personality_choice2", opts); + }); + showList.push("background_personality_choice1"); + showList.push("background_personality_choice2"); + } + if (data["data-Ideals"]) { + var choices = JSON.parse(data["data-Ideals"]); + setCharmancerOptions("background_ideal_choice", choices, {}, function(opts) { + setRollButton("background_ideal_choice", opts); + }); + showList.push("background_ideal_choice"); + } + if (data["data-Bonds"]) { + var choices = JSON.parse(data["data-Bonds"]); + setCharmancerOptions("background_bond_choice", choices, {}, function(opts) { + setRollButton("background_bond_choice", opts); + }); + showList.push("background_bond_choice"); + } + if (data["data-Flaws"]) { + var choices = JSON.parse(data["data-Flaws"]); + setCharmancerOptions("background_flaw_choice", choices, {}, function(data) { + setRollButton("background_flaw_choice", data); + }); + showList.push("background_flaw_choice"); + } + + if(eventinfo.sourceType == "player") { + reset = _.extend(reset, {"background_personality_choice1": "", "background_personality_choice2": "", "background_ideal_choice": "", "background_bond_choice": "", "background_flaw_choice": ""}); + } + + if (data["data-Equipment"]) { + showList.push("background_equipment_row"); + var equipment_string = ""; + var json = JSON.parse(data["data-Equipment"]); + if(json["default"]) { + equipment_string += json["default"].join(", "); + } + for (var i = 1; i < 5; i++) { + if(json[i]) { + if (!json["default"].length && i == 1) { + equipment_string += ""; + } else { + equipment_string += " and "; + } + + equipment_string += cleanEquipment(json[i]); + } + }; + update["background_standard_equipment"] = equipment_string; + } + + var background_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Backgrounds" ? eventinfo.newValue.split(":")[1] : false; + + setCharmancerText(update); + showChoices(showList); + hideChoices(hideList); + recalcData(); + setAttrs(reset); + }); + } + }); + + /* ABILITY SCORE */ + on("page:l1-abilities", function(eventinfo) { + var data = getCharmancerData(); + getCompendiumPage("Rules:Ability%20Scores", function(p) { + p = removeDuplicatedPageData(p); + var pagedata = p["data"]; + var allChoices = []; + if (pagedata["data-Generation Choices"]) { + var genChoices = JSON.parse(pagedata["data-Generation Choices"]); + _.each(genChoices, function(value, choice) { + allChoices.push(choice); + }); + } + setCharmancerOptions("abilities", allChoices); + + + if (data["l1-abilities"] && data["l1-abilities"].values && data["l1-abilities"].values.abilities) { + setAttrs({"abilities": data["l1-abilities"].values.abilities}); + } + }); + }); + + on("mancerchange:abilities", function(eventinfo) { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + const optionalArray = optionalAttributes.map(key => "11"); + const pointbuyPoints = (3 * optionalAttributes.length + 27).toString(); + var data = getCharmancerData(); + var initHide = ["abilities_possible"]; + var attribs = globalAttributesByCategory.abilities.concat(optionalAttributes); + var standardArray = ["8", "10"].concat(optionalArray).concat(["12", "13", "14", "15"]).map((value, index) => { return `${value}~${index+1}`}); + var pointbuyChoices = ["8", "9", "10", "11", "12", "13", "14", "15"]; + + hideChoices(initHide); + + if (data["l1-abilities"].values.abilities == "Standard Array") { + showChoices(["abilities_stdarray", "abilities_selects"]); + _.each(attribs, function(attrib) { + setCharmancerOptions(attrib, standardArray); + }); + } + + if (data["l1-abilities"].values.abilities == "Roll for Stats") { + showChoices(["abilities_rollstats"]); + if (data["l1-abilities"].values.roll_results && data["l1-abilities"].values.roll_results.length) { + showChoices(["abilities_rollstats_rolled","abilities_selects"]); + var roll_results = typeof data["l1-abilities"].values.roll_results == "string" ? data["l1-abilities"].values.roll_results.split(",") : data["l1-abilities"].values.roll_results; + _.each(attribs, function(attrib) { + setCharmancerOptions(attrib, roll_results); + }); + } + } + + if (data["l1-abilities"].values.abilities == "Point Buy") { + showChoices(["abilities_pointbuy", "abilities_selects"]); + setCharmancerText({"points_available_display":data["l1-abilities"].values.pointbuy_points || pointbuyPoints}); + _.each(attribs, function(attrib) { + setCharmancerOptions(attrib, pointbuyChoices); + }); + } + + if (data["l1-abilities"].values.abilities == "custom") { + showChoices(["abilities_custom"]); + } + + reset = {}; + if (eventinfo.sourceType == "player") { + _.each(attribs, function(attrib) { + reset[attrib] = ""; + }); + reset["pointbuy_points"] = pointbuyPoints; + } + + + recalcData(); + setAttrs(reset); + }); + + on("mancerchange:strength mancerchange:dexterity mancerchange:constitution mancerchange:intelligence mancerchange:wisdom mancerchange:charisma mancerchange:honor mancerchange:sanity", function(eventinfo) { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + data = getCharmancerData(); + var attribs = globalAttributesByCategory.abilities.concat(optionalAttributes); + var clearvalue = eventinfo.newValue; + var clearObject = { + strength: data["l1-abilities"].values.strength, + dexterity: data["l1-abilities"].values.dexterity, + constitution: data["l1-abilities"].values.constitution, + intelligence: data["l1-abilities"].values.intelligence, + wisdom: data["l1-abilities"].values.wisdom, + charisma: data["l1-abilities"].values.charisma, + }; + optionalAttributes.forEach(attribute => { + clearObject[attribute] = data["l1-abilities"].values[attribute]; + }); + + if (data["l1-abilities"].values.abilities != "custom" && data["l1-abilities"].values.abilities != "Point Buy") { + attribs = _.reject(attribs, function(item) { return item == eventinfo.triggerName; }); + _.each(attribs, function(attrib) { + if (clearvalue == clearObject[attrib]) { + clearObject[attrib] = ""; + } + }); + } + + if (data["l1-abilities"].values.abilities == "Point Buy") { + clearObject.pointbuy_points = recalcPoints(); + } + + if (eventinfo.sourceType == "player") { + setAttrs(clearObject); + } + recalcData(); + }); + + on("mancerroll:rollstats", function(eventinfo) { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + var attribs = globalAttributesByCategory.abilities.concat(optionalAttributes); + var results = []; + var i = 1; + _.each(eventinfo.roll, function(roll) { + results.push(roll.result + "~" + i); + i++; + }); + results.sort(function(a,b) {return Number(a.split("~")[0]) - Number(b.split("~")[0])}); + _.each(attribs, function(attrib) { + setCharmancerOptions(attrib, results); + }); + let set = { + roll_results: results, + strength: "", + dexterity: "", + constitution: "", + intelligence: "", + wisdom: "", + charisma: "" + }; + optionalAttributes.forEach(attribute => { + set[attribute] = ""; + }); + + setAttrs(set); + showChoices(["abilities_rollstats_rolled","abilities_selects"]); + }); + + on("clicked:clearstats", function(eventinfo) { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + var data = getCharmancerData(); + var attribs = globalAttributesByCategory.abilities.concat(optionalAttributes); + reset = {}; + _.each(attribs, function(attrib) { + reset[attrib] = ""; + disableCharmancerOptions(attrib, []); + }); + + setAttrs(reset); + }); + + /* EQUIPMENT */ + on("page:l1-equipment", function(eventinfo) { + const data = getCharmancerData(); + const class_string = getName("class", data, true); + const background_string = getName("background", data, true); + + const class_equipment = data && data["l1-equipment"] && data["l1-equipment"].values && data["l1-equipment"].values.equipment_class ? data["l1-equipment"].values.equipment_class : undefined; + const background_equipment = data && data["l1-equipment"] && data["l1-equipment"].values ? data["l1-class"].values.equipment_background : undefined; + let update = {}; + let update_attr = {}; + let showList = []; + let hideList = []; + let allBlobs = getRelevantBlobs(data, "1", "l1"); + let equipmentType = data["l1-equipment"] && data["l1-equipment"].values && data["l1-equipment"].values.equipment_type ? data["l1-equipment"].values.equipment_type : ""; + + const handleChoices = type => { + let equipment = {}; + if (data[`l1-${type}`] && data[`l1-${type}`].data[type] && data[`l1-${type}`].data[type]["data-Equipment"]) { + equipment = data[`l1-${type}`].data[type]["data-Equipment"]; + }; + + if (allBlobs.sorted[type]) { + _.each(allBlobs.sorted[type], blob => { + if (blob.Equipment) { + let blobstuff = blob.Equipment; + try { + blobstuff = JSON.parse(blob.Equipment); + } catch (e) {} + equipment.default = equipment.default ? equipment.default.concat(blobstuff) : blobstuff; + } + }); + }; + + _.each(equipment, function(feature, num) { + if(num === "default") { + update[`${type}_equipment`] = feature.join(", "); + } else { + let dynamic_items = "Category:None"; + let static_items = []; + let hasDouble = false; + const doubleOffset = 4; + let equipmentTitle = cleanEquipment(feature).replace(/^\w/, char => char.toUpperCase()).replace(/(^\(|\)$)/g, ""); + + if (equipmentTitle.search("Two of") == 0) { + equipmentTitle += ")"; + } + + update[`${type}_equipment_choice${num}_title`] = equipmentTitle; + _.each(feature, function(f) { + if (f.indexOf("Subtype:") > -1) { + dynamic_items = `Category:Items "Item Rarity":Standard ${f.split("~")[0]}`; + } else if (f.indexOf("*Weapon") > -1) { + dynamic_items = `Category:Items "Item Rarity":Standard ${f.split("~")[0]}`; + } else { + static_items.push(f); + } + if (f.split("~")[1] && f.split("~")[1] == "DBL") { + hasDouble = true; + } + }); + + if (hasDouble) { + showList.push(`${type}_equipment_choice${num}_double`); + const doubleChoiceNum = parseInt(num) + doubleOffset; + setCharmancerOptions(`${type}_equipment_choice${doubleChoiceNum}`, dynamic_items, {add:static_items, category:"Items"}); + } else { + hideList.push(`${type}_equipment_choice${num}_double`); + } + setCharmancerOptions(`${type}_equipment_choice${num}`, dynamic_items, {add: static_items, category:"Items"}); + showList.push(`${type}_equipment_choice${num}`); + } + }); + }; + recalcData(); + + if (class_string) { + showList.push("has_class"); + update["class_label"] = class_string; + update_attr["equipment_class"] = class_string; + + if (class_equipment && class_equipment != class_string) { + update["starting_gold_btn_label"] = ""; + update["class_equipment"] = ""; + update_attr["starting_gold"] = 0; + update_attr["equipment_type"] = ""; + equipmentType = ""; + + for (i = 1; i <= 8; i++) { + update_attr[`class_equipment_choice${i}`] = ""; + } + }; + + if (class_string === "custom") { + update_attr["equipment_type"] = "gold"; + hideList.push("equipment_type", "random_gold_option") + showList.push("custom_class_gold", "gold_option", "eqp_custom_class"); + } else { + handleChoices("class"); + const startingGold = data["l1-class"].data.class && data["l1-class"].data.class["Starting Gold"] ? data["l1-class"].data.class["Starting Gold"] : false; + if (startingGold) { + update["starting_gold_btn_label"] = startingGold; + update_attr["roll_starting_gold"] = `@{wtype}&{template:mancerroll} {{title=Starting Gold}} {{r1=[[${startingGold.replace("x", "*")}]]}}`; + showList.push("random_gold_option"); + } else { + update_attr["roll_starting_gold"] = "@{wtype}&{template:mancerroll} {{title=Starting Gold}} {{r1=[[0]]}}"; + update_attr["equipment_type"] = "class"; + equipmentType = "class"; + hideList.push("equipment_type", "gold_option"); + showList.push("class_option", "no_gold_option"); + } + } + } else { + showList.push("no_class"); + }; + + if (background_string) { + update["background_label"] = background_string; + update_attr["equipment_background"] = background_string; + + background_string != "custom" ? handleChoices("background") : false; + + if (data["l1-equipment"] && data["l1-equipment"].values && data["l1-equipment"].values.equipment_type || class_string == "custom") { + if (data["l1-equipment"] && equipmentType == "class" || class_string == "custom") { + + showList.push("has_background"); + if (background_equipment && background_equipment != background_string) { + update["background_equipment"] = ""; + + for (i = 1; i <= 4; i++) { + update_attr[`background_equipment_choice${i}`] = ""; + } + }; + } + if (data["l1-equipment"] && equipmentType == "gold" && class_string != "custom") { + showList.push("background_chose_starting_gold"); + } + } + + try { + if (data['l1-background'] && data['l1-background'].data && data['l1-background'].data.background['data-Starting Gold']) { + update_attr["background_starting_gold"] = data['l1-background'].data.background['data-Starting Gold'] || 0 + } + } catch (error) { + errorMessage('l1-background', error) + } + } else { + showList.push("no_background"); + } + + if(equipmentType === "" || equipmentType === undefined) { + hideList.push("gold_option", "class_option"); + } else if(equipmentType === "gold") { + if(background_string) showList.push("background_gold_option"); + showList.push("gold_option"); + hideList.push("class_option"); + } else if(equipmentType === "class") { + showList.push("class_option"); + hideList.push("gold_option"); + } + + showChoices(showList); + hideChoices(hideList); + setCharmancerText(update); + setAttrs(update_attr); + }); + + on("mancerchange:equipment_type", function(eventinfo) { + var showList = []; + var hideList = []; + var update = {}; + var reset = {}; + var data = getCharmancerData(); + var class_string = getName("class", data, true); + var background_string = getName("background", data, true); + if(eventinfo.sourceType == "player") { + if(eventinfo.newValue === "" || eventinfo.newValue === undefined) { + hideList.push("gold_option", "class_option", "background_gold_option"); + } else if(eventinfo.newValue === "gold") { + if(background_string) showList.push("background_gold_option"); + if(class_string != "custom") showList.push("random_gold_option") + showList.push("gold_option"); + hideList.push("class_option"); + } else if(eventinfo.newValue === "class") { + showList.push("class_option"); + hideList.push("gold_option", "background_gold_option"); + } + } + showChoices(showList); + hideChoices(hideList); + }); + + on("mancerroll:starting_gold", function(eventinfo) { + setAttrs({starting_gold: eventinfo.roll[0].result}); + }); + + /* REPEATING SECTION LISTENERS */ + on("mancerchange:repeating_row", function(eventinfo) { + var mancerdata = getCharmancerData(); + var proficiencies = getProficiencies(mancerdata, eventinfo.currentStep); + var section = eventinfo.sourceSection.split("_")[2].split("-")[0].replace(/[0-9]+$/gm, ""); + var type = eventinfo.sourceSection.split("_")[3]; + var sourcepage = eventinfo.currentStep; + if(eventinfo.currentStep.split("-")[0] == "lp") { + var sectioninfo = eventinfo.sourceSection.split("_")[2].split("--")[0]; + if(sectioninfo.indexOf("-") === -1) { + let index = sectioninfo.indexOf(section) + section.length; + sectioninfo = [sectioninfo.slice(0, index), "-", sectioninfo.slice(index)].join(''); + } + sectioninfo = sectioninfo.split("-"); + if(sectioninfo.length > 1) { + sourcepage = "lp-levels"; + section = "class" + sectioninfo[1]; + if(sectioninfo[0] == "subclass") section += "_subclass"; + } else { + sourcepage = "lp-welcome"; + section = "lp-" + sectioninfo[0]; + } + } + var pagedata = mancerdata[sourcepage].data[section]; + if(_.last(eventinfo.sourceAttribute.split("_")) == "choice") { + if(type == "feature") { + if(eventinfo.previousValue !== eventinfo.newValue){ + clearRepeatingSections(eventinfo.sourceSection + " span"); + if(eventinfo.newValue.split(":")[0] == "Blob") { + if(pagedata.blobs[eventinfo.newValue.split(":")[1]]["Pick Spells"] || pagedata.blobs[eventinfo.newValue.split(":")[1]].Powers) { + deleteCharmancerData(["lp-spells"]); + } + handleBlobs(pagedata.blobs, { + filters: {name: eventinfo.newValue.split(":")[1]}, + section: section, + element: eventinfo.sourceSection + " span", + slide: eventinfo.currentStep, + parent: section + }); + } + } + } + if(eventinfo.newValue == "custom") { + + showChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); + } else { + var toset = {}; + hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); + toset[eventinfo.sourceSection + "_custom"] = ""; + setAttrs(toset); + } + } + }); + + on("mancerchange:repeating_row", function(eventinfo) { + if(eventinfo.currentStep !== "lp-choices") return; + if(eventinfo.sourceAttribute.indexOf("feature_choice") === -1 && eventinfo.sourceAttribute.indexOf("feature_info") === -1) return; + + const data = getCharmancerData(); + const traits = JSON.parse(data["lp-welcome"].values.previous_repeating).traits || []; + const singleSelectionTraits = [ + {group: "Maneuvers", single: "Maneuver" } + ]; //Types of traits that can be taken only once. + let traitsAlreadyTaken = []; + + //Read the current type of a trait + const currentTrait = data["lp-choices"].values[eventinfo.sourceAttribute.replace("_choice", "_info")] || ""; + const traitIndex = singleSelectionTraits.map(trait => { return trait.group; }).indexOf(currentTrait); + + //Return if the trait is not among the ones set for single selection. + if(traitIndex === -1) return; + + //Get single item type + const traitType = singleSelectionTraits[traitIndex].single + ": "; + + const getRelevantChoices = function(data, choiceType) { + const choices = data["lp-choices"].values || []; + let relevantChoices = []; + for(choice in choices) { + if(choice.indexOf("_info") === -1) continue; + if(choices[choice] === choiceType) relevantChoices.push(choice.replace("_info", "")); + } + return relevantChoices; + }; + + //Reading traits set in previous Levels + for(trait in traits) { + if(traits[trait].name.indexOf(traitType) > -1) { + const selectedTrait = traits[trait].name.replace(traitType, ""); + traitsAlreadyTaken.push("Blob:" + selectedTrait); + } + } + + //Handling traits choosen at current LP + const choices = getRelevantChoices(data, singleSelectionTraits[traitIndex].group); + for(choice in choices) { + if(choices[choice]+"_choice" in data["lp-choices"].values) { + traitsAlreadyTaken.push(data["lp-choices"].values[choices[choice]+"_choice"]); + } + } + + //Disable elements + for(choice in choices) { + //Enables all options + disableCharmancerOptions(choices[choice]+"_choice", ""); + //Disable maneuvers arealdy selected at lv1 or during current LP + disableCharmancerOptions(choices[choice]+"_choice", traitsAlreadyTaken); + } + }); + + on("mancerchange:repeating_spellrow", function(eventinfo) { + if(eventinfo.sourceType == "player") { + changeCompendiumPage("sheet-spells-info", eventinfo.newValue, "card_only"); + } + var mancerdata = getCharmancerData(); + var known = knownSpells().known; + _.each(mancerdata["l1-spells"].repeating, function(id) { + disableCharmancerOptions(id + "_choice", known, {category: "Powers"}); + }); + }); + + //D&D 5e: Charactermancer Lvl+ Druid, Circle of Land feedback improvement (UC811) + //Land druids used to be able to change multiple lands once they levelup. This goes against the rules. This is a fix for that issue. + //By Miguel + on("mancerchange:repeating_row", function(eventinfo) { + const featureName = "Circle Spells"; + const feedback = "You must choose your Circle Land at 3rd level"; + + const data = getCharmancerData(); + //First we detect if this is circle spell, otherwise return. + if(eventinfo.currentStep !== "lp-choices") return; + if(eventinfo.sourceAttribute.indexOf("feature_choice") === -1 && eventinfo.sourceAttribute.indexOf("feature_info") === -1) return; + if(!eventinfo.sourceSection+"_info" in data["lp-choices"].values || !data["lp-choices"].values[eventinfo.sourceSection+"_info"] === featureName) return; + + const previousRepeating = JSON.parse(data["lp-welcome"].values.previous_repeating); + const previousTraits = previousRepeating.traits; + const initialCircleTrait = previousTraits.findIndex(item => item.name.indexOf(featureName+": ") > -1); + + //A land was had not been selected yet when Mancer was started (Ex: Levelling from LV 1st to 5th) + if(!(/repeating_-.+_subclass-.+--[^3]+_feature/g).test(eventinfo.sourceSection)) { + const choices = data["lp-choices"].values; + for(choice in choices) { + if(choices[choice] === featureName) { + //Set all non 3rd level pickers to the choose value + if((/repeating_-.+_subclass-.+--[^3]+_feature/g).test(choice) && choice.indexOf("_info") > -1 && choices[choice] === featureName) { + const pickerClass = choice.replace("_info", "_choice"); + const currentValue = eventinfo.newValue.replace("Blob:", ""); + const initialLand = currentValue.replace(featureName, "").trim(); + const choiceLevel = choice.match(/--./)[0].replace("--", ""); + const choiceValue = initialLand + " " + featureName + "(" + choiceLevel + ")"; + if((eventinfo.newValue === "" || eventinfo.newValue === featureName) && eventinfo.previousValue !== feedback) { + setCharmancerOptions(pickerClass, [feedback], { selected: feedback }, function() { + disableCharmancerOptions(pickerClass, [""]); + }); + } else { + setCharmancerOptions(pickerClass, [choiceValue], { category: "Blob", selected: "Blob:"+choiceValue }, function() { + disableCharmancerOptions(pickerClass, [""]); + }); + } + } + } + } + return; + } + //A land was already selected when Mancer was started (Ex: Levelling from LV 3rd to 5th) + else if(initialCircleTrait > -1) { + const initialLand = previousTraits[initialCircleTrait].name.replace(featureName+": ", ""); + const choiceLevel = eventinfo.sourceSection.match(/--./)[0].replace("--", ""); + const choiceValue = initialLand + " " + featureName + "(" + choiceLevel + ")"; + const choiceClass = eventinfo.sourceSection+"_choice"; + setCharmancerOptions(choiceClass, [choiceValue], { category: "Blob", selected: "Blob:"+choiceValue }, function() { + disableCharmancerOptions(choiceClass, [""]); + }); + } + }); + + on("clicked:repeating_spellrow", function(eventinfo) { + var spell_name = ""; + var data = getCharmancerData(); + var card = "card_only"; + if(_.last(eventinfo.sourceSection.split("_")) == "spellrow") { + spell_name = data["l1-spells"].values[eventinfo.sourceAttribute]; + } else { + spell_name = data["l1-spells"].values[eventinfo.sourceSection + "_choice"] ? data["l1-spells"].values[eventinfo.sourceSection + "_choice"] : "Rules:Spells"; + card = data["l1-spells"].values[eventinfo.sourceSection + "_choice"] ? card : ""; + } + changeCompendiumPage("sheet-spells-info", spell_name, card); + }); + + on("mancerchange:repeating_customrow", function(eventinfo) { + var mancerdata = getCharmancerData(); + var profdata = getProficiencies(mancerdata, eventinfo.currentStep); + if(eventinfo.sourceAttribute.substr(-10) == "trait_name") { + var update = {}; + update[eventinfo.sourceSection + " span"] = eventinfo.newValue; + setCharmancerText(update); + } + if(_.last(eventinfo.sourceSection.split("_")) == "proficiency") { + if(_.last(eventinfo.sourceAttribute.split("_")) == "type") { + var update = {}; + var prof = eventinfo.newValue; + var choices = prof == "" ? [] : "Category:Proficiencies \"Type:" + prof + "\""; + var settings = {category: "Proficiencies", disable: profdata.all[prof]}; + update[eventinfo.sourceSection + " span + select"] = ''; + if(prof == "Language") update[eventinfo.sourceSection + " span + select"] += ''; + update[eventinfo.sourceSection + " span"] = eventinfo.newValue; + setCharmancerText(update); + if(prof == "") { + var toset = {}; + toset[eventinfo.sourceSection + "_choice"] = ""; + toset[eventinfo.sourceSection + "_custom"] = ""; + setAttrs(toset); + hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); + } else { + setCharmancerOptions(eventinfo.sourceSection + "_choice", choices, settings); + } + } else if(_.last(eventinfo.sourceAttribute.split("_")) == "choice") { + if(eventinfo.newValue == "custom") { + showChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); + } else { + var toset = {}; + hideChoices(["custom[name=comp_" + eventinfo.sourceSection + "_custom]"]); + toset[eventinfo.sourceSection + "_custom"] = ""; + setAttrs(toset); + } + } + } + }); + + on("clicked:repeating_customrow", function(eventinfo) { + var mancerdata = getCharmancerData(); + getRepeatingSections(function(repeating) { + var target = ""; + var section = eventinfo.sourceSection.split("_")[3] + var type = _.last(eventinfo.sourceSection.split("_")); + _.each(repeating.tree, function(branch, parentid) { + _.each(branch, function(child, childid) { + if(childid == eventinfo.sourceSection) target = parentid; + }); + }); + addRepeatingSection(target, "custom-" + type, "custom_" + section + "_" + type); + }); + }); + + on(customListeners, function(eventinfo) { + var mancerdata = getCharmancerData(); + var num = parseInt(eventinfo.triggerName.substr(-1)); + var base = eventinfo.triggerName.slice(0, -1); + var section = eventinfo.triggerName.split("_")[0].replace("sub", ""); + if(mancerdata["l1-" + section].values[base.split("_")[0]] + && ["Rules", "CategoryIndex"].indexOf(mancerdata["l1-" + section].values[base.split("_")[0]].split(":")[0]) != -1 + && eventinfo.newValue) { + showChoices([base + (num+1)]); + } + }); + + on(changeListeners, function(eventinfo) { + recalcData(); + }); + + on("mancerchange:custom_race_spell_ability mancerchange:custom_class_spell_ability", function(eventinfo) { + var section = eventinfo.triggerName.split("_")[1]; + if(eventinfo.newValue) { + showChoices(["custom_spellcasting"]); + } else { + var set = {} + set["custom_" + section + "_spell_number"] = "1"; + set["custom_" + section + "_cantrip_number"] = "1"; + set["custom_" + section + "_spell_list"] = ""; + setAttrs(set); + hideChoices(["custom_spellcasting"]); + } + }); + + on("page:l1-welcome page:l1-class page:l1-race page:l1-abilities page:l1-background page:l1-equipment page:l1-spells page:l1-feat page:l1-bio page:l1-summary", function(eventinfo) { + var mancerdata = getCharmancerData(); + var buttons = ""; + var buttoninfo = { + welcome: "charmancer-start", + race: "race-u", + class: "class-u", + abilities: "abilities-u", + background: "background-u", + equipment: "equipment-u", + spells: "spells-u", + feat: "feats-u", + bio: "bio-u", + summary: "review-u" + } + _.each(buttoninfo, function(translation, page) { + var here = "l1-" + page == eventinfo.triggerName; + buttons += "
  • "; + }); + buttons += "
  • "; + setCharmancerText({steps: buttons}); + if(eventinfo.triggerName != "l1-welcome") { + addRepeatingSection("topbar-holder", "topbar"); + recalcData(); + getProficiencies(mancerdata, eventinfo.currentStep); + } + }); + + on("mancerchange:class_feature_choice_1 mancerchange:class_feature_choice_2", function(eventinfo) { + var data = getCharmancerData(); + var featureNum = _.last( eventinfo.triggerName.split("_") ); + var update = {}; + var set = {}; + set["class_feature_choice_" + featureNum + "_desc"] = ""; + if(eventinfo.newValue) { + getCompendiumPage(data["l1-class"].values.class, function(p) { + p = removeDuplicatedPageData(p); + var data = p["data"]; + if(data["data-Feature Choices"]) { + var feature = JSON.parse(data["data-Feature Choices"])[featureNum-1]; + var featureName = feature.Name; + var offset = 3; + + if (eventinfo.newValue.split("~")[1] && eventinfo.newValue.split("~")[1] == "DBL") { + showChoices(["class_feature_row_" + featureNum + "_manual"]); + // var doubleChoiceNum = featureNum + offset; + // setCharmancerOptions("class_feature_choice_" + doubleChoiceNum, [eventinfo.newValue]); + } else { + hideChoices(["class_feature_row_" + featureNum + "_manual"]); + } + if(data["data-" + featureName + " Data"]) { + var json = JSON.parse(data["data-" + featureName + " Data"]); + var selected = _.findWhere(json, {Name: eventinfo.newValue}); + if(selected) { + update["class_feature_description_" + featureNum] = selected.Desc; + set["class_feature_choice_" + featureNum + "_desc"] = selected.Desc; + setAttrs(set); + setCharmancerText(update); + } + } + } + }); + } else { + update["class_feature_description_" + featureNum] = ""; + setAttrs(set); + setCharmancerText(update); + } + }); + + on("mancerchange:custom_subclass_cantrip_number mancerchange:custom_subclass_spell_number", function(eventinfo) { + var section = eventinfo.triggerName.split("_")[2]; + if(eventinfo.newValue && eventinfo.newValue > 0) { + showChoices(["custom_" + section + "_list"]); + } else { + var reset = {}; + reset["custom_subclass_" + section + "_list"] = ""; + hideChoices(["custom_" + section + "_list"]); + setAttrs(reset); + } + }); + + on("mancerchange:background_personality_choice1 mancerchange:background_personality_choice2", function(eventinfo) { + var mancerdata = getCharmancerData(); + var choices = []; + if(mancerdata["l1-background"].values["background_personality_choice1"]) choices.push(mancerdata["l1-background"].values["background_personality_choice1"]); + if(mancerdata["l1-background"].values["background_personality_choice2"]) choices.push(mancerdata["l1-background"].values["background_personality_choice2"]); + disableCharmancerOptions("background_personality_choice1", choices); + disableCharmancerOptions("background_personality_choice2", choices); + }); + + on("mancerroll:background_detail_choice_roll mancerroll:background_personality_choice1_roll mancerroll:background_personality_choice2_roll mancerroll:background_ideal_choice_roll mancerroll:background_bond_choice_roll mancerroll:background_flaw_choice_roll", function(eventinfo) { + var data = getCharmancerData(); + var index = eventinfo.roll[0].dice[0] - 1; + var baseName = eventinfo.triggerName.split(":")[1].slice(0,-5); + var choices = JSON.parse(data["l1-background"].values[baseName + "_array"]); + setCharmancerOptions(baseName, choices.array, {selected: choices.array[index]}); + if(baseName.slice(0, -1) == "background_personality_choice") { + var num = baseName.substr(-1) == "1" ? "2" : "1"; + setRollButton(baseName.slice(0, -1) + num, choices.array, choices.name, index + 1); + } + }); + + on("clicked:cancel", function() { + showChoices(["cancel-prompt"]); + var data = getCharmancerData(); + }); + + on("clicked:continue", function() { + hideChoices(["cancel-prompt"]); + }); + + on("page:l1-spells", function(eventinfo) { + var stats = recalcData(); + var mancerdata = getCharmancerData(); + var spellData = knownSpells(); + var set = {}; + var titles = {}; + var sorted = {}; + var repids = []; + var totalchoices = 0; + var racename = getName("race", mancerdata, true); + var subracename = getName("subrace", mancerdata, true); + var classname = getName("class", mancerdata, true); + var subclassname = getName("subclass", mancerdata, true); + set["race_spells"] = racename + subracename; + set["class_spells"] = classname + subclassname; + set["race_number"] = spellData.race ? spellData.race.choices.length : 0; + set["class_number"] = spellData.class ? spellData.class.choices.length : 0; + + subracename = getName("subrace", mancerdata) == "" ? "" : " - " + getName("subrace", mancerdata); + subclassname = getName("subclass", mancerdata) == "" ? "" : " - " + getName("subclass", mancerdata); + + setAttrs(set, function() { + spellData = knownSpells(); + titles["race"] = getName("race", mancerdata) + subracename; + titles["class"] = getName("class", mancerdata) + subclassname; + + _.each(["race", "class"], function(section) { + if(spellData[section]) { + _.each(spellData[section].known, function(spell) { + sorted[spell.Level] = sorted[spell.Level] ? sorted[spell.Level] : {}; + sorted[spell.Level][section] = sorted[spell.Level][section] ? sorted[spell.Level][section] : {known: [], choices: []}; + sorted[spell.Level][section].known.push(spell.Name); + }); + _.each(spellData[section].choices, function(spell) { + sorted[spell.Level] = sorted[spell.Level] ? sorted[spell.Level] : {}; + sorted[spell.Level][section] = sorted[spell.Level][section] ? sorted[spell.Level][section] : {known: [], choices: []}; + sorted[spell.Level][section].choices.push(spell); + }); + } + }); + //This is just to get the total number of repeating sections we need. when we've added enough, erase the rest + _.each(sorted, function(spellarray, level) { + _.each(spellarray, function(spells, section) { + totalchoices++; + _.each(spells.choices, function(spell) { + totalchoices++; + }); + }); + }); + _.each(sorted, function(spellarray, level) { + _.each(spellarray, function(spells, section) { + addRepeatingSection("spell_holder", "row", "spellrow", function(rowid) { + var repupdate = {}; + var knownspells = []; + var toset = {}; + repupdate[rowid + " label span"] = level == 0 ? titles[section] + " Cantrips" : titles[section] + " Level " + level; + _.each(spells.known, function(spell, index) { + var thisSpell = spell; + thisSpell += ""; + thisSpell += ""; + toset[rowid + "_known" + index] = "Powers:" + spell; + knownspells.push(thisSpell); + }); + repupdate[rowid + " label p"] = knownspells.join(", "); + setAttrs(toset); + setCharmancerText(repupdate); + repids.push(rowid); + _.each(spells.choices, function(spell) { + addRepeatingSection(rowid, "choose", section + "_spell-l" + spell.Level, function(id) { + var toset = {}; + var lists = [spell.List]; + if(spell.AddList) lists = lists.concat(spell.AddList); + var choices = "Category:Powers Classes:*" + lists.join("|*") + " Rank:" + spell.Level; + var settings = {category: "Powers", disable: spellData.known}; + toset[id + "_info"] = spell.Ability; + if(section != "class") toset[id + "_custom"] = section; + repids.push(id); + + getCompendiumQuery(choices, data => { + let options = new Set(data.map(entry => { return entry.name; }).concat(spell["Expanded List"])); + options = Array.from(options).sort().filter(entry => { return (typeof entry === 'string'); }); + settings.disable = settings.disable.filter(entry => { return options.indexOf(entry) > -1 }); + setCharmancerOptions(id + "_choice", options, settings); + setAttrs(toset); + showChoices(["action[name=act_" + id + "_action]"]); + if(repids.length >= totalchoices) { + clearRepeating(repids, "l1-spells"); + } + }); + }); + }); + }); + }) + }); + + if (!spellData.race && !spellData.class) { + showChoices(["no_spells"]); + clearRepeatingSections("spell_holder"); + } else { + showChoices(["spell-info-container"]); + hideChoices(["no_spells"]); + } + + setAttrs(set); + }); + }); + + on("page:l1-feat", function(eventinfo) { + var stats = recalcData(); + var mancerdata = getCharmancerData(); + var showList = []; + var hideList = []; + + if(SheetUtils.checkPath(mancerdata, "['l1-race']['data']['subrace']['data-Feats']") || SheetUtils.checkPath(mancerdata, "['l1-race']['data']['race']['data-Feats']")) { + showList = ["yes_feat"]; + hideList = ["no_feat"]; + } else { + hideList = ["yes_feat"]; + showList = ["no_feat"]; + deleteCharmancerData(["l1-feat"]); + } + + showChoices(showList); + hideChoices(hideList); + }); + + on("mancerchange:feat", function(eventinfo) { + changeCompendiumPage("sheet-feat-info", eventinfo.newValue); + + var reset = {}; + if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { + showChoices(["feat_options"]); + } + hideChoices(["feat_possible"]); + + if(eventinfo.sourceType == "player") { + reset = {}; + reset["feat_ability_choice"] = ""; + reset['other_options_and_features_choice1'] = ''; + reset['other_options_and_features_choice2'] = ''; + reset['feat_skill_choice1'] = ''; + reset['feat_skill_choice2'] = ''; + reset['feat_skill_choice3'] = ''; + reset['feat_skill_choice4'] = ''; + reset['feat_expertise_choice1'] = ''; + reset['feat_expertise_choice2'] = ''; + reset['feat_spell_choice1'] = ''; + reset['feat_spell_choice2'] = ''; + reset['feat_spell_choice3'] = ''; + reset['feat_spell_choice4'] = ''; + setCharmancerText({"feat_text": ""}); + } + + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + setAttrs(reset, function() { + var mancerdata = getCharmancerData(); + var data = p["data"]; + var showList = []; + var update = {}; + + if(data["data-Ability Score Increase"]) { + var abilityText = []; + var json = JSON.parse(data["data-Ability Score Increase"]); + _.each(json, function(increase, ability) { + abilityText.push(ability + " +" + increase); + }); + update["feat_ability_score"] = abilityText.join(", "); + showList.push("feat_ability"); + } + + if(data["data-Ability Score Choice"]) { + var json = JSON.parse(data["data-Ability Score Choice"]); + setCharmancerOptions("feat_ability_choice", json); + showList.push("feat_ability", "feat_ability_choice"); + } + + if(data["Prerequisite"]) { + showList.push("feat_prereq") + update["feat_prerequisite"] = data["Prerequisite"]; + } + + if(data["Other Options and Features"]) { + const otherFeatures = JSON.parse(data["Other Options and Features"]); + if(otherFeatures['Choice'] && Array.isArray(otherFeatures['Choice'])) { + for(let i=0; i= 2 && page.values[section + "_ability_choice2"]) choices--; + if(page.values[section + "_ability_choice"]) choices--; + if(page.values[section + "_ability_choice1"]) choices--; + if(choices > 0) missing.ability = [total, choices]; + } + _.each(page.repeating, function(id) { + if(id.split("_")[2] == section && id.split("_")[3] == "feature") { + var featurename = page.values[id + "_info"]; + if(page.values[id + "_choice"]) { + warnings += '

    Your ' + featurename + ' is ' + _.last(page.values[id + "_choice"].split(":")) + '.

    ' + } else { + warnings += '

    Your have not chosen a ' + featurename + '.

    '; + }; + } + }); + _.each(proficiencyList, function(prof) { + var numChoices = 0; + var totalChoices = 0; + _.each(page.repeating, function(id) { + if(id.split("_")[2] == section && id.split("_")[3] == prof.toLowerCase()) { + totalChoices++; + numChoices++; + if(page.values[id + "_choice"]) { + numChoices--; + var thischoice = _.last(page.values[id + "_choice"].split(":")); + if(thischoice == "custom" && !page.values[id + "_choice"]) { + warnings += '

    You\'ve chosen a custom language, but you haven\'t entered a custom language name.

    '; + } + _.each(profdata.auto, function(profs, source) { + if(profs.includes(thischoice)) { + warnings += '

    You\'ve chosen the ' + prof.toLowerCase() + ' ' + thischoice; + warnings += ', but you already have that ' + prof.toLowerCase() + ' from your ' + source + '.

    '; + }; + }); + } + } + }); + if(numChoices > 0) missing[prof] = [totalChoices, numChoices]; + }); + var total = 0; + var choices = 0; + _.each(page.repeating, function(id) { + if(id.split("_")[2] == section && id.split("_")[3] == "expertise") { + total++; + choices++; + if(page.values[id + "_choice"]) choices--; + if(choices > 0) missing.expertise = [total, choices]; + } + }); + } + _.each(missing, function(number, type) { + var singular = type == "ability" ? "an" : "a" + if(type == "ability") { + type = 'ability score increase' + } + warnings += '

    Your ' + sectionName; + if(type == "expertise") { + warnings += " gives you expertise in "; + warnings += number[0] > 1 ? 'up to ' + number[0] + ' skills' : " a skill"; + } else { + warnings += " allows you to choose "; + warnings += number[0] > 1 ? "up to " + number[0] + ' ' + type.toLowerCase() + 's' : singular + " " + type.toLowerCase(); + } + if(number[0] - number[1] > 0) { + warnings += ', but you\'ve only chosen ' + number[1] + '!

    '; + } else { + warnings += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen one!

    '; + } + }); + return warnings; + }; + + ///Show the bio info we need to put in places + if(mancerdata["l1-bio"]) { + let length = Object.keys(mancerdata["l1-bio"].values).length; + set["bio_info"] = ""; + + //Check if race has changed since entering data and add a warning + if(length < 2) { + set["bio_info"] += '

    You have not added new information to the Bio tab.

    '; + } else { + if(mancerdata["l1-bio"].values.character_name) { + set["bio_info"] += '

    Your name is ' + mancerdata["l1-bio"].values.character_name + '.

    ';}; + + if(mancerdata["l1-bio"].values.age) { + set["bio_info"] += '

    Your age is ' + mancerdata["l1-bio"].values.age + '.

    ';}; + + if(mancerdata["l1-bio"].values["height"]) { + set["bio_info"] += '

    Your height is ' + mancerdata["l1-bio"].values["height"] + '.

    ';}; + + if(mancerdata["l1-bio"].values.weight) { + set["bio_info"] += '

    Your weight is ' + mancerdata["l1-bio"].values.weight + '.

    ';}; + + if(mancerdata["l1-bio"].values.eyes) { + set["bio_info"] += '

    Your eye color is ' + mancerdata["l1-bio"].values.eyes + '.

    ';}; + + if(mancerdata["l1-bio"].values.hair) { + set["bio_info"] += '

    Your hair is ' + mancerdata["l1-bio"].values.hair + '.

    ';}; + + if(mancerdata["l1-bio"].values.skin) { + set["bio_info"] += '

    Your skin is ' + mancerdata["l1-bio"].values.skin + '.

    ';}; + + if (mancerdata["l1-bio"].values.previous_race != racename) { + setCharmancerText({ + race_warning: '

    Each race has unique look and different names. You might want to adjust your choices to reflect your race.

    ' + }); + }; + }; + }; + + if(mancerdata["l1-race"] && racename) { + set["race_info"] = '

    Your race is ' + racename + '

    '; + if(!mancerdata["l1-race"].values.alignment) set["race_info"] += '

    You haven\'t chosen your alignment.

    '; + set["race_info"] += handleMissing("race"); + if(mancerdata["l1-race"].values["has_subrace"] == "true") { + if(subracename) { + set["race_info"] += '

    Your subrace is ' + subracename + '

    '; + set["race_info"] += handleMissing("subrace"); + } else { + if(mancerdata["l1-race"].values.subrace == "Rules:Races" && !mancerdata["l1-race"].values.subrace_name) { + set["race_info"] = '

    You need to pick a name for your custom subrace!

    '; + } else { + set["race_info"] += '

    You have not selected a subrace!

    '; + } + ready = false; + showChoices(["race_button"]); + } + } + _.each(spelldata.errors.race, function(error) { + switch(error) { + case "custom_race_spell_list": + set["race_info"] += '

    You have not selected spell list for your innate spellcasting!

    '; + ready = false; + break; + default: + console.log("Unknown race spell error: " + error); + } + }); + if(mancerdata["l1-race"].values.race == "Rules:Races") { + if(!mancerdata["l1-race"].values.size) set["race_info"] += '

    You have not selected a size for your custom race!

    '; + if(!mancerdata["l1-race"].values.speed) set["race_info"] += '

    You have not selected a walking speed for your custom race!

    '; + } + } else { + if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races" && !mancerdata["l1-race"].values.race_name) { + set["race_info"] = '

    You need to pick a name for your custom race!

    '; + } else { + set["race_info"] = '

    You have not selected a race!

    '; + } + ready = false; + showChoices(["race_button"]); + } + + if(mancerdata["l1-class"] && classname) { + set["class_info"] = '

    Your class is ' + classname + '.

    '; + set["class_info"] += handleMissing("class"); + if(mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.custom_hit_die) { + set["class_info"] = '

    You need to pick a hit die for your custom class!

    '; + } + if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) { + if(subclassname && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) { + set["class_info"] += '

    Your ' + mancerdata["l1-class"].data.class["Subclass Name"] + ' is ' + subclassname + '.

    '; + set["class_info"] += handleMissing("subclass", mancerdata["l1-class"].data.class["Subclass Name"]); + } else { + if(mancerdata["l1-class"].values.subclass == "Rules:Classes" && !mancerdata["l1-class"].values.subrace_name) { + set["class_info"] = '

    You need to pick a name for your custom ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!

    '; + } else { + set["class_info"] += '

    You have not selected a ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!

    '; + } + ready = false; + showChoices(["class_button"]); + } + } + _.each(spelldata.errors.class, function(error) { + switch(error) { + case "custom_class_spell_list": + set["race_info"] += '

    You have selected a spellcasting ability for your custom class, but you have not selected a spell list.

    '; + ready = false; + showChoices(["class_button"]); + break; + case "custom_class_spell_number": + set["race_info"] += '

    You have selected a spellcasting ability for your custom class, but you have not selected a number of spells.

    '; + ready = false; + showChoices(["class_button"]); + break; + default: + console.log("Unknown class spell error: " + error); + } + }); + } else { + if(mancerdata["l1-class"] && mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.race_name) { + set["class_info"] = '

    You need to pick a name for your custom class!

    '; + } else { + set["class_info"] = '

    You have not selected a class!

    '; + } + ready = false; + showChoices(["class_button"]); + } + + if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values.abilities) { + switch(mancerdata["l1-abilities"].values.abilities) { + case "Standard Array": + set["ability_info"] = '

    You generated your stats from the standard array.

    '; + break; + case "Roll for Stats": + set["ability_info"] = '

    You generated your stats by rolling.

    '; + break; + case "Point Buy": + set["ability_info"] = '

    You generated your stats with the point buy method.

    '; + break; + case "custom": + set["ability_info"] = '

    You entered custom values for your stats.

    '; + break; + } + var x = 0; + _.each(abilityList, function(ability) { + if(!mancerdata["l1-abilities"].values[ability.toLowerCase()]) { + x++; + set["ability_info"] += '

    You have not selected a score for your ' + ability.toLowerCase() + '!

    '; + ready = false; + showChoices(["abilities_button"]); + } + }); + if(x == 6) set["ability_info"] = '

    You have not selected your ability scores!

    '; + } else { + set["ability_info"] = '

    You have not generated your ability scores!

    '; + ready = false; + showChoices(["abilities_button"]); + } + + if(mancerdata["l1-background"] && bgname) { + set["background_info"] = '

    You come from a ' + bgname + ' background.

    '; + if(mancerdata["l1-background"].data.background && mancerdata["l1-background"].data.background["data-Background Choice Name"]) { + if(!mancerdata["l1-background"].values["background_detail_choice"]) { + set["background_info"] += '

    You haven\'t chosen your '; + set["background_info"] += mancerdata["l1-background"].data.background["data-Background Choice Name"] +'.

    '; + } + } + if(!mancerdata["l1-background"].values["background_personality_choice1"] && !mancerdata["l1-background"].values["background_personality_choice2"]) { + set["background_info"] += '

    You haven\'t picked your personality traits.

    '; + } else if(!mancerdata["l1-background"].values["background_personality_choice1"] || !mancerdata["l1-background"].values["background_personality_choice2"]) { + set["background_info"] += '

    You haven\'t picked one of your personality traits.

    '; + } + if(!mancerdata["l1-background"].values["background_ideal_choice"]) { + set["background_info"] += '

    You haven\'t chosen your ideal.

    '; + } + if(!mancerdata["l1-background"].values["background_bond_choice"]) { + set["background_info"] += '

    You haven\'t chosen your bond.

    '; + } + if(!mancerdata["l1-background"].values["background_flaw_choice"]) { + set["background_info"] += '

    You haven\'t chosen your flaw.

    '; + } + set["background_info"] += handleMissing("background"); + } else { + set["background_info"] = '

    You have not selected a background!

    '; + ready = false; + showChoices(["background_button"]); + } + + if(mancerdata["l1-equipment"] && mancerdata["l1-equipment"].values["equipment_type"]) { + switch(mancerdata["l1-equipment"].values["equipment_type"]) { + case "class": + set["equipment_info"] = '

    You got starting equipment based on your class and background.

    '; + break; + case "gold": + set["equipment_info"] = '

    You opted for gold instead of starting equipment.

    '; + break; + } + if(mancerdata["l1-equipment"].values["equipment_type"] == "class") { + var choices = {"class": [0,0], "background": [0,0]}; + _.each(choices, function(numbers, section) { + var equipment = mancerdata["l1-" + section].data[section] && mancerdata["l1-" + section].data[section]["data-Equipment"] ? mancerdata["l1-" + section].data[section]["data-Equipment"] : {}; + _.each(equipment, function(choice, choicekey) { + if(choicekey != "default") numbers[0]++; + }); + _.each(mancerdata["l1-equipment"].values, function(val, key) { + if(key.includes(section + "_equipment_choice")) numbers[1]++; + }); + }); + _.each(choices, function(number, type) { + if(number[0] - number[1] > 0) { + set["equipment_info"] += '

    Your ' + type + ' gives you '; + set["equipment_info"] += number[0] > 1 ? number[0] + " equipment choices" : "an equipment choice"; + if(number[1] > 0) { + set["equipment_info"] += ', but you\'ve only chosen ' + number[1] + '!

    '; + } else { + set["equipment_info"] += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen it!

    '; + } + } + }); + } + if(mancerdata["l1-equipment"].values["equipment_type"] == "gold" && mancerdata["l1-equipment"].values["starting_gold"] == "0") { + set["equipment_info"] = '

    You selected starting wealth for your equipment, but you don\'t have any gold yet!

    '; + } + if(mancerdata["l1-equipment"].values["equipment_class"] != getName("class", mancerdata, true) || (mancerdata["l1-equipment"].values["equipment_background"] != getName("background", mancerdata, true) && mancerdata["l1-equipment"].values["equipment_type"] != "gold")) { + set["equipment_info"] = '

    Your equipment options have changed, you\'ll need to choose again.

    '; + ready = false; + showChoices(["equipment_button"]); + } + } else { + set["equipment_info"] = '

    You have not selected any equipment!

    '; + ready = false; + showChoices(["equipment_button"]); + } + + var spellsready = true; + var toDelete = []; + if(mancerdata["l1-spells"]) { + prevRace = mancerdata["l1-spells"].values.race_spells || ""; + prevClass = mancerdata["l1-spells"].values.class_spells || ""; + currentRace = getName("race", mancerdata, true) + getName("subrace", mancerdata, true); + currentClass = getName("class", mancerdata, true) + getName("subclass", mancerdata, true); + set["spells_info"] = ""; + if((raceSpells + classSpells) == 0) { + set["spells_info"] += '

    The arcane is a mystery to you.

    '; + deleteCharmancerData(["l1-spells"]); + spellsready = false; + } else if(prevRace != currentRace || prevClass != currentClass || mancerdata["l1-spells"].values.race_number != raceSpells || mancerdata["l1-spells"].values.class_number != classSpells) { + if(prevRace != currentRace || mancerdata["l1-spells"].values.race_number > raceSpells) { + for(var x = 1; x<=9; x++) { + toDelete.push("race_level0_choice" + x); + toDelete.push("race_level1_choice" + x); + } + if(raceSpells > 0 && mancerdata["l1-spells"].values.race_number > 0) { + set["spells_info"] += '

    Your racial spells were reset because your options have changed.

    '; + } + } + if(prevClass != currentClass || mancerdata["l1-spells"].values.class_number > classSpells) { + for(var x = 1; x<=9; x++) { + toDelete.push("class_level0_choice" + x); + toDelete.push("class_level1_choice" + x); + } + if(classSpells > 0 && mancerdata["l1-spells"].values.class_number > 0) { + set["spells_info"] += '

    Your class spells were reset because your options have changed.

    '; + } + } + } + } else if((raceSpells + classSpells) > 0) { + set["spells_info"] = '

    You haven\'t selected your spells!

    '; + spellsready = false; + showChoices(["spells_button"]); + } else { + set["spells_info"] = '

    The arcane is a mystery to you.

    '; + spellsready = false + } + + if(SheetUtils.checkPath(mancerdata, "['l1-race']['data']['subrace']['data-Feats']") || SheetUtils.checkPath(mancerdata, "['l1-race']['data']['race']['data-Feats']")) { + if(mancerdata["l1-feat"] && mancerdata["l1-feat"].values.feat) { + set["feat_info"] = '

    You\'ve selected the ' + removeExpansionInfo(mancerdata["l1-feat"].values.feat.split(":")[1]) + ' feat.

    '; + set["feat_info"] += handleMissing("feat"); + } else { + set["feat_info"] = '

    You have access to a feat, but you have not yet selected one!

    '; + } + } else { + set["feat_info"] = '

    As you exchange your novice notions of the world for experience, a feat may become within reach. Not today, however.

    '; + deleteCharmancerData(["l1-feat"]); + } + + if(ready) { + set.ready_message = "If you're ready to build your " + racename; + set.ready_message += subracename == "" ? " " : " (" + subracename + ") "; + set.ready_message += subclassname == "" ? classname : classname + " (" + subclassname + ")"; + set.ready_message += " from a " + bgname + " background, click \"Apply Changes.\""; + showChoices(["apply_changes", "ready_text"]); + } else { + set.ready_message = "Hold on there! You've missed some required fields, which have been marked with a ."; + } + //If you're ready to build your race class from a background background, click "Apply Changes." + deleteCharmancerData([{"l1-spells":toDelete}], function() { + spelldata = knownSpells(); + if(spellsready) { + if (spelldata.known && spelldata.known.length) { + set["spells_info"] += '

    You know these spells: ' + removeExpansionInfo(spelldata.known.join(", ")) + '.

    '; + } + var choices = {"cantrip": [0,0], "spell": [0,0]}; + _.each(spelldata, function(section) { + _.each(section.choices, function(spell) { + if(spell.Level == 0) choices.cantrip[0]++; + if(spell.Level == 1) choices.spell[0]++; + }); + }); + choices.cantrip[1] = choices.cantrip[0]; + choices.spell[1] = choices.spell[0]; + _.each(mancerdata["l1-spells"].values, function(val, name) { + if(name.split("_")[3] == "spell-l0" && _.last(name.split("_")) == "choice") choices.cantrip[1]--; + if(name.split("_")[3] == "spell-l1" && _.last(name.split("_")) == "choice") choices.spell[1]--; + }); + _.each(choices, function(number, type) { + if(number[1] > 0) { + set["spells_info"] += '

    You can choose '; + set["spells_info"] += number[0] > 1 ? "up to " + number[0] + ' ' + type + 's' : "a " + type; + if(number[1] < number[0]) { + set["spells_info"] += ', but you\'ve only chosen ' + (number[0] - number[1]) + '!

    '; + } else { + set["spells_info"] += number[0] > 1 ? ', and you haven\'t chosen any!

    ' : ', and you haven\'t chosen one!

    '; + } + } + }); + } + setCharmancerText(set); + }); + }); + + /* Info Button Listeners */ + on("clicked:info_race", function(eventinfo) { + var data = getCharmancerData(); + var race = data["l1-race"] && data["l1-race"].values.race ? data["l1-race"].values.race : "Rules:Races"; + changeCompendiumPage("sheet-race-info", race); + }); + + on("clicked:info_subrace", function(eventinfo) { + var data = getCharmancerData(); + var subrace = data["l1-race"] && data["l1-race"].values.subrace ? data["l1-race"].values.subrace : data["l1-race"].values.race; + changeCompendiumPage("sheet-race-info", subrace); + }); + + on("clicked:info_class", function(eventinfo) { + var data = getCharmancerData(); + var oclass = data["l1-class"] && data["l1-class"].values.class ? data["l1-class"].values.class : "Rules:Classes"; + changeCompendiumPage("sheet-class-info", oclass); + }); + + on("clicked:info_subclass", function(eventinfo) { + var data = getCharmancerData(); + var osubclass = data["l1-class"] && data["l1-class"].values.subclass ? data["l1-class"].values.subclass : data["l1-class"].values.class; + changeCompendiumPage("sheet-class-info", osubclass); + }); + + on("mancerfinish:l1-mancer", function(eventinfo) { + var doAllDrops = function(dropArray, callback) { + getAttrs(["character_id"], function(v) { + _.each(stats.totals, function(scores, name) { + v[name + "_base"] = scores.total; + v[name + "_mod"] = scores.mod; + }); + v.base_level = "1"; + v.npc = "0"; + v["class_resource_name"] = ""; + v["other_resource_name"] = ""; + var update = {}; + var callbacks = []; + var totalDrops = dropArray.length; + var x = 0; + callbacks.push(update_class); + callbacks.push(update_race_display); + get_repeating_data(function(repeating) { + _.each(dropArray, function(page) { + page.data.Category = page.data.Category.replace("@@!!@@", ""); + var dropUpdate = processDrop(page, v, repeating, true); + callbacks = callbacks.concat(dropUpdate.callbacks); + repeating.prof_names = _.uniq(repeating.prof_names.concat(dropUpdate.prof_names)); + update = _.extend(update, dropUpdate.update); + x++; + setCharmancerText({"mancer_progress" :'
    '}); + }); + + callbacks.push( function() {update_ac();} ); + callbacks.push( function() {update_weight();} ); + callbacks.push(callback); + setAttrs(update, {silent: true}, function() { + setCharmancerText({"mancer_progress" :'
    '}); + _.each(callbacks, function(callback) { + callback(); + }); + setTalentPointsAndMastery(); + });/**/ + }); + }); + }; + var getOtherDrops = function(pagedata) { + var results = []; + if(pagedata["data-Equipment"]) { + var json = {}; + try { + json = JSON.parse(pagedata["data-Equipment"]); + } catch(e) { + json = pagedata["data-Equipment"]; + } + var newItems = makeItemData(json.default); + results = results.concat(newItems); + } + if(pagedata["data-Bundle"]) { + var json = {}; + try { + json = JSON.parse(pagedata["data-Bundle"]); + } catch(e) { + json = pagedata["data-Bundle"]; + } + var newItems = makeItemData(json); + results = results.concat(newItems); + } + return results; + }; + var getAllPages = function(pageArray, callback) { + var getNames = []; + _.each(pageArray, function(page){ + if(page.name) { + getNames.push(page.name); + } else { + getNames.push(page); + } + }); + getCompendiumPage(getNames, function(data) { + data = removeDuplicatedPageData(data); + var nextGet = []; + if (getNames.length === 1) { data = {0:data} }; //Fix single spell selections failing. + _.each(data, function(page, index) { + var pagedata = false; + _.each(pageArray, function(arrayData) { + if(arrayData.name.toLowerCase() == (page.data.Category + ":" + page.name).toLowerCase()) { + pagedata = arrayData; + } + }); + if(pagedata && pagedata.data) { + page.data = _.extend(page.data, pagedata.data); + } + if(!page.id) page.data.Source = "Charactermancer"; + page.name = page.name.replace(/@@!!@@/g,""); // Hacky bugfix to prevent custom names from matching unavailable content + nextGet = nextGet.concat(getOtherDrops(page.data)); + if(page.data["data-Starting Gold"] && !noEquipmentDrop) { + set["gp"] += parseInt(page.data["data-Starting Gold"]); + } + allPageData.push(page); + }); + + if(nextGet.length > 0) { + getAllPages(nextGet, callback); + } else { + callback(); + } + + }); + }; + var makeItemData = function(items) { + if (noEquipmentDrop) { + return []; + } else { + var itemArray = []; + var splitItems = []; + _.each(items, function(item) { + item = item.split(","); + _.each(item, function(splitItem) { + splitItems.push(splitItem.trim()); + }); + }) + _.each(splitItems, function(item) { + var itemname = item.split("(")[0].trim().replace("Items:", ""); + itemname = itemname.substring(0,4) == "and " ? itemname.substr(4) : itemname; + var itemdata = {name:"Items:" + itemname, data:{}} + if(item.includes("(")) { + var par = item.split("(")[1].split(")")[0]; + if( !isNaN(parseInt(par)) ) { + itemdata.data["itemcount"] = parseInt(par); + } + } + if(itemname != "") { + itemArray.push(itemdata); + } + }); + return itemArray; + } + }; + var eraseRepeating = function(sectionArray, callback) { + var thisSection = sectionArray.shift(); + getSectionIDs(thisSection, function(itemids) { + _.each(itemids, function(item) { + removeRepeatingRow("repeating_" + thisSection + "_" + item); + }); + if(sectionArray.length > 0) { + eraseRepeating(sectionArray, callback); + } else { + callback(); + } + + }); + }; + var noEquipmentDrop = false; + var startTime = Date.now(); + var allPageData = []; + if(eventinfo.data["l1-equipment"]) { + noEquipmentDrop = eventinfo.data["l1-equipment"].values["equipment_type"] == "gold"; + } + var data = eventinfo.data; + var stats = recalcData(data); + var profs = getProficiencies(data, "finish"); + var spells = knownSpells(data); + var blobs = getRelevantBlobs(data, "1", "l1"); + var customtraits = {race: [], subrace: [], class: [], subclass: [], background: []}; + var equipment = []; + var silentset = {}; + var silentattrs = ["class_resource_name", "class_resource", "class_resource_max", "other_resource_name", "other_resource", "other_resource_max", "other_resource_itemid", "class", "class_display", "subclass", "hitdietype", "hitdie_final", "race", "subrace", "race_display", "custom_class", "cust_classname"]; + var clearset = {}; + const globalModifiers = ["global_damage_mod_flag", "global_ac_mod_flag", "global_attack_mod_flag", "global_save_mod_flag", "global_skill_mod_flag"]; + var clearattrs = ["hp", "hp_max", "size", "speed", "gp", "alignment", "spellcasting_ability", "cust_hitdietype", "cust_spellslots", "cust_spellcasting_ability", "ac", "jack_bonus", "jack_attr", "death_save_bonus", "weighttotal", "initiative_bonus", "hit_dice", "hit_dice_max", "pb", "jack", "caster_level", "spell_attack_mod", "spell_attack_bonus", "spell_save_dc", "passive_wisdom", "custom_ac_base", "custom_ac_part1", "custom_ac_part2", "custom_ac_shield", "background"].concat(globalModifiers); + var classname = ""; + var set = {gp: 0}; + var allDrops = []; + var currentDrop = 0; + var totalDrops = 1; + var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]; + var allAbilities = SheetUtils.toLowerCase(abilityList); + var eraseSections = ["attack", "inventory", "traits", "resource", "proficiencies", "tool", "damagemod", "spell-cantrip", "hpmod", "acmod", "tohitmod", "savemod", "skillmod"]; + for(var x=1; x<=9; x++) { + eraseSections.push("spell-" + x); + } + //first set is silent to make sure certain things don't trigger workers + _.each(silentattrs, function(attr) { + silentset[attr] = ""; + }); + //Set up setAttrs to erase some fields + _.each(clearattrs, function(attr) { + clearset[attr] = ""; + }); + clearset["halflingluck_flag"] = "0"; + clearset["tab"] = "core"; + clearset["base_level"] = "1"; + clearset["level"] = "1"; + clearset["armorwarningflag"] = "hide"; + clearset["customacwarningflag"] = "hide"; + clearset["custom_ac_flag"] = "0"; + clearset["custom_attack_flag"] = "0"; + clearset["custom_ac_flag"] = "0"; + clearset["multiclass1_flag"] = "0"; + clearset["multiclass1_lvl"] = "1"; + clearset["multiclass2_flag"] = "0"; + clearset["multiclass2_lvl"] = "1"; + clearset["multiclass3_flag"] = "0"; + clearset["multiclass3_lvl"] = "1"; + clearset["custom_class"] = "0"; + _.each(allSkills, function(skill) { + clearset[skill + "_prof"] = "";//0 + clearset[skill + "_type"] = "";//1 + clearset[skill + "_bonus"] = ""; + }); + _.each(allAbilities, function(ability) { + clearset[ability + "_save_prof"] = ""; + clearset[ability + "_save_bonus"] = ""; + clearset[ability + "_bonus"] = "0"; + clearset["cust_" + ability + "_save_prof"] = ""; + }); + clearset["personality_traits"] = ""; + _.each(["ideal", "bond", "flaw"], function(type) { + clearset[type + "s"] = ""; + }); + //Set up second setAttrs with ability scores + _.each(stats.totals, function(scores, name) { + clearset[name + "_base"] = scores.total; + }); + // Build new blobs for traits with inputs, collect custom traits and languages + _.each(data, function(slide, pagename) { + _.each(slide.values, function(value, name) { + if(name.substr(-11) == "trait_input") { + var sectionid = name.substring(0, name.length - 6); + var thisblob = {}; + var thistrait = {}; + thistrait.Name = slide.values[sectionid + "_name"].replace(/{{Input}}/g, value); + thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"].replace(/{{Input}}/g, value) : ""; + thisblob.Traits = JSON.stringify([thistrait]); + blobs.names[slide.values[sectionid + "_section"]].push(sectionid); + slide.data[slide.values[sectionid + "_section"]].blobs[sectionid] = thisblob; + } + if(name.split("_")[2] == "custom" && name.substr(-10) == "trait_name") { + var sectionid = name.substring(0, name.length - 5); + var thistrait = {}; + thistrait.Name = slide.values[sectionid + "_name"]; + thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"] : ""; + customtraits[name.split("_")[3]].push(thistrait); + } + if(value == "custom" && name.substr(-18) == "proficiency_choice") { + var sectionid = name.substring(0, name.length - 7); + if(slide.values[sectionid + "_custom"] && slide.values[sectionid + "_type"]) { + profs.all[slide.values[sectionid + "_type"]].push(slide.values[sectionid + "_custom"]) + } + } + if(value == "custom" && name.includes('language_choice')) { + const customValueAttribute = name.replace('language_choice', 'language_custom') + if(slide.values[customValueAttribute]) { + profs.all['Language'].push(slide.values[customValueAttribute]); + } + } + }) + }); + //Set up drops. start with class, subclass, race, subrace, background + if(data["l1-class"].values["class_name"] && !data["l1-class"].data.class) { + classname = removeExpansionInfo(data["l1-class"].values["class_name"]); + var customClass = {name: classname, data: {Category: "Classes", blobs:{}}}; + set["custom_class"] = "1"; + set["cust_classname"] = data["l1-class"].values["class_name"]; + set["cust_hitdietype"] = data["l1-class"].values["custom_hit_die"]; + if(data["l1-class"].values["custom_class_spell_ability"]) { + set["cust_spellslots"] = "full"; + set["cust_spellcasting_ability"] = "@{" + data["l1-class"].values["custom_class_spell_ability"].toLowerCase() + "_mod}+"; + } + if(customtraits.class.length > 0) { + customClass.data.theseblobs = ["customblob"]; + customClass.data.blobs.customblob = {Traits: JSON.stringify(customtraits.class)}; + } + _.each(allAbilities, function(ability) { + if(data["l1-class"].values[ability.toLowerCase() + "_save"]) { + set["cust_" + ability + "_save_prof"] = "(@{pb})"; + } + }); + allPageData.push(customClass); + } else { + //allDrops.push(data["l1-class"].values.class); + classname = removeExpansionInfo( _.last(data["l1-class"].values.class.split(":")) ); + var thisdata = {name: classname, data: data["l1-class"].data.class}; + thisdata.data.theseblobs = blobs.names.class; + allPageData.push(thisdata); + }; + //set up subclass drop + if(data["l1-class"].values.subclass && data["l1-class"].values["subclass_name"]) { + var customSubclass = {name: removeExpansionInfo (data["l1-class"].values["subclass_name"] ), data: {Category: "Subclasses", blobs:{}}}; + if(customtraits.subclass.length > 0) { + customSubclass.data.theseblobs = ["customblob"]; + customSubclass.data.blobs.customblob = {Traits: JSON.stringify(customtraits.subclass)}; + } + allPageData.push(customSubclass); + } else if(data["l1-class"].values.subclass) { + //allDrops.push(data["l1-class"].values.subclass); + var thisdata = {name: removeExpansionInfo( _.last(data["l1-class"].values.subclass.split(":")) ), data: data["l1-class"].data.subclass}; + thisdata.data.theseblobs = blobs.names.subclass; + allPageData.push(thisdata); + }; + //set up race drop + if(data["l1-race"].values["race_name"] && !data["l1-race"].data.race) { + var customRace = {name: removeExpansionInfo(data["l1-race"].values["race_name"]), data: {Category: "Races", blobs:{}}}; + if(data["l1-race"].values.size) { + customRace.data.Size = data["l1-race"].values.size; + } + if(data["l1-race"].values.speed) { + customRace.data.Speed = data["l1-race"].values.speed; + } + if(customtraits.race.length > 0) { + customRace.data.theseblobs = ["customblob"]; + customRace.data.blobs.customblob = {Traits: JSON.stringify(customtraits.race)}; + } + allPageData.push(customRace); + } else { + //allDrops.push(data["l1-race"].values.race); + var thisdata = {name: removeExpansionInfo(_.last(data["l1-race"].values.race.split(":"))), data: data["l1-race"].data.race}; + thisdata.data.theseblobs = blobs.names.race; + allPageData.push(thisdata); + } + //set up subrace drop + if(data["l1-race"].values.subrace && data["l1-race"].values["subrace_name"]) { + var customSubrace = {name: removeExpansionInfo(data["l1-race"].values["subrace_name"]), data: {Category: "Subraces", blobs:{}}}; + customSubrace.data["data-Parent"] = data["l1-race"].values.race.split(":")[1]; + if(data["l1-race"].values.speed) { + customSubrace.data.Speed = data["l1-race"].values.speed; + } + if(customtraits.subrace.length > 0) { + customSubrace.data.theseblobs = ["customblob"]; + customSubrace.data.blobs.customblob = {Traits: JSON.stringify(customtraits.subrace)}; + } + allPageData.push(customSubrace); + } else if(data["l1-race"].values.subrace) { + //allDrops.push(data["l1-race"].values.subrace); + var thisdata = {name: removeExpansionInfo(_.last(data["l1-race"].values.subrace.split(":"))), data: data["l1-race"].data.subrace}; + thisdata.data.theseblobs = blobs.names.subrace; + allPageData.push(thisdata); + }; + //set up feat drop + if(data["l1-feat"] && data["l1-feat"].values.feat) { + var feat = {name: data["l1-feat"].values.feat, data: {Properties: "1st Level"}}; + allDrops.push(feat); + + const otherOptionsAndFeatures = Object.keys(data['l1-feat']['values']).filter(entry => { return entry.includes('other_options_and_features'); }); + otherOptionsAndFeatures.forEach(feature => { + if(data['l1-feat']['values'][feature]) { + const featureData = {name: data['l1-feat']['values'][feature], data: {Properties: "1st Level"}}; + allDrops.push(featureData); + } + }); + + const skills = Object.keys(data['l1-feat']['values']).filter(entry => { return entry.includes('feat_skill_choice'); }); + skills.forEach(skill => { + if(data['l1-feat']['values'][skill]) { + profs['all']['Skill'].push(data['l1-feat']['values'][skill].split(':')[1]); + } + }); + const removeDuplicatedSkills = Array.from(new Set(profs['all']['Skill'])); + profs['all']['Skill'] = removeDuplicatedSkills; + + const expertise = Object.keys(data['l1-feat']['values']).filter(entry => { return entry.includes('feat_expertise_choice'); }); + expertise.forEach(skill => { + if(data['l1-feat']['values'][skill]) { + profs['all']['Expertise'].push(data['l1-feat']['values'][skill].split(':')[1]); + } + }); + const removeDuplicatedExpertise = Array.from(new Set(profs['all']['Expertise'])); + profs['all']['Expertise'] = removeDuplicatedExpertise; + + const spells = Object.keys(data['l1-feat']['values']).filter(entry => { return entry.includes('feat_spell_choice'); }); + let i = 0; + spells.forEach(spell => { + if(data['l1-feat']['values'][spell]) { + const spellData = {name: removeExpansionInfo(data['l1-feat']['values'][spell]), data: {Properties: "1st Level"}}; + if(SheetUtils.checkPath(data, "['l1-feat']['data']['feat']['data-Pick Spells']")) { + const pickData = data['l1-feat']['data']['feat']['data-Pick Spells'][i]; + if(pickData['Spellcasting Ability']) { + let spellcastingAbility = pickData['Spellcasting Ability'].toLowerCase(); + if(spellcastingAbility === 'asi') { + const asiKey = Object.keys(data['l1-feat']['values']).filter(entry => { return entry.includes('feat_ability_choice') }); + if(asiKey) { + spellcastingAbility = asiKey.toLowerCase(); + } + } + spellData.data['Spellcasting Ability'] = spellcastingAbility; + } + if(pickData['Innate']) { + spellData.data['Innate'] = pickData['Innate']; + } + } + allDrops.push(spellData); + i++; + } + }); + } + //set up background drop + if(data["l1-background"].values.background) { + if(data["l1-background"].values.background == "Rules:Personality%20and%20Backgrounds") { + var customBg = {name: removeExpansionInfo(data["l1-background"].values["background_name"]), data: {Category: "Backgrounds", blobs:{}}}; + if(customtraits.background.length > 0) { + customBg.data.theseblobs = ["customblob"]; + customBg.data.blobs.customblob = {Traits: JSON.stringify(customtraits.background)}; + } + allPageData.push(customBg); + } else { + var thisdata = {name: removeExpansionInfo(_.last(data["l1-background"].values.background.split(":"))), data: data["l1-background"].data.background}; + thisdata.data.theseblobs = blobs.names.background; + allPageData.push(thisdata); + } + } + + //Now add proficiency drops + _.each(["Armor", "Language", "Tool", "Weapon"], function(proftype) { + _.each(profs.all[proftype], function(prof) { + var profdata = {name: "Proficiencies:" + prof, data: {Type: proftype}} + if(profs.all.Expertise.indexOf(prof) != -1) { + profdata.data["toolbonus_base"] = "(@{pb}*2)"; + allDrops.unshift(profdata); + } else { + allDrops.push(profdata); + } + }); + }); + + //Next, add spell drops + _.each(spells.all, function(spell) { + var spelldata = {name: "Powers:" + spell.Name}; + spelldata.data = {"spellcasting_ability": spell.Ability}; + if(spell.Source == "race") { + spelldata.data.spellclass = "Racial"; + } else { + spelldata.data.spellclass = classname; + }; + allDrops.push(spelldata); + }); + //Add equipment choice drops unless starting gold was chosen + if (data["l1-equipment"].values["equipment_type"] != "gold") { + _.each(data["l1-equipment"].values, function(val, name) { + if(name.includes("background_equipment_choice")) { + equipment = equipment.concat(val.split(" and ")); + } + }); + _.each(blobs.all, function(blob) { + if(blob.Equipment) { + var blobstuff = blob.Equipment; + try { + blobstuff = JSON.parse(blob.Equipment); + } catch (e) {} + equipment = equipment.concat(blobstuff); + } + }) + } + + //Set up the final setAttrs() + set["alignment"] = data["l1-race"].values.alignment || ""; + set["hp"] = stats.hp; + set["hp_max"] = stats.hp; + set["l1mancer_status"] = "completed"; + set["options-class-selection"] = "0"; + if(data["l1-equipment"].values["equipment_type"] == "class") { + _.each(data["l1-equipment"].values, function(val, name) { + if(name.includes("class_equipment_choice")) { + equipment = equipment.concat(val.split(" and ")); + } + }); + + set["gp"] = parseInt(data["l1-equipment"].values["background_starting_gold"]) || 0; + } else if(data["l1-equipment"].values["equipment_type"] == "gold" && data["l1-equipment"].values["starting_gold"]) { + set["gp"] = parseInt(data["l1-equipment"].values["starting_gold"]); + } + //Add the bio info + if(data["l1-bio"]) { + _.each(["character_name", "age", "height", "weight", "eyes", "hair", "skin"], function(type) { + if(data["l1-bio"].values[type]) { + set[type] = data["l1-bio"].values[type] || ""; + } + }); + } + //Add skill proficiencies + _.each(_.uniq(profs.all.Skill.concat(profs.all.Expertise)), function(prof) { + var profName = prof.toLowerCase().replace(/ /g, "_"); + set[profName + "_prof"] = "(@{pb}*@{" + profName + "_type})"; + if(profs.all.Expertise.indexOf(prof) != -1) { + set[profName + "_type"] = 2; + } + }); + //Add background traits + if(data["l1-background"].values["background_personality_choice1"] || data["l1-background"].values["background_personality_choice2"]) { + var choice1 = data["l1-background"].values["background_personality_choice1"] || false; + var choice2 = data["l1-background"].values["background_personality_choice2"] || false; + choice1 = choice1 || choice2; + if(choice1) { + set["personality_traits"] = choice1; + } + if(choice2) { + set["personality_traits"] += "\n\n" + choice2; + } + set["options-flag-personality"] = 0; + } + _.each(["ideal", "bond", "flaw"], function(type) { + if(data["l1-background"].values["background_" + type + "_choice"]) { + set[type + "s"] = data["l1-background"].values["background_" + type + "_choice"]; + set["options-flag-" + type + "s"] = 0; + } + }); + if(data["l1-background"].values["background_detail_choice"]) { + set["background"] = removeExpansionInfo(_.last(data["l1-background"].values["background"].split(":"))) + " (" + data["l1-background"].values["background_detail_choice"] + ")"; + } + allDrops = allDrops.concat(makeItemData(equipment)); + totalDrops += allDrops.length; + _.each(allPageData, function(page) { + allDrops = allDrops.concat(getOtherDrops(page.data)); + }); + + //erase all repeating sections + eraseRepeating(eraseSections, function() { + setCharmancerText({"mancer_progress" :'
    '}); + //first set is silent to prevent unwanted sheet workers + setAttrs(silentset, {silent:true}, function() { + setCharmancerText({"mancer_progress" :'
    '}); + //Remove modifiers set to be displayed by default on sheet.json from the clear set + getAttrs(globalModifiers, modifiers => { + const modifiersToggledOn = Object.keys(modifiers).filter(key => { return modifiers[key] === "1"; }); + modifiersToggledOn.forEach(key => { delete clearset[key]; }); + //reset remaining attributes, and set ability scores/custom info + setAttrs(clearset, function() { + setCharmancerText({"mancer_progress" :'
    '}); + getAllPages(allDrops, function() { + setCharmancerText({"mancer_progress" :'
    '}); + doAllDrops(allPageData, function() { + console.log("DOING THE FINAL SET!!"); + setAttrs(set, function() { + setCharmancerText({"mancer_progress" :'
    '}); + update_class(); + organize_section_proficiencies(); + update_skills(allSkills); + update_attacks("all"); + var endTime = Date.now(); + console.log(`Elapsed time: ${(endTime-startTime)/1000}`); + finishCharactermancer(); + }); + }); + }); + }); + }); + }); + }); + /* */ + }); + + on("page:l1-abilities", eventinfo => { + const optionalAttributes = SheetUtils.toLowerCase(abilityListEnabledOptionals); + const pointbuyPoints = (3 * optionalAttributes.length + 27).toString(); + setAttrs({"pointbuy_points": pointbuyPoints }); + const attribsRoll = ["strength","dexterity","constitution","intelligence","wisdom","charisma"].concat(optionalAttributes).map((key, index) => `{{r${index+1}=[[4d6dl1]]}}`).join(' '); + const rollstatsButton = ``; + setCharmancerText({"sheet-rollstats-button": rollstatsButton}); + }); + + on("page:l1-welcome page:l1-race page:l1-class page:l1-abilities page:l1-background page:l1-equipment page:l1-spells page:l1-feat page:l1-bio page:l1-summary", eventInfo => { + showOptionalAttributeFields(); + }); + + on('mancerchange:customize_origin', eventinfo => { + if(eventinfo.sourceType && eventinfo.sourceType == "player") { + deleteCharmancerData(["l1-race"], data => { + changeCharmancerPage("l1-race"); + }); + } + }); + on('page:l1-race', eventInfo => { + data = getCharmancerData(); + let hasTasha = 0; + if(SheetUtils.checkPath(data, "['l1-welcome']['values']['has_tasha']") && data['l1-welcome']['values']['has_tasha'] == 1) hasTasha = 1; + setAttrs({has_tasha: hasTasha}); + }); + on('page:l1-welcome', eventInfo => { + hasTasha(result => { + const enabled = (result) ? 1 : 0; + setAttrs({has_tasha: enabled}); + }) + }); + + on("mancerchange:feat_skill_choice1 mancerchange:feat_skill_choice2 mancerchange:feat_skill_choice3 mancerchange:feat_skill_choice4", function(eventinfo) { + if(eventinfo.sourceType && eventinfo.sourceType == "player" && eventinfo.newValue) { + let choosenSkill = [eventinfo.newValue.split(':')[1]]; + for(let i=1; i<=4; i++) { + setValidExpertiseOptions(null, `comp_feat_expertise_choice_${i}`, choosenSkill); + } + } + }); \ No newline at end of file diff --git a/Esper_Genesis_5E/src/charactermancer/l1/l1.pug b/Esper_Genesis_5E/src/charactermancer/l1/l1.pug new file mode 100644 index 0000000000..2596cdf2c9 --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/l1/l1.pug @@ -0,0 +1,598 @@ +mixin bottomBar(firstTab, lastTab) + .bottombar + button.prev(data-i18n='back' type='back' value=`l1-${firstTab}`) + button.jump(data-i18n='back-to-top' data-scroll='#top' type='button') + button.next(data-i18n='next' type='back' value=`l1-${lastTab}`) + +mixin cancelPrompt(slide) + .choice.cancel-prompt + p.label(data-i18n='charmancer-cancel-heading') + button.warning(data-i18n='cancel_charactermancer' type='cancel' value='l1-cancel') + button(data-i18n='save_progress_and_exit' type='cancel' value=`l1-${slide}`) + button(data-i18n='continue-charmancer' name='act_continue' type='action') + p.warning + span(data-i18n='charmancer-discard-warning') + +mixin buttonMancerInfo(name) + button.mancer_info(name=`act_info_${name}` type='action' required) i + +mixin infoDiv(className, acceptString) + .info + .sheet-compendium-page(accept=acceptString class=`sheet-${className}-info`) + +mixin abilitiesOptions() + option(data-i18n='choose' value='') + each val in globalAttributesByCatagory.abilities + option(data-i18n=val value=val) + +mixin classOptions() + option(data-i18n='choose' value='') + each val in globalAttributesByCatagory.classes + option(data-i18n=val value=val) + +mixin diceOptions() + option(data-i18n='choose' value='') + each val in globalAttributesByCatagory.diceSizes + - const value = val.slice(-1) + option(data-i18n=val value=value) + +charmancer.sheet-charmancer-l1-welcome + .charmancer.container + input(type='hidden' name='comp_has_tasha' value='0') + ol.steps + .logos + span.charmancer-logo + span.compendium-logo + p.label(data-i18n='charmancer-welcome') + p(data-i18n='charmancer-what-is') + p.label(data-i18n='charmancer-compendium') + p(data-i18n='charmancer-compendium-detail') + p.label(data-i18n='get-started') + .bottombar + button.prev(data-i18n='opt-out-u' type='cancel' value='l1-cancel') + button.jump(data-i18n='back-to-top' data-scroll='#top' type='button') + button.next(data-i18n='next' type='back' value='l1-race') + +cancelPrompt('welcome') + +charmancer.sheet-charmancer-l1-race + .charmancer.container + ol.steps + .topbar-holder + .choices + .row(style='display:none;') + input(type='hidden' name='comp_has_tasha') + .customize-origin + label + span(data-i18n='customize-your-origin') + span(data-i18n='customize-your-origin-info') + .toggle + input(type='checkbox' name='comp_customize_origin' value='1') + .knob + .row + label.hilite + span(data-i18n='charmancer-choose-race') + select(accept='Category:Races' name='comp_race' required) + option(data-i18n='choose' value='') + option.custom(data-i18n='custom' value='Rules:Races') + +buttonMancerInfo('race') + .choice.custom_race + label.hilite(data-i18n='charmancer-custom-race-name') + input(name='comp_race_name' placeholder='Custom Race' type='text' required) + .row.choice.race_possible.custom_race.race_abilities + label + .choice.tasha_race_enabled + input(type='hidden' name='comp_tasha_race_ability_choice1_increase') + span.choice.tasha_race_ability_choice1.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice1(name='comp_tasha_race_ability_choice1') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_race_ability_choice2_increase') + span.choice.tasha_race_ability_choice2.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice2(name='comp_tasha_race_ability_choice2') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_race_ability_choice3_increase') + span.choice.tasha_race_ability_choice3.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice3(name='comp_tasha_race_ability_choice3') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_race_ability_choice4_increase') + span.choice.tasha_race_ability_choice4.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice4(name='comp_tasha_race_ability_choice4') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_race_ability_choice5_increase') + span.choice.tasha_race_ability_choice5.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice5(name='comp_tasha_race_ability_choice5') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_race_ability_choice6_increase') + span.choice.tasha_race_ability_choice6.tasha(data-i18n='ability-score-increase-tasha') + select.choice.race_possible.tasha_race_ability_choice6(name='comp_tasha_race_ability_choice6') + +abilitiesOptions() + .choice.tasha_race_disabled + span(data-i18n='ability-score-increase') + p.race_ability_score.race_text + select.choice.race_possible.race_ability_choice1(name='comp_race_ability_choice1') + +abilitiesOptions() + select.choice.race_possible.race_ability_choice2(name='comp_race_ability_choice2') + +abilitiesOptions() + each val in globalAttributesByCatagory.abilities + label.choice.custom_race + span(data-i18n=val) + input.choice.custom_race(max='5' min='-5' name=`comp_race_custom_${val}` type='number' value='0') + .row.choice.race_always.custom_race + label + span(data-i18n='alignment') + select(name='comp_alignment') + option(data-i18n='choose' value='') + each val in globalAttributesByCatagory.alignments + - const datai18n = val.toLowerCase().replace(' ', '-') + option(data-i18n=datai18n value=val) + .row.choice.race_always.custom_race + label + span(data-i18n='size') + p.race_size.race_text + select.choice.custom_race(name='comp_size') + option(data-i18n='choose' value='') + each val in globalAttributesByCatagory.sizes + - const datai18n = val.toLowerCase(); + option(data-i18n=datai18n value=val) + .row.choice.race_always.custom_race + label + span(data-i18n='speed') + p.race_speed.race_text + input.choice.custom_race(min='0' name='comp_speed' type='number') + .race_holder.holder + .choice.subrace + .row + label.hilite + span(data-i18n='subrace') + select.choose_subrace(name='comp_subrace' required) + option(data-i18n='choose' value='') + option.custom(data-i18n='custom' value='Rules:Races') + +buttonMancerInfo('subrace') + .choice.custom_subrace + label.hilite + span(data-i18n='charmancer-custom-subrace-name') + input(name='comp_subrace_name' placeholder='Custom Subrace' type='text' required) + .choice.subrace_options + .row.choice.subrace_possible.subrace_abilities.custom_subrace + label + .choice.tasha_subrace_enabled + input(type='hidden' name='comp_tasha_subrace_ability_choice1_increase') + span.choice.tasha_subrace_ability_choice1.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice1(name='comp_tasha_subrace_ability_choice1') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_subrace_ability_choice2_increase') + span.choice.tasha_subrace_ability_choice2.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice2(name='comp_tasha_subrace_ability_choice2') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_subrace_ability_choice3_increase') + span.choice.tasha_subrace_ability_choice3.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice3(name='comp_tasha_subrace_ability_choice3') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_subrace_ability_choice4_increase') + span.choice.tasha_subrace_ability_choice4.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice4(name='comp_tasha_subrace_ability_choice4') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_subrace_ability_choice5_increase') + span.choice.tasha_subrace_ability_choice5.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice5(name='comp_tasha_subrace_ability_choice5') + +abilitiesOptions() + input(type='hidden' name='comp_tasha_subrace_ability_choice6_increase') + span.choice.tasha_subrace_ability_choice6.tasha(data-i18n='ability-score-increase-tasha') + select.choice.subrace_possible.tasha_subrace_ability_choice6(name='comp_tasha_subrace_ability_choice6') + +abilitiesOptions() + .choice.tasha_subrace_disabled + span(data-i18n='subrace-ability-increase') + p.subrace_ability_score.subrace_text + - let subraceChoiceInt = 1; + while subraceChoiceInt <= 2 + select.choice.subrace_possible.subrace_ability_choice1(name=`comp_subrace_ability_choice${subraceChoiceInt}`) + +abilitiesOptions() + - subraceChoiceInt++ + each val in globalAttributesByCatagory.abilities + label.choice.custom_subrace + span(data-i18n=val) + input.choice.custom_subrace(max='5' min='-5' name=`comp_subrace_custom_${val}` type='number' value='0') + .row.choice.subrace_possible.subrace_speed_row.custom_subrace + label + span(data-i18n='speed') + p.subrace_speed.subrace_text + input.choice.custom_subrace(name='comp_speed' min='0' type='number') + .subrace_holder.holder + .row.choice.race_possible.custom_race.custom_subrace + label + span(data-i18n='innate-spellcasting:') + label + span(data-i18n='spellcasting-ability') + select(name='comp_custom_race_spell_ability') + +abilitiesOptions() + label.hilite.choice.custom_spellcasting + span(data-i18n='number-of-cantrips') + input(min='1' name='comp_custom_race_spell_number' type='number' value='1' required) + label.hilite.choice.custom_spellcasting + span(data-i18n='spell-list') + select(name='comp_custom_race_spell_list') + +classOptions() + +infoDiv('race','Rules:Races') + +bottomBar('welcome', 'class') + +cancelPrompt('race') + input(name='comp_has_subrace' type='hidden') + +//- Class slide is throwing an error when converted to pug +include ./class.html + +charmancer.sheet-charmancer-l1-abilities + .charmancer.container + ol.steps + .topbar-holder + input(name='comp_pointbuy_points' type='hidden' value='27') + input(name='comp_roll_results' type='hidden' value='0') + .choices + .row + label.hilite + span(data-i18n='ability-score-method') + select(name='comp_abilities' required) + option(data-i18n='choose' value='') + option.custom(data-i18n='custom' value='custom') + .row.choice.abilities_possible.abilities_stdarray + p(data-i18n='select-your-choices') + button(data-i18n='clear-abilities' name='act_clearstats' type='action') + .row.choice.abilities_possible.abilities_rollstats + p(data-i18n='select-your-choices') + p + .rollstats-button + button(data-i18n='standard-roll' type="roll" name="roll_rollstats" value="@{wtype}&{template:mancerroll} {{title=Roll for Stats}} {{r1=[[4d6dl1]]}} {{r2=[[4d6dl1]]}} {{r3=[[4d6dl1]]}} {{r4=[[4d6dl1]]}} {{r5=[[4d6dl1]]}} {{r6=[[4d6dl1]]}}") + button(data-i18n='clear-abilities' name='act_clearstats' type='action') + .row.choice.abilities_possible.abilities_rollstats_rolled + p + span(data-i18n='stats-rolled-hint') + .row.choice.abilities_possible.abilities_pointbuy + p(data-i18n='select-your-choices') + p + span(data-i18n='available-points:') + strong + span(class='points_available_display') + button(data-i18n='clear-abilities' name='act_clearstats' type='action') + .choice.abilities_possible.abilities_selects + .row + .hilite + each val in globalAttributesByCatagory.abilities + div + span.label(data-i18n=val) + span(class=`abilities_radio_${val}` name=`comp_${val}` required) + each val in globalAttributesByCatagory.optionalAbilites + .sheet-choice(class=`${val}_toggle`) + span.label(data-i18n=val) + span(class=`abilities_radio_${val}` name=`comp_${val}` required) + .row.choice.abilities_possible.abilities_custom + p(data-i18n='input-your-scores') + .abilities_possible.abilities_selects + .hilite + each val in globalAttributesByCatagory.abilities + div + span.label(data-i18n=val) + input(max='20' min='0' name=`comp_${val}` type='number' required) + each val in globalAttributesByCatagory.optionalAbilites + .sheet-choice(class=`${val}_toggle`) + span.label(data-i18n=val) + input(min="0" max="20" name=`comp_${val}` type="number" required) + +infoDiv('abilscores','Rules:Ability%20Scores') + +bottomBar('class', 'background') + +cancelPrompt('abilities') + +mixin backgroundOptions(type) + label + span(data-i18n=type) + br + select.choice.background_possible.background_ideal_choice(name=`comp_background_${type}_choice`) + option(data-i18n='choose' value='') + button.choice.standardbg.bg_roll(data-i18n='roll' name=`roll_background_${type}_choice_roll` type='roll' value='') + input.choice.custom_background(name=`comp_background_${type}_choice` type='text') + +charmancer.sheet-charmancer-l1-background + .charmancer.container + ol.steps + .topbar-holder + .choices + .row + label.hilite + span(data-i18n='choose-background') + select(accept='Category:Backgrounds' name='comp_background' required) + option(data-i18n='choose' value='') + option.custom(data-i18n='custom' value='Rules:Personality%20and%20Background') + .choice.custom_background + label.hilite + span(data-i18n='name-background') + input(name='comp_background_name' placeholder='Artisan' type='text' required) + .choice.backgrounds_options + .holder.background_holder + .row.choice.background_possible.background_detail_choice_row + label + span.label + span.background_detail_choice_name(data-i18n='option' name='comp_background_detail_choice_name') + br + select.choice.background_possible.background_detail_choice(name='comp_background_detail_choice') + option(data-i18n='choose' value='') + button.choice.standardbg.bg_roll(data-i18n='roll' name='roll_background_detail_choice_roll' type='roll' value='') + .row.choice.background_possible.background_personality_row.custom_background + label + span(data-i18n='personality-traits') + br + - let backgroundChoiceInt = 1; + while backgroundChoiceInt <= 2 + select.choice.background_possible.background_personality_choice1(name=`comp_background_personality_choice${backgroundChoiceInt}`) + option(data-i18n='choose' value='') + button.choice.standardbg.bg_roll(data-i18n='roll' name=`roll_background_personality_choice${backgroundChoiceInt}_roll` type='roll' value='') + input.choice.custom_background(name=`comp_background_personality_choice${backgroundChoiceInt}` type='text') + - backgroundChoiceInt++ + each val in ['ideal', 'bond', 'flaw'] + +backgroundOptions(val) + .row.choice.background_possible.background_equipment_row + p + span.label(data-i18n='equipment') + span.background_standard_equipment + +infoDiv('background','Rules:Personality%20and%20Background') + +bottomBar('abilities', 'equipment') + +cancelPrompt('background') + + each val in ['detail_choice', 'personality_choice1', 'personality_choice2', 'ideal_choice', 'bond_choice', 'flaw_choice'] + input(name=`comp_background_${val}_array` type='hidden') + +charmancer.sheet-charmancer-l1-equipment + .charmancer.container + ol.steps + .topbar-holder + .choices + each val in ['equipment_class', 'equipment_background', 'starting_gold_roll', 'background_starting_gold'] + input(name=`comp_${val}` type='hidden') + .row + p.choice.no_class + span.label(data-i18n='you-havent-selected-class') + p.choice.eqp_custom_class + span.label(data-i18n='you-have-created-custom-class') + p.choice.no_gold_option + span.label(data-i18n='pick-your-equipment') + span : + span.class_label + .choice.has_class.equipment_type.hilite + p + span.label(data-i18n='equipment-choice-text') + span(data-i18n='class') + span : + span.class_label + select.equipment_type(name='comp_equipment_type' required) + option(data-i18n='choose' value='') + option(data-i18n='class-equipment' value='class') + option(data-i18n='starting-wealth' value='gold') + .row.choice.gold_option + p.choice.custom_class_gold + span.label(data-i18n='equipment-from-class') + span ( + span.class_label + span ) + p + span.label(data-i18n='starting-gold:') + p + .choice.random_gold_option + button(name='roll_starting_gold' type='roll' value='') + span.starting_gold_btn_label + input(name='comp_starting_gold' type='number' value='0') + .row.choice.class_option + p + span.class_equipment + - let equipmentChoiceInt = 1; + while equipmentChoiceInt <= 4 + p.equipment_choice_title + span.choice.class_possible(class=`class_equipment_choice${equipmentChoiceInt} class_equipment_choice${equipmentChoiceInt}_title`) + select.choice.class_possible(class=`class_equipment_choice${equipmentChoiceInt}` name=`comp_class_equipment_choice${equipmentChoiceInt}`) + option(data-i18n='choose' value='') + select.choice.class_possible(class=`class_equipment_choice${equipmentChoiceInt}_double` name=`comp_class_equipment_choice${equipmentChoiceInt+4}`) + option(data-i18n='choose' value='') + - equipmentChoiceInt++ + .row.choice.no_class_warning + span.warning(data-i18n='no_class_warning-u') + .row + p.choice.no_background + span.label(data-i18n='you-havent-chosen-background') + p.choice.has_background.class_option + span.label(data-i18n='equipment-from-background') + span ( + span.background_label + span ) + p.choice.background_chose_starting_gold.background_gold_option + span.label(data-i18n='you-have-chosen-starting-gold') + p.choice.has_background.class_option + span.background_equipment + .choice.class_option + - let backEquipInt = 1; + while backEquipInt <= 4 + p.equipment_choice_title + span.choice.background_possible(class=`background_equipment_choice${backEquipInt} background_equipment_choice${backEquipInt}_title`) + select.choice.background_possible(class=`background_equipment_choice${backEquipInt}` name=`comp_background_equipment_choice${backEquipInt}`) + option(data-i18n='choose' value='') + - backEquipInt++ + +infoDiv('background','Rules:Equipment') + +bottomBar('background', 'spells') + +cancelPrompt('equipment') + +charmancer.sheet-charmancer-l1-spells + .charmancer.container + ol.steps + .topbar-holder + .choice.no_spells + p.label(data-i18n='arcane-is-mystery') + p(data-i18n='your-character-dont-have-spells-this-lvl') + .choices.spell_holder + .info.choice.spell-info-container + .sheet-compendium-page.sheet-spell-info(accept='Rules:Esper%20Powers' class=`sheet-spells-info`) + +bottomBar('equipment', 'feat') + +cancelPrompt('spells') + each val in ['race_spells', 'class_spells', 'race_number', 'class_number'] + input(name=`comp_${val}` type='hidden') + +mixin featChoices(type, acceptString) + .row.choice.feat_possible(class=`feat_${type}_row`) + label + span(data-i18n=`${type}-proficiencies`) + - const typePlural = `${type}s` + p.feat_text(class=`feat_${typePlural}`) + - let choiceInt = 1; + while choiceInt <= 4 + if acceptString + select.choice.feat_possible(class=`feat_${type}_choice${choiceInt}` name=`comp_feat_${type}_choice${choiceInt}` accept=acceptString) + option(data-i18n='choose' value='') + else + select.choice.feat_possible(class=`feat_${type}_choice${choiceInt}` name=`comp_feat_${type}_choice${choiceInt}`) + option(data-i18n='choose' value='') + - choiceInt++ + + +charmancer.sheet-charmancer-l1-feat + .charmancer.container + ol.steps + .topbar-holder + .choice.no_feat + p.label(data-i18n='charmancer-a-feat-represents') + p(data-i18n='you-really-havent-done') + .choices.choice.yes_feat + .row + label + span(data-i18n='choose-a-feat:') + select(accept='Category:Feats' name='comp_feat') + option(data-i18n='choose' value='') + .choice.feat_options + .row.choice.feat_prereq.feat_possible + label.warning + span(data-i18n='prerequisite:') + p.feat_prerequisite.feat_text + p.feat_text(data-i18n='feat-pre-check') + .row.choice.feat_ability.feat_possible + label + span(data-i18n='ability-score-increase:') + p.feat_ability_score.feat_text + select.choice.feat_possible.feat_ability_choice(name='comp_feat_ability_choice') + option(data-i18n='choose' value='') + +featChoices('language') + +featChoices('skill', 'Category:Proficiencies Type:Skill') + +featChoices('weapon') + +featChoices('armor') + +featChoices('tool') + .sheet-row.sheet-choice.sheet-feat_possible.sheet-feat_spell_row + label + span(data-i18n='spell-list') Spell List: + span(style='color: red;') + p.sheet-feat_text.sheet-feat_spells + select.sheet-choice.sheet-feat_possible.sheet-feat_spell_choice1(name='comp_feat_spell_choice1') + option(data-i18n='choose' value='') Choose + select.sheet-choice.sheet-feat_possible.sheet-feat_spell_choice2(name='comp_feat_spell_choice2') + option(data-i18n='choose' value='') Choose + select.sheet-choice.sheet-feat_possible.sheet-feat_spell_choice3(name='comp_feat_spell_choice3') + option(data-i18n='choose' value='') Choose + select.sheet-choice.sheet-feat_possible.sheet-feat_spell_choice4(name='comp_feat_spell_choice4') + option(data-i18n='choose' value='') Choose + .row.choice.feat_possible.feat_expertise_row + label + span(data-i18n='expertise') + each val in [1, 2] + select(class=`choice feat_possible feat_expertise_choice${val}` name=`comp_feat_expertise_choice_${val}`) + option(data-i18n='choose' value='') + .row.choice.feat_possible.feat_feature_row_1 + h4.feat_feature_name_1 + span(class='feat_feature_1') + select.feat_possible.feat_feature_choice_1(name='comp_feat_feature_choice_1') + option(data-i18n='choose' value='') + option.custom(data-i18n='custom') + p.description.feat_feature_description_1 + .row.choice.feat_possible.feat_feature_row_1_double + h4.feat_feature_name_1_double + span.feat_feature_1_double + select.feat_possible.feat_feature_choice_1_double(name='comp_feat_feature_choice_3') + option(data-i18n='choose' value='') + option.custom(data-i18n='custom') + p.description.feat_feature_description_1_double + .row.choice.feat_possible.feat_feature_row_2 + h4.feat_feature_name_2 + span.feat_feature_2 + select.feat_possible.feat_feature_choice_2(name='comp_feat_feature_choice_2') + option(data-i18n='choose' value='') + option.custom(data-i18n='custom') + p.description.feat_feature_description_2 + .choice.row.feat_possible.other_options_and_features1 + label + span.other_options_and_features_title1 + select.feat_possible.other_options_and_features_choice1(name='comp_other_options_and_features_choice1') + option(data-i18n='choose' value='') + .choice.row.feat_possible.other_options_and_features2 + label + span.other_options_and_features_title2 + select.feat_possible.other_options_and_features_choice1(name='comp_other_options_and_features_choice2') + option(data-i18n='choose' value='') + .info.feat-info-container.choice.yes_feat + .sheet-compendium-page.sheet-feat-info(accept='Rules:Feats') + +bottomBar('spells', 'bio') + +cancelPrompt('feat') + + +charmancer.sheet-charmancer-l1-bio + .charmancer.container + ol.steps + .topbar-holder + .choices + input(name='comp_previous_race' type='hidden' value='') + each val in ['Name', 'Age', 'Height', 'Weight', 'Eyes', 'Hair', 'Skin'] + - const attributeName = val === 'Name' ? 'character_name' : val.toLowerCase(); + - const datai18n = val === 'Name' ? 'char-name-u' : val === 'Eyes' ? `eye-u` : `${val.toLowerCase()}-u`; + .row + label + div(data-i18n=datai18n) + input(name=`comp_${attributeName}` type='text') + +infoDiv('race','Rules:Races') + +bottomBar('feat', 'summary') + +cancelPrompt('bio') + + +mixin summaryBlocks(type) + .summary + p.label(data-i18n=type) + div(class=`${type}_info`) + .choice.returnblock(class=`${type}_button`) + span(data-i18n='return-to:') + button.step(data-i18n=`${type}-u` type='back' value=`l1-${type}`) + +charmancer.sheet-charmancer-l1-summary + .charmancer + ol.steps + .topbar-holder + p.choice.ready_text(data-i18n='charmancer-only-choice-left-is-on-or') + p.label.ready_message + p.label(data-i18n='review-your-choices') + .summary-container + +summaryBlocks('race') + +summaryBlocks('class') + +summaryBlocks('abilities') + +summaryBlocks('background') + +summaryBlocks('equipment') + +summaryBlocks('spells') + .summary + p.label(data-i18n='feats') + .feat_info + .summary + p.label(data-i18n='bio') + .race_warning + .bio_info + .bottombar + button.prev(data-i18n='back' type='back' value='l1-bio') + button.jump(data-i18n='back-to-top' data-scroll='#top' type='button') + button.next.apply_changes(data-i18n='apply-changes' type='finish' value=`l1-mancer`) + +cancelPrompt('summary') + + +charmancer.sheet-charmancer-final + .charmancer + div + h1(data-i18n='building-your-character') + .mancer_progress + div(style='width: 0%') + input(name='attr_mancer_category' type='hidden') + input(name='attr_mancer_progress' type='hidden') + + + diff --git a/Esper_Genesis_5E/src/charactermancer/lp/lp.js b/Esper_Genesis_5E/src/charactermancer/lp/lp.js new file mode 100644 index 0000000000..c432f5eb38 --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/lp/lp.js @@ -0,0 +1,2958 @@ + +/*********************************************************************/ +/****** LEVEL UP MANCER WORKERS ******/ +/*********************************************************************/ + + //Helper function to update the text in the top bar + var recalcLpData = function(blobs) { + var mancerdata = getCharmancerData(); + var abilities = getAbilityTotals(mancerdata, blobs); + var update = {}; + _.each(abilityList, function(ability) { + var selector = "attr-container .sheet-" + ability.toLowerCase() + "_total"; + update[selector] = abilities[ability.toLowerCase()] + " | " + abilities[ability.toLowerCase() + "_mod"]; + }); + update["hit_points"] = getHpTotal(mancerdata, blobs, abilities); + setCharmancerText(update); + }; + //Helper function to get ability totals, including asi + var getAbilityTotals = function(mancerdata, blobs) { + mancerdata = mancerdata || getCharmancerData(); + blobs = blobs || getAllLpBlobs(mancerdata, true); + var abilities = mancerdata["lp-welcome"].values["previous_abilities"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_abilities"]) : {}; + var lcAbilities = SheetUtils.toLowerCase(abilityList); + //Set previous scores first + _.each(lcAbilities, function(ability) { + abilities[ability + "_previous"] = abilities[ability]; + abilities[ability + "_previous_mod"] = abilities[ability + "_mod"]; + abilities[ability + "_maximum"] = abilities[ability + "_maximum"] ? parseInt(abilities[ability + "_maximum"]) : 20; + }); + _.each(blobs.all, function(blob) { + if(blob["Ability Score Increase"]) { + var asi = JSON.parse(blob["Ability Score Increase"]); + _.each(asi, function(increase, ability) { + abilities[ability.toLowerCase()] += parseInt(increase); + }); + } + if(blob["Ability Score Max"]) { + var max = JSON.parse(blob["Ability Score Max"]); + _.each(max, function(increase, ability) { + abilities[ability.toLowerCase() + "_maximum"] = parseInt(increase); + }); + } + }) + //Now add asi if it exists + if(mancerdata["lp-asi"]) { + _.each(mancerdata["lp-asi"].repeating, function(repid) { + if(repid.substr(31) == "asi-row" && mancerdata["lp-asi"].values[repid + "_switch"] != "feat") { + _.each(lcAbilities, function(ability) { + abilities[ability] += mancerdata["lp-asi"].values[repid + "_" + ability] ? parseInt(mancerdata["lp-asi"].values[repid + "_" + ability]) : 0; + abilities[ability + "_mod"] = Math.floor((abilities[ability] - 10)/2); + }); + } else if(repid.substr(31) == "asi-row" && mancerdata["lp-asi"].values[repid + "_switch"] == "feat") { + const rowID = SheetUtils.getUID(repid); + if(SheetUtils.checkPath(mancerdata, `['lp-asi']['values']['repeating_${rowID}_asi-row_feat']`)) { + const featAbilityIncrease = getFeatAbilityIncrease(mancerdata, rowID); + _.each(lcAbilities, function(ability) { + const choiceIncrease = (mancerdata['lp-asi']['values'][`repeating_${rowID}_asi-row_feat_ability_choice`] && mancerdata['lp-asi']['values'][`repeating_${rowID}_asi-row_feat_ability_choice`].toLowerCase() == ability) ? 1 : 0; + const dataIncrease = (featAbilityIncrease[ability]) ? featAbilityIncrease[ability] : 0; + abilities[ability] += choiceIncrease; + abilities[ability] += dataIncrease; + abilities[ability + "_mod"] = Math.floor((abilities[ability] - 10)/2); + }); + } + } + }); + } + return abilities; + }; + var getFeatAbilityIncrease = function(data, rowID) { + const result = {}; + if(!SheetUtils.checkPath(data, `['lp-asi']['data']['repeating_${rowID}_asi-row_feat]['data-Ability Score Increase']`)) return result; + var asi = JSON.parse(data['lp-asi']['data'][`repeating_${rowID}_asi-row_feat`]['data-Ability Score Increase']); + _.each(asi, function(increase, ability) { + result[ability.toLowerCase()] = (typeof increase === 'number') ? increase : parseInt(increase); + }); + return result; + } + //Helper function to get hp total + var getHpTotal = function(mancerdata, blobs, abilities) { + mancerdata = mancerdata || getCharmancerData(); + var leveldata = getLevelingData(mancerdata); + var abilities = abilities || getAbilityTotals(mancerdata, blobs); + var previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; + var prev_repeat = JSON.parse(mancerdata["lp-welcome"].values["previous_repeating"]), hpmod = prev_repeat["hpmod"]; + var newhp = 0; + var additionalhp = 0; + var totalpreviouslevel = parseInt(previous["base_level"]); + for(var x=1; x<=3; x++) { + if(previous["multiclass" + x + "_flag"] != "0") totalpreviouslevel += parseInt(previous["multiclass" + x + "_lvl"]); + }; + + //Calculate HP Mods things like Hill Dwarf + let levelbonus = 0; + _.each(hpmod, (mod) => { + const bonus = mod["mod"]; + if (mod["levels"] === "total") { + levelbonus += parseInt(bonus); + }; + }); + + //Add up the hp per level + _.each(leveldata, function(level) { + newhp += level.addhp > 0 ? level.addhp + (level.addlevel * abilities["constitution_mod"]) + (level.addlevel * levelbonus) : 0; + }); + + additionalhp = totalpreviouslevel * (abilities["constitution_mod"] - abilities["constitution_previous_mod"]) + return parseInt(previous["hp_max"]) + newhp + additionalhp; + }; + + var recalcButtons = function(mancerdata, thispage) { + mancerdata = mancerdata || getCharmancerData(); + var buttons = ""; + var buttoninfo = { + welcome: "charmancer-start", + levels: "levels-u", + choices: "features-u", + asi: "asi-u", + spells: "spells-u", + summary: "review-u" + }; + _.each(buttoninfo, function(translation, page) { + let here = "lp-" + page == thispage; + let disabled = false; + if(thispage === "lp-spellchoice") disabled = true; + if(!here && page !== "levels" && thispage === "lp-welcome") disabled = true; + if(mancerdata["lp-levels"]) { + if (!here && page === "asi" && mancerdata["lp-levels"].values.asi !== "true") disabled = true; + if (!here && page === "spells" && mancerdata["lp-levels"].values.spells !== "true") disabled = true; + } else { + if (!here && (page === "asi" || page === "spells")) disabled = true; + } + buttons += "
  • "; + }); + buttons += "
  • "; + setCharmancerText({steps: buttons}); + } + //Worker for every page to add topbar/buttons + on("page:lp-welcome page:lp-levels page:lp-choices page:lp-asi page:lp-spells page:lp-summary page:lp-spellchoice", function(eventinfo) { + var mancerdata = getCharmancerData(); + recalcButtons(mancerdata, eventinfo.triggerName); + if(eventinfo.triggerName != "lp-welcome" && eventinfo.triggerName != "lp-summary") { + addRepeatingSection("topbar-holder", "leveler-topbar"); + if(eventinfo.triggerName != "lp-choices" && eventinfo.triggerName != "lp-spells") recalcLpData(); + getProficiencies(mancerdata, eventinfo.currentStep); + } + }); + + on("page:lp-welcome", function(eventinfo) { + var getInfo = (sections, callback, results) => { + results = results || {}; + if(sections.length > 0) { + var section = sections.pop(); + getSectionIDs(section, function(ids) { + results[section] = ids; + getInfo(sections, callback, results); + }); + } else { + callback(results); + } + }; + var capitalize = function(string) { + return string.split(" ").map((x) => { + x = x.toLowerCase(); + return x[0].toUpperCase() + x.substr(1, x.length); + }).join(" "); + }; + var spellSections = ["spell-cantrip"]; + var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]; + var skillget = []; + for(var x=1; x<=9; x++) { + spellSections.push("spell-" + x); + } + + getInfo(spellSections, function(results) { + var getList = []; + _.each(results, function(sectionids, sectionname) { + _.each(sectionids, function(spellid) { + getList.push("repeating_" + sectionname + "_" + spellid + "_spellname"); + getList.push("repeating_" + sectionname + "_" + spellid + "_spellclass"); + getList.push("repeating_" + sectionname + "_" + spellid + "_spelllevel"); + getList.push("repeating_" + sectionname + "_" + spellid + "_spellsource"); + }); + }); + getAttrs(getList, function(attrs) { + var spellInfo = {}; + _.each(attrs, function(data, name) { + var namearray = name.split("_"); + var thisattr = namearray.pop(); + var thisname = namearray.join("_"); + spellInfo[thisname] = spellInfo[thisname] || {}; + spellInfo[thisname][thisattr] = data; + }); + setAttrs({spellinfo: JSON.stringify(spellInfo)}); + }); + }); + const attribsWithModsAndMaximum = SheetUtils.toLowerCase(abilityList.concat(abilityList.map(attribute => { return `${attribute}_mod`})).concat(abilityList.map(attribute => { return `${attribute}_maximum`}))); + const baseAttributes = SheetUtils.toLowerCase(abilityList).map(entry => { return `${entry}_base`}).concat(SheetUtils.toLowerCase(abilityList).map(entry => { return `${entry}_flag`})); + getAttrs(attribsWithModsAndMaximum, final => { + getAttrs(baseAttributes, base => { + const modfiedAbilityList = Object.keys(base).filter(entry => { return entry.indexOf('_base') > -1 && base[entry.replace('_base', '_flag')] == 1}); + _.each(final, function(x, y) { + final[y] = parseInt(x); + }); + modfiedAbilityList.forEach(attribute => { + final[attribute.replace('_base', '')] = parseInt(base[attribute]); + final[attribute.replace('_base', '_mod')] = Math.floor((parseInt(base[attribute]) - 10) / 2); + }); + setAttrs({previous_abilities: JSON.stringify(final)}); + }); + }); + getAttrs(["class", "subclass", "base_level", "multiclass1_flag", "multiclass2_flag", "multiclass3_flag", "multiclass1", "multiclass1_lvl", "multiclass1_subclass", "multiclass2", "multiclass2_lvl", "multiclass2_subclass", "multiclass3", "multiclass3_lvl", "multiclass3_subclass", "hp_max", "class_resource_name", "other_resource_name", "speed", "race", "subrace", "background", "custom_class", "cust_classname", "cust_hitdietype"], function(v) { + let set = {}; + set["previous_attributes"] = JSON.stringify(v); + set["lp-race"] = "Races:" + v.race; + set["lp-subrace"] = "Subraces:" + v.subrace; + set["lp-background"] = "Backgrounds:" + v.background.split("(")[0].trim(); + setAttrs(set); + }); + _.each(allSkills, function(skill) { + skillget.push(skill + "_prof"); + skillget.push(skill + "_type"); + }); + getAttrs(skillget, function(v) { + var proficiencies = {"Weapon": [], "Armor": [], "Skill": [], "Tool": [], "Language": [], "Expertise": []}; + _.each(allSkills, function(skill) { + if(v[skill + "_prof"] !== "0") { + proficiencies.Skill.push(capitalize(skill.replace(/_/g, " "))); + } + if(v[skill + "_type"] !== "1" && v[skill + "_prof"] !== "0") { + proficiencies.Expertise.push(capitalize(skill.replace(/_/g, " "))); + } + }); + getSectionIDs("tool", function(ids) { + var getList = []; + _.each(ids, function(id) { + getList.push("repeating_tool_" + id + "_toolname"); + getList.push("repeating_tool_" + id + "_toolbonus_base"); + }); + getAttrs(getList, function(v) { + _.each(ids, function(id) { + proficiencies.Tool.push(v["repeating_tool_" + id + "_toolname"]); + if(v["repeating_tool_" + id + "_toolbonus_base"] == "(@{pb}*2)") { + proficiencies.Expertise.push(v["repeating_tool_" + id + "_toolname"]); + }; + }); + getSectionIDs("proficiencies", function(ids) { + var getList = []; + _.each(ids, function(id) { + getList.push("repeating_proficiencies_" + id + "_name"); + getList.push("repeating_proficiencies_" + id + "_prof_type"); + }); + getAttrs(getList, function(v) { + _.each(ids, function(id) { + proficiencies[capitalize(v["repeating_proficiencies_" + id + "_prof_type"])].push(v["repeating_proficiencies_" + id + "_name"]); + }); + setAttrs({previous_proficiencies: JSON.stringify(proficiencies)}); + }); + }); + }); + }); + }); + get_repeating_data(function(repeating) { + setAttrs({previous_repeating: JSON.stringify(repeating)}); + }); + }); + + on("mancerchange:lp-race mancerchange:lp-subrace mancerchange:lp-background", function(eventinfo) { + getCompendiumPage(eventinfo.newValue, function(results) {}); + }); + + on("page:lp-levels", function(eventinfo) { + const mancerdata = getCharmancerData(); + const previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; + let levelclass = ["class1"]; + let set = {}; + let update = {}; + let baseclassExpansion = ''; + if(SheetUtils.checkPath(mancerdata, "['l1-class']['values']['class']") && /\?expansion=[0-9]/g.test(mancerdata['l1-class']['values']['class'])) { + baseclassExpansion = `?expansion=${mancerdata['l1-class']['values']['class'].match(/([0-9]+)$/g)}`; + } + let baseclass = previous["class"] + baseclassExpansion; + let classcompend = ["Classes:"] + previous["class"]; + let custom_lock = 0; + + if(previous["custom_class"] && previous["custom_class"] == 1) { + baseclass = previous["cust_classname"]; + classcompend = "Rules:Classes"; + custom_lock = 1; + set["class1_addlevel"] = 0; + }; + + set["lockcustomclass"] = custom_lock; + set["class1"] = 'Classes:' + baseclass; + set["class1_currentlevel"] = previous["base_level"]; + update["class1_selector"] = '' + removeExpansionInfo(baseclass) + ''; + if (previous["subclass"] && previous["custom_class"] === "0") { + update[`subclass1_selector`] = `
    ` + previous["subclass"] + `
    `; + if((mancerdata["lp-levels"] && mancerdata["lp-levels"].values["class1_subclass"] !== "Subclasses" + previous["subclass"]) + || !mancerdata["lp-levels"]) set["class1_subclass"] = "Subclasses:" + previous["subclass"]; + }; + const multiclass = parseInt(previous["multiclass1_flag"]) + parseInt(previous["multiclass2_flag"]) + parseInt(previous["multiclass3_flag"]); + set["multiclass"] = mancerdata["lp-levels"] && mancerdata["lp-levels"].values["multiclass"] ? mancerdata["lp-levels"].values["multiclass"] : multiclass; + set["multiclass_initial"] = multiclass; + + for (x = 1; x <= 3; x++) { + const x1 = x + 1; + if(previous[`multiclass${x}_flag`] === "1") { + set[`class${x1}`] = "Classes:" + previous[`multiclass${x}`]; + set[`class${x1}_currentlevel`] = previous[`multiclass${x}_lvl`]; + update[`class${x1}_selector`] = `${previous[`multiclass${x}`]}`; + if (previous[`multiclass${x}_subclass`]) { + set[`class${x1}_subclass`] = "Subclasses:" + previous[`multiclass${x}_subclass`]; + update[`subclass${x1}_selector`] = `
    ` + previous[`multiclass${x}_subclass`] + `
    `; + }; + levelclass.push(`class${x1}`); + } else { + set[`class${x1}_currentlevel`] = 0; + }; + + //This is handling classes that have been multiclassed into while in the leveler + if (mancerdata["lp-levels"] && mancerdata["lp-levels"].values[`class${x1}`] && parseInt(mancerdata["lp-levels"].values[`class${x1}_addlevel`]) > 0 && !levelclass.includes(`class${x1}`)) { + levelclass.push(`class${x1}`); + }; + }; + + setAttrs(set, () => { update_hp(true, levelclass) }); + setCharmancerText(update); + + changeCompendiumPage("sheet-levels-info", classcompend); + }); + + on("mancerchange:class1 mancerchange:class2 mancerchange:class3 mancerchange:class4", function(eventinfo) { + if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); + const mancerdata= getCharmancerData(); + const leveldata = mancerdata["lp-levels"]; + const levelclass= eventinfo.sourceAttribute; + const previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; + + getCompendiumPage(eventinfo.newValue, function(p) { + p = removeDuplicatedPageData(p); + const data = p.data; + const class_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Classes" ? eventinfo.newValue.split(":")[1] : false; + const subclass_name = data["Subclass Name"]; + let set = {}; + let update = {}; + + if (levelclass === "class1" && (!previous["custom_class"] || previous["custom_class"] == 0)) { + set[`${levelclass}_addlevel`] = leveldata.values[`${levelclass}_addlevel`] ? leveldata.values[`${levelclass}_addlevel`] : 1; + } else { + set[`${levelclass}_addlevel`] = leveldata.values[`${levelclass}_addlevel`] ? leveldata.values[`${levelclass}_addlevel`] : 0; + }; + + set[`${levelclass}_hitdie`] = data["Hit Die"]; + update[`sub${levelclass}_name`] = `

    ${subclass_name}

    `; + + //Need to add a check here if a previous subclass value exists, skip this part if so. + if(class_name) { + var subOptions = {show_source: true}; + let reset = {}; + reset[levelclass + "_subclass"] = ""; + //setCharmancerText(reset) + + (eventinfo.sourceType != "player") ? subOptions.silent = true : subOptions.selected = ""; + + setCharmancerOptions(levelclass + "_subclass","Category:Subclasses data-Parent:" + class_name, subOptions, function(values) { + }); + }; + + const presets = [leveldata.values.class1, leveldata.values.class2, leveldata.values.class3, leveldata.values.class4]; + for (x = 2; x <= 4; x++) { + disableCharmancerOptions(`class${x}`, presets); + }; + + setCharmancerText(update); + setAttrs(set, function() { + let set = {}; + set[eventinfo.sourceAttribute] = eventinfo.newValue; + setAttrs(set, {silent: true}); + }); + }); + }); + + //Trigger a change event when subclass changes + ["class1", "class2", "class3", "class4"].forEach(levelclass => { + on(`mancerchange:${levelclass}_subclass`, (eventinfo) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const repeating = mancerdata["lp-levels"].repeating || []; + let set = {}; + + if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); + getCompendiumPage(eventinfo.newValue, function(data) { + data = removeDuplicatedPageData(data); + updateClassLevel(undefined, eventinfo.sourceAttribute.slice(0, 6)); + }); + + //This will update the results inputs with new hp values if the subclass is Draconic + if (eventinfo.sourceType !== "worker") { + const newValue = (eventinfo.newValue) ? eventinfo.newValue : " "; + const previousValue = (eventinfo.previousValue) ? eventinfo.previousValue : " "; + let repids = [], updateArray = []; + _.each(repeating, (repid) => { + if (repid.includes(`_${levelclass}-`)) { updateArray.push(repid); }; + }); + _.each(updateArray, (repid) => { + if (newValue.includes("Draconic Bloodline") || previousValue.includes("Draconic Bloodline")) { repids.push(repid); }; + }); + + if (repids.length > 0) { + updateButtons(levelclass, repids); + updateResults(levelclass, repids, eventinfo); + }; + }; + + setAttrs(set); + }); + }); + + on("mancerchange:class1_addlevel mancerchange:class2_addlevel mancerchange:class3_addlevel mancerchange:class4_addlevel", function(eventinfo) { + if(eventinfo.sourceType !== "worker") deleteCharmancerData(["lp-choices", "lp-asi", "lp-spells", "lp-summary"]); + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"]; + const levelclass = eventinfo.sourceAttribute.slice(0, 6); + const classlevel = (parseInt(eventinfo.newValue) || 0) + (parseInt(leveldata.values[`${levelclass}_currentlevel`]) || 0); + const subclasslevel = (leveldata.data[`${levelclass}`] && leveldata.data[`${levelclass}`]["data-Subclass Level"]) ? parseInt(leveldata.data[`${levelclass}`]["data-Subclass Level"]) : 3; + let set = {}; + let update = {}; + if(eventinfo.currentStep === "lp-levels") updateClassLevel(mancerdata, levelclass); + + set[`${levelclass}_classlevel`] = classlevel; + if (classlevel >= subclasslevel) { + update[`sub${levelclass}_warning`] = ``; + showChoices([`sub${levelclass}`]); + } else { + update[`sub${levelclass}_warning`] = `

    Subclass chosen at level ${subclasslevel}. Your total level is ${classlevel}.

    `; + hideChoices([`sub${levelclass}`]); + }; + + const level = (leveldata.values[`${levelclass}_currentlevel`] === undefined) ? 0 : leveldata.values[`${levelclass}_currentlevel`]; + update[`${levelclass}_update`] = `level ${level} + `; + update[`${levelclass}_tot`] = `= level ${classlevel}`; + + setCharmancerText(update); + setAttrs(set); + }); + + const updateClassLevel = function(mancerdata, levelclass) { + mancerdata = mancerdata || getCharmancerData(); + const leveling = getLevelingData(mancerdata); + const blobs = getAllLpBlobs(mancerdata, true); + const spells = getNewSpells(mancerdata, leveling, blobs); + let set = {}; + let update = {}; + let asi = false; + + for(let x = 0; x <= 4; x++) { + update["class" + x + "_features"] = ""; + update["subclass" + x + "_features"] = ""; + } + + _.each(leveling, function(thislevel) { + _.each(["", "sub"], function(prefix) { + let thiskey = "class" + thislevel.classnumber; + let final = []; + if(prefix === "sub") thiskey += "_subclass"; + _.each(blobs.names[thiskey], function(blobname) { + if(blobname.substr(0,30) == "Ability Score Increase - Level") { + asi = true; + final.push("Ability Score Increase"); + } else if ((thislevel[prefix + "class"].blobs[blobname].Title || thislevel[prefix + "class"].blobs[blobname].Description || thislevel[prefix + "class"].blobs[blobname].Traits) && !thislevel[prefix + "class"].blobs[blobname].Group) { + final.push(thislevel[prefix + "class"].blobs[blobname].Title || blobname); + } + }); + update[prefix + "class" + thislevel.classnumber + "_features"] = _.uniq(final).join(", "); + }); + }); + + set.asi = asi.toString(); + set.spells = spells.toString(); + + setCharmancerText(update); + setAttrs(set, () => { + update_hp(false, [`${levelclass}`]); + recalcButtons(undefined, "lp-levels"); + }); + }; + + //Build a function to update the level & class each time they change + on("mancerchange:class1_classlevel mancerchange:class2_classlevel mancerchange:class3_classlevel mancerchange:class4_classlevel", function(eventinfo) { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"]; + const class1levels = parseInt(leveldata.values["class1_classlevel"]) || 0, class2levels = parseInt(leveldata.values["class2_classlevel"]) || 0, class3levels = parseInt(leveldata.values["class3_classlevel"]) || 0, class4levels = parseInt(leveldata.values["class4_classlevel"]) || 0; + const characterlevel = class1levels + class2levels + class3levels + class4levels; + let update = {}; + let set = {}; + let end = []; + + for (x = 1; x <= 4; x++) { + let name = (leveldata.values[`class${x}`]) ? leveldata.values[`class${x}`].slice(8) : ""; + let lvl = parseInt(leveldata.values[`class${x}_classlevel`]) || 0; + (lvl > 0 && x === 1) ? end.push(`${name} ${lvl}`) : (lvl > 0 && x > 1) ? end.push(` ${name} ${lvl}`) : false; + }; + + update["levels_message"] = `

    Character will be level ${characterlevel} (${end.map(entry => { return removeExpansionInfo(entry); })})

    `; + set[`characterlevel`] = characterlevel; + + setAttrs(set); + setCharmancerText(update); + }); + + const recalcHpByLevel = (section) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const repeating = mancerdata["lp-levels"].repeating || []; + let set = {}; + const sections = section ? [section] : ["class1", "class2", "class3", "class4"]; + + _.each(sections, (levelclass) => { + let thishp = 0; + let first = true; + let rollflag = ""; + _.each(repeating, function(repid) { + if(repid.split("_")[2].split("-")[0] == levelclass && leveldata[`${repid}_result`]) { + let thisflag = leveldata[`${repid}_rollflag`] || "average"; + thishp += parseInt(leveldata[`${repid}_result`]); + if(first) { + rollflag = thisflag; + first = false; + } + if(rollflag !== thisflag) rollflag = "none"; + } + }); + set[`${levelclass}_hp_flag`] = rollflag; + set[`${levelclass}_addhp`] = thishp; + }); + setAttrs(set, () => {recalcLpData()}); + }; + + const update_hp = (firstTime, levelclass) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const repeating = mancerdata["lp-levels"].repeating || []; + + const updateByLevel = (firstTime, levelclass) => { + _.each(levelclass, (levelclass) => { + const current = leveldata[`${levelclass}_currentlevel`] ? parseInt(leveldata[`${levelclass}_currentlevel`]) : 0, + addlevel = leveldata[`${levelclass}_addlevel`] ? parseInt(leveldata[`${levelclass}_addlevel`]) : 0; + let levelarray = [], addarray = [], removearray = [], existing = []; + + for(let x = current+1; x<=current+addlevel; x++) { + levelarray.push(`${levelclass}-${x}`); + } + addarray = levelarray; + if(!firstTime) { + _.each(repeating, function(id) { + addarray = _.without(addarray, id.split("_")[2]); + }); + } + _.each(repeating, function(id) { + if(id.split("_")[2].split("-")[0] == levelclass && !levelarray.includes(id.split("_")[2]) && !existing.includes(id.split("_")[2])) { + removearray.push(id); + existing.push(id.split("_")[2]); + }; + }); + + if(addarray.length > 0) { + const last = addarray[addarray.length - 2]; + let set = {}, update = {}, rowid = "", repids = []; + _.each(repeating, (repid) => { + if(repid.split("_")[2] == `${levelclass}hprow`) rowid = repid; + }); + _.each(addarray, (repname) => { + addRepeatingSection(rowid, "hpbylevel", repname, function(repid) { + repids.push(repid); + if (repid.includes(last) || addarray.length == 1) { + updateResults(levelclass, repids); + updateButtons(levelclass, repids); + }; + update[`${repid} label`] = `Level ${_.last(repname.split("-"))}`; + if(repname == _.last(addarray)) { + setCharmancerText(update); + setAttrs(set, () => { + clearRepeatingSectionById(removearray, () => { + recalcHpByLevel(levelclass); + }); + }); + } + }); + }); + } else { + clearRepeatingSectionById(removearray, () => { + recalcHpByLevel(levelclass); + }); + }; + }); + }; + + if(firstTime) { + addRepeatingSection("class1_by-levels", "row", "class1hprow", function() { + addRepeatingSection("class2_by-levels", "row", "class2hprow", function() { + addRepeatingSection("class3_by-levels", "row", "class3hprow", function() { + addRepeatingSection("class4_by-levels", "row", "class4hprow", function() { + updateByLevel(true, levelclass); + }); + }); + }); + }); + } else { + updateByLevel(false, levelclass); + }; + }; + + const updateButtons = (levelclass, repids) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const addlevel = leveldata[`${levelclass}_addlevel`] ? parseInt(leveldata[`${levelclass}_addlevel`]) : 0; + const hitdie = leveldata[`${levelclass}_hitdie`]; + let average = getDieAvg(hitdie), set = {}, bonus = hpBonus(levelclass), hpbonus = bonus[0], bonusSource = bonus[1]; + const templateBonus = (hpbonus > 0) ? `+${hpbonus}[${bonusSource}]` : ""; + + _.each(repids, (repid) => { + set[`roll_${repid}_rollhp`] = `@{wtype}&{template:mancerhproll} {{title=Roll for HP Level ${_.last(repid.split(`${levelclass}-`))}}} {{r1=[[1${hitdie}${templateBonus}]]}}`; + set[`roll_${repid}_averagehp`] = `@{wtype}&{template:mancerhproll} {{title=Average for HP Level ${_.last(repid.split(`${levelclass}-`))}}} {{a1=[[${average}${templateBonus}]]}}`; + + if (addlevel && hitdie) { + let dice = []; + //Set the roll buttons + for (x = 1; x <= addlevel; x++) { dice.push(`{{r${x}=[[1${hitdie}${templateBonus}]]}}`); }; + set[`roll_${levelclass}_rollhp`] = `@{wtype}&{template:mancerhproll} {{title=Roll for HP}} ` + dice.join() + + //Set the average hp button + set[`roll_${levelclass}_averagehp`] = `@{wtype}&{template:mancerhproll} {{title=Average for HP}}{{a1=[[${average}${templateBonus}]]}}` + }; + }); + + setAttrs(set); + }; + + const hpBonus = (levelclass) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + + //HP Bonus from subclass hp mods like Draconic Bloodline for Sorcerers + const prev_repeat = JSON.parse(mancerdata["lp-welcome"].values["previous_repeating"]), hpmod = prev_repeat["hpmod"], subclass = leveldata[`${levelclass}_subclass`];; + let hpbonus = 0, bonusSource = []; + _.each(hpmod, (mod) => { + if (mod["levels"] === "base" && subclass && subclass.includes(mod["source"])) { + bonusSource.push(mod["source"]); + hpbonus += parseInt(mod["mod"]); + }; + }); + + //Multiclassing into Sorcerer Draconic needs to update buttons + if (subclass && subclass.includes("Draconic Bloodline") && !bonusSource.includes("Draconic Bloodline")) { + bonusSource.push("Draconic Bloodline"); + hpbonus += parseInt(1); + }; + + return [hpbonus, bonusSource]; + }; + + const updateResults = (levelclass, repids, eventinfo) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const hitdie = leveldata[`${levelclass}_hitdie`]; + let average = getDieAvg(hitdie), bonus = hpBonus(levelclass), hpbonus = bonus[0], set = {}; + + _.each(repids, (repid) => { + if (!leveldata[`${repid}_result`]) { + set[`${repid}_result`] = parseInt(average) + parseInt(hpbonus); + } else if (eventinfo && (eventinfo.newValue).includes("Draconic Bloodline")) { + set[`${repid}_result`] = parseInt(leveldata[`${repid}_result`]) + parseInt(hpbonus); + } else if (eventinfo && (eventinfo.previousValue).includes("Draconic Bloodline")) { + set[`${repid}_result`] = parseInt(leveldata[`${repid}_result`]) - 1; + } else { + false + }; + }); + + setAttrs(set); + }; + + const getDieAvg = (hitdie) => { + if(!hitdie) return 0; + const size = hitdie.slice(1); + let num = [], sum = 0; + + //Push an array of numbers + for(x = 1; x <= size; x++) { num.push(x); }; + + //Add up the nummbers above + for(i = 0; i < num.length; i++) { sum += num[i]; }; + + return Math.ceil(sum / num.length); + }; + + //Roll & Average buttons inside the repeating hp section for each level + ["class1", "class2", "class3", "class4"].forEach(levelclass => { + on(`mancerroll:repeating_${levelclass}hprow`, (eventinfo) => { + const source = eventinfo.sourceAttribute, flag = source.includes("rollhp") ? "roll" : "average"; + let set = {}; + + set[`${eventinfo.sourceSection}_result`] = eventinfo.roll[0].result; + set[`${eventinfo.sourceSection}_rollflag`] = flag; + setAttrs(set, () => {recalcHpByLevel()}) + }); + }); + + //Roll & Average top level buttons for each class + ["class1", "class2", "class3", "class4"].forEach(levelclass => { + on(`mancerroll:${levelclass}_rollhp mancerroll:${levelclass}_averagehp`, (eventinfo) => { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"].values; + const repeating = mancerdata["lp-levels"].repeating || []; + const source = eventinfo.sourceAttribute, flag = source.includes("rollhp") ? "roll" : "average"; + let set = {}, sum = 0, rows = "", num = 0; + + repeating.forEach(row => { + if (row.includes(`${levelclass}-`) && source.includes("rollhp")) { + set[row + "_result"] = eventinfo.roll[`${num}`].result; + set[row + "_rollflag"] = flag; + num += 1; + } else if (row.includes(`${levelclass}-`) && source.includes("average")) { + set[row + "_result"] = eventinfo.roll[0].result; + set[row + "_rollflag"] = flag; + } else { + false + }; + }); + + //Add up the results for rollhp or multiply the average option by added levels + if (source.includes("rollhp")) { + _.each(eventinfo.roll, function(roll) { + sum += parseInt(roll.result); + }); + } else { + sum = parseInt(eventinfo.roll[0].result) * leveldata[`${levelclass}_addlevel`]; + }; + + // Set addhp to the total + set[`${levelclass}_addhp`] = sum; + + //Set hp_flag to be roll or average so the CSS will highlight the appropriate button + set[`${levelclass}_hp_flag`] = flag; + + setAttrs(set, function() { recalcLpData(); }); + }); + }); + + on("clicked:multiclass_add clicked:multiclass_remove", function(eventinfo) { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"]; + const levelclass = "class" + (parseInt(leveldata.values["multiclass"]) + 1); + const repeating = mancerdata["lp-levels"].repeating || []; + let set = {}; + let update = {}; + + if (eventinfo.sourceAttribute === "multiclass_add") { + (leveldata.values["multiclass"] < 3) ? set["multiclass"] = parseInt(leveldata.values["multiclass"]) + 1 : false; + update["add_multiclass"] = ``; + //set[`${levelclass}_addlevel`] = 1; + } else { + if (leveldata.values["multiclass"] > leveldata.values["multiclass_initial"]) { + const multiclass = parseInt(leveldata.values["multiclass"]); + let rows = ""; + + set["multiclass"] = multiclass - 1; + update["add_multiclass"] = ``; + + repeating.forEach(row => { + if (row.includes(`${levelclass}-`)) { + set[row + "_result"] = ""; + }; + }); + + set[`${levelclass}_addhp`] = 0; + set[`${levelclass}_hp_flag`] = ""; + } else { + false + }; + }; + + setAttrs(set, function() { recalcLpData(); }); + setCharmancerText(update); + }); + + on("mancerchange:class1_addhp mancerchange:class2_addhp mancerchange:class3_addhp mancerchange:class4_addhp", function(eventinfo) { + if (eventinfo.sourceType === "player") { + const mancerdata = getCharmancerData(), levelclass = eventinfo.sourceAttribute.slice(0, 6); + const repeating = mancerdata["lp-levels"].repeating || []; + let set = {}; + + repeating.forEach(row => { + if (row.includes(`${levelclass}-`)) { + set[row + "_result"] = ""; + }; + }); + + set[`${levelclass}_hp_flag`] = ""; + + setAttrs(set); + }; + }); + + on("mancerchange:multiclass", function () { + const mancerdata = getCharmancerData(); + const leveldata = mancerdata["lp-levels"]; + const tot = isNaN(parseInt(leveldata.values["multiclass"])) ? 1 : parseInt(leveldata.values["multiclass"]) + 1; + let update = {}; + let presets = []; + + for(var x=1; x<=tot-1; x++) { + if(leveldata.values["class" + x]) presets.push(_.last(leveldata.values["class" + x].split(":"))) + } + setCharmancerOptions("class" + tot, "Category:Classes", {disable: presets, category: "Classes"}); + update["multiclass_message"] = `

    Multiclass (${tot}/4)

    `; + setCharmancerText(update); + }); + + on("clicked:class1 clicked:class2 clicked:class3 clicked:class4 clicked:class1_subclass clicked:class2_subclass clicked:class3_subclass clicked:class4_subclass", function(eventinfo) { + const mancerdata = getCharmancerData(); + const source = eventinfo.sourceAttribute; + const page = mancerdata["lp-levels"].values[`${source}`]; + + changeCompendiumPage("sheet-levels-info", page); + getCompendiumPage(page, function(p) { + }); + }); + + var getLevelingData = function(mancerdata) { + mancerdata = mancerdata || getCharmancerData(); + var leveling = []; + if(!mancerdata["lp-levels"]) return leveling; + var multiclass = mancerdata["lp-levels"].values.multiclass ? parseInt(mancerdata["lp-levels"].values.multiclass) : 0; + for(var x=1; x<=multiclass + 1; x++) { + if(mancerdata["lp-levels"].data["class" + x] && mancerdata["lp-levels"].values["class" + x + "_addlevel"] && mancerdata["lp-levels"].values["class" + x + "_addlevel"] != "0") { + var thisclass = {}; + var maxspell = 0; + thisclass.class = mancerdata["lp-levels"].data["class" + x]; + thisclass.subclass = mancerdata["lp-levels"].data["class" + x + "_subclass"] || {}; + thisclass.classname = _.last(mancerdata["lp-levels"].values["class" + x].split(":")); + thisclass.subclassname = mancerdata["lp-levels"].values["class" + x + "_subclass"] ? _.last(mancerdata["lp-levels"].values["class" + x + "_subclass"].split(":")) : ""; + thisclass.currentlevel = mancerdata["lp-levels"].values["class" + x + "_currentlevel"] ? parseInt(mancerdata["lp-levels"].values["class" + x + "_currentlevel"]) : 0; + thisclass.addlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"]); + thisclass.addhp = mancerdata["lp-levels"].values["class" + x + "_addhp"] ? parseInt(mancerdata["lp-levels"].values["class" + x + "_addhp"]) : 0; + thisclass.classnumber = x; + if(thisclass.subclass["Spellcasting Ability"]) { + thisclass.spellcasting = thisclass.subclass["Spellcasting Ability"]; + } else if(thisclass.class["Spellcasting Ability"]) { + thisclass.spellcasting = thisclass.class["Spellcasting Ability"]; + } + _.each(thisclass.class.blobs, function(blob) { + if(blob["Spell Slots"] && parseInt(blob.Level) <= (thisclass.currentlevel + thisclass.addlevel)) { + _.each(JSON.parse(blob["Spell Slots"]), function(slots, name) { + if(parseInt(_.last(name.split(" "))) > maxspell) maxspell = parseInt(_.last(name.split(" "))); + }); + } + }); + thisclass.maxspell = maxspell; + leveling.push(thisclass); + } + } + return leveling; + }; + + var getLpRaceData = function(mancerdata, leveldata) { + mancerdata = mancerdata || getCharmancerData(); + leveldata = leveldata || getLevelingData(mancerdata); + let results = {}; + let currentlevel = 0; + let addlevel = 0; + _.each(leveldata, function(level) { + addlevel += level.addlevel; + currentlevel += level.currentlevel; + }); + const characterlevel = SheetUtils.checkPath(mancerdata, '["lp-levels"]["values"]["characterlevel"]') ? Math.max(parseInt(mancerdata["lp-levels"]["values"]["characterlevel"]) - addlevel, 0) : 0; + currentlevel = currentlevel === 0 ? 1 : currentlevel; + currentlevel = (characterlevel > currentlevel) ? characterlevel : currentlevel; + _.each(["race", "background"], function(section) { + results[section] = {addlevel: addlevel, currentlevel: currentlevel}; + results[section][section] = mancerdata["lp-welcome"].data["lp-" + section] || {}; + results[section]["sub" + section] = mancerdata["lp-welcome"].data["lp-sub" + section] || {}; + results[section].type = section; + results[section].name = _.last(mancerdata["lp-welcome"].values["lp-" + section].split(":")) || ""; + results[section].name += mancerdata["lp-welcome"].values["lp-sub" + section] ? " - " + _.last(mancerdata["lp-welcome"].values["lp-sub" + section].split(":")) : ""; + }); + return results; + }; + + var getLpBlobs = function(data, include_asi, verbose) { + const type = data.type || "class"; + var asi = type == "class" ? data[type]["data-Ability Score Levels"] : []; + var allblobs = {}; + allblobs[type] = {}; + allblobs["sub" + type] = {}; + _.times(data.addlevel, function(x) { + var thislevel = data.currentlevel + x + 1; + allblobs[type] = _.extend(allblobs[type], filterBlobs(data[type].blobs, {"Level": "" + thislevel, multiclass: true})); + allblobs["sub" + type] = _.extend(allblobs["sub" + type], filterBlobs(data["sub" + type].blobs, {"Level": "" + thislevel, multiclass: true})); + if(asi.includes("" + thislevel) && include_asi) { + allblobs[type]["Ability Score Increase - Level " + thislevel] = {Level: thislevel, parentSection: type}; + data[type].blobs["Ability Score Increase - Level " + thislevel] = { + Level: thislevel, + Title: ("Ability Score Increase - Level " + thislevel) + }; + } + }); + allblobs[type] = _.extend(allblobs[type], filterBlobs(data[type].blobs, {"Level": "every", multiclass: true})); + allblobs["sub" + type] = _.extend(allblobs["sub" + type], filterBlobs(data["sub" + type].blobs, {"Level": "every", multiclass: true})); + var remove = {}; + remove[type] = []; + remove["sub" + type] = []; + //Figure out which blobs are just the same feature at a different level, add them to a list to remove (unless we're useing the verbose option) + if(!verbose) { + _.each(allblobs, function(blobs, section) { + _.each(blobs, function(blob, name) { + var basename = name.split("(")[0]; + blob.Level = parseInt(blob.Level); + if(basename.trim().toLowerCase() == "spell slots") { + remove[section].push(name); + } else if(basename.trim().toLowerCase() != "proficiencies") { + _.each(allblobs, function(otherblobs, othersection) { + _.each(otherblobs, function(otherblob, othername) { + if(name != othername && basename == othername.split("(")[0]) { + if(blob.Level > parseInt(otherblob.Level)) { + remove[section].push(othername); + } else { + remove[section].push(name); + } + } + }) + }); + } + }); + }); + } + //remove any blobs that are the same feature + _.each(remove, function(removeArray, section) { + _.each(_.uniq(removeArray), function(thisblob) { + delete allblobs[section][thisblob]; + }); + }); + //here we build the final list of blobs that will be added + var filteredblobs = {}; + filteredblobs[type] = []; + filteredblobs["sub" + type] = []; + _.each(allblobs, function(blobs, section) { + _.each(blobs, function(blob, name) { + var thisblob = { + Level: blob.Level, + name: name + }; + filteredblobs[section].push(thisblob); + }); + }); + _.each(filteredblobs, function(bloblist) { + bloblist = _.sortBy(bloblist, "Level"); + }) + filteredblobs.allblobs = _.extend(data[type].blobs, data["sub" + type].blobs); + return filteredblobs; + }; + + var getAllLpBlobs = function(mancerdata, include_asi) { + const pickBlobs = function(theseblobs, allblobs, key, section) { + blobs.names[key] = _.pluck(theseblobs, "name") || []; + if(mancerdata["lp-choices"]) { + _.each(mancerdata["lp-choices"].values, function(value, id) { + if((value + "").split(":")[0] == "Blob" && id.split("_")[2].split("--")[0] == section) { + blobs.names[key].push(value.split(":")[1]); + }; + }); + }; + _.each(blobs.names[key], function(blobname){ + _.each(filterBlobs(allblobs, {"name": blobname, multiclass: true}), function(blob, blobname) { + blobs.all.push(blob); + blobs.sorted[key] = blobs.sorted[key] ? blobs.sorted[key] : []; + blobs.sorted[key].push(blob); + }); + }); + }; + mancerdata = mancerdata || getCharmancerData(); + const leveldata = getLevelingData(mancerdata); + const racedata = getLpRaceData(mancerdata, leveldata); + var blobs = {all: [], sorted: {}, names: {}}; + _.each(leveldata, function(level) { + var name = "class" + level.classnumber; + var theseblobs = getLpBlobs(level, include_asi, true); + pickBlobs(theseblobs.class, level.class.blobs, name, "class-" + level.classnumber); + if(level.subclass) { + pickBlobs(theseblobs.subclass, level.subclass.blobs, name + "_subclass", "subclass-" + level.classnumber); + }; + }); + _.each(racedata, function(level) { + var name = level.type; + var theseblobs = getLpBlobs(level, include_asi, true); + pickBlobs(theseblobs[name], level[name].blobs, name, name); + if(level["sub" + name]) { + pickBlobs(theseblobs["sub" + name], level["sub" + name].blobs, "sub" + name, "sub" + name); + }; + }); + return blobs; + }; + + on("page:lp-choices", function(eventinfo) { + const resortBlobs = function(blobs, section) { + _.each(blobs[section], function(x) { x.parentSection = section }); + _.each(blobs["sub" + section], function(x) { x.parentSection = "sub" + section}); + let filteredblobs = _.sortBy(blobs[section].concat(blobs["sub" + section]), "Level"); + let resorted = []; + _.each(filteredblobs, function(blob) { + if(blob.name.split(" ")[0] == "Proficiencies") { + resorted.unshift(blob); + } else { + resorted.push(blob); + } + }); + return resorted; + } + const mancerdata = getCharmancerData(); + const leveling = getLevelingData(mancerdata); + const racedata = getLpRaceData(mancerdata, leveling); + _.each(racedata, function(data, section) { + const blobs = getLpBlobs(data, true); + const relevant = resortBlobs(blobs, section); + if(relevant.length > 0) { + addRepeatingSection("choices", "row", function(thisrow) { + let update = {}; + update[thisrow] = "

    " + removeExpansionInfo(data.name) + ""; + update[thisrow] += data.addlevel > 1 ? " Levels " + (data.currentlevel + 1) + " - " + (data.currentlevel + data.addlevel) : " Level " + (data.currentlevel + 1); + update[thisrow] += "

    "; + setCharmancerText(update); + _.each(relevant, function(blob, y) { + handleBlobs(blobs.allblobs, { + filters: {multiclass: true}, + slide: "lp-choices", + section: blob.parentSection + "--" + blob.Level, + element: thisrow, + thisblob: blob.name, + maxlevel: data.currentlevel + data.addlevel, + parent: section + }); + if(y === (relevant.length -1)) { + recalcLpData(); + } + }); + }); + }; + }); + _.each(leveling, function(data) { + var x = data.classnumber; + var blobs = getLpBlobs(data, true); + addRepeatingSection("choices", "row", function(classrow) { + var classname = data.subclassname ? removeExpansionInfo(data.subclassname) + " " + removeExpansionInfo(data.classname) : removeExpansionInfo(data.classname); + var update = {}; + update[classrow] = "

    " + classname + ""; + update[classrow] += data.addlevel > 1 ? " Levels " + (data.currentlevel + 1) + " - " + (data.currentlevel + data.addlevel) : " Level " + (data.currentlevel + 1); + update[classrow] += "

    "; + setCharmancerText(update); + resorted = resortBlobs(blobs, "class"); + _.each(resorted, function(blob, y) { + handleBlobs(blobs.allblobs, { + filters: {multiclass: true}, + slide: "lp-choices", + section: blob.parentSection + "-" + x + "--" + blob.Level, + element: classrow, + thisblob: blob.name, + maxlevel: data.currentlevel + data.addlevel, + parent: "class" + data.classnumber + (blob.parentSection === "class" ? "" : "_subclass") + }); + if(y === (resorted.length -1)) { + recalcLpData(); + } + }); + }); + }); + if(leveling[0] && leveling[0].classname) { + changeCompendiumPage("sheet-class-info", "Classes:" + leveling[0].classname); + } + }); + + const restorePreviousASI = function(prevData, callback) { + console.log('Restoring previous state...'); + if(!SheetUtils.checkPath(prevData, "['lp-asi']['values']")) { + callback(); + return; + } + setAttrs(prevData['lp-asi']['values'], callback); + } + const readPreviousFeats = function(data) { + if(!SheetUtils.checkPath(data, "['lp-welcome']['values']['previous_repeating']")) return; + const previousData = JSON.parse(data['lp-welcome']['values']['previous_repeating']); + if(!SheetUtils.checkPath(previousData, "['traits']")) return; + let feats = previousData['traits'].filter(trait => { return trait.source === 'Feat'; }).map(trait => { return `${trait.name}`; }); + return feats; + } + on("page:lp-asi", function(eventinfo) { + setCharmancerText({'sheet-spinner-toggle': 'Loading...'}); + const previousState = getCharmancerData(); + deleteCharmancerData(['lp-asi'], () => { + var mancerdata = getCharmancerData(); + var leveling = getLevelingData(mancerdata); + var asis = []; + var update = {}; + var multiclass = mancerdata["lp-levels"].values.multiclass ? parseInt(mancerdata["lp-levels"].values.multiclass) : 0; + for(var x=1; x<=multiclass + 1; x++) { + if(mancerdata["lp-levels"].data["class" + x]) { + var thisclass = {}; + thisclass.class = mancerdata["lp-levels"].data["class" + x]; + thisclass.classname = _.last(mancerdata["lp-levels"].values["class" + x].split(":")); + thisclass.currentlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_currentlevel"]); + thisclass.addlevel = parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"]); + leveling["class" + x] = thisclass; + } + } + _.each(leveling, function(data) { + var asi = data.class["data-Ability Score Levels"]; + _.times(data.addlevel, function(x) { + var thislevel = data.currentlevel + x + 1; + if(asi.includes("" + thislevel)) { + asis.push(data.classname + " Level " + thislevel); + } + }); + }); + let counter = 0; + _.each(asis, function(asi) { + addRepeatingSection("choices", "asi-row", function(rowid) { + update[rowid + " .sheet-title"] = "Ability Score Increase: " + removeExpansionInfo(asi); + setAttrs({[`repeating_${SheetUtils.getUID(rowid)}_asi-row_source`]: asi}); + getCompendiumQuery('Category:Feats', data => { + const names = data.map(entry => { return entry.name; }).sort(); + setCharmancerOptions(rowid + "_feat", names, { disable: readPreviousFeats(mancerdata), category: 'Feats' }); + updateAbilityLock(rowid); + if(asi == _.last(asis)) { + setCharmancerText(update); + } + counter++; + if(counter === asis.length) restorePreviousASI(previousState, () => { setCharmancerText({'sheet-spinner-toggle': ''}); }); + }); + }); + }); + }); + }); + + var getKnownLpSpells = function(mancerdata) { + mancerdata = mancerdata || getCharmancerData(); + var leveldata = getLevelingData(mancerdata); + var previousspells = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; + var spelldata = {}; + var totallevel = 0; + var prevtotallevel = 0; + _.each(previousspells, function(spell) { + spelldata[spell.spellname] = {level: spell.spelllevel}; + if(spell.spellclass) spelldata[spell.spellname].spellclass = spell.spellclass; + if(spell.spellclass && spell.spellclass.toLowerCase() == "racial") spelldata[spell.spellname].known = "Racial"; + if(spell.spellsource) spelldata[spell.spellname].known = spell.spellsource; + }); + _.each(leveldata, function(level) { + totallevel += level.currentlevel + level.addlevel; + prevtotallevel += level.currentlevel; + }); + //Gather known spells + _.each(mancerdata, function(page, pagename) { + if(pagename.split("-")[0] == "lp") { + let choices = []; + let choicepage = ["lp-welcome", "lp-levels"].includes(pagename) ? (mancerdata["lp-choices"] ? mancerdata["lp-choices"].values : []) : page.values; + _.each(choicepage, function(val) { + if((val + "").split(":")[0] === "Blob") choices.push(val.split(":")[1]); + }); + _.each(page.data, function(data, dataname) { + var thislevel = 0; + var prevlevel = 0; + var thisclass = {}; + if(dataname.substring(0,5) == "class") { + thisclass = _.findWhere(leveldata, {classnumber: parseInt(dataname[5])}); + thislevel = thisclass ? thisclass.currentlevel + thisclass.addlevel : 0; + prevlevel = 0; + } else { + thislevel = totallevel; + prevlevel = prevtotallevel; + } + _.each(data.blobs, function(blob, blobname) { + if(blob.Multiclass != "no" && ((parseInt(blob.Level) <= thislevel || blob.Level == "all") && !blob.Group) || choices.includes(blobname)) { + if(blob.Powers) { + var blobspells = JSON.parse(blob.Powers); + _.each(blobspells, function(blobspell) { + if(blobspell.Known) { + _.each(blobspell.Known, function(spell) { + spelldata[spell] = spelldata[spell] || {level: blobspell.Rank}; + spelldata[spell].known = blobspell.Source || data.Category.substring(0, data.Category.length - 2); + spelldata[spell].spellclass = thisclass.classname; + if(dataname.substring(0,5) != "class") { + spelldata[spell].known = data.Category.substring(0, data.Category.length - 1); + spelldata[spell].spellclass = data.Category == "Races" ? "Racial" : data.Category.substring(0, data.Category.length - 1); + } + if(blobspell.Ability) { + spelldata[spell].ability = blobspell.Ability; + } else if(thisclass.class && thisclass.class["Spellcasting Ability"]) { + spelldata[spell].ability = thisclass.class["Spellcasting Ability"]; + } else if (thisclass.subclass && thisclass.subclass["Spellcasting Ability"]) { + spelldata[spell].ability = thisclass.subclass["Spellcasting Ability"]; + } + }); + } + }); + } + } + }); + }); + //Gater spells from class features + _.each(page.values, function(value, name) { + if(name.substr(-18) === "_utilityrow_powers") { + spelldata = _.extend(spelldata, JSON.parse(value)); + } + }); + } + }); + /**/ + return spelldata; + }; + + var getNewSpells = function(mancerdata, leveldata, blobs) { + mancerdata = mancerdata || getCharmancerData(); + leveldata = leveldata || getCharmancerData(); + blobs = blobs || getAllLpBlobs(mancerdata, false); + var result = false; + _.each(leveldata, function(level) { + var prevlevel = level.currentlevel; + var thislevel = level.addlevel + prevlevel; + var thisclass = {class: level.classname, number: level.classnumber, newlevel: thislevel, additional: []}; + var prevknown = 0; + var currentknown = 0; + var prevcantrips = 0; + var currentcantrips = 0; + var spelladd = 0; + thisclass.newspells = 0; + _.each(["class", "subclass"], function(section) { + if(level[section]) { + _.each(level[section].blobs, function(blob) { + if(blob.Level == thislevel) { + if(blob["Talents Known"]) { + currentknown = parseInt(blob["Talents Known"]); + if(level.class["data-Spell Replace"]) result = true; + } + if(blob.Cantrips) { + thisclass.cantrips = true; + currentcantrips = parseInt(blob.Cantrips); + } + if(blob["Spells Prepared"]) { + result = true; + } + } + if(blob.Level == prevlevel || (prevlevel === 0 && blob.Level == 1)) { + if(blob["Talents Known"]) { + prevknown = prevlevel === 0 ? 0 : parseInt(blob["Talents Known"]); + if(prevlevel === 0) thisclass.newspells = parseInt(blob["Talents Known"]); + } + if(blob.Cantrips) { + thisclass.cantrips = true; + prevcantrips = prevlevel === 0 ? 0 : parseInt(blob.Cantrips); + } + } + if(level[section]["data-Spell Add"]) { + spelladd = parseInt(level[section]["data-Spell Add"]); + } + }); + } + }); + if(spelladd) { + thisclass.newspells += prevlevel === 0 ? spelladd * (thislevel - prevlevel -1) : spelladd * (thislevel - prevlevel); + } else { + thisclass.newspells = currentknown - prevknown; + } + thisclass.newcantrips = currentcantrips - prevcantrips; + _.each(["", "_subclass"], function(section) { + if(blobs.sorted[`class${level.classnumber}${section}`]) { + _.each(blobs.sorted[`class${level.classnumber}${section}`], function(blob) { + if(blob.Spells) { + let spells = JSON.parse(blob.Spells); + _.each(spells, function(spell) { + if(spell.Choose) { + result = true; + } + }); + } + }); + } + }); + if(thisclass.newcantrips || thisclass.newspells) result = true; + }); + return result; + }; + + on("page:lp-spells", function(eventinfo) { + var mancerdata = getCharmancerData(); + var queries = []; + var blobs = getAllLpBlobs(mancerdata, false); + var leveldata = getLevelingData(mancerdata); + var classes = []; + var knowncantrips = 0; + var knownspells = 0; + var newcantrips = 0; + var newspells = 0; + var replace = 0; + var totallevel = 0; + var spellmaxlevel = 0; + var prepared = true; + var prevspells = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; + var spelldata = getKnownLpSpells(mancerdata); + var abilities = getAbilityTotals(mancerdata, blobs); + _.each(spelldata, function(spell, spellname) { + if(spell.level == "cantrip") { + knowncantrips++; + } else { + knownspells++; + } + }); + recalcLpData(blobs); + //Gather spell data about each class + _.each(leveldata, function(level) { + var prevlevel = level.currentlevel; + var thislevel = level.addlevel + prevlevel; + var thisclass = {class: level.classname, number: level.classnumber, newlevel: thislevel, additional: []}; + var toSwap = level.class["data-Spell Replace"] ? parseInt(level.class["data-Spell Replace"]) : 0; + var prevknown = 0; + var currentknown = 0; + var prevcantrips = 0; + var currentcantrips = 0; + var spelladd = 0; + thisclass.list = [thisclass.class]; + totallevel += thislevel; + thisclass.newspells = 0; + _.each(["class", "subclass"], function(section) { + if(level[section]) { + if(level[section]["data-Spell List"]) thisclass.list = [level[section]["data-Spell List"]]; + if(level[section]["Spellcasting Ability"]) thisclass.ability = level[section]["Spellcasting Ability"]; + _.each(level[section].blobs, function(blob) { + if(blob.Level == thislevel) { + if(blob["Talents Known"]) { + var maxRank = JSON.parse(blob["Maximum Talent Rank"]); + thisclass.maxlevel = parseInt(maxRank); + spellmaxlevel = Math.max(thisclass.maxlevel, spellmaxlevel); + } + if(blob["Talents Known"]) { + currentknown = parseInt(blob["Talents Known"]); + } + if(blob.Cantrips) { + thisclass.cantrips = true; + currentcantrips = parseInt(blob.Cantrips); + } + if(blob["Spells Prepared"]) { + var splitted = blob["Spells Prepared"].split("+").map((x) => {return x.trim()}); + thisclass.prepared = 0; + _.each(splitted, function(term, x) { + if(isNaN(parseInt(term))) { + thisclass.prepared += abilities[term.toLowerCase() + "_mod"] ? abilities[term.toLowerCase() + "_mod"] : 0; + } else { + thisclass.prepared += parseInt(term); + } + }); + thisclass.prepared = Math.max(thisclass.prepared, 1); + } + } + if(blob.Level == prevlevel || (prevlevel === 0 && blob.Level == 1)) { + if(blob["Talents Known"]) { + prevknown = prevlevel === 0 ? 0 : parseInt(blob["Talents Known"]); + if(prevlevel === 0) thisclass.newspells = parseInt(blob["Talents Known"]); + } + if(blob.Cantrips) { + thisclass.cantrips = true; + prevcantrips = prevlevel === 0 ? 0 : parseInt(blob.Cantrips); + if(knowncantrips < prevcantrips) prevcantrips = knowncantrips; + } + } + if(blob.Level == "every" || blob.Level == thislevel) { + if(blob["Additional Spell List"]) thisclass.list.push(blob["Additional Spell List"]); + } + if(level[section]["data-Spell Add"]) { + spelladd = parseInt(level[section]["data-Spell Add"]); + } + }); + } + }); + if(spelladd) { + thisclass.newspells += prevlevel === 0 ? spelladd * (thislevel - prevlevel -1) : spelladd * (thislevel - prevlevel); + } else { + thisclass.newspells = currentknown - prevknown; + } + if(thisclass.prepared) thisclass.newspells = thisclass.prepared; + thisclass.newcantrips = currentcantrips - prevcantrips; + thisclass.replace = toSwap * (thislevel - prevlevel); + _.each(["", "_subclass"], function(section) { + if(blobs.sorted[`class${level.classnumber}${section}`]) { + _.each(blobs.sorted[`class${level.classnumber}${section}`], function(blob) { + if(blob.Spells) { + let spells = JSON.parse(blob.Spells); + _.each(spells, function(spell) { + if(spell.Choose && spell.Level === "0") { + thisclass.newcantrips += parseInt(spell.Choose); + } + }); + } + }); + } + }); + if(thisclass.newcantrips || thisclass.newspells) classes.push(thisclass); + }); + if(classes.length > 0) { + var existinglist = _.pluck(prevspells, "spellname"); + var knownlist = _.keys(spelldata); + //Look through all the data to see if there's any expanded lists + _.each(mancerdata, function(page, pagename) { + if(pagename.split("-")[0] == "lp") { + _.each(page.data, function(data, dataname) { + var thislevel = 0; + if(dataname.substring(0,5) == "class") { + var thisclass = _.findWhere(leveldata, {classnumber: parseInt(dataname[5])}); + thislevel = thisclass ? thisclass.currentlevel + thisclass.addlevel : 0; + } else { + thislevel = totallevel; + } + _.each(data.blobs, function(blob, blobname) { + if((parseInt(blob.Level) <= thislevel || blob.Level == "every") && blob.Multiclass != "no") { + if(blob.Spells) { + var blobspells = JSON.parse(blob.Spells); + _.each(blobspells, function(thisspell) { + if(parseInt(thisspell.Level) <= spellmaxlevel) { + if(thisspell["Expanded List"]) { + knownlist = knownlist.concat(thisspell["Expanded List"]); + } + } + }); + } + } + }); + }) + } + }); + if(knownlist) { + queries.push("Category:Powers Name:" + knownlist.join("|")); + } + _.each(classes, function(thisclass) { + if(thisclass.maxlevel || thisclass.newcantrips) { + newcantrips += thisclass.newcantrips || 0; + newspells += thisclass.newspells; + replace += thisclass.replace; + if(!thisclass.prepared) prepared = false; + thisquery = "Category:Powers Classes:*" + _.uniq(thisclass.list).join("|*") + " Rank:"; + if(thisclass.cantrips) thisquery += "0|" + for(var x = 1; x <= thisclass.maxlevel; x++) { + thisquery += x; + if(x != thisclass.maxlevel) thisquery += "|"; + } + _.each(thisclass.additional, function(lvl) { + thisquery += "|" + lvl; + }); + queries.push(thisquery); + } + }); + var toSet = {}; + toSet.knowncantrips = knowncantrips; + toSet.knownspells = knownspells; + toSet.newcantrips = newcantrips; + toSet.newspells = newspells; + toSet.replace = replace; + setAttrs(toSet); + var update = {}; + update["spells-summary"] = ""; + if(newcantrips != 0 || knowncantrips != 0) update["spells-summary"] = "
    Cantrips:
    "; + _.times(spellmaxlevel, function(x) { + update["spells-summary"] += "
    Level " + (x + 1) + ":
    "; + }); + if(classes.length > 1) { + update["cantripinfo"] = ""; + _.each(classes, function(thisclass) { + if(thisclass.newspells) { + update["cantripinfo"] += "

    You can add " + thisclass.newcantrips + " " + thisclass.class + " cantrips.

    "; + } + }); + } + setCharmancerText(update); + queries = queries.map(query => { return removeExpansionInfo(query); }); + getCompendiumQuery(queries, (data) => { + data = removeDuplicatedPageData(data); + let byLevel = {}; + _.each(data, (spell) => { + let classes = []; + if (spell.data.Classes) { + classes = spell.data.Classes; + //Ravinca introduced Spells without Classes + } else { + ["class1", "class2", "class3", "class4"].forEach(levelclass => { + //Get the class name out of values & confirm its a spellcaster using data Spellcasting Ability + const name = (mancerdata["lp-levels"].values[`${levelclass}`]) ? mancerdata["lp-levels"].values[`${levelclass}`].split("Classes:")[1] : false; + const ability = + //Check if the class has a Spellcasting Ability attribute + (mancerdata["lp-levels"].data[`${levelclass}`] && mancerdata["lp-levels"].data[`${levelclass}`]["Spellcasting Ability"]) ? true : + //Check if the subclass has a Spellcasting Ability attribute + (mancerdata["lp-levels"].data[`${levelclass}_subclass`] && mancerdata["lp-levels"].data[`${levelclass}_subclass`]["Spellcasting Ability"]) ? true : + //Set to false if the class is not a spellcaster + false; + if (name && ability) { + //Spell casters have thier class name pushed to the array above + classes.push(name); + }; + }); + + if (classes.length > 0) { + classes = classes.join(', '); + }; + }; + + /* This will set the information for populating the spell list */ + if (classes.length > 0) { + byLevel[spell.data.Rank] = byLevel[spell.data.Rank] || []; + byLevel[spell.data.Rank].push({ + name: spell.name, + classes: classes.split(",").map(x => x.trim()), + level: parseInt(spell.data.Rank) + }); + }; + }); + addSpellSections(byLevel, { + newspells: newspells, + newcantrips: newcantrips, + replace: replace, + prepared: prepared, + classes: classes, + spelldata: spelldata, + existinglist: existinglist + }); + }); + } + }); + + + const addSpellSections = function(byLevel, settings) { + settings = settings || {}; + let newspells = settings.newspells || 0; + let newcantrips = settings.newcantrips || 0; + let replace = settings.replace || 0; + let prepared = settings.prepared || false; + let classes = settings.classes || []; + let spelldata = settings.spelldata || []; + let existinglist = settings.existinglist || []; + let spellnumber = 0; + //D&D 5e Lvl+ Mancer: Spells tab "Level undefined" (UC605) + //When invoking Lvl+ from an incomplete manually levelled character, an undefined lv is generated due to missing information. + //This code prevents an incomplete list from being displayed. + //By Miguel + if('undefined' in byLevel) { + delete byLevel.undefined; + } + _.each(byLevel, function(level) { + spellnumber += level.length; + }); + byLevel["0"] = byLevel["0"] || []; + addRepeatingSection("choices", "row", "spellsrow", function(spellsrow) { + let toSet = {}; + let update = {}; + _.each(byLevel, function(spells, x) { + addRepeatingSection(spellsrow, "spell-holder", "spell-holder-" + x, function(levelrow) { + if(x == "0") { + if(newspells > 0) { + if(classes.length > 1) { + update[levelrow + " .sheet-spellstext .sheet-summary"] = ""; + _.each(classes, function(thisclass) { + if(thisclass.newspells) { + update[levelrow + " .sheet-spellstext .sheet-summary"] += "

    You can add " + thisclass.newspells + " " + thisclass.class + " spells.

    "; + } + }); + } else { + update[levelrow + " .sheet-spellstext .sheet-summary"] = "

    You can add " + newspells + " new spells.

    "; + } + } + if(replace > 0) { + if(classes.length > 1) { + update[levelrow + " .sheet-replacetext .sheet-summary"] = ""; + _.each(classes, function(thisclass) { + if(thisclass.replace) { + update[levelrow + " .sheet-replacetext .sheet-summary"] += "

    You can replace " + thisclass.replace + " " + thisclass.class + " spells.

    "; + } + }); + } else { + update[levelrow + " .sheet-replacetext .sheet-summary"] = "

    You can replace " + replace + " spells.

    "; + } + showChoices([levelrow + " .sheet-replace-info"]); + } + } else { + update[levelrow + " .sheet-spellinfo"] = ""; + } + update[levelrow + " label .sheet-title"] = x == "0" ? "Cantrips" : "Level " + x; + update[levelrow + " label .sheet-title"] += "r" + if(x == "0" && newcantrips == 0) { + toSet[levelrow + "_show"] = "1"; + update[levelrow + " .sheet-controller"] = "1"; + } + if(spells.length === 0) hideChoices([levelrow + " label"]); + spells = _.sortBy(spells, "name"); + setCharmancerText(update); + _.each(spells, function(spell) { + addRepeatingSection(levelrow + " .sheet-container", "spell-item", function(spellid) { + var update = {}; + toSet[spellid + "_name"] = spell.name; + toSet[spellid + "_level"] = x; + update[spellid + " .sheet-name"] = spell.name; + update[spellid + " .sheet-classes"] = ""; + if(x == "0" && newcantrips == 0) update[spellid + " .sheet-hardlock"] = "locked"; + var spellclasses = []; + _.each(classes, function(thisclass, y) { + if(spell.classes.includes(thisclass.list) && spell.level <= thisclass.maxlevel) { + spellclasses.push({class: thisclass.class, ability: thisclass.ability}); + if(classes.length > 1) { + update[spellid + " .sheet-classes"] += "" + thisclass.class + ""; + } + } + }); + if(spellclasses.length == 1 || classes.length == 1) { + toSet[spellid + "_class"] = spellclasses[0] ? spellclasses[0].class : classes[0].class; + toSet[spellid + "_ability"] = spellclasses[0] ? spellclasses[0].ability : classes[0].ability; + } + _.each(spelldata, function(thisspell, spellname) { + if(spellname == spell.name) { + toSet[spellid + "_checked"] = "1"; + if(!prepared || x == "0") { + toSet[spellid + "_existing"] = "1"; + if(x == "0" || replace == 0) update[spellid + " .sheet-hardlock"] = "locked"; + } + if(thisspell.known) { + toSet[spellid + "_checked"] = "1"; + toSet[spellid + "_existing"] = "1"; + toSet[spellid + "_source"] = thisspell.known; + update[spellid + " .sheet-classes"] = "" + thisspell.known + " Spell"; + update[spellid + " .sheet-hardlock"] = "locked"; + } + if(thisspell.spellclass) toSet[spellid + "_class"] = thisspell.spellclass; + if(thisspell.ability) toSet[spellid + "_ability"] = thisspell.ability; + } + }); + if(settings.selected && settings.selected.includes(spell.name)) { + toSet[spellid + "_checked"] = "1"; + } + if(settings.locked && settings.locked.includes(spell.name)) { + toSet[spellid + "_checked"] = "1"; + toSet[spellid + "_existing"] = "1"; + update[spellid + " .sheet-hardlock"] = "locked"; + } + spellnumber--; + setCharmancerText(update); + if(spellnumber <= 0) { + setAttrs(toSet, {silent: true}, function() { + updateSpellSummary("all", undefined, settings.page); + }); + } + }); + }); + }); + }); + }); + }; + + const updateSpellSummary = function(sourcelevel, data, thispage) { + var mancerdata = data || getCharmancerData(); + var spellpage = thispage ? mancerdata[thispage] : mancerdata["lp-spells"]; + var replist = spellpage.repeating || []; + var cantripsection = replist.find((x) => {return x.includes("_spell-holder-0")}); + var update = {}; + var sections = []; + var perlevel = {}; + var allowed = 0; + var allowedreplace = 0; + //first, list spells you already know + _.each(replist, function(repid) { + if(spellpage.values[repid + "_existing"]) { + var selector = "spells-summary .sheet-level_" + spellpage.values[repid + "_level"] + " .sheet-list"; + update[selector] = update[selector] || ""; + update[selector] += spellpage.values[repid + "_checked"] ? "" : ""; + update[selector] += spellpage.values[repid + "_name"] + ""; + } + }); + //then, list new spells you've checked + _.each(replist, function(repid) { + if(spellpage.values[repid + "_checked"] && !spellpage.values[repid + "_existing"]) { + var selector = "spells-summary .sheet-level_" + spellpage.values[repid + "_level"] + " .sheet-list"; + update[selector] = update[selector] || ""; + update[selector] += "" + spellpage.values[repid + "_name"] + ""; + } + }); + if(sourcelevel == "0") { + sections.push(cantripsection); + allowed = spellpage.values.newcantrips || 0; + } else { + update[cantripsection + " .sheet-spellstext .sheet-levels"] = ""; + for(var x=1; x <= 9; x++) { + var thissection = replist.find((y) => {return y.includes("_spell-holder-" + x)}); + allowed = spellpage.values.newspells; + allowedreplace = spellpage.values.replace; + if(thissection) { + perlevel[x + ""] = {number: 0, section: thissection, replaced: false}; + sections.push(thissection); + } + } + } + getRepeatingSections(replist.find((x) => {return x.includes("spellsrow")}), function(repeating) { + var toSet = {}; + var spellids = []; + var newspells = 0; + var replaced = 0; + _.each(repeating.tree, function(spells, levelrow) { + if(sections.includes(levelrow)) { + spellids = spellids.concat(_.keys(spells)); + } + }); + _.each(spellids, function(id) { + if(spellpage.values[id + "_checked"] && !spellpage.values[id + "_existing"]) { + newspells++; + if(perlevel[spellpage.values[id + "_level"]]) perlevel[spellpage.values[id + "_level"]].number++; + } + if(!spellpage.values[id + "_checked"] && spellpage.values[id + "_existing"]) { + replaced++; + if(perlevel[spellpage.values[id + "_level"]]) perlevel[spellpage.values[id + "_level"]].replaced = true; + } + }); + //now lock/unlock spells depending on if we've selected as many as we're allowed + _.each(spellids, function(id) { + if(!spellpage.values[id + "_checked"]) { + update[id + " .sheet-lock"] = newspells >= (allowed + replaced) ? "locked" : ""; + } else if(spellpage.values[id + "_checked"] && spellpage.values[id + "_existing"]) { + update[id + " .sheet-lock"] = allowedreplace <= replaced ? "locked" : ""; + } + }); + if(sourcelevel == "0") { + var known = (thispage != "lp-spellchoice" && spellpage.values.knowncantrips) ? spellpage.values.knowncantrips : 0; + update[cantripsection + " label .sheet-number"] = (known + newspells) + " / " + (known + allowed); + } else { + if(thispage != "lp-spellchoice") { + update[cantripsection + " .sheet-spellstext .sheet-total"] = newspells + " / " + (allowed + replaced) + " spells chosen."; + if(replaced > 0) { + update[cantripsection + " .sheet-spellstext .sheet-total"] += "
    (" + allowed + " new, " + replaced + " replaced)"; + } + if(allowedreplace > 0) { + update[cantripsection + " .sheet-replacetext .sheet-total"] = replaced + " / " + allowedreplace + " spells replaced."; + } + } + _.each(perlevel, function(info, level) { + if(thispage != "lp-spellchoice") update[cantripsection + " .sheet-spellstext .sheet-levels"] += "

    " + info.number + " Level " + level + " spells added.

    "; + update[info.section + " label .sheet-number"] = ""; + if(info.number > 0) update[info.section + " label .sheet-number"] = "+" + info.number; + if(info.replaced) { + showChoices([info.section + " .sheet-spellheader .sheet-title span"]); + } else { + hideChoices([info.section + " .sheet-spellheader .sheet-title span"]); + } + }); + } + setCharmancerText(update); + if(sourcelevel == "all") updateSpellSummary("0", mancerdata, thispage); + setCharmancerText({pagelock: "unlock"}) + }); + }; + + on("clicked:repeating_spell-item", function(eventinfo) { + if(eventinfo.sourceAttribute.indexOf("spell-item_info") === -1) return; + var mancerdata = getCharmancerData(); + changeCompendiumPage("sheet-spells-info", "Spells:" + mancerdata[eventinfo.currentStep].values[eventinfo.sourceSection + "_name"], "card_only"); + }); + + on("mancerchange:repeating_spellsrow", function(eventinfo) { + var mancerdata = getCharmancerData(); + if(eventinfo.sourceAttribute && _.last(eventinfo.sourceAttribute.split("_")) == "show") { + var update = {}; + update[eventinfo.sourceSection + " .sheet-controller"] = eventinfo.newValue || ""; + setCharmancerText(update); + } else { + updateSpellSummary(mancerdata[eventinfo.currentStep].values[eventinfo.sourceSection + "_level"], mancerdata, eventinfo.currentStep); + } + }); + + const resetASI = function(id) { + let reset = {}; + ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma', 'sanity']. + forEach(ability => { + reset[`repeating_${id}_asi-row_${ability}`] = 0; + }); + setAttrs(reset); + } + + const resetFeats = function(id, callback) { + let reset = {}; + reset[`repeating_${id}_asi-row_feat`] = ''; + setAttrs(reset, () => { + resetFeatDetails(id, callback); + }); + } + + const resetFeatDetails = function(id, callback) { + const details = [ + { name: `repeating_${id}_asi-row_feat_ability_choice` }, + { name: `repeating_${id}_asi-row_feat_language_choice#`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_language_choice#_custom`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_skill_choice#`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_weapon_choice#`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_armor_choice#`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_tool_choice#`, amount: 4 }, + { name: `repeating_${id}_asi-row_feat_expertise_choice_#`, amount: 2 }, + { name: `repeating_${id}_asi-row_feat_feature_choice_#`, amount: 3 }, + { name: `repeating_${id}_asi-row_other_options_and_features_choice#`, amount: 2 }, + { name: `repeating_${id}_asi-row_feat_spell_choice#`, amount: 4 } + ]; + let reset = {}; + details.forEach(entry => { + if(entry['amount']) { + for(let i=0; i {recalcLpData();}); + changeCompendiumPage("sheet-class-info", 'Rules:Feats'); + setAttrs({[`repeating_${id}_asi-row_switch`]:'feat'}, {silent: true}); + } else { + if(eventinfo.sourceType && eventinfo.sourceType === 'player') resetFeats(id, ()=> {recalcLpData();}); + changeCompendiumPage("sheet-class-info", 'Rules:Ability Scores'); + setAttrs({[`repeating_${id}_asi-row_switch`]:'asi'}, {silent: true}); + } + } else if(trigger === 'feat' && eventinfo.sourceType === 'woker') { + + } else if(globalAttributesByCategory.abilitiesWithAllOptionals.indexOf(trigger) > -1) { + updateAbilityLock(eventinfo.sourceSection); + //This will lock other ASI when leveling up multiple levels at once + //By Miguel + var repeatingData = getCharmancerData()['lp-asi'].repeating || []; + for(data in repeatingData) { + if(repeatingData[data].indexOf('_asi-row') > -1) { + updateAbilityLock(repeatingData[data]); + } + } + recalcLpData(); + } + }); + + on("mancerchange:repeating_asi-row_feat", eventinfo => { + const rowID = SheetUtils.getUID(eventinfo.sourceAttribute); + const rowClass = `sheet-repeating_${rowID}_asi-row`; + const rowName = `repeating_${rowID}_asi-row`; + + if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) { + showChoices([`${rowClass} .sheet-feat_options`]); + } + + getCompendiumPage(eventinfo.newValue, rowName, function(p) { + p = removeDuplicatedPageData(p); + let resetAndUpdate = {}; + /* + resetAndUpdate[`${rowName}_feat_ability_choice`] = ""; + resetAndUpdate[`${rowName}_other_options_and_features_choice1`] = ""; + resetAndUpdate[`${rowName}_other_options_and_features_choice2`] = ""; + resetAndUpdate[`${rowName}_feat_skill_choice1`] = ""; + resetAndUpdate[`${rowName}_feat_skill_choice2`] = ""; + resetAndUpdate[`${rowName}_feat_skill_choice3`] = ""; + resetAndUpdate[`${rowName}_feat_skill_choice4`] = ""; + */ + resetAndUpdate[`${rowName}_feat_data`] = JSON.stringify(p.data); + + const hideList = [ + `${rowClass} .sheet-feat_ability`, + `${rowClass} .sheet-feat_ability_choice`, + `${rowClass} .sheet-other_options_and_features_choice1`, + `${rowClass} .sheet-other_options_and_features_choice1`, + `${rowClass} .sheet-feat_skill_row`, + `${rowClass} .sheet-feat_skill_choice1`, + `${rowClass} .sheet-feat_skill_choice2`, + `${rowClass} .sheet-feat_skill_choice3`, + `${rowClass} .sheet-feat_skill_choice4`, + `${rowClass} .sheet-feat_expertise_row`, + `${rowClass} .sheet-feat_expertise_choice_1`, + `${rowClass} .sheet-feat_expertise_choice_2`, + `${rowClass} .sheet-feat_prereq`, + `${rowClass} .sheet-feat_spell_choice1`, + `${rowClass} .sheet-feat_spell_choice2`, + `${rowClass} .sheet-feat_spell_choice3`, + `${rowClass} .sheet-feat_spell_choice4`, + ]; + hideChoices(hideList); + setCharmancerText({[`${rowClass} .sheet-feat_text`]: ""}); + + setAttrs(resetAndUpdate, function() { + var data = p["data"]; + var showList = []; + var update = {}; + + if(data["data-Ability Score Increase"]) { + var abilityText = []; + var json = JSON.parse(data["data-Ability Score Increase"]); + _.each(json, function(increase, ability) { + abilityText.push(ability + " +" + increase); + }); + update[`${rowClass} .sheet-feat_ability_score`] = abilityText.join(", "); + showList.push(`${rowClass} .sheet-feat_ability`); + } + + if(data["data-Ability Score Choice"]) { + var json = JSON.parse(data["data-Ability Score Choice"]); + const name = `repeating_${rowID}_asi-row_feat_ability_choice` + setCharmancerOptions(name, json); + showList.push(`${rowClass} .sheet-feat_ability`, `${rowClass} .sheet-feat_ability_choice`); + } + + if(data["Prerequisite"]) { + showList.push(`${rowClass} .sheet-feat_prereq`) + update[`${rowClass} .sheet-feat_prerequisite`] = data["Prerequisite"]; + } + + if(data["Other Options and Features"]) { + const otherFeatures = JSON.parse(data["Other Options and Features"]); + if(otherFeatures['Choice'] && Array.isArray(otherFeatures['Choice'])) { + for(let i=0; i 0) setCharmancerText(update); + if(eventinfo.sourceType && eventinfo.sourceType === 'player') { + resetFeatDetails(rowID, ()=> { + if(showList.length > 0) showChoices(showList); + recalcLpData(); + }); + } else { + if(showList.length > 0) showChoices(showList); + recalcLpData(); + } + }); + }); + + changeCompendiumPage("sheet-class-info", eventinfo.newValue); + }); + + on("mancerchange:repeating_asi-row_feat_ability_choice", eventinfo => { + recalcLpData(); + }); + + on("clicked:repeating_asi-row", function(eventinfo) { + var mancerdata = getCharmancerData(); + var thischange = eventinfo.sourceAttribute.substr(0, eventinfo.sourceAttribute.length - 2); + var currentvalue = mancerdata["lp-asi"].values[thischange] ? parseInt(mancerdata["lp-asi"].values[thischange]) : 0; + var totalincrease = 0; + var update = {}; + var lockinfo = {}; + _.each(abilityList, function(ability) { + var thisincrease = mancerdata["lp-asi"].values[eventinfo.sourceSection + "_" + ability.toLowerCase()] || 0; + totalincrease += parseInt(thisincrease); + }); + if(_.last(eventinfo.sourceAttribute) == "u" && totalincrease < 2 && currentvalue < 2) { + update[thischange] = currentvalue + 1; + mancerdata["lp-asi"].values[thischange] = currentvalue + 1; + } else if(_.last(eventinfo.sourceAttribute) == "d" && currentvalue > 0) { + update[thischange] = currentvalue - 1; + mancerdata["lp-asi"].values[thischange] = currentvalue - 1; + } + setAttrs(update, function() { + recalcLpData(); + }); + }); + + var updateAbilityLock = function(sourceSection, mancerdata) { + mancerdata = mancerdata || getCharmancerData(); + var abilities = getAbilityTotals(mancerdata); + var totalincrease = 0; + var update = {}; + //First, get the total increase for this section + _.each(abilityList, function(ability) { + var thisincrease = mancerdata["lp-asi"].values[sourceSection + "_" + ability.toLowerCase()] || 0; + totalincrease += parseInt(thisincrease); + }); + //Then, figure out what to lock (based on increase) + _.each(abilityList, function(ability) { + var thisincrease = mancerdata["lp-asi"].values[sourceSection + "_" + ability.toLowerCase()] || 0; + update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-down"] = thisincrease > 0 ? "" : "lock"; + update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-up"] = thisincrease < 2 && totalincrease < 2 ? "" : "lock"; + }); + //Now, figure out if any stats are maxed out + _.each(abilityList, function(ability) { + if(abilities[ability.toLowerCase()] >= abilities[ability.toLowerCase() + "_maximum"]) { + update[sourceSection + " .sheet-" + ability.toLowerCase() + "_lock-up"] = "lock"; + }; + }); + setCharmancerText(update); + }; + + on("page:lp-summary", function() { + var mancerdata = getCharmancerData(); + var abilities = getAbilityTotals(mancerdata); + var previous = mancerdata["lp-welcome"].values["previous_attributes"] ? JSON.parse(mancerdata["lp-welcome"].values["previous_attributes"]) : {}; + var spelldata = mancerdata["lp-welcome"].values["spellinfo"] ? JSON.parse(mancerdata["lp-welcome"].values["spellinfo"]) : {}; + var lcAbilities = SheetUtils.toLowerCase(abilityList); + var update = {}; + update["before div"] = "

    Class: "; + if(previous.subclass) update["before div"] += previous.subclass + " "; + update["before div"] += previous.class + " " + previous.base_level; + for(var x=1; x<=3; x++) { + if(previous["multiclass" + x + "_flag"] != "0") { + update["before div"] += ", " + previous["multiclass" + x] + " " + previous["multiclass" + x + "_lvl"]; + } + }; + update["before div"] += "

    "; + update["before div"] += "

    Hit Points: " + previous.hp_max + "

    "; + update["before div"] += "
    "; + _.each(lcAbilities, function(ability) { + update["before div"] += "
    "; + update["before div"] += "" + abilities[ability + "_previous"] + " "; + update["before div"] += "("; + update["before div"] += abilities[ability + "_previous_mod"] >= 0 ? "+" + abilities[ability + "_previous_mod"] : abilities[ability + "_previous_mod"]; + update["before div"] += ")
    "; + }); + update["before div"] += "
    "; + update["after div"] = "

    Class: "; + for(var x=1; x<=4; x++) { + if(mancerdata["lp-levels"].values["class" + x]) { + if(x !== 1) update["after div"] += ", " + if(mancerdata["lp-levels"].values["class" + x + "_subclass"]) { + if((x == 1 && !previous.subclass) || (x != 1 && previous["multiclass" + x + "_flag"] != "0" && !previous["multiclass" + x + "_subclass"])) { + update["after div"] += ""; + } else { + update["after div"] += ""; + } + update["after div"] += removeExpansionInfo(mancerdata["lp-levels"].values["class" + x + "_subclass"].split(":")[1]) + " "; + } + if(x != 1 && previous["multiclass" + x + "_flag"] != "0" && !previous["multiclass" + x + "_subclass"]) { + update["after div"] += ""; + } else { + update["after div"] += ""; + } + update["after div"] += removeExpansionInfo(mancerdata["lp-levels"].values["class" + x].split(":")[1]) + " "; + if(mancerdata["lp-levels"].values["class" + x + "_addlevel"]) { + update["after div"] += ""; + } else { + update["after div"] += ""; + } + var prevlevel = 0; + if(x == 1) { + prevlevel = parseInt(previous["base_level"]); + } else { + prevlevel = previous["multiclass" + x + "_flag"] == "0" ? 0 : parseInt(previous["multiclass" + x + "_lvl"]) + } + update["after div"] += (prevlevel + parseInt(mancerdata["lp-levels"].values["class" + x + "_addlevel"])) + " "; + } + }; + update["after div"] += "

    "; + update["after div"] += "

    Hit Points: " + getHpTotal(mancerdata) + "

    "; + update["after div"] += "
    "; + _.each(lcAbilities, function(ability) { + update["after div"] += abilities[ability] == abilities[ability + "_previous"] ? "
    " : "
    " + update["after div"] += "
    "; + update["after div"] += abilities[ability] == abilities[ability + "_previous"] ? "" : ""; + update["after div"] += abilities[ability] + " ("; + update["after div"] += abilities[ability + "_mod"] == abilities[ability + "_previous_mod"] ? "" : ""; + update["after div"] += abilities[ability + "_mod"] >= 0 ? "+" + abilities[ability + "_mod"] : abilities[ability + "_mod"]; + update["after div"] += ")
    "; + }); + update["after div"] += "
    "; + //Feats + const getLPFeats = (data) => { + const feats = []; + if(!SheetUtils.checkPath(data, "['lp-asi']['values']")) return feats; + else { + Object.keys(data['lp-asi']['values']).forEach(value => { + if(value.indexOf('asi-row_switch') && data['lp-asi']['values'][value] === 'feat') { + const rowID = SheetUtils.getUID(value); + feats.push(data['lp-asi']['values'][`repeating_${rowID}_asi-row_feat`].replace(/Feats:/g, '')); + } + }); + return feats; + } + } + const noFeatsMsg = '

    As you exchange your novice notions of the world for experience, a feat may become within reach. Not today, however.

    '; + const feats = getLPFeats(mancerdata); + update["feat_info"] = (feats.length > 0) ? `

    You've selected ${feats.join(', ')}` : noFeatsMsg; + //Spells + let selectedSpells = getGainedSpells(); + update["spell_info"] = "

    You haven't gained any spells

    "; + if(selectedSpells.length > 0) update["spell_info"] = '

    You have learnt these spells: '+ selectedSpells.sort().join(", ") +'

    '; + + let gainedFeatures = getGainedFeatures(); + update["feature_info"] = (gainedFeatures.length > 0) ? '

    You have gained these class features: '+ gainedFeatures.sort().join(", ") +'

    ' : + "You haven't gained any class features."; + + setCharmancerText(update); + showChoices(["apply_changes"]); + }); + + on("clicked:lp-choices_next", function(eventinfo) { + const mancerdata = getCharmancerData(); + if(mancerdata["lp-levels"].values.asi === "true") { + changeCharmancerPage("lp-asi"); + } else if(mancerdata["lp-levels"].values.spells === "true") { + changeCharmancerPage("lp-spells"); + } else { + changeCharmancerPage("lp-summary"); + } + }); + on("clicked:lp-asi_next", function(eventinfo) { + const mancerdata = getCharmancerData(); + if(mancerdata["lp-levels"].values.spells === "true") { + changeCharmancerPage("lp-spells"); + } else { + changeCharmancerPage("lp-summary"); + } + }); + on("clicked:lp-spells_back", function(eventinfo) { + const mancerdata = getCharmancerData(); + if(mancerdata["lp-levels"].values.asi === "true") { + changeCharmancerPage("lp-asi"); + } else { + changeCharmancerPage("lp-choices"); + } + }); + on("clicked:lp-summary_back", function(eventinfo) { + const mancerdata = getCharmancerData(); + if(mancerdata["lp-levels"].values.spells === "true") { + changeCharmancerPage("lp-spells"); + } else if(mancerdata["lp-levels"].values.asi === "true") { + changeCharmancerPage("lp-asi"); + } else { + changeCharmancerPage("lp-choices"); + } + }); + + //Fixing Bard's Magical Secrets (UC-10) + //By Miguel + //The ways this was being handled before, binded to clicked:repeating_utilityrow_launch, was not being triggered due to the way the DOM is built. + on("clicked:repeating_utilityrow", function(eventinfo) { + if(eventinfo.triggerName.indexOf('utilityrow_launch') === -1) return; + const mancerdata = getCharmancerData(); + var querysettings = {}; + var spelldata = getKnownLpSpells(mancerdata); + var leveldata = _.findWhere(getLevelingData(mancerdata), {classnumber: parseInt(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_parent`][5])}); + var query = ""; + let newspells = 0; + let newcantrips = 0; + var spellnames = []; + var current = []; + var locked = []; + var update = {}; + update[`${eventinfo.sourceSection} .sheet-warning`] = ""; + try { + querysettings = JSON.parse(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]); + } catch(e) { + querysettings = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]; + }; + if(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`]) current = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`].split(", "); + if(mancerdata["lp-spells"] && mancerdata["lp-spells"].repeating) { + _.each(mancerdata["lp-spells"].repeating, function(repid) { + if(mancerdata["lp-spells"].values[`${repid}_checked`]) { + spelldata[mancerdata["lp-spells"].values[`${repid}_name`]] = { + level: mancerdata["lp-spells"].values[`${repid}_level`], + spellclass: mancerdata["lp-spells"].values[`${repid}_class`] + } + } + }); + } + _.each(current, function(currentspell) { + delete spelldata[currentspell]; + }) + if(querysettings.Known) { + if(querysettings.Level + "" === "0") { + newcantrips = 1; + } else { + newspells = 1; + } + _.each(spelldata, function(spell, spellname) { + if(!querysettings.Level || (querysettings.Level && querysettings.Level == spell.level)) spellnames.push(spellname); + }); + if(spellnames.length > 0) { + query = "Category:Powers Name:" + spellnames.join("|"); + } else { + update[`${eventinfo.sourceSection} .sheet-warning`] = `You do not currently know any level ${querysettings.Level} spells.`; + setCharmancerText(update); + } + } else { + query = "Category:Powers"; + if(querysettings.Level) { + let levels = [querysettings.Level]; + if(querysettings.Level == "max") { + levels = []; + for(let x=1; x<=leveldata.maxspell; x++) { + levels.push(x); + } + } + query += " Level:" + levels.join("|"); + }; + if(querysettings.List && querysettings.List.toLowerCase() !== "any") { + query += " Classes:*" + querysettings.List; + }; + if(querysettings.Level + "" === "0") { + newcantrips = querysettings.Number ? parseInt(querysettings.Number) : 1; + } else { + newspells = querysettings.Number ? parseInt(querysettings.Number) : 1; + } + locked = _.keys(spelldata); + } + if(query) { + setCharmancerText(update); + changeCharmancerPage("lp-spellchoice", function() { + getCompendiumQuery([query], function(data) { + data = removeDuplicatedPageData(data); + let byLevel = {}; + let filters = {}; + let filtered = []; + let toSet = {}; + let update = {}; + update["instructions"] = querysettings.HelpText; + _.each(querysettings, function(setting, key) { + if(!["Level","List","Number","Type","ButtonText","HelpText", "Known", "Class"].includes(key)) { + filters[key] = setting; + } + }); + if(querysettings.Known) { + delete querysettings.Level; + } + delete querysettings.Known; + _.each(data, function(spell) { + let match = true; + _.each(filters, function(value, name) { + if(spell.data[name] !== value) match = false; + }) + if(match) filtered.push(spell); + }); + _.each(filtered, function(spell) { + if(spell.data.Classes) { + byLevel[spell.data.Level] = byLevel[spell.data.Level] || []; + byLevel[spell.data.Level].push({ + name: spell.name, + classes: spell.data.Classes.split(",").map(x => x.trim()), + level: parseInt(spell.data.Level) + }); + } + }); + toSet.newspells = newspells; + toSet.newcantrips = newcantrips; + toSet.valid = "now"; + toSet.source = eventinfo.sourceSection; + setCharmancerText(update); + setAttrs(toSet, function() { + addSpellSections(byLevel, { + newcantrips: newcantrips, + newspells: newspells, + page: "lp-spellchoice", + selected: current, + locked: locked + }); + }); + }); + });/**/ + } + }); + + //TODO: Investigate if the duplicated event below listener can be removed + //By Miguel + on("clicked:repeating_utilityrow_launch", function(eventinfo) { + const mancerdata = getCharmancerData(); + var querysettings = {}; + var spelldata = getKnownLpSpells(mancerdata); + var leveldata = _.findWhere(getLevelingData(mancerdata), {classnumber: parseInt(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_parent`][5])}); + var query = ""; + let newspells = 0; + let newcantrips = 0; + var spellnames = []; + var current = []; + var locked = []; + var update = {}; + update[`${eventinfo.sourceSection} .sheet-warning`] = ""; + try { + querysettings = JSON.parse(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]); + } catch(e) { + querysettings = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_info`]; + }; + if(mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`]) current = mancerdata["lp-choices"].values[`${eventinfo.sourceSection}_result`].split(", "); + if(mancerdata["lp-spells"] && mancerdata["lp-spells"].repeating) { + _.each(mancerdata["lp-spells"].repeating, function(repid) { + if(mancerdata["lp-spells"].values[`${repid}_checked`]) { + spelldata[mancerdata["lp-spells"].values[`${repid}_name`]] = { + level: mancerdata["lp-spells"].values[`${repid}_level`], + spellclass: mancerdata["lp-spells"].values[`${repid}_class`] + } + } + }); + } + _.each(current, function(currentspell) { + delete spelldata[currentspell]; + }) + if(querysettings.Known) { + if(querysettings.Level + "" === "0") { + newcantrips = 1; + } else { + newspells = 1; + } + _.each(spelldata, function(spell, spellname) { + if(!querysettings.Level || (querysettings.Level && querysettings.Level == spell.level)) spellnames.push(spellname); + }); + if(spellnames.length > 0) { + query = "Category:Powers Name:" + spellnames.join("|"); + } else { + update[`${eventinfo.sourceSection} .sheet-warning`] = `You do not currently know any level ${querysettings.Level} spells.`; + setCharmancerText(update); + } + } else { + query = "Category:Powers"; + if(querysettings.Level) { + let levels = [querysettings.Level]; + if(querysettings.Level == "max") { + levels = []; + for(let x=1; x<=leveldata.maxspell; x++) { + levels.push(x); + } + } + query += " Level:" + levels.join("|"); + }; + if(querysettings.List && querysettings.List.toLowerCase() !== "any") { + query += " Classes:*" + querysettings.List; + }; + if(querysettings.Level + "" === "0") { + newcantrips = querysettings.Number ? parseInt(querysettings.Number) : 1; + } else { + newspells = querysettings.Number ? parseInt(querysettings.Number) : 1; + } + locked = _.keys(spelldata); + } + if(query) { + setCharmancerText(update); + changeCharmancerPage("lp-spellchoice", function() { + getCompendiumQuery([query], function(data) { + data = removeDuplicatedPageData(data); + let byLevel = {}; + let filters = {}; + let filtered = []; + let toSet = {}; + let update = {}; + update["instructions"] = querysettings.HelpText; + _.each(querysettings, function(setting, key) { + if(!["Level","List","Number","Type","ButtonText","HelpText", "Known", "Class"].includes(key)) { + filters[key] = setting; + } + }); + if(querysettings.Known) { + delete querysettings.Level; + } + delete querysettings.Known; + _.each(data, function(spell) { + let match = true; + _.each(filters, function(value, name) { + if(spell.data[name] !== value) match = false; + }) + if(match) filtered.push(spell); + }); + _.each(filtered, function(spell) { + if(spell.data.Classes) { + byLevel[spell.data.Level] = byLevel[spell.data.Level] || []; + byLevel[spell.data.Level].push({ + name: spell.name, + classes: spell.data.Classes.split(",").map(x => x.trim()), + level: parseInt(spell.data.Level) + }); + } + }); + toSet.newspells = newspells; + toSet.newcantrips = newcantrips; + toSet.valid = "now"; + toSet.source = eventinfo.sourceSection; + setCharmancerText(update); + setAttrs(toSet, function() { + addSpellSections(byLevel, { + newcantrips: newcantrips, + newspells: newspells, + page: "lp-spellchoice", + selected: current, + locked: locked + }); + }); + }); + });/**/ + } + }); + + on("page:lp-spellchoice", function() { + const mancerdata = getCharmancerData(); + if(mancerdata["lp-spellchoice"] && mancerdata["lp-spellchoice"].values.valid === "now") { + changeCharmancerPage("lp-choices", function() { + deleteCharmancerData(["lp-spellchoice"]); + }); + } + }); + + on("mancerchange:repeating_utilityrow_result", function(eventinfo) { + if(eventinfo.sourceSection) { + const mancerdata = getCharmancerData(); + let update = {}; + update[`${eventinfo.sourceSection} label span .sheet-result`] = eventinfo.newValue; + setCharmancerText(update); + } + }); + + on("clicked:lp-spellchoice_back", function(eventinfo) { + const mancerdata = getCharmancerData(); + const leveldata = getLevelingData(mancerdata); + let result = []; + let source = mancerdata["lp-spellchoice"].values.source; + let newspells = false; + let spellsettings = {}; + if(mancerdata["lp-choices"].values[`${source}_info`]) { + spellsettings = JSON.parse(mancerdata["lp-choices"].values[`${source}_info`]); + } + _.each(mancerdata["lp-spellchoice"].repeating, function(repid) { + if(mancerdata["lp-spellchoice"].values[`${repid}_checked`] && !mancerdata["lp-spellchoice"].values[`${repid}_existing`]) result.push(mancerdata["lp-spellchoice"].values[`${repid}_name`]); + }); + if(mancerdata["lp-choices"].values[`${source}_type`] !== "trait") { + const thisclass = _.findWhere(leveldata, {classnumber: parseInt(mancerdata["lp-choices"].values[`${source}_parent`][5])}); + newspells = {} + _.each(mancerdata["lp-spellchoice"].repeating, function(repid) { + if(mancerdata["lp-spellchoice"].values[`${repid}_checked`] && !mancerdata["lp-spellchoice"].values[`${repid}_existing`]) { + let thisspell = { + ability: thisclass.spellcasting, + spellclass: thisclass.classname, + level: mancerdata["lp-spellchoice"].values[`${repid}_level`] === "0" ? "cantrip" : mancerdata["lp-spellchoice"].values[`${repid}_level`] + } + if(spellsettings.Type) thisspell.known = spellsettings.Type; + newspells[mancerdata["lp-spellchoice"].values[`${repid}_name`]] = thisspell; + } + }); + } + changeCharmancerPage("lp-choices", function() { + deleteCharmancerData(["lp-spellchoice"]); + let set = {}; + set[`${source}_result`] = result.join(", "); + if(newspells) set[`${source}_spells`] = JSON.stringify(newspells); + setAttrs(set); + }); + }); + + on("mancerfinish:lp-mancer", function(eventinfo) { + console.log("****************************************"); + console.log("****** STARTING FINISH FUNCTION ******"); + console.log("****************************************"); + var doAllDrops = function(dropArray, callback) { + getAttrs(["character_id"], function(v) { + _.each(allAbilities, function(ability) { + v[ability + "_base"] = abilities[ability]; + v[ability + "_mod"] = abilities[ability]; + }); + v.base_level = set["base_level"]; + v["multiclass1_lvl"] = initial["multiclass1_lvl"]; + v["multiclass2_lvl"] = initial["multiclass2_lvl"]; + v["multiclass3_lvl"] = initial["multiclass3_lvl"]; + v.npc = "0"; + v["class_resource_name"] = previous["class_resource_name"]; + v["other_resource_name"] = previous["other_resource_name"]; + v.speed = previous.speed; + var update = {}; + var callbacks = []; + var totalDrops = dropArray.length; + var x = 0; + callbacks.push(set_level); + callbacks.push(update_race_display); + _.each(dropArray, function(page) { + page.data.Category = page.data.Category ? page.data.Category.replace("@@!!@@", "") : ""; + var dropUpdate = processDrop(page, v, repeating, true); + callbacks = callbacks.concat(dropUpdate.callbacks); + repeating.prof_names = _.uniq(repeating.prof_names.concat(dropUpdate.prof_names)); + update = _.extend(update, dropUpdate.update); + x++; + setCharmancerText({"mancer_progress" :'
    '}); + }); + + callbacks.push( function() {update_ac();} ); + callbacks.push( function() {update_weight();} ); + callbacks.push(callback); + setAttrs(update, {silent: true}, function() { + setCharmancerText({"mancer_progress" :'
    '}); + _.each(callbacks, function(callback) { + callback(); + }); + }); + }); + }; + var getOtherDrops = function(pagedata) { + var results = []; + if(pagedata["data-Equipment"]) { + var json = {}; + try { + json = JSON.parse(pagedata["data-Equipment"]); + } catch(e) { + json = pagedata["data-Equipment"]; + } + var newItems = makeItemData(json.default); + results = results.concat(newItems); + } + if(pagedata["data-Bundle"]) { + var json = {}; + try { + json = JSON.parse(pagedata["data-Bundle"]); + } catch(e) { + json = pagedata["data-Bundle"]; + } + var newItems = makeItemData(json); + results = results.concat(newItems); + } + return results; + }; + var getAllPages = function(pageArray, callback) { + if(pageArray.length < 1) { + callback(); + return; + } + var getNames = []; + _.each(pageArray, function(page){ + if(page.name) { + getNames.push(page.name); + } else { + getNames.push(page); + } + }); + getCompendiumPage(getNames, function(data) { + data = removeDuplicatedPageData(data); + var nextGet = []; + if (getNames.length === 1) { data = {0:data} }; //Fix single spell selections failing. + _.each(data, function(page, index) { + var pagedata = false; + _.each(pageArray, function(arrayData) { + if(arrayData.name.toLowerCase() == (page.data.Category + ":" + page.name).toLowerCase()) { + pagedata = arrayData; + } + }); + if(pagedata && pagedata.data) { + page.data = _.extend(page.data, pagedata.data); + } + if(!page.id) page.data.Source = "Charactermancer"; + page.name = page.name.replace(/@@!!@@/g,""); // Hacky bugfix to prevent custom names from matching unavailable content + nextGet = nextGet.concat(getOtherDrops(page.data)); + if(page.data["data-Starting Gold"] && !noEquipmentDrop) { + set["gp"] += parseInt(page.data["data-Starting Gold"]); + } + allPageData.push(page); + }); + + if(nextGet.length > 0) { + getAllPages(nextGet, callback); + } else { + callback(); + } + + }); + }; + var getRemovableSwaps = function() { + if(!SheetUtils.checkPath(data, "['lp-welcome']['values']['previous_repeating']")) return []; + if(!SheetUtils.checkPath(data, "['lp-choices']['values']")) return []; + const previousRepeating = JSON.parse(data['lp-welcome']['values']['previous_repeating']); + if(!previousRepeating['traits']) return []; + const swaps = Object.keys(data['lp-choices']['values']).filter(entry => { return entry.indexOf('_feature_swap') > -1; }); + let removableSwaps = [] + for(let i=0; i { return entry.name === swapTitle;}).map(entry => { return `repeating_traits_${entry.id}`}); + removableSwaps = removableSwaps.concat(sectionsToRemove); + } + } + return removableSwaps; + }; + var startTime = Date.now(); + var allPageData = []; + var data = getCharmancerData();//eventinfo.data; + var blobs = getAllLpBlobs(data, true); + var leveldata = getLevelingData(data); + var racedata = getLpRaceData(data, leveldata); + var abilities = getAbilityTotals(data, blobs); + var previous = data["lp-welcome"].values["previous_attributes"] ? JSON.parse(data["lp-welcome"].values["previous_attributes"]) : {}; + var repeating = data["lp-welcome"].values["previous_repeating"] ? JSON.parse(data["lp-welcome"].values["previous_repeating"]) : {}; + var spelldata = data["lp-welcome"].values["spellinfo"] ? JSON.parse(data["lp-welcome"].values["spellinfo"]) : {}; + var customtraits = {race: [], subrace: [], class: [], subclass: [], background: []}; + var profs = getProficiencies(data, "lp-finish", blobs); + var removesections = []; + var loudset = {}; + var set = {}; + var initial = {}; + var allDrops = []; + var currentDrop = 0; + var totalDrops = 1; + var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]; + var allAbilities = SheetUtils.toLowerCase(abilityList); + set["lp-mancer_status"] = ""; + // Build new blobs for traits with inputs, collect custom traits and languages + _.each(["lp-choices", "lp-asi"], function(pagename) { + var slide = data[pagename]; + if(slide) { + _.each(slide.values, function(value, name) { + if(name.substr(-11) == "trait_input") { + let sectionid = name.substring(0, name.length - 6); + let thisblob = {}; + let thistrait = {}; + let classnumber = _.last(slide.values[sectionid + "_section"].split("--")[0].split("-")); + let sectionname = "class" + classnumber; + if(slide.values[sectionid + "_section"].includes("subclass")) sectionname += "_subclass"; + let thissection = _.findWhere(leveldata, {classnumber: parseInt(classnumber)}); + thistrait.Name = slide.values[sectionid + "_name"].replace(/{{Input}}/g, value); + thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"].replace(/{{Input}}/g, value) : ""; + thisblob.Traits = JSON.stringify([thistrait]); + blobs.names[sectionname].push(sectionid); + thissection[slide.values[sectionid + "_section"].includes("subclass") ? "subclass" : "class"].blobs[sectionid] = thisblob; + } + if(name.split("_")[2] == "custom" && name.substr(-10) == "trait_name") { + var sectionid = name.substring(0, name.length - 5); + var thistrait = {}; + thistrait.Name = slide.values[sectionid + "_name"]; + thistrait.Desc = slide.values[sectionid + "_desc"] ? slide.values[sectionid + "_desc"] : ""; + customtraits[name.split("_")[3]].push(thistrait); + } + if(value == "custom" && name.substr(-18) == "proficiency_choice") { + var sectionid = name.substring(0, name.length - 7); + if(slide.values[sectionid + "_custom"] && slide.values[sectionid + "_type"]) { + profs.all[slide.values[sectionid + "_type"]].push(slide.values[sectionid + "_custom"]) + } + } + if(name.substr(-17) === "utilityrow_result") { + let sectionid = name.substring(0, name.length - 7); + let thissection = _.findWhere(leveldata, {classnumber: parseInt(slide.values[sectionid + "_parent"][5])}); + let section = slide.values[sectionid + "_parent"].includes("subclass") ? "subclass" : "class"; + if(thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits) thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits = thissection[section].blobs[slide.values[sectionid + "_blob"]].Traits.replace(/{{Input}}/g, value); + } + }); + } + }); + _.each(leveldata, function(level) { + var name = "class" + level.classnumber; + var mc = "multiclass" + (level.classnumber - 1); + var thisclass = {name: removeExpansionInfo(level.classname), data: level.class}; + //if this is an mc class, add mc data + if(name != "class1") thisclass.data.multiclass = mc; + thisclass.data.theseblobs = blobs.names[name]; + allPageData.push(thisclass); + if(level.subclass) { + var thissubclass = {name: removeExpansionInfo(level.subclassname), data: level.subclass}; + //if this is an mc subclass, add mc data + if(name != "class1") thissubclass.data.multiclass = mc; + thissubclass.data.theseblobs = blobs.names[name + "_subclass"]; + allPageData.push(thissubclass); + } + //set up the setAttrs for this class + if(name === "class1") { + set["base_level"] = parseInt(previous["base_level"]) + level.addlevel; + } else { + initial[mc + "_lvl"] = previous[mc + "_flag"] === "0" ? level.addlevel : parseInt(previous[mc + "_lvl"]) + level.addlevel; + } + }); + _.each(racedata, function(level, label) { + _.each(["", "sub"], function(prefix) { + let section = prefix + label; + if(previous[section] && blobs.names[section] && blobs.names[section].length > 0) { + let thisDrop = {name: previous[section], data: {Category: section[0].toUpperCase() + section.substring(1, section.length) + "s"}}; + thisDrop.data.blobs = data["lp-welcome"].data["lp-" + section].blobs; + thisDrop.data.theseblobs = blobs.names[section]; + allPageData.push(thisDrop); + } + }); + }); + //Set up proficiency drops + _.each(["Armor", "Language", "Tool", "Weapon"], function(proftype) { + _.each(profs.all[proftype], function(prof) { + if(prof) { + var profdata = {name: "Proficiencies:" + prof, data: {Type: proftype}} + if(profs.all.Expertise.includes(prof)) { + profdata.data["toolbonus_base"] = "(@{pb}*2)"; + allDrops.unshift(profdata); + } else { + allDrops.push(profdata); + } + }; + }); + }); + //Set up expertise drops + _.each(_.uniq(profs.all.Skill.concat(profs.all.Expertise)), function(prof) { + var profName = prof.toLowerCase().replace(/ /g, "_"); + initial[profName + "_prof"] = "(@{pb}*@{" + profName + "_type})"; + if(profs.all.Expertise.indexOf(prof) != -1) { + set[profName + "_type"] = 2; + } + }); + //Setup feat drops + const getLPFeats = () => { + if(!SheetUtils.checkPath(data, "['lp-asi']['values']")) return 0; + else { + var feats = {}; + let featSelected = false; + Object.keys(data['lp-asi']['values']).forEach(value => { + if(value.indexOf('asi-row_switch') > -1 && data['lp-asi']['values'][value] === 'feat') { + const rowID = SheetUtils.getUID(value); + const feat = { + name: data['lp-asi']['values'][`repeating_${rowID}_asi-row_feat`], + data: {Properties: data['lp-asi']['values'][`repeating_${rowID}_asi-row_source`]} + }; + feats[rowID] = feat; + featSelected = true; + } + }); + if(featSelected) { + const otherOptionsAndFeatures = Object.keys(data['lp-asi']['values']).filter(entry => { return entry.includes('other_options_and_features'); }); + otherOptionsAndFeatures.forEach(feature => { + if(data['lp-asi']['values'][feature]) { + const featureData = {name: data['lp-asi']['values'][feature], data: {Properties: "1st Level"}}; + allDrops.push(featureData); + } + }); + + const skills = Object.keys(data['lp-asi']['values']).filter(entry => { return entry.includes('feat_skill_choice'); }); + skills.forEach(skill => { + if(data['lp-asi']['values'][skill]) { + const skillData = {name: data['lp-asi']['values'][skill], data: {Properties: "1st Level"}}; + allDrops.push(skillData); + } + }); + + const expertise = Object.keys(data['lp-asi']['values']).filter(entry => { return entry.includes('feat_expertise_choice'); }); + expertise.forEach(skill => { + if(data['lp-asi']['values'][skill]) { + const expertiseData = {name: data['lp-asi']['values'][skill], data: {Properties: "1st Level"}}; + allDrops.push(expertiseData); + } + }); + + const spells = Object.keys(data['lp-asi']['values']).filter(entry => { return entry.includes('feat_spell_choice'); }); + let i = 0; + spells.forEach(spell => { + if(data['lp-asi']['values'][spell]) { + const spellData = {name: removeExpansionInfo(data['lp-asi']['values'][spell]), data: {Properties: "1st Level"}}; + const rowID = SheetUtils.getUID(spell); + if (SheetUtils.checkPath(data, "['lp-asi']['data']") && data['lp-asi']['data'][`repeating_${rowID}_asi-row_feat`] && data['lp-asi']['data'][`repeating_${rowID}_asi-row_feat`]['data-Pick Spells']) { + const pickData = JSON.parse(data['lp-asi']['data'][`repeating_${rowID}_asi-row_feat`]['data-Pick Spells'])[i]; + if(pickData['Spellcasting Ability']) { + let spellcastingAbility = pickData['Spellcasting Ability'].toLowerCase(); + if(spellcastingAbility === 'asi') { + let asiKey = (SheetUtils.checkPath(data, "['lp-asi']['values']") && data['lp-asi']['values'][`repeating_${rowID}_asi-row_feat_ability_choice`]) ? data['lp-asi']['values'][`repeating_${rowID}_asi-row_feat_ability_choice`] : false; + if(asiKey) { + spellcastingAbility = asiKey.toLowerCase(); + } + } + spellData.data['Spellcasting Ability'] = spellcastingAbility; + } + if(pickData['Innate']) { + spellData.data['Innate'] = pickData['Innate']; + } + } + allDrops.push(spellData); + i++; + } + }); + } + return feats; + } + } + const feats = getLPFeats(); + Object.keys(feats).forEach(feat => { + allDrops.push(feats[feat]); + }); + //Set up Ability scores + initial["hp"] = getHpTotal(data, blobs); + initial["hp_max"] = initial["hp"]; + _.each(allAbilities, function(ability) { + loudset[ability + "_base"] = abilities[ability]; + loudset[ability + "_maximum"] = abilities[ability + "_maximum"]; + }); + //Set up spell drops + if(data["lp-spells"] && data["lp-spells"].repeating) { + _.each(data["lp-spells"].repeating, function(repid) { + if(data["lp-spells"].values[repid + "_checked"]) { + var spelldata = {name: "Spells:" + data["lp-spells"].values[repid + "_name"], data: {}}; + if(data["lp-spells"].values[repid + "_ability"]) spelldata.data["spellcasting_ability"] = data["lp-spells"].values[repid + "_ability"]; + if(data["lp-spells"].values[repid + "_class"]) spelldata.data["spellclass"] = data["lp-spells"].values[repid + "_class"]; + if(data["lp-spells"].values[repid + "_source"]) spelldata.data["spellsource"] = data["lp-spells"].values[repid + "_source"]; + allDrops.push(spelldata); + } + if(data["lp-spells"].values[repid + "_existing"] && !data["lp-spells"].values[repid + "_checked"]) { + var lvl = data["lp-spells"].values[repid + "_level"]; + var id = ""; + _.each(repeating["spell-" + lvl], function(spell, spellid) { + if(spell.spellname.toLowerCase() == data["lp-spells"].values[repid + "_name"].toLowerCase()) { + id = spellid; + if(spell.spellattackid) removesections.push("repeating_attack_" + spell.spellattackid); + }; + }); + removesections.push("repeating_spell-" + lvl + "_" + id); + } + }); + } else { + //If there was no spell page, need to drop any new "known" spells + _.each(blobs.sorted, function(section, name) { + _.each(section, function(blob) { + if(blob.Spells) { + spells = JSON.parse(blob.Spells); + _.each(spells, function(spell) { + if(spell.Known) { + _.each(spell.Known, function(spellname) { + var thisspell = {name: "Spells:" + spellname, data: {}}; + var thisclass = name.substring(0,5) === "class" ? _.last(data["lp-levels"].values[name.split("_")[0]].split(":")) : "Racial"; + if(spell.Ability) thisspell.data["spellcasting_ability"] = spell.Ability; + if(spell.Source) thisspell.data["spellsource"] = spell.Source; + thisspell.data["spellclass"] = thisclass; + allDrops.push(thisspell); + }); + }; + }); + }; + }); + }); + }; + //Gater spells from class features + _.each(data, function(page, pagename) { + if(pagename.split("-")[0] == "lp") { + _.each(page.values, function(value, name) { + if(name.substr(-18) === "_utilityrow_spells") { + let featurespells = JSON.parse(value); + _.each(featurespells, function(spell, spellname) { + var thisspell = {name: "Spells:" + spellname, data: {}}; + if(spell.ability) thisspell.data["spellcasting_ability"] = spell.ability; + if(spell.known) thisspell.data["spellsource"] = spell.known; + if(spell.spellclass) thisspell.data["spellclass"] = spell.spellclass; + allDrops.push(thisspell); + }) + } + }); + } + }); + //unset charmancer step + set["lpmancer_status"] = ""; + set["charactermancer_step"] = "lp-welcome"; + _.each(removesections, function(rowid) { + removeRepeatingRow(rowid); + }); + setCharmancerText({"mancer_progress" :'
    '}); + //first set is silent to prevent unwanted sheet workers + setAttrs(initial, {silent:true}, function() { + setCharmancerText({"mancer_progress" :'
    '}); + //reset remaining attributes, and set ability scores/custom info + setAttrs(loudset, function() { + setCharmancerText({"mancer_progress" :'
    '}); + getAllPages(allDrops, function() { + setCharmancerText({"mancer_progress" :'
    '}); + doAllDrops(allPageData, function() { + setAttrs(set, function() { + setCharmancerText({"mancer_progress" :'
    '}); + organize_section_proficiencies(); + update_skills(allSkills); + update_attacks("all"); + deleteCharmancerData(["lp-welcome", "lp-levels", "lp-choices", "lp-asi", "lp-spells","lp-summary"]); + var endTime = Date.now(); + //console.log("Elapsed time: "); + //console.log((endTime-startTime)/1000); + finishCharactermancer(); + }); + }); + }); + }); + }); + getRemovableSwaps().forEach(rowid => { + removeRepeatingRow(rowid); + }); + }); + on("page:lp-welcome page:lp-levels page:lp-choices page:lp-asi page:lp-spells page:lp-summary page:lp-spellchoice", eventInfo => { + showOptionalAttributeFields(); + }); + on("mancerchange:repeating_row", function(eventinfo) { + if(eventinfo.sourceAttribute && eventinfo.sourceAttribute.indexOf('feature_swap') > -1) { + const UID = SheetUtils.getUID(eventinfo.sourceAttribute); + const flag = `${eventinfo.sourceSection} .sheet-swap-selected`; + if(!eventinfo.newValue) { + const swapFor = eventinfo.sourceAttribute.replace('_swap', '_for'); + setAttrs({[swapFor]:''}); + setCharmancerText({[flag]:''}); + } else { + setCharmancerText({[flag]:'yes'}); + } + } + }); + on("mancerchange:repeating_asi-row_feat_skill_choice1 mancerchange:repeating_asi-row_feat_skill_choice2 mancerchange:repeating_asi-row_feat_skill_choice3 mancerchange:repeating_asi-row_feat_skill_choice4", eventinfo => { + if(eventinfo.sourceType && eventinfo.sourceType === 'player') { + getRepeatingSections('choices', repeating => { + const asi = repeating.list.filter(entry => { return entry.includes('asi-row'); }); + const choosenSkill = [eventinfo.newValue.split(':')[1]]; + asi.forEach(row => { + for(let i=1; i<=4; i++) { + const selector = `${row}_feat_expertise_choice_${i}`; + setValidExpertiseOptions('lp-asi', selector, choosenSkill); + } + }); + }); + } + }); + //# sourceURL=dnd5e.js \ No newline at end of file diff --git a/Esper_Genesis_5E/src/charactermancer/lp/lp.pug b/Esper_Genesis_5E/src/charactermancer/lp/lp.pug new file mode 100644 index 0000000000..0e501859ec --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/lp/lp.pug @@ -0,0 +1,230 @@ +mixin hiddenInput(name) + input(type='hidden' name=`comp_${name}`) + +mixin lpSteps(showCancel=true) + ol.steps.lp-steps + if showCancel + li + button.exit(type='action' name='act_cancel' data-i18n='cancel-u') CANCEL + if showCancel + .topbar-holder + +mixin cancelPrompt() + .choice.cancel-prompt + p.label(data-i18n='charmancer-cancel-heading') Where would you like to go, Traveler? + button.warning(type='cancel' value='lp-cancel' data-i18n='cancel_charactermancer') Discard and exit + button(type='action' name='act_continue') + span(data-i18n='continue-charmancer') Continue Charactermancer + p.warning + span(data-i18n='charmancer-discard-warning') + | Discard and Exit will discard all choices you’ve made in Charactermancer and let you edit your character sheet directly. + +mixin bottomBar(nav={}, dialog=false, firstTab=false, lastTab=false) + .bottombar + if firstTab + button.prev(type='cancel' value='lp-cancel' data-i18n='opt-out-u') OPT OUT + else if !dialog + if(nav.back.action) + button.prev(type='action' name=`${nav.back.name}` data-i18n='back') Back + else + button.prev(type=`${nav.back.type}` value=`${nav.back.value}` data-i18n='back') Back + button.jump(type='button' data-scroll='#top' data-i18n='back-to-top') Back to Top + if dialog + button.next(type='action' name='act_lp-spellchoice_back' data-i18n='accept') Accept + else if lastTab + button.next.choice.apply_changes(type='finish' value='lp-mancer' data-i18n='apply-changes') Apply Changes + else + if(nav.next.action) + button.next(type='action' name=`${nav.next.name}` data-i18n='next') Next + else + button.next(type=`${nav.next.type}` value=`${nav.next.value}` data-i18n='next') Next + +mixin multiclass(level) + .row + div(style='display: inline;') + div(class=`class${level}_selector`) + select.multiclass_select(name=`comp_class${level}` style='width: 85%;' value='') + option(value='' data-i18n='choose') Choose + .levels-message + span(class=`class${level}_update`) + input.addinglevel(type='number' name=`comp_class${level}_addlevel` min='0' max='19') + span(class=`class${level}_tot`) + .levels-hp-row + h2(data-i18n='hp-u') HP + input(type='number' name=`comp_class${level}_addhp`) + input.hp-flag(type='hidden' name=`comp_class${level}_hp_flag` value='average') + div(class=`class${level}_rollhp` style='display: inline;') + button(type='roll' name=`roll_class${level}_rollhp` value='' title='You must input a level increase to this class' data-i18n='roll') Roll + div(class=`class${level}_averagehp` style='display: inline;') + button(type='roll' name=`roll_class${level}_averagehp` value='' title='' data-i18n='average') Average + input.hpbylevel-toggle(type='checkbox' name='comp_hpbyLevel') + span.collapse 9 + div(class=`class${level}_by-levels`) + div + h3(class=`class${level}_features_title choice` style='display: inline;' data-i18n='charmancer-class-features:') Class Features: + button.mancer_info(type='action' name=`act_class${level}`) i + div(class=`class${level}_features`) + div(class=`subclass${level}_name`) + div(class=`subclass${level}_warning`) + div(class=`subclass${level}_selector`) + select(class=`choice subclass${level}` name=`comp_class${level}_subclass`) + option(value='' data-i18n='choose') Choose + div + h3(class=`subclass${level}_features_title choice` style='display: inline;' data-i18n='charmancer-subclass-features:') Subclass Features: + button.mancer_info(type='action' name=`act_class${level}_subclass`) i + div(class=`subclass${level}_features`) + +charmancer.sheet-charmancer-lp-welcome + .charmancer.container + +lpSteps(false) + .logos + span.charmancer-logo + span.compendium-logo + p.label(data-i18n='charmancer-welcome-lp') Welcome to the Charactermancer Level Up! + p(data-i18n='charmancer-leveler-what-is-lp') + | Look at you, with all that experience. Now it's time to claim your reward. You'll walk through the step-by-step process to make a few decisions, and your character will be at the next level in no time. Changes are saved as you move through the process, but if you change your mind, you'll need to revisit the steps and choices that come after. + p.label(data-i18n='charmancer-compendium') Your Compendium Awaits. + p(data-i18n='charmancer-compendium-detail-lp') + | The Charactermancer currently supports Dungeons & Dragons 5th Edition SRD, Player's Handbook, and Guildmasters' Guide to Ravnica. Xanathar's Guide to everything will be supported in the coming weeks. You can add the Player's Handbook and Guildmasters' Guide to Ravnica to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game. + p.label(data-i18n='get-started') Get started by clicking "Next". + +bottomBar({next: {type:'back', value: 'lp-levels'}}, false, true) + +cancelPrompt() + each name in ['spellinfo', 'previous_abilities', 'previous_attributes', 'previous_proficiencies', 'previous_repeating', 'lp-race', 'lp-subrace', 'lp-background'] + +hiddenInput(name) + +charmancer.sheet-charmancer-lp-levels + .charmancer.container + +lpSteps() + div(style='width: 100%;') + p(data-i18n='charmancer-leveler-level-info1') + | Your existing class levels have been pre-populated for you. By default your primary class has been set to be increased by one level. You can change how many levels to increase below, as well as adding a new multiclass. + p(data-i18n='charmancer-leveler-level-info2') + | In each class section you'll have the option to take the average number of hit points or to roll randomly, choose class features for the levels you're advancing, and choose your subclass if appropriate. + div(style='width: 100%; font-weight: bold;') + .levels_message + .choices.levels-multiclass + input.lock-custom-class(type='hidden' name='comp_lockcustomclass') + input.hide-multiclass(type='hidden' name='comp_multiclass' min='0' max='3') + input(type='hidden' name='comp_multiclass_initial' min='0' max='3') + .row.class1_container + .custom_warning + span(data-i18n='charmancer-leveler-custom-class-warning') The Level Up tool does not support custom classes at this time. + div + .class1_selector + select(name='comp_class1' value='') + .levels-message + span.class1_update + input.addinglevel(type='number' name='comp_class1_addlevel' min='0' max='19' value='1') + span.class1_tot + .levels-hp-row + h2(data-i18n='hp-u') HP + input(type='number' name='comp_class1_addhp') + input.hp-flag(type='hidden' name='comp_class1_hp_flag' value='average') + .class1_rollhp(style='display: inline;') + button(type='roll' name='roll_class1_rollhp' value='' title='' data-i18n='roll') Roll + .class1_averagehp(style='display: inline;') + button(type='roll' name='roll_class1_averagehp' value='' title='' data-i18n='average') Average + input.hpbylevel-toggle(type='checkbox' name='comp_hpbyLevel') + span.collapse 9 + .class1_by-levels + .class_features_container + h3.class1_features_title.choice(style='display: inline;' data-i18n='charmancer-class-features:') Class Features: + button.mancer_info(type='action' name='act_class1') i + .class1_features + .subclass1_name + .subclass1_warning + .subclass1_selector + select.choice.subclass1(name='comp_class1_subclass') + option(value='' data-i18n='choose') Choose + .subclass_features_container + h3.subclass1_features_title.choice(style='display: inline;' data-i18n='charmancer-subclass-features:') Subclass Features: + button.mancer_info(type='action' name='act_class1_subclass') i + .subclass1_features + +multiclass(2) + +multiclass(3) + +multiclass(4) + div + .multiclass_message + button(type='action' name='act_multiclass_add') + + button(type='action' name='act_multiclass_remove') - + .info + .sheet-compendium-page.sheet-levels-info(accept='Rules:Classes') + +bottomBar({back: {type:'back', value: 'lp-welcome'}, next: {type:'back', value: 'lp-choices'}}) + +cancelPrompt() + each name in ['characterlevel', 'class1', 'class1_subclass', 'class1_currentlevel', 'class1_classlevel', 'class1_hitdie', 'class2', 'class2_subclass', 'class2_currentlevel', 'class2_classlevel', 'class2_hitdie', 'class3', 'class3_subclass', 'class3_currentlevel', 'class3_classlevel', 'class3_hitdie', 'class4', 'class4_subclass', 'class4_currentlevel', 'class4_classlevel', 'class4_hitdie', 'asi', 'spells'] + +hiddenInput(name) + +charmancer.sheet-charmancer-lp-choices + .charmancer.container + +lpSteps() + .choices + .info + .sheet-compendium-page.sheet-class-info(accept='Rules:Classes') + +bottomBar({back: {type:'back', value: 'lp-levels'}, next: {action: true, name: 'act_lp-choices_next'}}) + +cancelPrompt() + +charmancer.sheet-charmancer-lp-asi + .charmancer.container + +lpSteps() + span.spinner-toggle + .spinnerloader + .choices + .info + .sheet-compendium-page.sheet-class-info(accept='Rules:Ability Scores') + +bottomBar({back: {type:'back', value: 'lp-choices'}, next: {action: true, name: 'act_lp-asi_next'}}) + +cancelPrompt() + +charmancer.sheet-charmancer-lp-spells + .charmancer.container + +lpSteps() + span.pagelock(style='display: none') + .choices.spellslide + p.instructions(data-i18n='charmancer-leveler-spells-info') + | Listed here are the current spells your character already knows. If you gained access to more spells during your advancement you will be able to select them below. Check next to the spells you wish to learn. The Charactermancer will help you pick the right number of spells and from the correct list. If your class has the option to swap out spells, you can do so by unselecting currently known spells which will allow you to select new ones in their place. + p.spells-summary + .cantripinfo + .info.spellslide + .sheet-compendium-page.sheet-spells-info(accept='Rules:Esper%20Powers') + +bottomBar({back: {action: true, name: 'act_lp-spells_back'}, next: {type: 'back', value: 'lp-summary'}}) + +cancelPrompt() + each name in ['knowncantrips', 'knownspells', 'newcantrips', 'newspells', 'replace'] + +hiddenInput(name) + +charmancer.sheet-charmancer-lp-summary + .charmancer.container + +lpSteps() + .lp-summary.summary-container + .before + h2(data-i18n='before-leveling') Before Leveling + div + .after + h2(data-i18n='after-leveling') After Leveling + div + .summary-container + .summary + p.label(data-i18n='features') Features + .feature_info + .summary + p.label(data-i18n='feats') + .feat_info + .summary + p.label(data-i18n='spells') Spells + .spell_info + .choice.returnblock.spells_button + span(data-i18n='return-to:') Return to: + button.step(type='back' value='l1-spells' data-i18n='spells-u') SPELLS + +bottomBar({back: {action: true, name: 'act_lp-summary_back'}}, false, false, true) + +cancelPrompt() + +charmancer.sheet-charmancer-lp-spellchoice + .charmancer.container + +lpSteps() + span.pagelock(style='display: none') + .choices.spellslide + p.instructions + .info.spellslide + .sheet-compendium-page.sheet-spells-info(accept='Rules:Esper%20Powers') + +bottomBar({}, true) + +cancelPrompt() + each name in ['source', 'valid', 'newcantrips', 'newspells'] + +hiddenInput(name) \ No newline at end of file diff --git a/Esper_Genesis_5E/src/charactermancer/repeating/repeatingsections.html b/Esper_Genesis_5E/src/charactermancer/repeating/repeatingsections.html new file mode 100644 index 0000000000..2055c92d63 --- /dev/null +++ b/Esper_Genesis_5E/src/charactermancer/repeating/repeatingsections.html @@ -0,0 +1,480 @@ + +
    +
    +

    Strength

    + - +
    +
    +

    Dexterity

    + - +
    +
    +

    Constitution

    + - +
    +
    +

    Intelligence

    + - +
    +
    +

    Wisdom

    + - +
    +
    +

    Charisma

    + - +
    +
    +

    Honor

    + - +
    +
    +

    Saninty

    + - +
    +
    +
    + Hit Points: + Suggested Abilities: + Class Spellcasting Ability: +
    +
    + + +
    +
    +

    Strength

    + - +
    +
    +

    Dexterity

    + - +
    +
    +

    Constitution

    + - +
    +
    +

    Intelligence

    + - +
    +
    +

    Wisdom

    + - +
    +
    +

    Charisma

    + - +
    +
    +

    Honor

    + - +
    +
    +

    Saninty

    + - +
    +
    +
    + Hit Points: + Spellcasting DC: + +
    +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    Removed spells will be marked with a r symbol so you can find it easily if you change your mind.
    +
    +
    +
    +
    + + + + + + + + + + + + + + + +

    + + +
    + + +
    +
    +

    You can increase two of your abilities by 1, or one of your abilities by 2

    +
    +
    + + + + +
    + + +
    +
    Strength
    +
    +
    + + + + +
    + + +
    +
    Dexterity
    +
    +
    + + + + +
    + + +
    +
    Constitution
    +
    +
    + + + + +
    + + +
    +
    Intelligence
    +
    +
    + + + + +
    + + +
    +
    Wisdom
    +
    +
    + + + + +
    + + +
    +
    Charisma
    +
    +
    + + + + +
    + + +
    +
    Sanity
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +

    Expertise

    + + + +
    +
    +

    + + +

    +
    +
    +

    + + +

    +
    +
    +

    + + +

    +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + + + + + \ No newline at end of file diff --git a/Esper_Genesis_5E/src/classes/DropClasses/DropClasses.js b/Esper_Genesis_5E/src/classes/DropClasses/DropClasses.js new file mode 100644 index 0000000000..c237cbb0ab --- /dev/null +++ b/Esper_Genesis_5E/src/classes/DropClasses/DropClasses.js @@ -0,0 +1,488 @@ +class RepeatingFieldset { + constructor(groupname, id) { + this.groupname = groupname; + this.reprowid = id || generateRowID(); + } + + buildRowName() { + return `repeating_${this.groupname}_${this.reprowid}` + } + + addAttribute(attributesibuteName) { + return `${this.buildRowName()}_${attributesibuteName}` + } +} + +class Attack extends RepeatingFieldset { + constructor(name, id) { + super('attack', id) + this.attributes = { + atkname: name, + atkbonus: '', //Part of button display + atkdmgtype: '', //Part of button display + atkflag: '{{attack=1}}', + atkattr_base: '@{strength_mod}', + atkrange: '', + atkmagic: '', + atkcritrange: 20, + dmgflag: '{{damage=1}} {{dmg1flag=1}}', + dmgbase: '', + dmgattr: '@{strength_mod}', + dmgmod: '', + dmgtype: '', + dmgcustcrit: '', + dmg2flag: 0, + dmg2base: '', + dmg2attr: 0, + dmg2mod: '', + dmg2type: '', + dmg2custcrit: '', + saveflag: 0, + saveattr: 'Strength', + savedc: '(@{spell_save_dc})', + saveflat: '', + saveeffect: '', + atk_desc: '', + "options-flag": 0, + } + } + + addSaveFlag() { + this.attributes.saveflag = '{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}' + } + + checkFinesse(strenght, dexterity) { + const strengthGreaterThanDex = strenght > dexterity; + this.attributes.dmgattr = strengthGreaterThanDex ? '@{strength_mod}' : '@{dexterity_mod}' + this.attributes.atkattr_base = strengthGreaterThanDex ? '@{strength_mod}' : '@{dexterity_mod}' + } +} + +class GlobalACMod extends RepeatingFieldset { + constructor(name, id) { + super('acmod', id) + name, + this.attributes = { + global_ac_name: name, + global_ac_val: '', + global_ac_active_flag: 0, + "options-flag": 0, + } + } +} + +class GlobalDamage extends RepeatingFieldset { + constructor(name, id) { + super('damagemod', id) + name, + this.attributes = { + global_damage_name: name, + global_damage_damage: '', + global_damage_type: '', + global_damage_active_flag: 0, + "options-flag": 0 + } + } +} + +class GlobalSave extends RepeatingFieldset { + constructor(name, id) { + super('savemod', id) + name, + this.attributes = { + global_save_name: name, + global_save_roll: '', + global_save_active_flag: 0, + "options-flag": 0 + } + } +} + +class GlobalAttack extends RepeatingFieldset { + constructor(name, id) { + super('tohitmod', id) + name, + this.attributes = { + global_attack_name: name, + global_attack_roll: '', + global_attack_rollstring: '', + global_attack_active_flag: 0, + "options-flag": 0 + } + } + + addRoll(roll) { + this.attributes.global_attack_roll = roll; + } +} + +class HPMod extends RepeatingFieldset { + constructor(name, id) { + super('hpmod', id) + name, + this.attributes = { + mod: '', + source: '', + levels: 'total' + } + } +} + +class Item extends RepeatingFieldset { + constructor(name, id) { + super('inventory', id); + name, + this.attributes = { + itemname: name, + itemcount: 1, + itemproperties: '', + itemweight: 0, + itemcontent: '', + itemmodifiers: '', + hasattack: 0, + useasresource: 0 + } + } +} + +class Proficiency extends RepeatingFieldset { + constructor(name, id) { + super('proficiencies', id); + this.attributes = { + name, + prof_type: 'OTHER', + 'options-flag': 0 + } + } +} + +class Resource extends RepeatingFieldset { + constructor(name, id, side) { + super('resource', id); + this.side = side || 'left', + this.attributes = { + [`resource_${this.side}`]: '', + [`resource_${this.side}_name`]: name, + [`resource_${this.side}_max`]: '', + } + } +} + +class Spell extends RepeatingFieldset { + constructor(name, section, id) { + super(section, id); + this.attributes = { + 'details-flag': 0, + 'options-flag': 0, + rollcontent: '', + spell_ability: 'spell', + innate: '', + spell_damage_progression: '', + spellathigherlevels: '', + spellattack: '', + spellcastingtime: '', + spellclass: '', + spellcomp_m: 0, + spellcomp_materials: '', + spellcomp_s: 0, + spellcomp_v: 0, + spellconcentration: '', + spelldamage2: '', + spelldamage: '', + spelldamagetype2: '', + spelldamagetype: '', + spelldescription: '', + spelldmgmod: '', + spellduration: '', + spellhealing: '', + spellhlbonus: '', + spellhldie: '', + spellhldietype: '', + spelllevel: 'cantrip', + spellname: name, + spelloutput: 'SPELLCARD', + spellrange: '', + spellritual: '', + spellsave: '', + spellsavesuccess: '', + spellschool: 'abjuration', + spellsource: '', + spelltarget: '' + } + } +} + +class Trait extends RepeatingFieldset { + constructor(name, id) { + super('traits', id); + this.attributes = { + name, + description: '', + source_type: '', + source: '', + ['options-flag']: '0', + display_flag: 'on' + }; + } + + determineSource(category) { + switch (category) { + case "Backgrounds": + case "Feats": + return category.slice(0, -1) + break; + case "Races": + case "Subraces": + return "Racial" + break; + case "Classes": + case "Subclasses": + return "Class" + break; + default: + return "Other" + } + } +} + +class ToolProficiency extends RepeatingFieldset { + constructor(name, id) { + super('tool', id); + this.attributes = { + toolname: name, + toolbonus_base: '(@{pb})', + toolattr_base: '?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}', + 'options-flag': 0 + } + } +} + +//========== Non-Repeating + +class Class { + constructor(name) { + name, + this.attributes = { + class: this.validateClassName(name) ? name : '', + base_level: 1, + hit_dice_max: 1, + hit_dice: 1, + hitdietype: 4, + spellcasting_ability: '0*' + } + } + + validateClassName(name) { + return globalAttributesByCategory.classes.includes(name.toLowerCase()) ? true : false; + } + + buildSpellcastingAbility(attributeName) { + return `@{${attributeName}_mod}+` + } +} + +class CustomAC { + constructor(name) { + name, + this.attributes = { + custom_ac_flag: 1, + custom_ac_base: 10, + custom_ac_part1: 'none', + custom_ac_part2: 'none', + custom_ac_shield: 'yes' + } + } +} + +class Race { + constructor(name) { + name, + this.attributes = { + race: name, + speed: 30, + size: 'Medium', + halflingluck_flag: this.checkHalfling(name) ? 1 : 0 + } + } + + checkHalfling(name) { + return name === 'Halfling' ? true : false + } +} + +class Subrace { + constructor(name) { + name, + this.attributes = { + subrace: name + } + } +} + +class SavingThrow { + constructor(name) { + name, + this.attributes = { + [`${this.attributesName(name)}_save_prof`]: `(@{pb})` + } + } + + attributesName(name) { + return name.toLowerCase() + } +} + +class Skill { + constructor(name) { + name, + this.attributes = { + [`${this.attributesName(name)}_prof`]: `(@{pb}*@{${this.attributesName(name)}_type})` + } + } + + attributesName(name) { + return name.toLowerCase().replace(/ /g, '_') + } +} + +class Subclass { + constructor(name) { + name, + this.attributes = { + subclass: name, + arcane_fighter: 0, + arcane_rogue: 0 + } + } + + checkArcane(className) { + return className === 'fighter' || className === 'rogue' ? true : false + } + + buildSpellcastingAbility(attributeName) { + return `@{${attributeName}_mod}+` + } +} + +//========== NPC AKA MONSTERS + +class Npc { + constructor(name) { + name, + this.attributes = { + npc_name: name, + strength_base: 10, + dexterity_base: 10, + constitution_base: 10, + intelligence_base: 10, + wisdom_base: 10, + charisma_base: 10, + npc_condition_immunities: '', + npc_immunities: '', + npc_resistances: '', + npc_languages: '', + npc_speed: '', + token_size: 1, + npc_vulnerabilities: '', + npc_challenge: '', + npc_senses: '', + npc_type: '', + npc_ac: '', + npc_actype: '', + hp_max: '', + npc_hpformula: '', + npc_xp: '', + npc_legendary_actions: 0, + npc_legendary_actions_desc: '', + npc_mythic_actions: 0, + npc_mythic_actions_desc: '', + npc: 1, + 'npc_options-flag': 0, + npcreactionsflag: 0, + npcspellcastingflag: 0, + spellcasting_ability: '0*', + globalmagicmod: 0, + caster_level: 0, + spell_dc_mod: 0 + } + } + + addSkills(list) { + list.forEach(value => this.attributes[`npc_${value.replace(/ /g, '_')}_base`] = "") + } + + addSaves(list) { + list.forEach(value => this.attributes[`npc_${value.slice(0, 3)}_save_base`] = "") + } + + addSpellcaster(ability, casterLevels) { + const spellcastrAttributes = { + npcspellcastingflag: 1, + base_level: casterLevels || 1, + caster_level: casterLevels || 1, + class: 'Wizard', + level: casterLevels || 1, + spellcasting_ability: ability + } + + Object.assign(this.attributes, spellcastrAttributes); + } + + addInnateCaster() { + this.attributes.npcspellcastingflag = 1 + } +} + +class NpcAction extends RepeatingFieldset { + constructor(name, section, id) { + super(section, id); + name, + this.attributes = { + name, + description: '', + 'npc_options-flag': 0 + } + } + + addAttack() { + const attackAttributes = { + attack_flag: 'on', + attack_display_flag: '{{attack=1}}', + attack_options: '{{attack=1}}', + attack_type: '', + attack_target: 'one target', + attack_range: '5 ft', + attack_tohit: '', + attack_damage: '', + attack_damagetype: '', + attack_damage2: '', + attack_damagetype2: '' + } + + Object.assign(this.attributes, attackAttributes); + } +} + +class NpcReaction extends RepeatingFieldset { + constructor(name, id) { + super('npcreaction', id) + name, + this.attributes = { + name, + 'npc_options-flag': 0, + description: '' + } + } +} + +class NpcTraits extends RepeatingFieldset { + constructor(name, id) { + super('npctrait', id) + name, + this.attributes = { + name, + 'npc_options-flag': 0, + description: '' + } + } +} diff --git a/Esper_Genesis_5E/src/classes/FlagManager/FlagManager.js b/Esper_Genesis_5E/src/classes/FlagManager/FlagManager.js new file mode 100644 index 0000000000..7a5039b97b --- /dev/null +++ b/Esper_Genesis_5E/src/classes/FlagManager/FlagManager.js @@ -0,0 +1,118 @@ +class RefereceSet extends Set { + constructor(...args) { + super(...args); + } + toggle(value) { + const toggleLookup = { + true: 'delete', + false: 'add' + }; + const hasValue = this.has(value); + return this[toggleLookup[hasValue]](value); + } +} +class FlagManager { + constructor(reference) { + this._reference = reference; + this._delimiter = ' '; + this._delimiterSafe = '_'; + } + async getFlags() { + const entries = await this._getReferenceSet(); + return entries; + } + async hasFlag(flag) { + const entries = await this._getReferenceSet(); + return entries.has(flag); + } + async addFlag(flag) { + const updatedReference = await this._updateReference(flag, 'add'); + return updatedReference; + } + async deleteFlag(flag) { + const updatedReference = await this._updateReference(flag, 'delete'); + return updatedReference; + } + async toggleFlag(flag) { + const updatedReference = await this._updateReference(flag, 'toggle'); + return updatedReference; + } + async _updateReference(flag, method) { + const sanitizedFlag = this._sanitizeFlag(flag); + const updatedReference = await this._setReference(sanitizedFlag, method); + return updatedReference; + } + async syncFlagsWithRepeatingSection(section) { + const flags = await this._syncFlagsWithRepeatingSection(section); + return flags; + } + _syncFlagsWithRepeatingSection(section) { + return new Promise(resolve => { + SheetUtils.getSectionOrder(section, order => { + getAttrs([this._reference], attributes => { + let values = ""; + Object.keys(attributes).some(() => { + values += attributes[this._reference]; + return true; + }); + const flags = (values) ? values.split(' ') : []; + const sectionName = `repeating_${section}`; + const filteredArray = Array.from(flags).filter(flag => flag.includes(sectionName)).filter(flag => order.includes(SheetUtils.getUID(flag).toLowerCase())); + filteredArray.forEach((flag, index) => { + const newIndex = order.indexOf(SheetUtils.getUID(flag).toLowerCase()); + filteredArray[index] = flag.replace(this._getFlagIndex(flag), `_${newIndex}_`); + }); + const updatedSet = Array.from(flags).filter(flag => !flag.includes(sectionName)).concat(filteredArray); + let update = {}; + update[this._reference] = updatedSet.join(' '); + setAttrs(update, () => { + return resolve(new Set(updatedSet)); + }); + }); + }); + }); + } + _getFlagIndex(flag) { + const regexp = /_[0-9]+_/g; + const valueAsString = String(flag); + const match = valueAsString.match(regexp); + return (match) ? match.join() : ""; + } + _getReferenceSet() { + return new Promise(resolve => { + getAttrs([this._reference], attributes => { + let values = ""; + Object.keys(attributes).some(() => { + values += attributes[this._reference]; + return true; + }); + const flags = values.split(this._delimiter).filter(e => {return e}); + return resolve(new RefereceSet(flags)); + }); + }); + } + _setReference(sanitizedFlag, method) { + return new Promise(resolve => { + getAttrs([this._reference], attributes => { + let values = ""; + Object.keys(attributes).some(() => { + values += attributes[this._reference]; + return true; + }); + const flags = new RefereceSet(values.split(this._delimiter).filter(e => {return e})); + flags[method](sanitizedFlag); + const flagAsString = Array.from(flags).join(this._delimiter); + let update = {}; + update[this._reference] = flagAsString; + setAttrs(update, () => { + return resolve(flags); + }); + }); + }); + } + _sanitizeFlag(flag) { + const regex = new RegExp(`${this._delimiter}`, 'g'); + const sanitizedFlag = flag.replace(regex, this._delimiterSafe); + return sanitizedFlag; + } +} diff --git a/Esper_Genesis_5E/src/classes/FlagManager/test/component.html b/Esper_Genesis_5E/src/classes/FlagManager/test/component.html new file mode 100644 index 0000000000..18a1f0108c --- /dev/null +++ b/Esper_Genesis_5E/src/classes/FlagManager/test/component.html @@ -0,0 +1,60 @@ + + + + + + FlagManager Component + + + + + + + + +
    + +
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris hendrerit cursus ex. Pellentesque pulvinar nulla justo, finibus hendrerit magna aliquam vitae.
    +
    +
    + +
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris hendrerit cursus ex. Pellentesque pulvinar nulla justo, finibus hendrerit magna aliquam vitae.
    +
    + + + diff --git a/Esper_Genesis_5E/src/classes/FlagManager/test/tests.html b/Esper_Genesis_5E/src/classes/FlagManager/test/tests.html new file mode 100644 index 0000000000..5d2ad7ee66 --- /dev/null +++ b/Esper_Genesis_5E/src/classes/FlagManager/test/tests.html @@ -0,0 +1,18 @@ + + + + + + FlagManager Tests + + + +
    +
    + + + + + + + diff --git a/Esper_Genesis_5E/src/classes/FlagManager/test/tests.js b/Esper_Genesis_5E/src/classes/FlagManager/test/tests.js new file mode 100644 index 0000000000..ebe8f9efea --- /dev/null +++ b/Esper_Genesis_5E/src/classes/FlagManager/test/tests.js @@ -0,0 +1,117 @@ +QUnit.module('Basic Tests', { + before: function() { + maxAsyncDelay = 100; //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms. + }, + beforeEach: function() { + //Resets attributes before each test + attributes = {}; + sectionIDS = {}; + this.flagManager = new FlagManager('ui_flags'); + } +}); +QUnit.test('Flag Manager was initiated with zero entries', function( assert ) { + var done = assert.async(); + this.flagManager.getFlags().then(flags => { + assert.equal(flags.size, 0); + done(); + }); +}); + +QUnit.test('One flag added to Flag Manager', function( assert ) { + var done = assert.async(); + this.flagManager.addFlag('show_traits').then(flags => { + assert.equal(flags.size, 1); + assert.equal(flags.has('show_traits'), true); + assert.strictEqual(attributes.ui_flags, 'show_traits'); + done(); + }); +}); + +QUnit.test('Two flags added to Flag Manager', function( assert ) { + var done = assert.async(); + this.flagManager.addFlag('show_traits').then(() => { + this.flagManager.addFlag('show_spells').then(flags => { + assert.equal(flags.size, 2); + assert.equal(flags.has('show_traits'), true); + assert.equal(flags.has('show_spells'), true); + assert.strictEqual(attributes.ui_flags, 'show_traits show_spells'); + done(); + }); + }); +}); + +QUnit.test('Flag Deleted from Flag Manager', function( assert ) { + //Faking some attributes + attributes['ui_flags'] = 'show_traits show_spells show_skills'; + + var done = assert.async(); + this.flagManager.deleteFlag('show_spells').then(flags => { + assert.equal(flags.size, 2); + assert.equal(flags.has('show_traits'), true); + assert.equal(flags.has('show_spells'), false); + assert.equal(flags.has('show_skills'), true); + assert.strictEqual(attributes.ui_flags, 'show_traits show_skills'); + done(); + }); +}); + +QUnit.test('Flags correctly detected in Flag Manager', function( assert ) { + //Faking some attributes + attributes['ui_flags'] = 'show_traits show_spells show_skills'; + + var done1 = assert.async(); + var done2 = assert.async(); + this.flagManager.hasFlag('show_spells').then(hasFlag => { + assert.equal(hasFlag, true); + done1(); + }); + this.flagManager.hasFlag('non_existing_flag').then(hasFlag => { + assert.equal(hasFlag, false); + done2(); + }); +}); + +QUnit.test('Flags cant be added more than once', function( assert ) { + //Faking some attributes + attributes['ui_flags'] = 'show_traits show_spells show_skills'; + + var done = assert.async(); + this.flagManager.addFlag('show_skills').then(flags => { + assert.equal(flags.size, 3); + assert.strictEqual(attributes.ui_flags, 'show_traits show_spells show_skills'); + done(); + }); +}); + +QUnit.test('Order of stored flags are synced with source repeating section', function(assert) { + attributes['ui_flags'] = 'a_flag another_flag repeating_traits_0_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_1_name_-MzbTrhcIwpDwRZxfvEn'; + attributes['_reporder_repeating_traits'] = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn'; + sectionIDS['repeating_traits'] = ['-LzbTrhcIwpDwRZxfvEn', '-MzbTrhcIwpDwRZxfvEn']; + var done = assert.async(); + this.flagManager.syncFlagsWithRepeatingSection('traits').then(flags => { + var expectedTags = new Set([ + 'a_flag', + 'another_flag', + 'repeating_traits_1_name_-LzbTrhcIwpDwRZxfvEn', + 'repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn' + ]); + assert.equal(Array.from(flags).join(' '), Array.from(expectedTags).join(' ')); + done(); + }); +}); + +QUnit.test('Deleted flags are synced with source repeating section', function(assert) { + attributes = {}; + attributes['ui_flags'] = 'a_flag another_flag repeating_traits_1_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn'; + sectionIDS['repeating_traits'] = ['-MzbTrhcIwpDwRZxfvEn']; + var done = assert.async(); + this.flagManager.syncFlagsWithRepeatingSection('traits').then(flags => { + var expectedTags = new Set([ + 'a_flag', + 'another_flag', + 'repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn' + ]); + assert.equal(Array.from(flags).join(' '), Array.from(expectedTags).join(' ')); + done(); + }); +}); \ No newline at end of file diff --git a/Esper_Genesis_5E/src/classes/Mocks/Mocks.js b/Esper_Genesis_5E/src/classes/Mocks/Mocks.js new file mode 100644 index 0000000000..139411840a --- /dev/null +++ b/Esper_Genesis_5E/src/classes/Mocks/Mocks.js @@ -0,0 +1,35 @@ +var attributes = {}; +var sectionIDS = {}; +var maxAsyncDelay = 2000; +var getRandomInt = function(max) { + return Math.floor(Math.random() * Math.floor(max)); +}; +var getAttrs = function(attrs, callback) { + let values = {}; + setTimeout(() => { + attrs.forEach(i => { + if(i in attributes) values[i] = attributes[i]; + }); + callback(values); + }, getRandomInt(maxAsyncDelay)); +}; +var setAttrs = function(attrs, callback) { + let values = {}; + setTimeout(() => { + Object.keys(attrs).forEach(key => { + attributes[key] = attrs[key]; + //Notify all components + let components = document.querySelectorAll(`[name|="attr_${key}"]`); + components.forEach(c => { + c.value = attrs[key]; + }); + }); + callback(attributes); + }, getRandomInt(maxAsyncDelay)); +}; +var getSectionIDs = function(section, callback) { + setTimeout(() => { + let ids = sectionIDS[section] || []; + callback(ids); + }, getRandomInt(maxAsyncDelay)); +}; diff --git a/Esper_Genesis_5E/src/classes/SheetUpdater/SheetUpdater.js b/Esper_Genesis_5E/src/classes/SheetUpdater/SheetUpdater.js new file mode 100644 index 0000000000..6301eaba12 --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUpdater/SheetUpdater.js @@ -0,0 +1,158 @@ +class SheetUpdater { + constructor(listOfUpdates, versionAttribute = 'version', appliedUpdatesAttribute = 'appliedUpdates', delimiter = ',', reportInvalidUpdates = false) { + this._listOfUpdates = (Array.isArray(listOfUpdates)) ? Array.from(new Set(listOfUpdates)) : []; + this._versionAttribute = versionAttribute; + this._appliedUpdatesAttribute = appliedUpdatesAttribute; + this._delimiter = delimiter; + this._reportInvalidUpdate = reportInvalidUpdates; + } + getAppliedUpdates(callback) { + getAttrs([this._appliedUpdatesAttribute], values => { + const performedUpdates = (values[this._appliedUpdatesAttribute]) ? values[this._appliedUpdatesAttribute].split(this._delimiter) : []; + callback(performedUpdates); + }); + } + setAppliedUpdates(updates, callback) { + let set = {}; + set[this._appliedUpdatesAttribute] = Array.from(new Set(updates)).join(this._delimiter); + setAttrs(set, () => { + callback(); + }); + } + checkUpdates(callback) { + let log = {}; + this.getAppliedUpdates(appliedUpdates => { + const existingUpdates = this._listOfUpdates.filter(entry => { return appliedUpdates.indexOf(entry.id) > -1 }).map(entry => { return entry.id; }); + existingUpdates.forEach(entry => { + log[entry] = {success: false, error: SheetUpgrade.getStatusMsg('ALREADY_INSTALLED')}; + }); + this.processNextUpdate(log, callback); + }); + } + processNextUpdate(log = {}, callback) { + this.getAppliedUpdates(appliedUpdates => { + const missingUpdates = this._listOfUpdates.filter(entry => { return appliedUpdates.indexOf(entry.id) === -1 && Object.keys(log).indexOf(entry.id) === -1 }); + if(missingUpdates.length === 0) { + this.finish(log); + callback(log); + } else { + missingUpdates[0].apply(this._versionAttribute, this, log, callback); + } + }); + } + finish(log) { + getAttrs([this._versionAttribute], values => { + console.log('---------------------------------------------'); + const updates = Object.keys(log); + if(updates.length > 0) { + console.groupCollapsed('%cINSTALLING UPDATES:', 'font-weight:bold'); + updates.forEach(update => { + if(log[update].error) { + console.log(`Applying ${update}... %c${log[update].error}`, 'color:#e66f00'); + } else { + console.log(`Applying ${update}... %c${SheetUpgrade.getStatusMsg('DONE')}`, 'color: #22a05d'); + } + }); + console.groupEnd(); + } + if(this._versionAttribute in values) console.log(`%cD&D 5th Edition by Roll20 Version ${values[this._versionAttribute]}`, 'color: green; font-weight:bold'); + console.log('---------------------------------------------'); + }); + } + rejectUpdate(log, callback) { + this.processNextUpdate(log, callback); + } + resolveUpdate(updateID, log, callback) { + this.getAppliedUpdates(appliedUpdates => { + const update = Array.from(new Set(appliedUpdates.concat([updateID]))); + const matches = this._listOfUpdates.filter(entry => { + return update.indexOf(entry.id) > -1; + }).map(entry => { return entry.id }); + this.setAppliedUpdates(matches, () => { + this.processNextUpdate(log, callback); + }); + }); + } +} + +class SheetUpgrade { + constructor(id, patch, setVersion = 0, minVersion = 0) { + this.id = id; + this._patch = patch; + this._setVersion = setVersion; + this._minVersion = minVersion; + this._listener = null; + this._versionAttribute = null; + this._log = null; + this._callback = null; + } + static getStatusMsg(errorCode, ...details) { + switch (errorCode) { + case 'DONE': + return `Update completed!` + case 'ALREADY_INSTALLED': + return `Update already installed!` + case 'INVALID_VERSION': + return `The current version of your sheet is not compatible with this update!` + default: + return ''; + } + } + getCurrentVersion(callback) { + getAttrs([this._versionAttribute], values => { + const version = (values.version) ? parseFloat(values.version) : 0.0; + callback(version); + }); + } + setCurrentVersion(version, callback) { + if(version === 0) { + callback(); + } else { + let set = {}; + set[this._versionAttribute] = version; + setAttrs(set, () => { + callback() + }); + } + } + apply(versionAttribute, listener, log, callback) { + this._versionAttribute = versionAttribute; + this._listener = listener; + this._log = log; + this._callback = callback; + this.getCurrentVersion(currentVersion => { + if(this.validateVersion(currentVersion)) { + const statusMsg = SheetUpgrade.getStatusMsg('INVALID_VERSION'); + this._reject(statusMsg); + } else { + let newVersion = this._setVersion; + let failed = false; + let update = null; + this._patch(this._resolve.bind(this), this._reject.bind(this)); + } + }); + } + _reject(error) { + this._log[this.id] = { success : false, error: error } + this._listener.rejectUpdate(this._log, this._callback); + } + _resolve() { + this.setCurrentVersion(this._setVersion, () => { + this._log[this.id] = { success: true }; + this._listener.resolveUpdate(this.id, this._log, this._callback); + }); + } + validateVersion(currentVersion) { + return (currentVersion >= this._setVersion || currentVersion < this._minVersion); + } +} + +class SheetUpdate extends SheetUpgrade { + constructor(id, patch, minVersion = 0, maxVersion = Infinity) { + super(id, patch, 0, minVersion); + this._maxVersion = maxVersion; + } + validateVersion(currentVersion) { + return (currentVersion > this._maxVersion || currentVersion < this._minVersion); + } +} \ No newline at end of file diff --git a/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.html b/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.html new file mode 100644 index 0000000000..fe279fb9a3 --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.html @@ -0,0 +1,17 @@ + + + + + + SheetUpdater Tests + + + +
    +
    + + + + + + diff --git a/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.js b/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.js new file mode 100644 index 0000000000..d527d8e600 --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUpdater/test/tests.js @@ -0,0 +1,295 @@ +QUnit.module('Basic Tests', { + before: function() { + maxAsyncDelay = 100; //Sets the mock delay for getAttrs and setAttrs to a maximum of 100ms. + }, + beforeEach: function() { + //Resets attributes before each test + attributes = {}; + sectionIDS = {}; + } +}); + +QUnit.test('SheetUpdater applies single upgrade and set version to 2.0', function(assert) { + attributes['version'] = '1.0'; + attributes['appliedUpdates'] = ""; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 2.0 + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + assert.equal(result['upgrade_to_2_0'].success, true); + getAttrs(['version'], values => { + assert.equal(values.version, 2.0); + done(); + }); + }); +}); + +QUnit.test('SheetUpdater applies two updates in a row and set version to 3.0', function(assert) { + attributes['version'] = '1.0'; + attributes['appliedUpdates'] = ""; + var orderOfUpdates = []; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(['version'], () => { + orderOfUpdates.push('upgrade_to_2_0'); + resolve(); + }); + }, + 2.0 + ), + new SheetUpgrade( + 'upgrade_to_3_0', + (resolve, reject) => { + getAttrs(['version'], () => { + orderOfUpdates.push('upgrade_to_3_0'); + resolve(); + }); + }, + 3.0 + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + assert.equal(result['upgrade_to_2_0'].success, true); + assert.equal(result['upgrade_to_3_0'].success, true); + assert.equal(orderOfUpdates.join(','), 'upgrade_to_2_0,upgrade_to_3_0'); + getAttrs(['version'], values => { + assert.equal(values.version, 3.0); + done(); + }); + }); +}); + +QUnit.test('SheetUpdater skips already installed update', function(assert) { + attributes['version'] = '1.0'; + attributes['appliedUpdates'] = "existing_patch"; + var orderOfUpdates = []; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(['version'], () => { + orderOfUpdates.push('upgrade_to_2_0'); + resolve(); + }); + }, + 2.0 + ), + new SheetUpgrade( + 'existing_patch', + (resolve, reject) => { + getAttrs(['version'], () => { + orderOfUpdates.push('existing_patch'); + resolve(); + }); + }, + ), + new SheetUpgrade( + 'upgrade_to_3_0', + (resolve, reject) => { + getAttrs(['version'], () => { + orderOfUpdates.push('upgrade_to_3_0'); + resolve(); + }); + }, + 3.0 + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + assert.equal(result['upgrade_to_2_0'].success, true); + assert.equal(result['upgrade_to_3_0'].success, true); + assert.equal(result['existing_patch'].success, false); + assert.equal(result['existing_patch'].error, 'Update already installed!'); + assert.equal(orderOfUpdates.join(','), 'upgrade_to_2_0,upgrade_to_3_0'); + getAttrs(['version'], values => { + assert.equal(values.version, 3.0); + done(); + }); + }); +}); + +QUnit.test('SheetUpdater refuses to install older upgrade', function(assert) { + attributes['version'] = '3.0'; + attributes['appliedUpdates'] = ""; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 2.0 + ), + new SheetUpgrade( + 'upgrade_to_4_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 4.0 + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + assert.equal(result['upgrade_to_2_0'].success, false); + assert.equal(result['upgrade_to_2_0'].error, 'The current version of your sheet is not compatible with this update!'); + assert.equal(result['upgrade_to_4_0'].success, true); + getAttrs(['version'], values => { + assert.equal(values.version, 4.0); + done(); + }); + }); +}); + +QUnit.test('SheetUpdater correctly updates applied updates', function(assert) { + attributes['version'] = '3.0'; + attributes['appliedUpdates'] = "upgrade_to_3_0"; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 2.0 + ), + new SheetUpgrade( + 'upgrade_to_3_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 3.0 + ), + new SheetUpgrade( + 'upgrade_to_4_0', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 4.0 + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + getAttrs(['appliedUpdates'], values => { + assert.equal(values.appliedUpdates, 'upgrade_to_3_0,upgrade_to_4_0'); + done(); + }); + }); +}); + +QUnit.test('SheetUpdater refuses to install incompatible update', function(assert) { + attributes['version'] = '3.5'; + attributes['appliedUpdates'] = ""; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpdate( + 'update_skills', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 3.8 //Min version + ), + new SheetUpdate( + 'update_attacks', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 2.0, //Min version + 4.0 //Max version + ), + new SheetUpgrade( + 'upgrade_to_3_6', + (resolve, reject) => { + getAttrs(['version'], values => { + resolve(); + }); + }, + 3.6 //Min version + ), + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + getAttrs(['version'], values => { + assert.equal(values.version, 3.6); + assert.equal(result['update_skills'].success, false); + assert.equal(result['update_attacks'].success, true); + done(); + }); + }); +}); + +QUnit.test('Failed updates are logged', function(assert) { + attributes['version'] = '3.5'; + attributes['appliedUpdates'] = ""; + + var done = assert.async(); + + var sampleUpdates = [ + new SheetUpgrade( + 'failed_update', + (resolve, reject) => { + getAttrs(['version'], values => { + reject('Proposital failure'); + }); + }, + 4.0 + ) + ]; + + this.sheetUpdater = new SheetUpdater(sampleUpdates, 'version', 'appliedUpdates'); + this.sheetUpdater.checkUpdates(result => { + getAttrs(['version'], values => { + assert.equal(values.version, 3.5); + assert.equal(result['failed_update'].success, false); + assert.equal(result['failed_update'].error, 'Proposital failure'); + done(); + }); + }); +}); + diff --git a/Esper_Genesis_5E/src/classes/SheetUtils/SheetUtils.js b/Esper_Genesis_5E/src/classes/SheetUtils/SheetUtils.js new file mode 100644 index 0000000000..9d2ac50f6c --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUtils/SheetUtils.js @@ -0,0 +1,82 @@ +class SheetUtils { + static getUID(value) { + const regexp = /-.{19}(?=_)|-.{19}$/g; + const valueAsString = String(value); + const match = valueAsString.match(regexp); + return (match) ? match.join() : ""; + } + static aOrAn(value) { + if(['a','e','i','o','u'].indexOf(value.toLowerCase()[0]) > -1) return `an ${value}`; + return `a ${value}`; + } + static toLowerCase(value) { + if(Array.isArray(value)) { + const lowerCaseArray = value.map(item => { return item.toLowerCase(); }); + return lowerCaseArray; + } + return String(value).toLowerCase(); + } + static toCapitalCase(value) { + if(Array.isArray(value)) { + const capitalCaseArray = value.map(item => { return item[0].toUpperCase() + item.toLowerCase().slice(1); }); + return capitalCaseArray; + } + return String(value)[0].toUpperCase() + String(value).toLowerCase().slice(1); + } + static getSectionOrder(section, callback) { + const sectionName = `repeating_${section}`; + const attributeName = `_reporder_${sectionName}`; + getAttrs([attributeName], attributes => { + let values = new Array(); + Object.keys(attributes).some(() => { + let results = SheetUtils.toLowerCase(attributes[attributeName].replace(/ /g, '').split(',')); + values = values.concat(results); + return true; + }); + getSectionIDs(sectionName, ids => { + const filteredOrder = new Set(); + const order = values.concat(SheetUtils.toLowerCase(ids)).filter(entry => { return SheetUtils.toLowerCase(ids).indexOf(entry) > -1; }); + order.forEach(item => { + filteredOrder.add(item); + }); + callback(Array.from(filteredOrder)); + }); + }); + } + static deepReadAttribute(attr, callback, defaultValue) { + if(/^(@{).+}$/.test(String(attr)) === true) { + const regExp = /@\{([^@\{\}]+)\}/; + const reference = regExp.exec(attr)[1]; + var self = this; + getAttrs([reference], function(v) { + if(!v[reference]) { + callback(defaultValue); + } else { + self.deepReadAttribute(v[reference], callback, defaultValue); + } + }); + } + else { + callback(attr); + } + } + static sanitizeXP(value) { + const trimmedValue = value.trim(); + if(!trimmedValue) return []; + const valueWithDecimalsRemoved = trimmedValue.replace(/,|\.| +/g, ''); + const regex = /[0-9]+/g; + let xp = valueWithDecimalsRemoved.match(regex); + if(Array.isArray(xp)) xp = xp.map(entry => { return parseInt(entry) }); + return xp; + } + static checkPath(obj, path, returnFalseOnEmpty = false) { + const sanitizedPath = path.replace(/\]\[|[\[,\]]/g, '.').replace(/\.+/g, '.').replace(/[",',]|\.$|^\./g, ''); + const properties = sanitizedPath.split('.'); + let level = obj; + for(let property = 0; property < properties.length; property++) { + if((returnFalseOnEmpty && !level[properties[property]]) || (!returnFalseOnEmpty && !(properties[property] in level))) return false; + level = level[properties[property]]; + } + return true; + } +} \ No newline at end of file diff --git a/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.html b/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.html new file mode 100644 index 0000000000..3ea3dfc38e --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.html @@ -0,0 +1,17 @@ + + + + + + SheetUtils Tests + + + +
    +
    + + + + + + diff --git a/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.js b/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.js new file mode 100644 index 0000000000..93f20e49d9 --- /dev/null +++ b/Esper_Genesis_5E/src/classes/SheetUtils/test/tests.js @@ -0,0 +1,173 @@ +QUnit.module('Basic Tests', { + before: function() { + maxAsyncDelay = 100; //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms. + }, + beforeEach: function() { + //Resets attributes before each test + attributes = {}; + sectionIDS = {}; + } +}); +QUnit.test('Sheet Utils returns correct UID', function( assert ) { + assert.equal(SheetUtils.getUID('repeating_npcreaction_-LzbTrhcIwpDwRZxfvEn_name'), '-LzbTrhcIwpDwRZxfvEn'); + assert.equal(SheetUtils.getUID('attr_wisdom'), ''); +}); + +QUnit.test('Sheet Utils returns a blank string when an invalid parameter is used', function( assert ) { + assert.equal(SheetUtils.getUID(12345), ''); + assert.equal(SheetUtils.getUID(null), ''); + assert.equal(SheetUtils.getUID(undefined), ''); + assert.equal(SheetUtils.getUID({}), ''); + assert.equal(SheetUtils.getUID(), ''); + assert.equal(SheetUtils.getUID([]), ''); +}); + +QUnit.test('Sheet Utils return the order a repeating section.', function(assert) { + attributes['_reporder_repeating_section'] = "-LzbTrhcIwpDwRZxfvEn,-MzbTrhcIwpDwRZxfvEn"; + sectionIDS['repeating_section'] = ['-MzbTrhcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn']; + var done = assert.async(); + SheetUtils.getSectionOrder('section', ids => { + assert.equal(ids.join(','), attributes['_reporder_repeating_section'].toLowerCase()); + done(); + }); +}); + +QUnit.test('Sheet Utils section IDs when no ordering is found', function(assert) { + sectionIDS['repeating_section'] = ['-MzbTrhcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn']; + var done = assert.async(); + SheetUtils.getSectionOrder('section', ids => { + assert.equal(ids.join(','), sectionIDS['repeating_section'].join(',').toLowerCase()); + done(); + }); +}); + +QUnit.test('Sheet Utils returns correct lowered case array', function( assert ) { + assert.equal(SheetUtils.toLowerCase(['Something', 'SOMETHINGELSE']).join(' '), 'something somethingelse'); +}); + +QUnit.test('Sheet Utils returns correct capitalized case array', function( assert ) { + assert.equal(SheetUtils.toCapitalCase(['something', 'SOMETHINGELSE']).join(' '), 'Something Somethingelse'); +}); + +QUnit.test('Sheet Utils returns correct deep read attributes', function( assert ) { + attributes['hitdie_1'] = '6'; + attributes['hitdie_2'] = '@{hitdie_2A}'; + attributes['hitdie_2A'] = '8'; + attributes['hitdie_3'] = 3; + attributes['hitdie_4'] = '["something"]'; + attributes['hitdie_6'] = '6'; + var done_1 = assert.async(); + var done_2 = assert.async(); + var done_3 = assert.async(); + var done_4 = assert.async(); + var done_5 = assert.async(); + var done_6 = assert.async(); + var done_7 = assert.async(); + var done_8 = assert.async(); + SheetUtils.deepReadAttribute('@{hitdie_1}', value => { + assert.equal(value, '6'); + done_1(); + }, '2'); + SheetUtils.deepReadAttribute('@{hitdie_2}', value => { + assert.equal(value, '8'); + done_2(); + }, '2'); + SheetUtils.deepReadAttribute('@{hitdie_3}', value => { + assert.equal(value, '3'); + done_3(); + }, '2'); + SheetUtils.deepReadAttribute('@{hitdie_4}', value => { + assert.equal(value, '["something"]'); + done_4(); + }, '2'); + SheetUtils.deepReadAttribute('@{hitdie_5}', value => { + assert.equal(value, '2'); + done_5(); + }, '2'); + SheetUtils.deepReadAttribute('@{hitdie_5}', value => { + assert.equal(value, undefined); + done_6(); + }); + SheetUtils.deepReadAttribute('{hitdie_6}', value => { + assert.equal(value, '{hitdie_6}'); + done_7(); + }); + SheetUtils.deepReadAttribute('something@{hitdie_6}', value => { + assert.equal(value, 'something@{hitdie_6}'); + done_8(); + }); +}); + +QUnit.test('Invalid ordered itens are removed from result', function(assert) { + attributes['ui_flags'] = 'a_flag another_flag repeating_traits_0_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_1_name_-MzbTrhcIwpDwRZxfvEn'; + attributes['_reporder_repeating_traits'] = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn,-InvalidIwpDwRZxfvEn'; + sectionIDS['repeating_traits'] = ['-FirsThcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn', '-MzbTrhcIwpDwRZxfvEn']; + var done = assert.async(); + SheetUtils.getSectionOrder('traits', order => { + console.log(order); + var expected = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn,-FirsThcIwpDwRZxfvEn'; + assert.equal(order.join(','), SheetUtils.toLowerCase(expected)); + done(); + }); +}); + +QUnit.only('utils return valid experience points', function(assert) { + var xp_char_1 = '10000'; + var xp_char_2 = '10,000'; + var xp_char_3 = '10.000'; + var xp_char_4 = '10000 / 30000'; + var xp_char_5 = '10,000 /30.000'; + var xp_char_6 = '10.000\\30.000'; + var xp_char_7 = '10,000 |30.000'; + var xp_char_8 = '10,000 : 30.000'; + var xp_char_9 = '1.010,000-2.030.000'; + var xp_char_10 = '1 010 000- 2.030.000'; + var xp_char_11 = '1 010 000 2.030.000'; + var xp_char_12 = 'abcde 10000 / 30000sdse'; + var invalidXP = 'abcdef'; + var blankXPField = ''; + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_1)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_2)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_3)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_4)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_4)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_5)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_5)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_6)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_6)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_7)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_7)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_8)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_8)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_9)[0], 1010000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_9)[1], 2030000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_10)[0], 1010000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_10)[1], 2030000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_11)[0], 10100002030000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_12)[0], 10000); + assert.strictEqual(SheetUtils.sanitizeXP(xp_char_12)[1], 30000); + assert.strictEqual(SheetUtils.sanitizeXP(invalidXP), null); + assert.strictEqual(SheetUtils.sanitizeXP(blankXPField).length, 0); +}); + +QUnit.test('Sheet Utils checks object path', function( assert ) { + var my_obj = { + ["teste teste"]: { + another: { + empty: "" + } + } + }; + var path_1 = "['teste teste']['another']['empty']"; + var path_2 = "['teste teste'].another.empty"; + var path_3 = "['teste teste'].another['empty']"; + var path_4 = "['teste teste'].noexisting['empty']"; + assert.equal(SheetUtils.checkPath(my_obj, path_1), true); + assert.equal(SheetUtils.checkPath(my_obj, path_1, true), false); + assert.equal(SheetUtils.checkPath(my_obj, path_2), true); + assert.equal(SheetUtils.checkPath(my_obj, path_2, true), false); + assert.equal(SheetUtils.checkPath(my_obj, path_3), true); + assert.equal(SheetUtils.checkPath(my_obj, path_3, true), false); + assert.equal(SheetUtils.checkPath(my_obj, path_4), false); + assert.equal(SheetUtils.checkPath(my_obj, path_4, true), false); +}); diff --git a/Esper_Genesis_5E/src/dragndrop/DragAndDrop.js b/Esper_Genesis_5E/src/dragndrop/DragAndDrop.js new file mode 100644 index 0000000000..73c64ffd4e --- /dev/null +++ b/Esper_Genesis_5E/src/dragndrop/DragAndDrop.js @@ -0,0 +1,1311 @@ +on("change:drop_category", function(eventinfo) { + if(eventinfo.newValue && (eventinfo.newValue === "Monsters" || eventinfo.newValue === "Ships")) { + getAttrs(["class","race","speed","hp"], function(v) { + if(eventinfo.newValue === "Ships") { + setAttrs({npc_tab: "ships"}); + } + if(v["class"] != "" || v["race"] != "" || v["speed"] != "" || v["hp"] != "") { + setAttrs({monster_confirm_flag: 1}); + } + else { + handle_drop(eventinfo.newValue); + } + }); + } else if(eventinfo.newValue) { + handle_drop(eventinfo.newValue); + } +}); + +var lastDropID = ''; +var handle_drop = function(category, eventinfo) { + getAttrs(["speed", "hp_max", "hp", "drop_name", "drop_data", "drop_content", "character_id", "npc_legendary_actions", "strength_mod", "dexterity_mod", "npc", "base_level", "strength_base", "dexterity_base", "constitution_base", "wisdom_base", "intelligence_base", "charisma_base", "class_resource_name", "other_resource_name", "multiclass1_lvl", "multiclass2_lvl", "multiclass3_lvl"], function(v) { + if((v['drop_name'] && v['drop_name'] == lastDropID) || (v['character_id'] && v['character_id'] == lastDropID)) return; + if(v['drop_name']) { + lastDropID = v['drop_name']; + } else if(v['character_id']) { + lastDropID = v['character_id']; + } + var pagedata = {}; + try { + pagedata = JSON.parse(v.drop_data); + } catch(e) { + pagedata = v.drop_data; + } + var page = { + name: v.drop_name, + data: pagedata, + content: v.drop_content + }; + var category = page.data["Category"]; + get_repeating_data(function(repeating) { + var results = processDrop(page, v, repeating); + setAttrs(results.update, {silent: true}, function() { + results.callbacks.forEach(function(callback) {callback(); }) + }); + }); + + }); + +}; + +var processDrop = function(page, currentData, repeating, looped) { + var numUses = function(uses_string) { + uses_string = parseValues(uses_string); + + var terms = uses_string.split("+"); + var total = 0; + _.each(terms, function(term) { + total += parseInt(term); + }); + return uses_string === "" || uses_string === "-" ? uses_string : total; + }; + var parseValues = function(uses_string) { + var attribs = ["strength", "dexterity", "constitution", "wisdom", "intelligence", "charisma"]; + uses_string = uses_string ? uses_string.toLowerCase() : ""; + _.each(attribs, function(attrib) { + var attribMod = Math.floor((parseInt(currentData[attrib + "_base"]) - 10) / 2); + if (attribMod < 0 || isNaN(attribMod)) attribMod = 0; + uses_string = uses_string.replace(attrib, attribMod); + }); + uses_string = uses_string.replace(/half_level/g, Math.floor(classlevel/2)); + return uses_string.replace(/level/g, classlevel); + }; + const category = page.data["Category"]; + let callbacks = []; + let update = {}; + let blobs = {}; + let classlevel = currentData.base_level ? parseInt(currentData.base_level) : 1; + repeating.traits = repeating.traits ? repeating.traits : []; + ["drop_category", "drop_name", "drop_data", "drop_content"].forEach(attr => update[attr] = ""); + + const coreDrops = ['Classes', 'Backgrounds', 'Feats', 'Items', 'Proficiencies', 'Races', 'Subraces', 'Other Options and Features']; + if (coreDrops.includes(category)) { + update["tab"] = "core"; + } + + const assignUpdate = newData => Object.assign(update, newData); + + const processItems = () => { + try { + const itemType = page.data["Item Type"] ? page.data["Item Type"] : category; + const npc = currentData.npc === "0" ? false : true; + + if (!npc) { + let newObject = new Item(page.name) + + page.data["itemcount"] ? newObject.attributes.itemcount = page.data["itemcount"] : false; + + ["Properties", "Weight"].forEach(attribute => { + const attributeLowercase = attribute.toLowerCase(); + page.data[`${attribute}`] ? newObject.attributes[`item${attributeLowercase}`] = page.data[`${attribute}`] : false + }); + + page.content ? newObject.attributes.itemcontent = page.content : false; + + newObject.attributes.itemmodifiers = dropFunctions.buildItemModString(page) + + //ATTACK items such as Weapons + itemType.toLowerCase().includes('weapon') ? newObject.attributes.hasattack = 1 : false; + + if (page.data.AC && !looped) { + callbacks.push(() => update_ac() ); + } + + if (page.data.Modifiers && page.data.Modifiers != "") { + callbacks.push(() => { + check_itemmodifiers(page.data.Modifiers); + }); + }; + + //Create attacks for weapons. Create two attacks for versatile weapons such as Longsword. + if (newObject.attributes.hasattack === 1) { + callbacks.push(() => { + page.data["Alternate Damage"] && page.data["Alternate Damage"] !== "" ? create_attack_from_item(newObject.reprowid, {versatile: true}) : create_attack_from_item(newObject.reprowid); + }); + } + + if (itemType.toLowerCase() === "ammunition") { + newObject.attributes.useasresource = 1 + callbacks.push(() => { + create_resource_from_item(newObject.reprowid); + }); + } + + if (!looped) { + callbacks.push(() => { + update_weight(); + }); + } + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } else if (npc && itemType.toLowerCase().includes("weapon")) { + const properties = page.data["Properties"] ? page.data["Properties"].toLowerCase() : "none"; + let newObject = new NpcAction(page.name, 'npcaction') + newObject.addAttack() + + page.data['Item Type'] ? newObject.attributes.attack_type = page.data['Item Type'] : false; + page.content ? newObject.attributes.description = page.content : false; + + newObject.attributes.attack_tohit = dropFunctions.buildToHit(page, currentData) + + const damageModifiers = dropFunctions.inferAbilityModifier(page.data["Item Type"], page.data["Properties"], currentData) + newObject.attributes.attack_damage = dropFunctions.buildDamage(page, damageModifiers) + page.data["Damage Type"] ? newObject.attributes.attack_damagetype = page.data["Damage Type"] : false; + page.data["Secondary Damage"] && !page.name.includes('+') ? newObject.attributes.attack_damage2 = page.data["Secondary Damage"] : false; + page.data["Secondary Damage Type"] && !page.name.includes('+') ? newObject.attributes.attack_damagetype2 = page.data["Secondary Damage Type"] : false; + + properties.includes("versatile") ? newObject.attributes.name = `${newObject.attributes.name} (One-Handed)` : false + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + //Versatile creates two attacks + if (properties.includes("versatile") && (page.data["Alternate Damage"] || page.data["Secondary Damage"])) { + let alternateAttack = new NpcAction(`${page.name} (Two-Handed)`, 'npcaction'); + alternateAttack.addAttack() + alternateAttack.attributes.attack_type = newObject.attributes.attack_type; + alternateAttack.attributes.description = newObject.attributes.description; + + if (page.data["Alternate Damage"]) { + alternateAttack.attributes.attack_damage = dropFunctions.buildDamage(page, damageModifiers, page.data["Alternate Damage"]) + page.data["Alternate Damage Type"] ? alternateAttack.attributes.attack_damagetype = page.data["Alternate Damage Type"] : false; + page.data["Alternate Secondary Damage"] ? alternateAttack.attributes.attack_damage2 = page.data["Alternate Secondary Damage"] : false; + page.data["Alternate Secondary Damage Type"] ? alternateAttack.attributes.attack_damagetype2 = page.data["Alternate Secondary Damage Type"] : false; + } else { + alternateAttack.attributes.attack_damage = dropFunctions.buildDamage(page, damageModifiers, page.data["Secondary Damage"]) + } + + assignUpdate(dropFunctions.updateSheetAttributes(alternateAttack)); + } + + if (properties.includes("thrown")) { + let thrownAttack = new NpcAction(`${page.name} (Thrown)`, 'npcaction'); + thrownAttack.addAttack() + page.data["Range"] ? thrownAttack.attributes.attack_range = page.data["Range"] : false; + thrownAttack.attributes.attack_type = "Range Weapon"; + + ['description', 'attack_tohit', 'attack_damage', 'attack_damagetype', 'attack_damage2', 'attack_damagetype2'].forEach(attr => { + thrownAttack.attributes[`${attr}`] = newObject.attributes[`${attr}`] + }) + + assignUpdate(dropFunctions.updateSheetAttributes(thrownAttack)); + } + + if (page.data.Modifiers) { + callbacks.push(() => { check_itemmodifiers(page.data.Modifiers); }, () => { update_npc_action("all"); }); + } else { + callbacks.push(() => { update_npc_action("all"); }); + }; + } else { + warningMessage('processItems', `Only weapon drops are supported for npcs. For npcs, "Item Type" in the Compendium must include the word "weapon".`); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processSpells = () => { + try { + if(page.name) { + const spellLevel = page.data["Rank"] && page.data["Rank"] > 0 ? page.data["Rank"] : "prime"; + const section = `spell-${spellLevel}` + let existing = {id: false}; + + for (let [key, value] of Object.entries(repeating[`${section}`])) { + value.spellname === page.name ? existing.spellattackid = value.spellattackid : false; + value.spellname === page.name ? existing.id = key: false; + } + + + let newObject = new Spell(page.name, section, existing.id); + newObject.attributes.spelllevel = spellLevel; + + const dropSheetAssocitation = { + spelldescription: page.data['data-description'], + spellschool: page.data['Domain'].toLowerCase(), + spellclass: page.data['spellclass'], + spellsource: page.data['spellsource'], + spellritual: page.data['Ritual'], + spelldmgmod: page.data['Add Casting Modifier'], + spellcomp_materials: page.data['Material'], + spelldamage2: page.data['Secondary Damage'], + spellcastingtime: page.data['Casting Time'], + spelldamagetype: page.data['Damage Type'], + spelldamage: page.data['Damage'], + spellduration: page.data['Duration'], + spellhealing: page.data['Healing'], + spellrange: page.data['Range'], + spellsave: page.data['Save'], + spellsavesuccess: page.data['Save Success'], + spelldamagetype2: page.data['Secondary Damage Type'], + spelltarget: page.data['Target'], + spellhlbonus: page.data['Higher Spell Slot Bonus'], + spellathigherlevels: page.data['Higher Spell Slot Desc'], + spellhldie: page.data['Higher Spell Slot Dice'], + spellhldietype: page.data['Higher Spell Slot Die'], + spellattack: page.data['Spell Attack'] + } + + for (let [key, value] of Object.entries(dropSheetAssocitation)) { + value ? newObject.attributes[`${key}`] = value : false; + } + + page.data['Spellcasting Ability'] ? newObject.attributes.spell_ability = `@{${page.data['Spellcasting Ability'].toLowerCase()}_mod}+` : false; + page.data['Concentration'] ? newObject.attributes.spellconcentration = '{{concentration=1}}' : false; + page.data['Innate'] ? newObject.attributes.innate = page.data['Innate'] : false; + + if (page.data['Components']) { + ['v', 's', 'm'].forEach(component => { + const componentCheck = dropFunctions.determineComponent(page.data['Components'], component) + newObject.attributes[`spellcomp_${component}`] = componentCheck ? componentCheck : 0; + }) + } + + if (page.data['Damage'] || page.data['Healing']) { + newObject.attributes.spelloutput = 'ATTACK' + + callbacks.push(() => { + create_attack_from_spell(spellLevel, newObject.reprowid, currentData.character_id, existing.spellattackid); + }); + } + + + if (newObject.attributes.spelloutput != 'ATTACK' && page.data['Higher Spell Slot Desc']) { + newObject.attributes.rollcontent = dropFunctions.buildSpellQuery(page.data['Level']); + } + + //Character sheet accepts 'dice', 'beam', or none + if (page.data['data-Cantrip Scaling']) { + const validateCantripScaling = dropFunctions.validateCantripScaling(page.data['data-Cantrip Scaling']) + if (validateCantripScaling) { + newObject.attributes.spell_damage_progression = dropFunctions.buildCantripScaling(page.data['data-Cantrip Scaling']) + } else { + newObject.attributes.spell_damage_progression = '' + } + } + const assignedRowID = (newObject.reprowid) ? newObject.reprowid : generateRowID(); + repeating[`${section}`][assignedRowID] = { spellname: page.name }; + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processMonsters = (ship = false) => { + try { + let newObject = new Npc(page.name); + newObject.addSkills(globalAttributesByCategory.skills.all()) + newObject.addSaves(globalAttributesByCategory.abilities) + + globalAttributesByCategory.abilities.forEach(ability => { + const abbreviation = ability.slice(0, 3).toUpperCase(); + page.data[`${abbreviation}`] ? newObject.attributes[`${ability}_base`] = page.data[`${abbreviation}`] : false; + callbacks.push(() => { + update_attr(`${ability}`); + }); + }); + + const dropSheetAssocitation = { + token_size: page.data["Token Size"], + npc_condition_immunities: page.data["Condition Immunities"], + npc_immunities: page.data["Immunities"], + npc_languages: page.data["Languages"], + npc_vulnerabilities: page.data["Vulnerabilities"], + npc_resistances: page.data["Resistances"], + npc_speed: page.data["Speed"], + npc_challenge: page.data["Challenge Rating"], + } + + if(ship) { + dropSheetAssocitation['npc_piloting_flag'] = 1; + dropSheetAssocitation['npc_md'] = page.data['Maneuver Defense']; + dropSheetAssocitation['npc_mnv_save'] = page.data['Maneuver Save DC']; + dropSheetAssocitation['ship_si'] = page.data['Structural Integrity']; + dropSheetAssocitation['ship_senses'] = page.data['Sensor Range']; + } + + for (let [key, value] of Object.entries(dropSheetAssocitation)) { + value ? newObject.attributes[`${key}`] = value : false; + } + + page.data["data-XP"] ? newObject.attributes.npc_xp = page.data["data-XP"].toString().replace(",","") : false + + Object.assign(newObject.attributes, dropFunctions.inferSavingThrows(page.data['Saving Throws'])) + Object.assign(newObject.attributes, dropFunctions.inferSkills(page.data['Skills'])) + + newObject.attributes.npc_type = dropFunctions.buildType(page.data["Size"], page.data["Type"], page.data["Alignment"]) + + newObject.attributes.npc_senses = dropFunctions.buildSenses(page.data['Senses'], page.data['Passive Perception']) + + page.data['AC'] ? newObject.attributes.npc_ac = dropFunctions.inferBaseAttribute(page.data['AC']) : false; + page.data['AC'] ? newObject.attributes.npc_actype = dropFunctions.inferFormulaAttribute(page.data['AC']) : false; + + page.data['HP'] ? newObject.attributes.hp_max = dropFunctions.inferBaseAttribute(page.data['HP']) : false; + page.data['HP'] ? newObject.attributes.npc_hpformula = dropFunctions.inferFormulaAttribute(page.data['HP']) : false; + + const npcRepeating = ['npcaction-l', 'npcreaction', 'npcaction', 'npctrait']; + _.each(npcRepeating, section => { + getSectionIDs(`repeating_${section}`, idarray => { + _.each(idarray, (currentID, i) => { + removeRepeatingRow(`repeating_${section}_${currentID}`); + }); + }); + }); + + if (page.data["data-Legendary Actions"]) { + const actionCount = page.data["data-LANum"] ? page.data["data-LANum"] : 3; + newObject.attributes.npc_legendary_actions = actionCount + + if (page.data["Legendary Actions Desc"]) { + newObject.attributes.npc_legendary_actions_desc = page.data["Legendary Actions Desc"]; + } else { + newObject.attributes.npc_legendary_actions_desc = `The ${page.name} can take ${actionCount}, choosing from the options below. Only one legendary option can be used at a time and only at the end of another creature's turn. The ${page.name} regains spent legendary actions at the start of its turn.` + } + } + + if (page.data["data-Mythic Actions"]) { + newObject.attributes.npc_mythic_actions = 1 + + if (page.data["data-MAdesc"]) { + newObject.attributes.npc_mythic_actions_desc = page.data["data-MAdesc"]; + } else { + //TODO UC1098 + newObject.attributes.npc_legendary_actions_desc = ``; + } + } + + ["Actions", "Legendary Actions", "Mythic Actions"].forEach(attr => { + if (page.data[`data-${attr}`]) { + const fieldsetLookup = { + "Actions": "npcaction", + "Legendary Actions": "npcaction-l", + "Mythic Actions": "npcaction-m" + } + const repeatingFieldset = fieldsetLookup[attr]; + const actions = dropFunctions.jsonParse(page.data[`data-${attr}`]) + actions.forEach(action => { + let newAction = new NpcAction(action['Name'], repeatingFieldset); + + action["Desc"] ? newAction.attributes.description = action["Desc"] : false; + + if (action["Type Attack"]) { + newAction.addAttack() + const dropSheetAttackAssocitation = { + attack_damagetype: action['Damage Type'], + attack_damage: action['Damage'], + attack_tohit: action['Hit Bonus'], + attack_range: action['Reach'], + attack_target: action['Target'], + attack_type: action['Type'], + attack_damage2: action['Damage 2'], + attack_damagetype2: action['Damage 2 Type'] + } + + for (let [key, value] of Object.entries(dropSheetAttackAssocitation)) { + value ? newAction.attributes[`${key}`] = value : false; + } + } + + assignUpdate(dropFunctions.updateSheetAttributes(newAction)); + }); + } + }); + + + if (page.data["data-Reactions"]) { + newObject.attributes.npcreactionsflag = 1 + const reactions = dropFunctions.jsonParse(page.data[`data-Reactions`]) + reactions.forEach(reaction => { + let newReaction = new NpcReaction(reaction['Name']); + reaction["Desc"] ? newReaction.attributes.description = reaction["Desc"] : false; + assignUpdate(dropFunctions.updateSheetAttributes(newReaction)); + }) + } + + if (page.data["data-Traits"]) { + const traits = dropFunctions.jsonParse(page.data[`data-Traits`]) + + traits.forEach(trait => { + let newTrait = new NpcTraits(trait['Name']); + trait["Desc"] ? newTrait.attributes.description = trait["Desc"] : false; + + if (trait.Name.match(/(?!innate )(?:^.{0,6}|.{7})(spellcasting)/i)) { + let spellCastingAbility = page.data["Spellcasting Ability"]; + + if (spellCastingAbility) { + spellCastingAbility = `@{${spellCastingAbility.toLowerCase()}_mod}+` + } else { + spellCastingAbility = dropFunctions.inferSpellcastingAbility(newTrait.attributes.description) + } + + const casterLevels = dropFunctions.inferCasterLevel(trait['Desc']); + newObject.addSpellcaster(spellCastingAbility, casterLevels) + + callbacks.push(() => update_pb()); + callbacks.push(() => update_spell_slots()); + } else if (trait.Name.match(/innate powers/i)) { + let spellCastingAbility = page.data["Spellcasting Ability"]; + newObject.addInnateCaster() + + spellCastingAbility ? newObject.attributes.spellcasting_ability = `@{${spellCastingAbility.toLowerCase()}_mod}+` : false; + } + + assignUpdate(dropFunctions.updateSheetAttributes(newTrait)); + }) + } + + if (page.data["data-Powers"]) { + const spellList = dropFunctions.buildSpellList(page.data["data-Powers"]); + getCompendiumPage(spellList, compendiumPages => { + compendiumPages = removeDuplicatedPageData(compendiumPages); + compendiumPages = Array.isArray(compendiumPages) ? compendiumPages : [compendiumPages]; + const innateSpellLists = dropFunctions.jsonParse(page.data["data-Powers"])[`innate`] || false; + let spellUpdate = {}, spellCallbacks = []; + + compendiumPages.forEach(spellPage => { + const processedSpell = processDrop(spellPage, currentData, repeating); + Object.assign(spellUpdate, processedSpell.update); + processedSpell.callbacks.forEach(callback => spellCallbacks.push(callback)); + }); + + if (innateSpellLists) { + //Search each keys in INNATE to see if spell name === one of the Values + for (let [innateKey, innateValue] of Object.entries(innateSpellLists)) { + innateValue.forEach(spellName => { + for (let [key, value] of Object.entries(spellUpdate)) { + if (key.includes('_spellname') && (value === spellName || value.toLowerCase() === spellName)) { + const repeatingRow = key.split('_spellname')[0]; + spellUpdate[`${repeatingRow}_innate`] = innateKey + } + } + }); + }; + }; + + setAttrs(spellUpdate, {silent: true}, () => { + spellCallbacks.forEach(callback => { + callback(); + }); + }); + }); + } + + //Hack for existing NPCS + if (page.data["data-Spells"]) { + const spellList = dropFunctions.buildSpellList(page.data["data-Spells"]); + getCompendiumPage(spellList, compendiumPages => { + compendiumPages = removeDuplicatedPageData(compendiumPages); + compendiumPages = Array.isArray(compendiumPages) ? compendiumPages : [compendiumPages]; + const innateSpellLists = dropFunctions.jsonParse(page.data["data-Spells"])[`innate`] || false; + let spellUpdate = {}, spellCallbacks = []; + + compendiumPages.forEach(spellPage => { + const processedSpell = processDrop(spellPage, currentData, repeating); + Object.assign(spellUpdate, processedSpell.update); + processedSpell.callbacks.forEach(callback => spellCallbacks.push(callback)); + }); + + if (innateSpellLists) { + //Search each keys in INNATE to see if spell name === one of the Values + for (let [innateKey, innateValue] of Object.entries(innateSpellLists)) { + innateValue.forEach(spellName => { + for (let [key, value] of Object.entries(spellUpdate)) { + if (key.includes('_spellname') && (value === spellName || value.toLowerCase() === spellName)) { + const repeatingRow = key.split('_spellname')[0]; + spellUpdate[`${repeatingRow}_innate`] = innateKey + } + } + }); + }; + }; + + setAttrs(spellUpdate, {silent: true}, () => { + spellCallbacks.forEach(callback => { + callback(); + }); + }); + }); + } + + //Call backs + if (page.data["Saving Throws"]) { + callbacks.push(() => update_npc_saves() ); + }; + + if (page.data["Skills"]) { + callbacks.push(() => update_npc_skills() ); + }; + + if (page.data[`data-Actions`]) { + callbacks.push(() => update_npc_action("all")) + } + + if (update["npc_challenge"]) { + callbacks.push(() => update_challenge() ); + }; + + globalAttributesByCategory.abilities.forEach(ability => { + callbacks.push(() => update_attr(`${ability}`) ); + }); + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } catch (error) { + errorMessage(page.name, error); + } + } + + const processFeats = () => { + try { + const match = {name: page.name}; + let existing = _.findWhere(repeating.traits, match); + existing = existing ? existing : {}; + + let newObject = new Trait(page.name, existing.id || false); + newObject.attributes.description = page.data['data-Description'] || page.content + newObject.attributes.source = newObject.determineSource(category) + newObject.attributes.source_type = page.data["Properties"] || "" + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + existing = dropHelpers.updateRepeatingTraits(newObject, existing) + existing ? false : repeating.traits.push(existing); + } catch (error) { + errorMessage(page.name, error); + } + } + + const processProficiencies = () => { + try { + const proficiencies = globalAttributesByCategory.proficiencyTypes; + const tools = ["tool", "skillcustom"]; + let type = page.data["Type"] || ""; + type = proficiencies.includes(type.toUpperCase()) ? 'proficiencies' : tools.includes(type.toLowerCase()) ? 'tool' : type.toLowerCase() === 'skill' ? 'skill' : false; + + if (type === 'proficiencies') { + if (repeating.prof_names.indexOf(page.name.toLowerCase()) == -1) { + let newObject = new Proficiency(page.name) + proficiencies.includes(page.data["Type"].toUpperCase()) ? newObject.attributes.prof_type = page.data["Type"].toUpperCase() : false; + repeating.prof_names.push(page.name.toLowerCase()); + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } + } else if (type === 'tool') { + let existing = {id: false}; + existing.id = dropHelpers.findToolId(repeating.tool, page.name) + + let newObject = new ToolProficiency(page.name, existing.id) + page.data["toolbonus_base"] ? newObject.attributes.toolbonus_base = "(@{pb}*2)" : false; + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + existing = dropHelpers.updateRepeatingTools(newObject, existing) + repeating.tool[newObject.reprowid] = existing + repeating.prof_names.push(page.name.toLowerCase()); + + //Updates the displays for the tool... + callbacks.push(() => { + update_tool(newObject.reprowid); + }); + } else if (type === 'skill') { + let newObject = new Skill(page.name) + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } else { + warningMessage(`${page.data["Type"]}`, `No an approved type. Accepted types are skill, ${proficiencies.concat(tools).join(' ,')}. Update compendium "Type".`); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processClass = () => { + try { + if (page.data.multiclass) { + if(page.name && page.name !== "") { update[page.data.multiclass] = page.name; } + update[page.data.multiclass + "_flag"] = "1"; + classlevel = parseInt(currentData[page.data.multiclass + "_lvl"]); + } else { + let newObject = new Class(page.name); + + if (page.data["Hit Die"] && page.data["Hit Die"] !== "") { + currentData.base_level ? newObject.attributes.base_level = currentData.base_level : false; + newObject.attributes.hit_dice_max = newObject.attributes.base_level + page.data["Hit Die"]; + newObject.attributes.hitdietype = page.data["Hit Die"].replace(/[^0-9]/g, ''); + newObject.attributes.hit_dice = newObject.attributes.base_level; + } + + const spellcastingAbility = page.data["Spellcasting Ability"] ? page.data["Spellcasting Ability"].toLowerCase() : false; + if (spellcastingAbility && globalAttributesByCategory.abilities.includes(spellcastingAbility)) { + newObject.attributes.spellcasting_ability = newObject.buildSpellcastingAbility(spellcastingAbility); + } + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } + + if (page.data["data-Saving Throws"] && !page.data.multiclass) { + const saves = Array.isArray(page.data["data-Saving Throws"]) ? page.data["data-Saving Throws"] : dropFunctions.jsonParse(page.data["data-Saving Throws"]); + saves.forEach(value => { + const save = new SavingThrow(value); + assignUpdate(dropFunctions.updateSheetAttributes(save)); + }); + } + + if(!looped) { + callbacks.push(update_class); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processSubclasses = () => { + try { + const lowercaseClass = page.data.Class.toLowerCase(); + if (page.data.multiclass) { + update[`${page.data.multiclass}_subclass`] = page.name; + classlevel = parseInt(currentData[`${page.data.multiclass}_lvl`]); + if (page.data["Spellcasting Ability"] && (lowercaseClass === 'fighter' || lowercaseClass === 'rogue')) { + update[`"arcane_${lowercaseClass}`] = "1"; + } + } else { + let newObject = new Subclass(page.name); + const spellcastingAbility = page.data["Spellcasting Ability"] ? page.data["Spellcasting Ability"].toLowerCase() : false; + if (spellcastingAbility && globalAttributesByCategory.abilities.includes(spellcastingAbility)) { + newObject.attributes.spellcasting_ability = newObject.buildSpellcastingAbility(spellcastingAbility); + if(newObject.checkArcane(lowercaseClass)) newObject.attributes[`arcane_${lowercaseClass}`] = 1; + } + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } + + if (!looped) { + callbacks.push(update_class); + }; + } catch (error) { + errorMessage(page.name, error); + } + } + + const processRaces = () => { + try { + let newObject = new Race(page.name) + + page.data['Size'] && page.data['Size'] != 'Medium' ? newObject.attributes.size = page.data['Size'] : false + page.data['Speed'] && page.data['Speed'] != 30 ? newObject.attributes.speed = page.data['Speed'] : false + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + if (!looped) { + callbacks.push(update_race_display); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processSubraces = () => { + try { + let newObject = new Subrace(page.name) + page.data['Size'] && page.data['Size'] ? newObject.attributes.size = page.data['Size'] : false + page.data['Speed'] && page.data['Speed'] ? newObject.attributes.speed = page.data['Speed'] : false + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + if (!looped) { + callbacks.push(update_race_display); + } + } catch (error) { + errorMessage(page.name, error); + } + } + + const processOtherOptionsAndFeatures = () => { + //Do nothing... + } + + const processBackgrounds = () => { + try { + update["background"] = page.name; + } catch (errorMessage) { + errorMessage(page.name, error); + } + } + + switch(category) { + case "Backgrounds": + processBackgrounds(); + break; + case "Classes": + processClass(); + break; + case "Feats": + processFeats(); + break; + case "Items": + processItems(); + break; + case "Monsters": + processMonsters(); + break; + case "Ships": + processMonsters(true); + case "Proficiencies": + processProficiencies(); + break; + case "Powers": + processSpells(); + break; + case "Subclasses": + processSubclasses(); + break; + case "Races": + processRaces(); + break + case "Subraces": + processSubraces(); + break; + case "Other Options and Features": + processOtherOptionsAndFeatures(); + break; + default: + errorMessage(category, `category does not match one of the drop functions conditions.`); + } + + if (page.data.theseblobs) { + _.each(page.data.theseblobs, function(blobname) { + if(page.data.blobs[blobname]) blobs[blobname] = page.data.blobs[blobname]; + }); + } else { + if(category === "Other Options and Features") { + blobs = page.data.blobs; + } else { + blobs = filterBlobs(page.data.blobs, {"Level": "1"}); + } + } + + for (let [blobName, blob] of Object.entries(blobs)) { + if (blob["Traits"]) { + try { + const traitArray = dropFunctions.jsonParse(blob["Traits"]); + if (traitArray && traitArray.length) { + traitArray.forEach(trait => { + if (!trait.Input && trait.Name) { + let match = {name: trait["Name"], type: page.name}; + if (trait["Replace"]) { + match = {name: trait["Replace"]}; + } + let existing = _.findWhere(repeating.traits, match); + existing = existing ? existing : {}; + + let newObject = new Trait(trait["Name"].replace(/{{Input}}/g, ""), existing.id || false); + newObject.attributes.source = newObject.determineSource(category) + trait["Desc"] ? newObject.attributes.description = trait["Desc"].replace(/{{Input}}/g, "") : false + page.name ? newObject.attributes.source_type = removeExpansionInfo(page.name) : false + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + existing = dropHelpers.updateRepeatingTraits(newObject, existing) + existing ? false : repeating.traits.push(existing); + + if (trait["Name"] === "Reliable Talent") { + update["reliable_talent"] = "10"; + } + + else if (trait["Name"] === "Powerful Build") { + update["powerful_build"] = "1"; + }; + } + }); + }; + } catch (error) { + errorMessage(trait.Name, error) + } + } + + ["Language Proficiency", "Weapon Proficiency", "Armor Proficiency"].forEach(proficiencyType => { + try { + const proficiencyArray = blob[`${proficiencyType}`] ? dropFunctions.jsonParse(blob[`${proficiencyType}`]) : false + if (proficiencyArray && proficiencyArray["Proficiencies"]) { + proficiencyArray["Proficiencies"].forEach(proficiency => { + if (repeating.prof_names.indexOf(proficiency.toLowerCase()) == -1) { + let newObject = new Proficiency(proficiency) + newObject.attributes.prof_type = proficiencyType.split(" Proficiency")[0].toUpperCase() + repeating.prof_names.push(proficiency.toLowerCase()); + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } + }) + } + } catch (error) { + errorMessage(proficiencyType, error) + } + }) + + if (blob["Tool Proficiency"]) { + try { + const toolArray = dropFunctions.jsonParse(blob["Tool Proficiency"]); + if(toolArray["Proficiencies"] && toolArray["Proficiencies"].length) { + toolArray["Proficiencies"].forEach(proficiency => { + let existing = {id: false} + existing.id = dropHelpers.findToolId(repeating.tool, proficiency) + + let newObject = new ToolProficiency(proficiency, existing.id) + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + existing = dropHelpers.updateRepeatingTools(newObject, existing) + repeating.tool[newObject.reprowid] = existing + repeating.prof_names.push(page.name.toLowerCase()); + + //Updates the displays for the tool... + callbacks.push(() => { + update_tool(newObject.reprowid); + }); + }) + } + } catch (error) { + errorMessage("Tool Proficiency", error) + } + } + + if (blob["Skill Proficiency"]) { + try { + const skillArray = dropFunctions.jsonParse(blob["Skill Proficiency"]); + if (skillArray["Proficiencies"] && skillArray["Proficiencies"].length) { + skillArray["Proficiencies"].forEach(proficiency => { + let newObject = new Skill(proficiency); + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + }); + callbacks.push(() => { + update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]); + }); + }; + } catch (error) { + errorMessage("Skill Proficiency", error) + } + } + + if (blob["Global Damage"]) { + try { + const dmgmod = dropFunctions.jsonParse(blob["Global Damage"]) + let existing = {} + + for (let [key, value] of Object.entries(repeating.damagemod)) { + value.toLowerCase() === dmgmod["Name"].toLowerCase() ? existing.id = key : false + } + + let newObject = new GlobalDamage(dmgmod["Name"], existing.id || false) + newObject.attributes.global_damage_damage = `${parseValues(dmgmod["Damage"])}` + dmgmod["Active"] == "true" ? newObject.attributes.global_damage_active_flag = 1 : false + newObject.attributes.global_damage_type = dmgmod["Type"] ? dmgmod["Type"] : dmgmod["Name"]; + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + update["global_damage_mod_flag"] = "1"; + + repeating.damagemod[newObject.reprowid] = dmgmod["Name"]; + } catch (error) { + errorMessage("Global Damage", error) + } + } + + if (blob["Actions"]) { + try { + let actionsObject = {} + dropFunctions.jsonParse(blob["Actions"]).forEach(value => actionsObject[value.Name] = value) + + for (let [actionName, action] of Object.entries(actionsObject)) { + let existing = {} + + for (let [key, value] of Object.entries(repeating.attack)) { + value.atkname === actionName ? existing.id = key : false + } + + let newObject = new Attack(actionName, existing.id || false) + action["Desc"] ? newObject.attributes.atk_desc = action["Desc"] : false + + if (action["Type Attack"]) { + if (action["Type"] === "Spell") { + newObject.attributes.atkflag = 0 + newObject.addSaveFlag() + } + + action["Reach"] ? newObject.attributes.atkrange = action["Reach"] : false + action["Damage"] ? newObject.attributes.dmgbase = action["Damage"] : false + !action["Damage"] ? newObject.attributes.dmgflag = 0 : false; + action["Damage Type"] ? newObject.attributes.dmgtype = action["Damage Type"] : false + + if (action["Modifier"]) { + if (action["Modifier"] === "FIN") { + newObject.checkFinesse(parseInt(currentData.strength_base), parseInt(currentData.dexterity_base)) + } else { + const actionModifier = dropFunctions.convertAbbreviationToAttribute(action["Modifier"]) + actionModifier && actionModifier != newObject.attributes.dmgattr ? newObject.attributes.dmgattr = actionModifier : false + actionModifier && actionModifier != newObject.attributes.atkattr_base ? newObject.attributes.atkattr_base = actionModifier : false + } + } else { + newObject.attributes.dmgattr = 0; + } + + action["Save"] ? newObject.attributes.saveattr = action["Save"] : false + action["Save Effect"] ? newObject.attributes.saveeffect = action["Save Effect"] : false + + if (action["Save DC"]) { + const saveDCModifier = dropFunctions.convertAbbreviationToAttribute(action["Save DC"]) + newObject.attributes.savedc = `(@{saveflat})`; + newObject.attributes.saveflat = `(8+@{pb}+${saveDCModifier})`; + } + + if (action["Damage 2"] && action["Damage 2 Type"]) { + newObject.attributes.dmg2flag = '{{damage=1}} {{dmg2flag=1}}' + newObject.attributes.atk_dmg2base = action["Damage 2"] + newObject.attributes.attack_damagetype2 = action["Damage 2 Type"] + + if (action["Modifier 2"]) { + newObject.attributes.dmg2attr = dropFunctions.convertAbbreviationToAttribute(action["Modifier 2"]) + } else { + newObject.attributes.dmgattr = 0 + } + } + } + + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + + repeating.attack[`${newObject.reprowid}`] = {atkname: newObject.attributes.atkname} + + callbacks.push(() => { + do_update_attack([`${newObject.reprowid}`]); + }); + } + } catch (error) { + errorMessage("Actions", error) + } + } + + if (blob["Resources"]) { + try { + const resourcesArray = dropFunctions.jsonParse(blob["Resources"]) + resourcesArray.forEach(resource => { + let section = undefined; + + const findCurrentResource = resourceName => { + if (currentData["class_resource_name"] === resourceName) { + return "class_resource" + } else if (currentData["other_resource_name"] === resourceName) { + return "other_resource" + } else { + for (let [repeatingIDKey, repeatingValue] of Object.entries(repeating.resource)) { + return Object.values(repeatingValue).includes(resourceName) ? repeatingIDKey : false + } + } + } + + //Testing this funtion to find an empty resource + const findEmptyResource = () => { + if (currentData["class_resource_name"].length === 0) { + return "class_resource" + } else if (currentData["other_resource_name"].length === 0) { + return "other_resource" + } else { + let foundEmptyString = false + for (let [repeatingIDKey, repeatingValue] of Object.entries(repeating.resource)) { + if (repeatingValue.left.length === 0) { + return `repeating_resource_${repeatingIDKey}_resource_left` + } else if (repeatingValue.right.length === 0) { + return `repeating_resource_${repeatingIDKey}_resource_right` + } else { + foundEmptyString = false + } + } + + return foundEmptyString + } + } + + let matchResource = findCurrentResource(resource.Name) + + if (matchResource) { + if (matchResource === "class_resource" || matchResource === "other_resource") { + section = matchResource + } else { + const repeatingSide = repeating.resource[matchResource].left === resource.Name ? "left" : "right" + section = `repeating_resource_${matchResource}_resource_${repeatingSide}` + } + } else { + section = findEmptyResource() + } + + //Section will be true if a repeating entry matches resource.Name or is has an empty side || + //class/other_resource match the resource.Name or are empty + if (section) { + update[`${section}_name`] = resource.Name + if (resource.Uses) update[section] = numUses(resource.Uses) + update[`${section}_max`] = resource.Max ? numUses(resource.Max) : numUses(resource.Uses) + + if (section === "class_resource" || section === "other_resource") { + currentData[`${section}_name`] = resource.Name + } else { + const sectionRepeatingId = section.split('_resource_')[1] + const sectionSide = section.includes('left') ? 'left' : 'right' + repeating.resource[`${sectionRepeatingId}`][sectionSide] = resource.Name + } + } else { + const newResource = new Resource(resource.Name) + newResource.attributes.resource_left = resource.Uses ? numUses(resource.Uses) : 0 + newResource.attributes.resource_left_max = resource.Max ? numUses(resource.Max) : newResource.attributes.resource_left + assignUpdate(dropFunctions.updateSheetAttributes(newResource)) + + const addRepeating = { + [`${newResource.reprowid}`]: { + left: resource.Name, + right: '' + } + } + Object.assign(repeating.resource, addRepeating) + } + }) + } catch (error) { + errorMessage("Resources", error) + } + } + + if (blob["Custom AC"]) { + try { + const parsedKey = dropFunctions.jsonParse(blob["Custom AC"]); + update["custom_ac_flag"] = "1"; + update["custom_ac_base"] = parsedKey.Base; + update["custom_ac_part1"] = parsedKey["Attribute 1"]; + update["custom_ac_part2"] = parsedKey["Attribute 2"] ? parsedKey["Attribute 2"] : ""; + update["custom_ac_shield"] = parsedKey.Shields; + if(!looped) { + callbacks.push( function() {update_ac();} ) + } + } catch (error) { + errorMessage("Custom AC", error) + } + } + + if (blob["Hit Points Per Level"]) { + try { + const parsedKey = dropFunctions.jsonParse(blob["Hit Points Per Level"]) + let existing = {} + for (let [key, value] of Object.entries(repeating.hpmod)) { + value.source === blobName ? existing.id = key : false + } + + let newObject = new HPMod(blobName, existing.id || false) + newObject.attributes.mod = blob["Hit Points Per Level"] + newObject.attributes.source = blobName + newObject.attributes.levels = category === "Races" || category === "Subraces" ? 'total' : 'base' + assignUpdate(dropFunctions.updateSheetAttributes(newObject)); + } catch (error) { + errorMessage("Hit Points Per Level", error) + } + } + + if (blob["Hit Points Bonus"]) { + let prevHp = update["hp"] || currentData["hp"]; + let prevHpMax = update["hp_max"] || currentData["hp_max"]; + prevHp = prevHp && !isNaN(parseInt(prevHp)) ? parseInt(prevHp) : 0; + prevHpMax = prevHpMax && !isNaN(parseInt(prevHpMax)) ? parseInt(prevHpMax) : 0; + update["hp"] = prevHp + parseInt(blob["Hit Points Bonus"]); + update["hp_max"] = prevHpMax + parseInt(blob["Hit Points Bonus"]); + } + + ["Global AC Mod", "Global Save", "Global Attack"].forEach(globalType => { + try { + if (blob[globalType]) { + const globalShortName = globalType.includes("Attack") ? "attack" : globalType.includes("Save") ? "save" : "ac"; + const repeatingKey = globalShortName === "attack" ? "tohitmod" : globalShortName === "save" ? "savemod" : "acmod"; + + const parsedKey = dropFunctions.jsonParse(blob[`${globalType}`]); + let existing = {id: false} + for (let [key, value] of Object.entries(repeating[`${repeatingKey}`])) { + value.includes(blobName) ? existing.id = key : false + } + + let newObject = {}; + if (globalType === "Global AC Mod") { + newObject = new GlobalACMod(parsedKey.Name, existing.id) + newObject.attributes.global_ac_val = parsedKey.Bonus + } else if (globalType === "Global Save") { + newObject = new GlobalSave(parsedKey.Name, existing.id) + newObject.attributes.global_save_roll = parsedKey.Bonus + } else { + newObject = new GlobalAttack(parsedKey.Name, existing.id) + newObject.addRoll(parsedKey.Bonus) + } + + parsedKey.Active !== "false" ? newObject.attributes[`global_${globalShortName}_active_flag`] = 1 : false + assignUpdate(dropFunctions.updateSheetAttributes(newObject)) + + update[`global_${globalShortName}_mod_flag`] = "1" + } + } catch (error) { + errorMessage(`${globalType}`, error) + } + }) + + if (blob["Initiative"]) { + if (blob["Initiative"].toLowerCase() === "advantage") { + update["initiative_style"] = "{@{d20},@{d20}}kh1"; + } else if (blob["Initiative"].toLowerCase() === "disadvantage") { + update["initiative_style"] = "{@{d20},@{d20}}kl1"; + } else { + update.initmod = numUses(blob["Initiative"]); + } + } + + if (blob["Carry Multiplier"]) { + update["carrying_capacity_mod"] = `*${blob["Carry Multiplier"]}` + } + + if (blob["Speed"]) { + try { + if (blob["Speed"][0] === "+") { + let prevspeed = update["speed"] || currentData["speed"]; + prevspeed = prevspeed && !isNaN(parseInt(prevspeed)) ? parseInt(prevspeed) : 0; + update["speed"] = prevspeed + parseInt(blob["Speed"]); + } else { + update["speed"] = parseInt(blob["Speed"]); + } + } catch (error) { + errorMessage("Speed", error) + } + } + + if (blob["Jack of All Trades"]) { + update["jack_of_all_trades"] = "@{jack}"; + } + + if (blob["Global Save Mod"]) { + update["globalsavemod"] = numUses(blob["Global Save Mod"]); + } + + if (blob["Saving Throws"]) { + try { + const parsedArray = dropFunctions.jsonParse(blob["Saving Throws"]) + parsedArray.forEach(value => { + const save = new SavingThrow(value); + assignUpdate(dropFunctions.updateSheetAttributes(save)); + }) + } catch (error) { + errorMessage("Saving Throws", error) + } + } + + if (blob["Proficiency Bonus"]) { + try { + const parsedBonus = dropFunctions.jsonParse(blob["Proficiency Bonus"]) + for (let [key, value] of Object.entries(parsedBonus)) { + update[`${key.replace(/ /g, "_").toLowerCase()}_flat`] = numUses(value); + } + update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]); + } catch (error) { + errorMessage("Proficiency Bonus", error) + } + } + + if (blob["Powers"]) { + try { + let spells = dropFunctions.jsonParse(blob["Powers"]); + let spellUpdate = {}, spellCallbacks = []; + let spellPages = []; + spells.forEach(spell => { + if(spell.Name) spellPages.push(spell.Name); + if(spell.Known) spellPages = spellPages.concat(spell.Known); + }); + spellPages = Array.from(new Set(spellPages)); + + getCompendiumPage(spellPages, spellData => { + var inSpellBook = function(name) { + let found = false; + const spellRepeating = ["prime", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; + spellRepeating.forEach(spellLevel => { + if(found) return; + if(repeating[`spell-${spellLevel}`]) { + Object.keys(repeating[`spell-${spellLevel}`]).forEach(entry => { + if(repeating[`spell-${spellLevel}`][entry]['spellname'] === name) { + found = true; + return; + } + }); + } + }); + return found; + }; + spellData = removeDuplicatedPageData(spellData); + spells.forEach(spellInformation => { + if(spellInformation.Known) { + spellInformation.Known.forEach(s => { + if(!inSpellBook(s)) { + const mockPage = { + name: s, + data: { + "Category": "Powers" + } + } + const pageData = (Array.isArray(spellData)) ? spellData.filter(entry => { return entry['name'] === s})[0] : spellData; + Object.assign(mockPage.data, pageData.data); + Object.assign(mockPage.data, spellInformation); + const processedSpell = processDrop(mockPage, currentData, repeating); + Object.assign(spellUpdate, processedSpell.update); + processedSpell.callbacks.forEach(callback => spellCallbacks.push(callback)); + } + }); + } else { + if(!inSpellBook(spellInformation.Name)) { + const mockPage = { + name: spellInformation.Name, + data: { + "Category": "Powers" + } + } + const pageData = (Array.isArray(spellData))? spellData.filter(entry => { return entry['name'] === spellInformation.Name})[0] : spellData; + Object.assign(mockPage.data, pageData.data); + Object.assign(mockPage.data, spellInformation); + const processedSpell = processDrop(mockPage, currentData, repeating); + Object.assign(spellUpdate, processedSpell.update); + processedSpell.callbacks.forEach(callback => spellCallbacks.push(callback)); + } + } + }); + if(Object.keys(spellUpdate).length > 0) { + setAttrs(spellUpdate, {silent: true}, () => { + spellCallbacks.forEach(callback => { + callback(); + }); + }); + } + }); + } catch (error) { + errorMessage("Powers", error) + } + } + + if (blob["Custom Powers"]) { + try { + let customSpells = dropFunctions.jsonParse(blob["Custom Powers"]); + let spellUpdate = {}, spellCallbacks = []; + customSpells.forEach(spellInformation => { + const mockPage = { + name: spellInformation.Name, + data: { + "Category": "Powers" + } + } + Object.assign(mockPage.data, spellInformation); + const processedSpell = processDrop(mockPage, currentData, repeating); + Object.assign(spellUpdate, processedSpell.update); + processedSpell.callbacks.forEach(callback => spellCallbacks.push(callback)); + }); + + setAttrs(spellUpdate, {silent: true}, () => { + spellCallbacks.forEach(callback => { + callback(); + }); + }); + } catch (error) { + errorMessage("Custom Powers", error) + } + } + } + + return { + update: update, + repeating: repeating, + callbacks: callbacks + }; +}; + + diff --git a/Esper_Genesis_5E/src/dragndrop/Untitled-4 b/Esper_Genesis_5E/src/dragndrop/Untitled-4 new file mode 100644 index 0000000000..4a0747d90a --- /dev/null +++ b/Esper_Genesis_5E/src/dragndrop/Untitled-4 @@ -0,0 +1,144 @@ +{ + "prof_names": [ + null + ], + "traits": [], + "tool": {}, + "resource": {}, + "spell-cantrip": { + "-MFfW8AR6oZEKGFWXSuh": { + "spellname": "Acid Splash" + }, + "-MFfW8LVt8dilLJZ27Zb": { + "spellname": "Mage Hand" + }, + "-MFfW9FdgrymZZJVsetq": { + "spellname": "Abhorrence" + }, + "-MFfWRCC1bJiqXRx3kmS": { + "spellname": "Mage Hand" + } + }, + "savemod": {}, + "tohitmod": {}, + "damagemod": { + "-MFfW5rVTPmIk4jJONn5": "Sneak Attack" + }, + "acmod": {}, + "skillmod": {}, + "attack": {}, + "hpmod": {}, + "spell-1": { + "-MFfW8Xd4HHlIOSga0if": { + "spellname": "Alarm" + }, + "-MFfW8hxFTdGqPb5BjPN": { + "spellname": "Adjust Positioning" + }, + "-MFfW917zuvp9uIegmdb": { + "spellname": "Ambush" + } + }, + "spell-2": {}, + "spell-3": {}, + "spell-4": {}, + "spell-5": {}, + "spell-6": {}, + "spell-7": {}, + "spell-8": {}, + "spell-9": {} +} + + +{ + "drop_category": "", + "drop_name": "", + "drop_data": "", + "drop_content": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_details-flag": 0, + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_options-flag": 0, + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_rollcontent": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spell_ability": "spell", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_innate": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spell_damage_progression": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellathigherlevels": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellattack": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellcastingtime": "1 action", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellclass": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellcomp_m": 0, + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellcomp_materials": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellcomp_s": "{{s=1}}", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellcomp_v": "{{v=1}}", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellconcentration": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldamage2": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldamage": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldamagetype2": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldamagetype": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldescription": "A spectral, floating hand appears at a point you choose within range. The hand lasts for the duration or until you dismiss it as an action. The hand vanishes if it is ever more than 30 feet away from you or if you cast this spell again. You can use your action to control the hand. You can use the hand to manipulate an object, open an unlocked door or container, stow or retrieve an item from an open container, or pour the contents out of a vial. You can move the hand up to 30 feet each time you use it. The hand can’t attack, activate magic items, or carry more than 10 pounds.", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelldmgmod": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellduration": "1 minute", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellhealing": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellhlbonus": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellhldie": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellhldietype": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelllevel": "cantrip", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellname": "Mage Hand", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelloutput": "SPELLCARD", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellrange": "30 feet", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellritual": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellsave": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellsavesuccess": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellschool": "Conjuration", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spellsource": "", + "repeating_spell-cantrip_-MFfW8LVt8dilLJZ27Zb_spelltarget": "A point you choose within range" +} + + + +const spellRepeating = ["cantrip", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; +const spellsFromUpdate = Object.keys(spellUpdate).filter(entry => { return entry.indexOf('_spellname') > -1; }); +spellsFromUpdate.forEach(spell => { + const spellName = spellUpdate[spell]; + const spellLevel = spellUpdate[spell.replace('_spellname', '_spelllevel')]; + let found = false; + if(repeating[`spell-${spellLevel}`]) { + Object.keys(repeating[`spell-${spellLevel}`]).forEach(entry => { + if(repeating[`spell-${spellLevel}`][entry]['spellname'] === spellName) { + found = true; + return; + } + }); + } + if(found) { + const uid = SheetUtils.getUID(spell); + const toRemove = Object.keys(spellUpdate).filter(entry => { return entry.indexOf(uid) > -1; }); + toRemove.forEach(entry => { + delete spellUpdate[entry]; + }); + } +}); + +const processedSpell = processDrop(mockPage, currentData, repeating); + +on processSpells() +const assignedRowID = (newObject.reprowid) ? newObject.reprowid : generateRowID(); +repeating[`${section}`][assignedRowID] = { spellname: page.name }; + + + +var inSpellBook = function(name) { + let found = false; + const spellRepeating = ["cantrip", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; + spellRepeating.forEach(spellLevel => { + if(found) return; + if(repeating[`spell-${spellLevel}`]) { + Object.keys(repeating[`spell-${spellLevel}`]).forEach(entry => { + if(repeating[`spell-${spellLevel}`][entry]['spellname'] === name) { + found = true; + return; + } + }); + } + }); + return found; +}; \ No newline at end of file diff --git a/Esper_Genesis_5E/src/dragndrop/dropFunctions.js b/Esper_Genesis_5E/src/dragndrop/dropFunctions.js new file mode 100644 index 0000000000..18716c09bd --- /dev/null +++ b/Esper_Genesis_5E/src/dragndrop/dropFunctions.js @@ -0,0 +1,268 @@ +const dropFunctions = { + validateCantripScaling: scaling => scaling === 'dice' || scaling === 'beam' ? true : false, + buildCantripScaling: scaling => `Cantrip ${scaling.charAt(0).toUpperCase()}${scaling.slice(1)}`, + + buildDamage: (page, currentData, alternateDamage) => { + try { + const modifiers = dropFunctions.inferAbilityModifier(page.data["Item Type"], page.data["Properties"], currentData) + let damage = alternateDamage ? alternateDamage : page.data[`Damage`]; + damage += modifiers && modifiers != 0 ? `+${modifiers}` : "" + damage += page.data["Modifiers"] ? dropFunctions.inferModifier(page.data["Modifiers"], 'damage') : "" + + return damage + } catch (error) { + console.error(error) + return '' + } + }, + + buildItemModString: page => { + try { + let mods = `Item Type: ${page.data["Item Type"] || page.data["Category"]}`; + + //Items with ac or attack related bonuses + ["AC", "Damage", "Damage Type", "Secondary Damage", "Secondary Damage Type", "Alternate Damage", "Alternate Damage Type", "Alternate Secondary Damage", "Alternate Secondary Damage Type", "Critical Range", "Range"].forEach(attr => { + mods += page.data[`${attr}`] && page.data[`${attr}`] != "" ? `, ${attr}: ${page.data[`${attr}`]}` : ""; + }); + + //Items with modifiers such as Cloak of Protection + mods += page.data["Modifiers"] && page.data["Modifiers"] != "" ? `, ${page.data["Modifiers"]}` : ""; + + return mods + } catch (error) { + console.error(error) + return '' + } + }, + + buildSpellQuery: spellLevel => { + try { + let spellQuery = "" + for(i = 0; i < 10-spellLevel; i++) { + const sum = (parseInt(i, 10) + parseInt(spellLevel, 10)) + spellQuery += `|Level ${sum},${sum}` + }; + + return `@{wtype}&{template:spell} {{level=@{spellschool} ?{Cast at what level?${spellQuery}}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{spellcomp_v} @{spellcomp_s} @{spellcomp_m} {{material=@{spellcomp_materials}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output}` + } catch (error) { + console.error(error) + } + }, + + buildToHit: (page, currentData) => { + try { + let hit = dropFunctions.inferAbilityModifier(page.data["Item Type"], page.data["Properties"], currentData); + hit += page.data["Modifiers"] ? dropFunctions.inferModifier(page.data["Modifiers"], 'attacks') : ""; + return hit + } catch (error) { + console.error(error) + return '' + } + }, + + buildSenses: (senses, passivePerception) => { + try { + return senses ? `${senses}, passive Perception ${passivePerception}` : `passive Perception ${passivePerception}`; + } catch (error) { + console.log(error) + return '' + } + }, + + buildSpellList: spells => { + try { + let spellList = [] + //Create an array of spells to get from the Comepndium + const spellTypes = ["spells", "innate"] + spellTypes.forEach(type => { + const spellObject = dropFunctions.jsonParse(spells)[type] + if (spellObject) { + for (let [key, value] of Object.entries(spellObject)) { + value.forEach(spell => spellList.push(spell)) + } + } + }) + return spellList + } catch (error) { + console.log(error) + } + }, + + buildType: (size, type, aligment) => { + let string = size || ""; + type ? string += ` ${type}` : false; + aligment ? string += `, ${aligment}`: false; + return string + }, + + confirmFinesse: properties => properties.toLowerCase().includes("finesse") ? true : false, + confirmRanged: itemType => itemType.toLowerCase().includes("ranged") ? true : false, + confirmDexGreaterThanStr: (dex, str) => dex > str ? true : false, + + convertAbbreviationToAttribute: threeLetterString => { + switch(threeLetterString.toLowerCase()) { + case "str": + return "@{strength_mod}"; + break; + case "dex": + return "@{dexterity_mod}"; + break; + case "con": + return "@{constitution_mod}"; + break; + case "wis": + return "@{wisdom_mod}"; + break; + case "int": + return "@{intelligence_mod}"; + break; + case "cha": + return "@{charisma_mod}"; + break; + default: + errorMessage("convertAbbreviationToAttribute", `${threeLetterString} did not match one of the expected types str, dex, con, wis, int, cha`) + return false + } + }, + + determineComponent: (componentList, component) => componentList.toLowerCase().includes(component) ? `{{${component}=1}}` : false, + + inferAbilityModifier: (type, properties, currentData) => { + try { + const ranged = type ? dropFunctions.confirmRanged(type) : false; + const finesse = properties ? dropFunctions.confirmFinesse(properties) : false; + const dexGreaterThanStr = dropFunctions.confirmDexGreaterThanStr(currentData.dexterity_mod, currentData.strength_mod); + + return ranged || (finesse && dexGreaterThanStr) ? currentData.dexterity_mod : currentData.strength_mod + } catch (error) { + console.log(error) + } + }, + + inferBaseAttribute: attribute => attribute.includes('(') ? attribute.split(" (")[0] : attribute, + + inferCasterLevel: description => parseInt(description.substring(description.indexOf("-level")-4, description.indexOf("-level")-2).trim(), 10) || 1, + + inferFormulaAttribute: attribute => attribute.includes('(') ? attribute.split(" (")[1].slice(0, -1) : "", + + inferModifier: (modifiers, type) => { + try { + let modifier = ""; + modifiers = modifiers.split(','); + modifiers.forEach(value => { + modifier += value.toLowerCase().includes(type) ? value.split(' ').pop() : "" + }); + return modifier + } catch (error) { + console.log(error) + return '' + } + }, + + inferSpellcastingAbility: description => { + let ability = description.match(/casting ability is (.*?) /); + ability = ability && ability.length > 1 ? ability[1] : false; + ability = ability ? `@{${ability.toLowerCase()}_mod}+` : "0*"; + return ability + }, + + inferSavingThrows: saves => { + try { + let object = {}; + if (saves) { + saves = saves.includes(', ') ? saves.split(", ") : [saves] + saves.forEach(saveValue => { + const split = saveValue.includes(' ') ? saveValue.split(' ') : errorMessage(`inferSavingThrows`, `${saveValue} does no include a space`) + const abbreviation = split[0].toLowerCase(); + object[`npc_${abbreviation}_save_base`] = split.pop(); + }); + } + return object + } catch (error) { + errorMessage('inferSavingThrows', error) + } + }, + + inferSkills: skills => { + try { + let object = {}; + if (skills) { + skills = skills.includes(', ') ? skills.split(", ") : [skills] + skills.forEach(skillValue => { + const split = skillValue.includes(' ') ? skillValue.split(' ') : errorMessage(`inferSkills`, `${skillValue} does no include a space`) + const value = split.pop(); + const name = split.length > 2 ? split.join("_").toLowerCase() : split.shift().toLowerCase(); + object[`npc_${name}_base`] = value; + }); + } + return object + } catch (error) { + errorMessage('inferSkills', error) + } + }, + + jsonParse: (data, defaultValue) => { + let result = null; + try { + result = JSON.parse(data); + } catch (error) { + switch(typeof defaultValue) { + case 'boolean': + case 'number': + case 'string': + case 'function': + result = (typeof data === typeof defaultValue) ? data : defaultValue; + break; + case 'object': + result = (typeof data === typeof defaultValue && data.constructor.name === defaultValue.constructor.name) ? data : defaultValue; + break; + default: + errorMessage('Invalid JSON', error); + } + } + return result; + }, + + updateSheetAttributes: newObjectForSheet => { + try { + let update = {}; + + for (let [key, value] of Object.entries(newObjectForSheet.attributes)) { + //If repeating section, update key needs the repeating information + const updateKey = newObjectForSheet.reprowid ? newObjectForSheet.addAttribute(key) : key; + + //This 'update' will be handed to a setAttrs function + update[updateKey] = newObjectForSheet.attributes[key]; + } + + return update + } catch (error) { + errorMessage(`updateSheetAttributes`, error); + } + } +} + +//These functions handle 'repeating' parameter of processDrop +const dropHelpers = { + findToolId: (repeatingTools, toolName) => { + let id = false + for(let [key, value] of Object.entries(repeatingTools)) { + value.toolname === toolName.toLowerCase() ? id = key : false; + } + return id + }, + updateRepeatingTools: (newTool, existingTool) => { + existingTool.id = newTool.reprowid + existingTool.toolname = newTool.attributes.toolname.toLowerCase() + existingTool.base = newTool.attributes.toolbonus_base + return existingTool + }, + updateRepeatingTraits: (newTrait, existingTrait) => { + existingTrait.id = newTrait.reprowid; + existingTrait.name = newTrait.attributes.name; + existingTrait.source = newTrait.attributes.source; + existingTrait.type = newTrait.attributes.source_type; + + return existingTrait + } +} diff --git a/Esper_Genesis_5E/src/dragndrop/tests/tests.html b/Esper_Genesis_5E/src/dragndrop/tests/tests.html new file mode 100644 index 0000000000..fb1aaeeb4d --- /dev/null +++ b/Esper_Genesis_5E/src/dragndrop/tests/tests.html @@ -0,0 +1,18 @@ + + + + + + dropFunctions + + + +
    +
    + + + + + + + diff --git a/Esper_Genesis_5E/src/dragndrop/tests/tests.js b/Esper_Genesis_5E/src/dragndrop/tests/tests.js new file mode 100644 index 0000000000..bcd987915d --- /dev/null +++ b/Esper_Genesis_5E/src/dragndrop/tests/tests.js @@ -0,0 +1,225 @@ +//These unit tests are incomplete +//Lacks tests for inferSavingThrows, inferSkills, jsonParse, updateSheetAttributes + +QUnit.module('dropFunctions tests', { + before: () => maxAsyncDelay = 100, //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms. + beforeEach: () => { + //Resets attributes before each test + attributes = {} + sectionIDS = {} + } +}) + +QUnit.test('validateCantripScaling returns true if parameter is dice or beam', assert => { + assert.equal(dropFunctions.validateCantripScaling('dice'), true) + assert.equal(dropFunctions.validateCantripScaling('beam'), true) +}) + +QUnit.test('buildCantripScaling returns string', assert => { + const actual = dropFunctions.buildCantripScaling('dice') + assert.equal(typeof actual, 'string') +}) + +QUnit.test('buildCantripScaling should add "Cantrip"', assert => { + const actual = dropFunctions.buildCantripScaling('dice') + assert.equal(actual.includes('Cantrip'), true) +}) + +QUnit.test('buildCantripScaling returns capitalize the first letter of parameter', assert => { + const actual = dropFunctions.buildCantripScaling('dice') + assert.equal(actual.includes('Dice'), true) +}) + +QUnit.test('buildItemModString returns an empty string when invalid parameter is used', assert => { + assert.equal(dropFunctions.buildItemModString(12345), '') + assert.equal(dropFunctions.buildItemModString(null), '') + assert.equal(dropFunctions.buildItemModString(undefined), '') + assert.equal(dropFunctions.buildItemModString({}), '') + assert.equal(dropFunctions.buildItemModString(), '') + assert.equal(dropFunctions.buildItemModString([]), '') +}) + +QUnit.test('buildItemModString returns a string', assert => { + const actual = dropFunctions.buildItemModString({data: {'Item Type': 'Weapon'}}) + assert.equal(typeof actual, 'string') +}) + +QUnit.test('buildItemModString add Item Type: ', assert => { + const actual = dropFunctions.buildItemModString({data: {'Item Type': 'Weapon'}}) + assert.equal(actual.includes('Item Type: '), true) +}) + +QUnit.test('buildDamage return a roll string', assert => { + const page = {data: {'Item Type': 'Melee Weapon', Properties: '', Damage: '1d8'}} + const currentData = {strength_mod: -2} + const actual = dropFunctions.buildDamage(page, currentData) + assert.equal(actual, '1d8+-2') +}) + +QUnit.test('buildDamage if alternateDamage parameter is provided use it', assert => { + const page = {data: {'Item Type': 'Melee Weapon', Properties: '', Damage: '1d8'}} + const currentData = {strength_mod: -2} + const actual = dropFunctions.buildDamage(page, currentData, '1d10') + assert.equal(actual, '1d10+-2') +}) + +QUnit.test('buildDamage if Modifiers key is present add it to damage', assert => { + const page = {data: {'Item Type': 'Melee Weapon', Properties: '', Damage: '1d8', Modifiers: 'Melee Attacks +1, Melee Damage +1'}} + const currentData = {strength_mod: 2} + const actual = dropFunctions.buildDamage(page, currentData) + assert.equal(actual, '1d8+2+1') +}) + +QUnit.test('buildDamage returns an empty string when invalid parameter is used', assert => { + assert.equal(dropFunctions.buildDamage(12345), '') + assert.equal(dropFunctions.buildDamage(null), '') + assert.equal(dropFunctions.buildDamage(undefined), '') + assert.equal(dropFunctions.buildDamage({}), '') + assert.equal(dropFunctions.buildDamage(), '') + assert.equal(dropFunctions.buildDamage([]), '') +}) + +QUnit.test('buildItemModString add the "Item Type" key to the string', assert => { + const actual = dropFunctions.buildItemModString({data: {'Item Type': 'Weapon', Category: 'Item'}}) + assert.equal(actual, 'Item Type: Weapon') +}) + +QUnit.test('buildItemModString if "Item Type" key is undefined use Category', assert => { + const actual = dropFunctions.buildItemModString({data: {Category: 'Item'}}) + assert.equal(actual, 'Item Type: Item') +}) + +QUnit.test('buildItemModString if page.data for item includes AC & Damage add it to the mod string', assert => { + const actual = dropFunctions.buildItemModString({data: {'Item Type': 'Armor', AC: '4', Damage: '1d4'}}) + assert.equal(actual, 'Item Type: Armor, AC: 4, Damage: 1d4') +}) + +QUnit.test('buildItemModString add entries from the Modifiers key to the mod string', assert => { + const actual = dropFunctions.buildItemModString({data: {'Item Type': 'Armor', Modifiers: 'Ac +1, Saving Throws +1'}}) + assert.equal(actual, 'Item Type: Armor, Ac +1, Saving Throws +1') +}) + +QUnit.test('buildSpellQuery returns a roll template', assert => { + const actual = dropFunctions.buildSpellQuery(3) + const expected = '@{wtype}&{template:spell} {{level=@{spellschool} ?{Cast at what level?|Level 3,3|Level 4,4|Level 5,5|Level 6,6|Level 7,7|Level 8,8|Level 9,9}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{spellcomp_v} @{spellcomp_s} @{spellcomp_m} {{material=@{spellcomp_materials}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output}' + assert.equal(actual, expected) +}) + +QUnit.test('buildToHit add ability modifier to hit', assert => { + const page = {data: {'Item Type': 'Melee Weapon', Properties: '', Damage: '1d8'}} + const currentData = {strength_mod: 2} + const actual = dropFunctions.buildToHit(page, currentData) + assert.equal(actual, '2') +}) + +QUnit.test('buildToHit if Modifiers key is present add it to hit modifier', assert => { + const page = {data: {'Item Type': 'Melee Weapon', Properties: '', Damage: '1d8', Modifiers: 'Melee Attacks +1, Melee Damage +1'}} + const currentData = {strength_mod: 2} + const actual = dropFunctions.buildToHit(page, currentData) + assert.equal(actual, '2+1') +}) + +QUnit.test('buildToHit returns an empty string when invalid parameter is used', assert => { + assert.equal(dropFunctions.buildToHit(12345), '') + assert.equal(dropFunctions.buildToHit(null), '') + assert.equal(dropFunctions.buildToHit(undefined), '') + assert.equal(dropFunctions.buildToHit({}), '') + assert.equal(dropFunctions.buildToHit(), '') + assert.equal(dropFunctions.buildToHit([]), '') +}) + +QUnit.test('buildSenses adds string with passive perception', assert => { + const actual = dropFunctions.buildSenses(undefined, 19) + assert.equal(typeof actual, 'string') + assert.equal(actual, 'passive Perception 19') +}) + +QUnit.test('buildSenses adds senses if they are defined to passive perception', assert => { + const actual = dropFunctions.buildSenses('truesight 120 ft.', 19) + assert.equal(actual, 'truesight 120 ft., passive Perception 19') +}) + +QUnit.test('buildSpellList takes an object and returns an array of spells', assert => { + const spells = '{"spells":{"cantrips":["mage hand","prestidigitation","ray of frost"]}}' + const expected = ["mage hand", "prestidigitation", "ray of frost"] + const actual = dropFunctions.buildSpellList(spells) + assert.deepEqual(actual, expected) +}) + +QUnit.test('buildType takes size, type, and aligment then returns a string', assert => { + const actual = dropFunctions.buildType('Medium', 'Monster', 'Lawful Evil') + assert.deepEqual(actual, "Medium Monster, Lawful Evil") +}) + +QUnit.test('confirmFinesse returns a boolean of true if finesse is included', assert => { + const actual = dropFunctions.confirmFinesse('thrown, finesse') + assert.equal(typeof actual, 'boolean') + assert.equal(actual, true) +}) + +QUnit.test('confirmFinesse returns a boolean of false if finesse is not included', assert => { + const actual = dropFunctions.confirmFinesse('thrown') + assert.equal(typeof actual, 'boolean') + assert.equal(actual, false) +}) + +QUnit.test('confirmDexGreaterThanStr returns a boolean of true if dex is greater than str', assert => { + const actual = dropFunctions.confirmDexGreaterThanStr(35, 20) + assert.equal(typeof actual, 'boolean') + assert.equal(actual, true) +}) + +QUnit.test('confirmDexGreaterThanStr returns a boolean of false if dex is less than str', assert => { + const actual = dropFunctions.confirmDexGreaterThanStr(20, 35) + assert.equal(typeof actual, 'boolean') + assert.equal(actual, false) +}) + +QUnit.test('inferAbilityModifier type & properties are undefined return strength mod', assert => { + const actual = dropFunctions.inferAbilityModifier(undefined, undefined, {strength_mod: 2, dexterity_mod: 5}) + assert.equal(actual, 2) +}) + +QUnit.test('inferAbilityModifier type incudes range return dex mod', assert => { + const actual = dropFunctions.inferAbilityModifier('Ranged Weapon', undefined, {strength_mod: 2, dexterity_mod: 5}) + assert.equal(actual, 5) +}) + +QUnit.test('inferAbilityModifier properties incudes finesse return dex mod', assert => { + const actual = dropFunctions.inferAbilityModifier('Melee Weapon', 'Finesse, Light, Range, Thrown', {strength_mod: 2, dexterity_mod: 5}) + assert.equal(actual, 5) +}) + +QUnit.test('inferBaseAttribute returns the number in NPC attribute', assert => { + assert.equal(dropFunctions.inferBaseAttribute('17 (natural armor)'), '17') + assert.equal(dropFunctions.inferBaseAttribute('17'), '17') +}) + +QUnit.test('inferCasterLevel returns a caster level from a description', assert => { + const description = 'The lich is an 18th-level spellcaster.' + const actual = dropFunctions.inferCasterLevel(description) + assert.equal(actual, '18') +}) + +QUnit.test('inferFormulaAttribute returns the number in NPC attribute', assert => { + assert.equal(dropFunctions.inferFormulaAttribute('135 (18d8 + 54)'), '18d8 + 54') + assert.equal(dropFunctions.inferFormulaAttribute('135'), '') +}) + +QUnit.test('inferModifier returns type of modifier', assert => { + const actual = dropFunctions.inferModifier('Melee Attacks +1, Melee Damage +1', 'damage') + assert.equal(actual, 1) +}) + +QUnit.test('inferSpellcastingAbility returns the ability modifier from description', assert => { + const description = 'The lich is an 18th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 20, +12 to hit with spell attacks).' + const actual = dropFunctions.inferSpellcastingAbility(description) + assert.equal(actual, '@{intelligence_mod}+') +}) + +QUnit.test('inferSpellcastingAbility returns default 0* on failure', assert => { + const description = 'The lich is an 18th-level spellcaster.' + const actual = dropFunctions.inferSpellcastingAbility(description) + assert.equal(actual, '0*') +}) + diff --git a/Esper_Genesis_5E/src/helpers/helperFunctions.js b/Esper_Genesis_5E/src/helpers/helperFunctions.js new file mode 100644 index 0000000000..2d65147f0d --- /dev/null +++ b/Esper_Genesis_5E/src/helpers/helperFunctions.js @@ -0,0 +1,23 @@ + +const errorMessage = (name, error) => console.error(`%c ${name}: ${error}`, "color: orange; font-weight:14px;"); +const warningMessage = (name, error) => console.warn(`%c ${name}: ${error}`, "color: gold; font-weight:14px;"); + +const checkSourceForSheetworker = eventinfo => eventinfo.sourceType && eventinfo.sourceType != "sheetworker" ? true : false + +// Example: -m2jzgfth07mvwp3hhng +const getReprowid = sourceAttribute => sourceAttribute.split('_')[2] + +// Example: repeating_tool_-m2jzgfth07mvwp3hhng +const getRepeatingSectionPrefix = sourceAttribute => { + const split = sourceAttribute.split('_'); + return `${split[0]}_${split[1]}_${split[2]}` +} + +// Example: repeating_tool_-m2jzgfth07mvwp3hhng_attkflag returns attkflag +const getAttrNameAtEndRepeating = sourceAttribute => { + const repeatingSplit = sourceAttribute.split('_') + const repeatingSplice = repeatingSplit.splice(3) + const repeatingAttrName = repeatingSplice.length > 1 ? repeatingSplice.join('_') : repeatingSplice[0] + return repeatingAttrName +} + diff --git a/Esper_Genesis_5E/src/npc/npc.pug b/Esper_Genesis_5E/src/npc/npc.pug index e9f04363a4..cd768485c4 100644 --- a/Esper_Genesis_5E/src/npc/npc.pug +++ b/Esper_Genesis_5E/src/npc/npc.pug @@ -446,7 +446,7 @@ fieldset.repeating_npctrait .trait input(type='text' name='attr_name' placeholder='False Appearance.' data-i18n-placeholder='npc-trait-name-place') - textarea(name='attr_desc' placeholder='If the velbast fails...' data-i18n-placeholder='npc-trait-desc-place') + textarea(name='attr_description' placeholder='If the velbast fails...' data-i18n-placeholder='npc-trait-desc-place') .actions_container input.dflag(type='hidden' name='attr_dflag' value!='pick') .row.actions @@ -517,7 +517,7 @@ fieldset.repeating_npcreaction .trait input(type='text' name='attr_name' placeholder='Parry.' data-i18n-placeholder='npc-repeating-name-place') - textarea(name='attr_desc' placeholder='The creature adds 2 to its AC against...' data-i18n-placeholder='npc-repeating-desc-place') + textarea(name='attr_description' placeholder='The creature adds 2 to its AC against...' data-i18n-placeholder='npc-repeating-desc-place') input.legendary_flag(type='hidden' name='attr_npc_legendary_actions' value!='0') .row.actions.legendary .row.actiontitle @@ -853,6 +853,7 @@ .triangle .row.skills.red(style='position:relative;') span.bold(data-i18n='piloting') Piloting Bonus + input.npc-piloting-val(type="text" name='attr_npc_piloting' value!='@{dexterity_mod}' disabled="true") input.flag(type='hidden' name='attr_npc_piloting_flag' value!='0') button(type='roll' name='roll_npc_piloting' value!='@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{piloting}}} {{mod=@{npc_piloting}}} {{r1=[[@{d20}+@{npc_piloting}]]}} @{rtype}+@{npc_piloting}]]}} {{type=Vehicle}}') span.stat(name='attr_npc_piloting') @@ -1000,7 +1001,7 @@ fieldset.repeating_npctrait .trait input(type='text' name='attr_name' placeholder='Cloaking.' data-i18n-placeholder='ship-trait-name-place') - textarea(name='attr_desc' placeholder='The ship has...' data-i18n-placeholder='ship-trait-desc-place') + textarea(name='attr_description' placeholder='The ship has...' data-i18n-placeholder='ship-trait-desc-place') .actions_container input.dflag(type='hidden' name='attr_dflag' value!='pick') .row.actions @@ -1071,5 +1072,5 @@ fieldset.repeating_npcreaction .trait input(type='text' name='attr_name' placeholder='Parry.' data-i18n-placeholder='npc-repeating-name-place') - textarea(name='attr_desc' placeholder='The creature adds 2 to its AC against...' data-i18n-placeholder='npc-repeating-desc-place') + textarea(name='attr_description' placeholder='The creature adds 2 to its AC against...' data-i18n-placeholder='npc-repeating-desc-place') \ No newline at end of file diff --git a/Esper_Genesis_5E/src/pc/pc.pug b/Esper_Genesis_5E/src/pc/pc.pug index f3421dfd78..623d37e242 100644 --- a/Esper_Genesis_5E/src/pc/pc.pug +++ b/Esper_Genesis_5E/src/pc/pc.pug @@ -881,7 +881,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-prime .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=@{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=@{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') span.spellname(name='attr_spellname') input.innate_flag(type='hidden' name='attr_innate' value!='') @@ -918,9 +918,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -1046,9 +1047,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -1077,7 +1079,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-1 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} {{pointcost=@{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{pointcost=@{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -1116,9 +1118,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -1245,9 +1248,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -1273,7 +1277,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-2 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -1312,9 +1316,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -1443,9 +1448,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -1472,7 +1478,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-3 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -1511,9 +1517,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -1640,9 +1647,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -1668,7 +1676,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-4 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -1707,9 +1715,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -1836,9 +1845,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -1864,7 +1874,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-5 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -1903,9 +1913,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -2032,9 +2043,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -2061,7 +2073,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-6 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -2100,9 +2112,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -2229,9 +2242,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -2257,7 +2271,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-7 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -2296,9 +2310,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -2425,9 +2440,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -2453,7 +2469,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-8 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -2492,9 +2508,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -2621,9 +2638,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -2649,7 +2667,7 @@ span(data-i18n='starship-u') STARSHIP fieldset.repeating_spell-9 .spell .display - input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_rollcontent' value!='@{wtype}&{template:spell} {{level=Rank @{spelllevel} @{spellschool}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} @{pointcost}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output} {{licensedsheet=@{licensedsheet}}}') input.sheet-prep-box(type='checkbox' name='attr_spellprepared' value!='1') span.prep button.powercard(type='roll' name='roll_spell' value!='@{rollcontent}') @@ -2688,9 +2706,10 @@ span(data-i18n='starship-u') STARSHIP .row span(data-i18n='range:-u') RANGE: input(type='text' name='attr_spellrange') - .row - span(data-i18n='target:-u') TARGET: - input(type='text' name='attr_spelltarget') + // REMOVING TARGET + .row + span(data-i18n='target:-u') TARGET: + input(type='text' name='attr_spelltarget') input(type='hidden' name='attr_spellcomp') .row span(data-i18n='pointcost:-u') POINT COST: @@ -2817,9 +2836,10 @@ span(data-i18n='starship-u') STARSHIP .row span.bold(data-i18n='range:') Range: span(name='attr_spellrange') - .row - span.bold(data-i18n='target:') Target: - span(name='attr_spelltarget') + // REMOVING TARGET + .row + span.bold(data-i18n='target:') Target: + span(name='attr_spelltarget') .row span.bold(data-i18n='duration:') Duration: input(type='checkbox' name='attr_spellconcentration' value!='{{concentration=1}}') @@ -3461,6 +3481,27 @@ span(data-i18n='starship-u') STARSHIP option(value!='0' data-i18n='off' selected='selected') Off .row.title span(data-i18n='general-opts-u') GENERAL OPTIONS + + // + .general_options.charactermancer_options + input.warningflag(type='hidden' name='attr_leveler_warningflag') + .warning + span + label + input(type='checkbox' name='attr_leveler_warningflag' value='hide') + | * + span(data-i18n='warning-leveler_start-u') + | ATTENTION - YOU CANNOT LAUNCH THE CHARACTERMANCER LEVEL UP UNTIL YOU HAVE A CLASS, LEVEL, AND HP SET FOR LEVEL ONE. PLEASE RUN THE CHARACTERMANCER CREATOR FIRST. THE LEVEL UP TOOL DOESN'T WORK WITH CUSTOM CLASSES OR IF THE MULTICLASS OPTIONS ARE SET UP INCORRECTLY. + .row + button(type='action' name='act_relaunch_lvl1mancer' style='padding: 0px;') + img(src='https://s3.amazonaws.com/files.d20.io/images/175804938/qmVmtNHONHhHcd9cxCxm7w/med.png?1604618286' style='height: 32px; width: 32px' alt='Wand & Hammer of Charactermancer') + span(style='width: 180px; margin-left: 10px; display: inline-block;' data-i18n='relaunch-lvl1mancer-u') LAUNCH LEVEL 1 CHARACTERMANCER (CANNOT BE UNDONE) + .row + button(type='action' name='act_launch_lvl+mancer' style='padding: 0px;') + img(src='https://s3.amazonaws.com/files.d20.io/images/175804938/qmVmtNHONHhHcd9cxCxm7w/med.png?1604618286' style='height: 32px; width: 32px' alt='Wand & Hammer of Charactermancer') + span(style='width: 180px; margin-left: 10px; display: inline-block;') LAUNCH LEVEL+ CHARACTERMANCER + .row.title + span(data-i18n='mancer-opts-u') CHARACTERMANCER OPTIONS .footer div(style='margin-right: 50px; margin-left: 10px;') span(data-i18n='portions-sheet-utilize') diff --git a/Esper_Genesis_5E/src/pc/ship.pug b/Esper_Genesis_5E/src/pc/ship.pug index 555cdbb911..40bdd093a3 100644 --- a/Esper_Genesis_5E/src/pc/ship.pug +++ b/Esper_Genesis_5E/src/pc/ship.pug @@ -276,6 +276,9 @@ mixin armorClassOrManeuverEntry(name) span(data-i18n='pc-ship-damage-type') +repeatingSection('weapon-systems') + input(type='hidden' name='attr_rollbase' value!='@{wtype}&{template:atk} {{mod=@{tohit}}} {{rname=[@{weapon}](~repeating_weapon-systems_atkdmg)}} {{rnamec=[@{weapon}](~repeating_weapon-systems_atkdmgc)}} {{r1=[[@{d20} + @{tohit}]]}} {{normal=1}} {{r2=[[0d20]]}} {{range=@{range}}} {{desc=@{special}}} ammo=@{ammo} @{pc_ship_name} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_atkdmg' value!='') + input(type='hidden' name='attr_atkdmgc' value!='') .sheet-grid-container.table-body .sheet-gunner input(type='text' name='attr_gunner') @@ -301,6 +304,9 @@ mixin armorClassOrManeuverEntry(name) input(type='checkbox' name='attr_recharge' value='3') input(type='checkbox' name='attr_recharge' value='2') input(type='checkbox' name='attr_recharge' value='1') + button.hidden(type='roll' value!='@{atkdmg}' name='roll_atkdmg') + button.hidden(type='roll' value!='@{atkdmgc}' name='roll_atkdmgc') + button(type='roll' value!='@{rollbase}' name='roll_attack') div span(data-i18n='weapon-systems-info') \ No newline at end of file diff --git a/Esper_Genesis_5E/src/rolltemplates/rolltemplates.html b/Esper_Genesis_5E/src/rolltemplates/rolltemplates.html index 3cd14e2632..c2a9c31fbd 100644 --- a/Esper_Genesis_5E/src/rolltemplates/rolltemplates.html +++ b/Esper_Genesis_5E/src/rolltemplates/rolltemplates.html @@ -649,11 +649,6 @@ Range: {{range}}
    {{/range}} - {{#target}} -
    - Target: {{target}} -
    - {{/target}} {{#pointcost}}
    Point Cost: {{pointcost}} diff --git a/Esper_Genesis_5E/src/versioning/versioning.js b/Esper_Genesis_5E/src/versioning/versioning.js new file mode 100644 index 0000000000..f36dc15e58 --- /dev/null +++ b/Esper_Genesis_5E/src/versioning/versioning.js @@ -0,0 +1,938 @@ +var v2_old_values_check = function() { + // update_attacks("all"); + var update = {}; + var attrs = ["simpletraits","features_and_traits","initiative_bonus","npc","character_id"]; + getSectionIDs("repeating_spell-npc", function(idarray) { + _.each(idarray, function(id) { + attrs.push("repeating_spell-npc_" + id + "_rollcontent"); + }); + getAttrs(attrs, function(v) { + if(v["npc"] && v["npc"] == 1 && (!v["initiative_bonus"] || v["initiative_bonus"] == 0)) { + update_initiative(); + } + var spellflag = idarray && idarray.length > 0 ? 1 : 0; + var missing = v["features_and_traits"] && v["simpletraits"] === "complex" ? 1 : 0; + update["npcspell_flag"] = spellflag; + update["missing_info"] = missing; + _.each(idarray, function(id) { + var content = v["repeating_spell-npc_" + id + "_rollcontent"]; + if(content.substring(0,3) === "%{-" && content.substring(22,41) === "|repeating_attack_-" && content.substring(60,68) === "_attack}") { + var thisid = content.substring(2,21); + if(thisid != v["character_id"]) { + update["repeating_spell-npc_" + id + "_rollcontent"] = content.substring(0,2) + v["character_id"] + content.substring(22,68); + } + } + }); + setAttrs(update); + }); + + }); + +}; + +var clear_npc_spell_attacks = function(complete) { + getSectionIDs("repeating_attack", function(attack_ids) { + var getList = []; + var done = false; + _.each(attack_ids, function(id) { + getList.push(`repeating_attack_${id}_spellid`); + }); + getAttrs(getList, function(v) { + _.each(attack_ids, function(id) { + if (v[`repeating_attack_${id}_spellid`] && v[`repeating_attack_${id}_spellid`].indexOf("npc_") != -1) { + removeRepeatingRow(`repeating_attack_${id}`); + } + }); + complete(); + }); + }); +} + +var hasTrait = function(traits, value) { + let found = Object.keys(traits).filter(function(row) { + return traits[row] === value; + }); + return found.length > 0; +}; + +var no_version_bugfix = function(doneupdating) { + getAttrs(["npc","class"], function(v) { + if(v["npc"] && v["npc"] != "0" || v["class"] && v["class"] != "") { + setAttrs({version: "2.1"}); + } + else { + setAttrs({version: "2.3"}, {silent: true}); + } + }); + doneupdating(); +}; + +const dndUpdates = [ + new SheetUpgrade( + 'upgrade_to_2_0', + (resolve, reject) => { + getAttrs(["npc","strength","dexterity","constitution","intelligence","wisdom","charisma","strength_base","dexterity_base","constitution_base","intelligence_base","wisdom_base","charisma_base","deathsavemod","death_save_mod","npc_str_save","npc_dex_save","npc_con_save","npc_int_save","npc_wis_save","npc_cha_save","npc_str_save_base","npc_dex_save_base","npc_con_save_base","npc_int_save_base","npc_wis_save_base","npc_cha_save_base","npc_acrobatics_base", "npc_animal_handling_base", "npc_arcana_base", "npc_athletics_base", "npc_deception_base", "npc_history_base", "npc_insight_base", "npc_intimidation_base", "npc_investigation_base", "npc_medicine_base", "npc_nature_base", "npc_perception_base", "npc_performance_base", "npc_persuasion_base", "npc_religion_base", "npc_sleight_of_hand_base", "npc_stealth_base", "npc_survival_base", "npc_acrobatics", "npc_animal_handling", "npc_arcana", "npc_athletics", "npc_deception", "npc_history", "npc_insight", "npc_intimidation", "npc_investigation", "npc_medicine", "npc_nature", "npc_perception", "npc_performance", "npc_persuasion", "npc_religion", "npc_sleight_of_hand", "npc_stealth", "npc_survival"], function(v) { + var update = {}; + var stats = ["strength","dexterity","constitution","intelligence","wisdom","charisma"]; + var npc_stats = ["npc_str_save","npc_dex_save","npc_con_save","npc_int_save","npc_wis_save","npc_cha_save","npc_acrobatics", "npc_animal_handling", "npc_arcana", "npc_athletics", "npc_deception", "npc_history", "npc_insight", "npc_intimidation", "npc_investigation", "npc_medicine", "npc_nature", "npc_perception", "npc_performance", "npc_persuasion", "npc_religion", "npc_sleight_of_hand", "npc_stealth", "npc_survival"]; + _.each(stats, function(attr) { + if(v[attr] && v[attr] != "10" && v[attr + "_base"] == "10") { + update[attr + "_base"] = v[attr]; + } + + }); + _.each(npc_stats, function(attr) { + if(v[attr] && !isNaN(v[attr]) && v[attr + "_base"] == "") { + update[attr + "_base"] = v[attr]; + } + + }); + + if(v["deathsavemod"] && v["deathsavemod"] != "0" && v["death_save_mod"] === "0") {v["death_save_mod"] = v["deathsavemod"];}; + + if(v["npc"] && v["npc"] == "1") { + var callback = function() { + update_attr("all"); + update_mod("strength"); + update_mod("dexterity"); + update_mod("constitution"); + update_mod("intelligence"); + update_mod("wisdom"); + update_mod("charisma"); + update_npc_action("all"); + update_npc_saves(); + update_npc_skills(); + update_initiative(); + } + } + else { + var callback = function() { + update_attr("all"); + update_mod("strength"); + update_mod("dexterity"); + update_mod("constitution"); + update_mod("intelligence"); + update_mod("wisdom"); + update_mod("charisma"); + update_all_saves(); + update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "arcana", "history", "investigation", "nature", "religion", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]); + update_tool("all") + update_attacks("all"); + update_pb(); + update_jack_attr(); + update_initiative(); + update_weight(); + update_spell_info(); + update_ac(); + } + } + setAttrs(update, {silent: true}, () => { + resolve(); + }); + }); + }, + 2.0 + ), + + new SheetUpgrade( + 'upgrade_to_2_1', + (resolve, reject) => { + v2_old_values_check(); + resolve(); + }, + 2.1, + 2.0 + ), + + new SheetUpgrade( + 'upgrade_to_2_3', + (resolve, reject) => { + getSectionIDs("damagemod", function(ids) { + var update = {}; + _.each(ids, function(rowid) { + update[`repeating_damagemod_${rowid}_options-flag`] = "0"; + }); + getSectionIDs("tohitmod", function(ids) { + _.each(ids, function(rowid) { + update[`repeating_tohitmod_${rowid}_options-flag`] = "0"; + }); + setAttrs(update, () => { + resolve(); + }); + }); + }); + }, + 2.3, + 2.1 + ), + + new SheetUpgrade( + 'upgrade_to_2_4', + (resolve, reject) => { + clear_npc_spell_attacks(function() { + update_globalskills(function() { + update_globalsaves(function() { + update_globalattack(function() { + update_globaldamage(function() { + getAttrs(["npc", "npcspellcastingflag", "spellcasting_ability", "caster_level", "level_calculations"], function(v) { + if(v.npc == "1" && v.npcspellcastingflag == "1") { + getSectionIDs("npctrait", function(secIds) { + var getList = []; + _.each(secIds, function(x) { + getList.push("repeating_npctrait_" + x + "_name"); + getList.push("repeating_npctrait_" + x + "_desc"); + }); + getAttrs(getList, function(traits) { + var update = {}; + if(v.spellcasting_ability == "0*" || v.caster_level == "0") { + var spellSec = ""; + if (v.spellcasting_ability == "0*") { + update.spellcasting_ability = "@{intelligence_mod}+"; + } + _.each(secIds, function(traitId) { + if(traits["repeating_npctrait_" + traitId + "_name"].toLowerCase().includes("spellcasting.")) spellSec = traitId; + }); + if(spellSec != "") { + var spellcasting = traits["repeating_npctrait_" + spellSec + "_desc"].toLowerCase(); + if (v.spellcasting_ability == "0*") { + var lastIndex = 9999; + _.each(["intelligence", "wisdom", "charisma"], function(ability) { + var found = spellcasting.indexOf(ability); + if(found > -1 && found < lastIndex) { + lastIndex = found; + update.spellcasting_ability = "@{" + ability + "_mod}+"; + } + }); + } + if (v.caster_level == "0") { + var foundLevelidx = spellcasting.search(/(\d|\d\d)(st|nd|rd|th)/); + if (foundLevelidx) { + var level = parseInt(spellcasting.substring(foundLevelidx, foundLevelidx+4)); + console.log(`Found spellcasting level ${level} in trait, setting caster_level...`); + update.caster_level = level; + } + } + } + } + setAttrs(update, function() { + // Recalculate spell slots in case NPC level was restored + if(!v["level_calculations"] || v["level_calculations"] == "on") { + update_spell_slots(); + }; + // Set all spells without a given modifier to 'spell' + var spgetList = []; + getSectionIDs("spell-cantrip", function(secIds0) { + _.each(secIds0, function(x) { + spgetList.push("repeating_spell-cantrip_" + x + "_spell_ability"); + }); + getSectionIDs("spell-1", function(secIds1) { + _.each(secIds1, function(x) { + spgetList.push("repeating_spell-1_" + x + "_spell_ability"); + }); + getSectionIDs("spell-2", function(secIds2) { + _.each(secIds2, function(x) { + spgetList.push("repeating_spell-2_" + x + "_spell_ability"); + }); + getSectionIDs("spell-3", function(secIds3) { + _.each(secIds3, function(x) { + spgetList.push("repeating_spell-3_" + x + "_spell_ability"); + }); + getSectionIDs("spell-4", function(secIds4) { + _.each(secIds4, function(x) { + spgetList.push("repeating_spell-4_" + x + "_spell_ability"); + }); + getSectionIDs("spell-5", function(secIds5) { + _.each(secIds5, function(x) { + spgetList.push("repeating_spell-5_" + x + "_spell_ability"); + }); + getSectionIDs("spell-6", function(secIds6) { + _.each(secIds6, function(x) { + spgetList.push("repeating_spell-6_" + x + "_spell_ability"); + }); + getSectionIDs("spell-7", function(secIds7) { + _.each(secIds7, function(x) { + spgetList.push("repeating_spell-7_" + x + "_spell_ability"); + }); + getSectionIDs("spell-8", function(secIds8) { + _.each(secIds8, function(x) { + spgetList.push("repeating_spell-8_" + x + "_spell_ability"); + }); + getSectionIDs("spell-9", function(secIds9) { + _.each(secIds9, function(x) { + spgetList.push("repeating_spell-9_" + x + "_spell_ability"); + }); + getAttrs(spgetList, function(spellAbilities) { + spupdate = {}; + _.each(spellAbilities, function(ability, attributeName) { + if (ability == "0*") { + console.log("UPDATING SPELL: " + attributeName); + spupdate[attributeName] = "spell"; + } + }); + setAttrs(spupdate, function() { + resolve() + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + } else if(v.npc != "1") { + resolve(); + } else { + resolve(); + } + }); + }); + }); + }); + }); + }); + }, + 2.4, + 2.3 + ), + + new SheetUpgrade( + 'upgrade_to_2_5', + (resolve, reject) => { + getAttrs(["globalacmod"], function(v) { + var update = {}; + if(v.globalacmod && v.globalacmod != "0") { + var rowid = generateRowID(); + update[`repeating_acmod_${rowid}_global_ac_val`] = parseInt(v.globalacmod); + update[`repeating_acmod_${rowid}_global_ac_name`] = "GLOBAL ARMOR CLASS MODIFIER"; + update[`repeating_acmod_${rowid}_global_ac_active_flag`] = "1"; + update[`repeating_acmod_${rowid}_options-flag`] = "0"; + update["global_ac_mod_flag"] = "1"; + } + setAttrs(update, {silent: true}, function() { + update_ac(); + resolve(); + }); + }); + }, + 2.5, + 2.4 + ), + + new SheetUpgrade( + 'upgrade_to_2_6', + (resolve, reject) => { + getSectionIDs("hpmod", function(ids) { + var getArray = []; + _.each(ids, function(sectionid) { + getArray.push("repeating_hpmod_" + sectionid + "_source"); + }); + getAttrs(getArray, function(v) { + _.each(v, function(val, key) { + if(val === "CON") removeRepeatingRow("repeating_hpmod_" + key.split("_")[2]); + }); + resolve(); + }); + }); + }, + 2.6, + 2.5 + ), + + new SheetUpgrade( + 'upgrade_to_2_7', + (resolve, reject) => { + getSectionIDs("damagemod", function(ids) { + let getArray = []; + ids.forEach(sectionid => { + getArray.push(`repeating_damagemod_${sectionid}_global_damage_rollstring`); + getArray.push(`repeating_damagemod_${sectionid}_global_damage_type`); + }); + getSectionIDs("savemod", function(ids) { + _.each(ids, (sectionid) => { + getArray.push(`repeating_savemod_${sectionid}_global_save_rollstring`); + }); + getSectionIDs("tohitmod", function(ids) { + _.each(ids, (sectionid) => { + getArray.push(`repeating_tohitmod_${sectionid}_global_attack_rollstring`); + }); + getSectionIDs("skillmod", function(ids) { + _.each(ids, (sectionid) => { + getArray.push(`repeating_skillmod_${sectionid}_global_skill_rollstring`); + }); + getAttrs(getArray, function(v) { + let set = {}; + _.each(v, (value, attr) => { + if(_.last(attr.split("_")) === "rollstring") { + const section = attr.slice(0, -10); + const brackets = value.split('['), roll = brackets[0]; + let name = brackets[1] ? brackets[1].slice(0, -1) : ""; + if(attr.split("_")[1] == "damagemod") { + name = name ? name : v[`${section}type`]; + set[`${section}damage`] = roll; + } else { + set[`${section}roll`] = roll; + } + set[`${section}name`] = name; + } + }); + setAttrs(set, () => { + resolve(); + }); + }); + }); + }); + }); + }); + }, + 2.7, + 2.6 + ), + + new SheetUpgrade( + 'upgrade_to_2_8', + (resolve, reject) => { + getAttrs(["npc"], function(v) { + const levels = ["cantrip", "1", "2", "3", "4", "5", "6", "6", "8", "9"]; + let currentLevel = 0; + let spells = {}; + const updateSpellLevels = function() { + getSectionIDs("spell-"+ levels[currentLevel], function(spellID) { + _.each(spellID, function(x) { + spells["repeating_spell-"+ levels[currentLevel] +"_" + x + "_details-flag"] = "0"; + }); + currentLevel++; + if(currentLevel <= levels.length) { + updateSpellLevels(); + } else { + setAttrs(spells, function() { + if(v["npc"] && v["npc"] == "1") { + let traits = {}; + getSectionIDs("npctrait", function(traitID) { + _.each(traitID, function(x) { + traits["repeating_npctrait_" + x + "_npc_options-flag"] = "0"; + }); + getSectionIDs("npcreaction", function(reactionID) { + _.each(reactionID, function(x) { + traits["repeating_npcreaction_" + x + "_npc_options-flag"] = "0"; + }); + setAttrs(traits, function() { + resolve(); + }); + }); + }); + } else { + resolve(); + } + }); + } + }); + }; + updateSpellLevels(); + }); + }, + 2.8, + 2.7 + ), + + new SheetUpgrade( + 'upgrade_to_2_9', + (resolve, reject) => { + getAttrs(["npc"], function(v) { + if(v["npc"] && v["npc"] == "1") { + resolve(); + } else { + getSectionIDs("repeating_traits", (traits) => { + let traitNames = []; + _.each(traits, (traitID, i) => { + traitNames.push("repeating_traits_" + traitID + "_name"); + }); + getAttrs(traitNames, function(v) { + if(hasTrait(v, "Reliable Talent")) { + setAttrs({reliable_talent: 10}, function() { + resolve(); + }); + } else { + resolve(); + } + }); + }); + } + }); + }, + 2.9, + 2.8 + ), + + new SheetUpgrade( + 'upgrade_to_4_2_1', + (resolve, reject) => { + let sectionsDone = 0; + ['npctrait', 'npcreaction'].forEach(repeatingSection => { + getSectionIDs(repeatingSection, idarray => { + let attributes = []; + let update = {}; + + idarray.forEach(id => { + attributes.push(`repeating_${repeatingSection}_${id}_desc`); + }); + + getAttrs(attributes, value => { + idarray.forEach(id => { + update[`repeating_${repeatingSection}_${id}_description`] = value[`repeating_${repeatingSection}_${id}_desc`] + }); + + setAttrs(update, () => { + sectionsDone++; + if(sectionsDone === 2) resolve(); + }); + }); + }); + }); + }, + 4.21, + 2.9 + ), + + new SheetUpdate( + 'fix_npc_missing_attack_display_flag_attribute', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + getSectionIDs('repeating_npcaction', idarray => { + const rollbases = idarray.map(id => { return `repeating_npcaction_${id}_rollbase`; }); + let update = {} + getAttrs(rollbases, function(rolls) { + Object.keys(rolls).forEach(roll => { + update[roll] = rolls[roll].replace('@{attack_display_flag}', '{{attack=1}}') + }); + setAttrs(update, () => { + resolve(); + }); + }); + }); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + }, + 2.0 + ), + + new SheetUpdate( + 'fix_npc_version_number', + (resolve, reject) => { + getAttrs(["appliedUpdates", "npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + if(!values.appliedUpdates) { resolve(); } + else if(values.appliedUpdates.indexOf('upgrade_to_') === -1) { resolve(); } + else { + const regex = /upgrade_to_[0-9]_[0-9]_[0-9]|upgrade_to_[0-9]_[0-9]|upgrade_to_[0-9]/g; + const matches = values.appliedUpdates.match(regex); + const lastUpdate = matches[matches.length-1].replace('upgrade_to_', '').replace('_', '.').replace(/_/g, ''); + const lastUpdateversion = parseFloat(lastUpdate) + setAttrs({version: lastUpdateversion}, () => { + resolve(); + }); + } + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_npcs_in_modules_saves_and_ability_mods', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + const bases = globalAttributesByCategory.abilities.map(ability => { return `${ability}_base`}); + const mods = globalAttributesByCategory.abilities.map(ability => { return `${ability}_mod`}); + getAttrs([...bases, ...mods], values => { + let update = {}; + globalAttributesByCategory.abilities.forEach(ability => { + if(values[`${ability}_base`] && values[`${ability}_mod`]) { + const base = !isNaN(parseInt(values[`${ability}_base`], 10)) ? parseInt(values[`${ability}_base`], 10) : 0; + const mod = !isNaN(parseInt(values[`${ability}_mod`], 10)) ? parseInt(values[`${ability}_mod`], 10) : 0; + if(mod === 0) { + const newMod = Math.floor((base - 10) / 2); + update[`${ability}_mod`] = newMod; + } + } + }); + setAttrs(update, () => { resolve(); }); + }); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_spell_attacks', + (resolve, reject) => { + getAllSpellsIDS(spells => { + let spellAttributes = []; + spells.forEach(entry => { + spellAttributes.push(`${entry}_spelloutput`); + spellAttributes.push(`${entry}_spellattackid`); + spellAttributes.push(`${entry}_spelllevel`); + }); + getAttrs(spellAttributes.concat(['character_id']), values => { + const attackSpells = Object.keys(values).filter(entry => { return (entry.indexOf('_spelloutput') > -1 && values[entry] === 'ATTACK'); }); + attackSpells.forEach(entry => { + const spellID = SheetUtils.getUID(entry); + const lvl = values[entry.replace('_spelloutput', '_spelllevel')]; + const attackID = values[entry.replace('_spelloutput', '_spellattackid')]; + const characterID = values["character_id"]; + create_attack_from_spell(lvl, spellID, characterID, attackID); + }); + resolve(); + }); + }); + } + ), + + new SheetUpdate( + 'fix_npc_in_modules_triggering_popup', + (resolve, reject) => { + getAttrs(["npc", "npc_name"], function(values) { + if(values["npc"] && values["npc"] == "1" && values["npc_name"] && values["npc_name"].trim().length > 0) { + setAttrs({l1mancer_status: "completed"}, () => { resolve(); }); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_npc_actions_to_support_translation', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + update_npc_action("all"); + resolve(); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_skill_and_saving_rolls', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_tool", idarray => { + updateSavingRolls(globalAttributesByCategory.abilitiesWithAllOptionals); + updateSkillRolls(globalAttributesByCategory.skills.all()); + do_update_tool(idarray); + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_saving_rolls', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_tool", idarray => { + updateSavingRolls(globalAttributesByCategory.abilitiesWithAllOptionals); + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_skill_and_saving_rolls_with_expertise', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_tool", idarray => { + updateSavingRolls(globalAttributesByCategory.abilitiesWithAllOptionals); + updateSkillRolls(globalAttributesByCategory.skills.all()); + do_update_tool(idarray); + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_skill_and_saving_rolls_with_reliable_talent', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_tool", idarray => { + updateSavingRolls(globalAttributesByCategory.abilitiesWithAllOptionals); + updateSkillRolls(globalAttributesByCategory.skills.all()); + do_update_tool(idarray); + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_npc_attacks', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + getSectionIDs("repeating_npcaction", idarray => { + const rollbases = idarray.map(entry => { return `repeating_npcaction_${entry}_rollbase`;}); + getAttrs(rollbases, values => { + let update = {}; + Object.keys(values).forEach(rollbase => { + if(values[rollbase].indexOf('{{attack=1}}') > -1) { + if(values[rollbase].indexOf('{template:npcatk}') > -1) { + update[rollbase] = values[rollbase].replace(' {{description=@{show_desc}}} ', ''); + } else if(values[rollbase].indexOf('{template:npcaction}') > -1) { + update[rollbase] = values[rollbase].replace('{template:npcaction}', '{template:npcfullatk}'); + } + } + }); + if(Object.keys(update).length > 0) { + setAttrs(update, () => { + resolve(); + }); + } else { + resolve(); + } + }); + }); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_npc_attacks_with_auto_damage_roll', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + update_npc_action("all"); + resolve(); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'enable_powerful_build_on_existing_characters', + (resolve, reject) => { + getAttrs(["npc"], function(v) { + if(v["npc"] && v["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_traits", (traits) => { + let traitNames = []; + _.each(traits, (traitID, i) => { + traitNames.push("repeating_traits_" + traitID + "_name"); + }); + if(traitNames.length > 0) { + getAttrs(traitNames, function(v) { + if(hasTrait(v, "Powerful Build")) { + setAttrs({powerful_build: 1}, function() { + resolve(); + }); + } else { + resolve(); + } + }); + } else { + resolve(); + } + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_global_critical_damage_rolls', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + update_globaldamage(() => { + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_npc_actions_with_damage', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + update_npc_action("all"); + resolve(); + } else { + reject('This update is only valid for npcs sheets'); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_global_critical_stacked_damage_rolls', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + update_globaldamage(() => { + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_npc_charname_output', + (resolve, reject) => { + const myreject = function() { reject('This update is only valid for npcs sheets'); }; + updateCharnameOutput(resolve, myreject); + } + ), + + new SheetUpdate( + 'fix_pc_skill_rolls_tooltips', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getSectionIDs("repeating_tool", idarray => { + updateSkillRolls(globalAttributesByCategory.skills.all()); + do_update_tool(idarray); + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_global_statical_critical_damage', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + update_globaldamage(() => { + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_spell_school_ouput', + (resolve, reject) => { + getAllSpellsIDS(spells => { + if(spells.length > 0) { + let spellAttributes = []; + spells.forEach(entry => { + spellAttributes.push(`${entry}_spellschool`); + }); + getAttrs(spellAttributes, values => { + let update = {}; + Object.keys(values).forEach(entry => { + update[entry] = values[entry].toLowerCase(); + }); + setAttrs(update, () => { + resolve(); + }); + }); + } else { + resolve(); + } + }); + } + ), + + new SheetUpdate( + 'fix_pc_global_multiple_statical_critical_damage', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + update_globaldamage(() => { + resolve(); + }); + } + }); + } + ), + + new SheetUpdate( + 'fix_spell_savedc_output', + (resolve, reject) => { + getAttrs(["npc"], function(values) { + if(values["npc"] && values["npc"] == "1") { + reject('This update is only valid for pcs sheets'); + } else { + getAllSpellsIDS(spells => { + if(spells.length > 0) { + let spellAttributes = []; + spells.forEach(entry => { + spellAttributes.push(`${entry}_rollcontent`); + }); + getAttrs(spellAttributes, values => { + let update = {}; + Object.keys(values).forEach(entry => { + if(values[entry].includes('@{wtype}&{template:spell}') && !values[entry].includes('{{savedc=@{spell_save_dc}}}')) { + const newValue = values[entry].replace('{{innate=@{innate}}}','{{innate=@{innate}}} {{savedc=@{spell_save_dc}}}'); + update[entry] = newValue; + } + }); + setAttrs(update, () => { + resolve(); + }); + }); + } else { + resolve(); + } + }); + } + }); + } + ), + +]; diff --git a/Esper_Genesis_5E/translation.json b/Esper_Genesis_5E/translation.json index 1246fc84ea..8c3b99fa47 100644 --- a/Esper_Genesis_5E/translation.json +++ b/Esper_Genesis_5E/translation.json @@ -583,7 +583,7 @@ "get-started": "Get started by clicking Next.", "opt-out-u": "OPT OUT", "charmancer-compendium": "Your Compendium Awaits.", - "charmancer-compendium-detail": "The Charactermancer currently supports Dungeons & Dragons 5th Edition SRD and the Player's Handbook. You can add the Player's Handbook to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.", + "charmancer-compendium-detail": "The Charactermancer currently supports the Esper Genesis SRD. You can add the Core Manual to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.", "charmancer-choose-race": "Choose a Race:", "charmancer-custom-race-name": "Custom Race Name:", "charmancer-custom-subclass-name:": "Custom sublass Name:", @@ -661,7 +661,7 @@ "charmancer-leveler-custom-class-warning": "The Level Up tool does not support custom classes at this time.", "charmancer-welcome-lp": "Welcome to Charactermancer Level Up!", "charmancer-leveler-what-is-lp": "Look at you, with all that experience. Now it's time to claim your reward. You'll walk through the step-by-step process to make a few decisions, and your character will be at the next level in no time. Changes are saved as you move through the process, but if you change your mind, you'll need to revisit the steps and choices that come after.", - "charmancer-compendium-detail-lp": "The Charactermancer currently supports Dungeons & Dragons 5th Edition SRD, Player's Handbook, and Guildmasters' Guide to Ravnica. Xanathar's Guide to Everything will be supported in the coming weeks. You can add the Player's Handbook and Guildmasters' Guide to Ravnica to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.", + "charmancer-compendium-detail-lp": "The Charactermancer currently supports the Esper Genesis SRD. You can add the Core Manual to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.", "roll:-u": "ROLL:", "roll": "Roll", "prerequisite:": "Prerequisite:", @@ -792,5 +792,21 @@ "sheet-type-u": "SHEET TYPE:", "starship-statistics": "Starship Statistics", "max-weapon-payload": "Max Weapon Payload", - "weapon-systems-info": "To Hit = (Gunner’s Proficiency Bonus + Gunner’s DEX modifier + Captain’s WIS modifier)" + "weapon-systems-info": "To Hit = (Gunner’s Proficiency Bonus + Gunner’s DEX modifier + Captain’s WIS modifier)", + "honor-u": "HONOR", + "honor-save-u": "HONOR SAVE", + "honor": "Honor", + "honor-info": "Enables the optional Honor Attribute.", + "honor-save": "Honor Save", + "honor-setting-u": "HONOR SCORE:", + "sanity-u": "SANITY", + "sanity-save-u": "SANITY SAVE", + "sanity": "Sanity", + "sanity-info": "Enables the optional Sanity Attribute.", + "sanity-save": "Sanity Save", + "sanity-setting-u": "SANITY SCORE:", + "customize-your-origin": "Customize Your Origin", + "customize-your-origin-info": "If you’d like your character to follow their own path, you may ignore your Ability Score Increase trait and assign ability score increases tailored to your character.", + "ability-score-increase-tasha": "Ability Score increase", + "ship-trait-desc-place": "Ship trait description" } diff --git a/Kult Divinity Lost/translations/pl.json b/Kult Divinity Lost/translations/pl.json index a05c5b4436..e22aa856a6 100644 --- a/Kult Divinity Lost/translations/pl.json +++ b/Kult Divinity Lost/translations/pl.json @@ -7,32 +7,32 @@ "appearance-u": "Wygląd", "attributes-u": "Atrybuty", "fortitude-u": "Odporność", - "fortitude-mv-u": "Znieś Uszkodzenia", + "fortitude-mv-u": "Znieś Obrażenia", "willpower-u": "Siła Woli", - "willpower-mv-u": "Weź się w Garść", + "willpower-mv-u": "Weź się w garść", "reflexes-u": "Refleks", "reflexes-mv-u": "Uniknij Obrażeń", "reason-u": "Rozum", - "reason-mv-u": "Badaj", + "reason-mv-u": "Zbadaj", "intuition-u": "Intuicja", - "intuition-mv-u": "Czytaj Osobę", + "intuition-mv-u": "Rozeznaj intencje", "perception-u": "Percepcja", - "perception-mv-u": "Obserwuj Sytuację", + "perception-mv-u": "Analizuj sytuację", "coolness-u": "Opanowanie", - "coolness-mv-u": "Działaj pod Presją", + "coolness-mv-u": "Działaj pod presją", "charisma-u": "Charyzma", - "charisma-mv-u": "Wywrzyj wpływ", + "charisma-mv-u": "Wpłyń na innych", "violence-u": "Przemoc", - "violence-mv-u": "Prowadź Walkę", + "violence-mv-u": "Przystąp do walki", "soul-u": "Dusza", - "soul-mv-u": "Spójrz Przez Iluzję", + "soul-mv-u": "Przejrzyj Iluzję", "darksecrets-u": "Mroczne Sekrety", - "disadvantages-u": "Zawady", + "disadvantages-u": "Komplikacje", "advantages-u": "Atuty", "relations-u": "Relacje", "wounds-u": "Rany", "wounds-serious-u": "Poważne Rany (−1 modyfikator rzutu)", - "wounds-stabilized-u": "Ustabilizowane", + "wounds-stabilized-u": "Opatrzona", "wounds-critical-u": "Rana Krytyczna (−1 modyfikator rzutu)", "stability-u": "Stabilność", "stability-lvl0-u": "Spokojny", @@ -40,22 +40,22 @@ "stability-lvl2-u": "Rozproszony", "stability-lvl3-u": "Wstrząśnięty", "stability-lvl4-u": "Przestraszony", - "stability-lvl5-u": "Neurotyczny", + "stability-lvl5-u": "Znerwicowany", "stability-lvl6-u": "Zatrwożony", - "stability-lvl7-u": "Nieracjonalny", + "stability-lvl7-u": "Irracjonalny", "stability-lvl8-u": "Rozstrojony", - "stability-lvl9-u": "Złamany", + "stability-lvl9-u": "Zdruzgotany", "stability-stress-moderate-u": "Umiarkowany stres:", - "stability-stress-moderate-disad-u": "−1 do rzutów na Zawady", + "stability-stress-moderate-disad-u": "−1 do rzutów na Komplikacje", "stability-stress-serious-u": "Poważny stres:", - "stability-stress-serious-kit-u": "−1 Weź się w Garść", - "stability-stress-serious-disad-u": "−2 do rzutów na Zawady", + "stability-stress-serious-kit-u": "−1 Weź się w garść", + "stability-stress-serious-disad-u": "−2 do rzutów na Komplikacje", "stability-stress-critical-u": "Krytyczny stres:", - "stability-stress-critical-kit-u": "−2 Weź się w Garść", - "stability-stress-critical-disad-u": "−3 do rzutów na Zawady", - "stability-stress-critical-sti-u": "+1 do Spójrz Przez Iluzję", + "stability-stress-critical-kit-u": "−2 Weź się w garść", + "stability-stress-critical-disad-u": "−3 do rzutów na Komplikacje", + "stability-stress-critical-sti-u": "+1 do Przejrzenia Iluzji", "stability-broken-mmv-u": "MG robi Ruch", - "dramatichooks-u": "Zahaczki Fabularne", + "dramatichooks-u": "Zalążki fabuły", "gear-u": "Ekwipunek", "weapons-u": "Broń", "notes-u": "Notatki", diff --git a/Mongoose_Traveller2e/MongooseTraveller.css b/Mongoose_Traveller2e/MongooseTraveller.css index 40ef718745..ff56fa69a1 100644 --- a/Mongoose_Traveller2e/MongooseTraveller.css +++ b/Mongoose_Traveller2e/MongooseTraveller.css @@ -10,19 +10,38 @@ .sheet-skills, .sheet-inventory, .sheet-combat, -.sheet-powers { +.sheet-powers, +.sheet-topbar, +.sheet-pc, +.sheet-npc, +.sheet-ship { display:none; } /* show the selected tab */ -.sheet-tabstoggle[value="prime"] ~ div.sheet-prime, -.sheet-tabstoggle[value="skills"] ~ div.sheet-skills, -.sheet-tabstoggle[value="inventory"] ~ div.sheet-inventory, -.sheet-tabstoggle[value="combat"] ~ div.sheet-combat, -.sheet-tabstoggle[value="powers"] ~ div.sheet-powers { +.sheet-tabstoggle[value="prime"] ~ .sheet-prime, +.sheet-tabstoggle[value="skills"] ~ .sheet-skills, +.sheet-tabstoggle[value="inventory"] ~ .sheet-inventory, +.sheet-tabstoggle[value="combat"] ~ .sheet-combat, +.sheet-tabstoggle[value="powers"] ~ .sheet-powers { display: block; } +.sheet-typetoggle[value="pc"] ~ .sheet-topbar, +.sheet-typetoggle[value="pc"] ~ .sheet-pc { + display: block; +} + +.sheet-typetoggle[value="npc"] ~ .sheet-topbar, +.sheet-typetoggle[value="npc"] ~ .sheet-npc { + display: block; +} + +.sheet-typetoggle[value="ship"] ~ .sheet-ship { + display: block; +} + + div.sheet-tab-content { border: 2px solid red; margin: 2px 2px 2px -5px; @@ -35,6 +54,13 @@ div.sheet-topbar { padding: 5px; padding-bottom:-10px; } + +div.sheet-settings { + margin: 2px 2px 2px -5px; +/* padding: 5px; + padding-bottom:-10px;*/ +} + /*==== Number boxes ====*/ input[type="number"] { -moz-appearance: textfield; @@ -497,6 +523,7 @@ input.sheet-rollselect[value="bane"] ~ .sheet-button:not(.sheet-roll_bane) { display: inline } + /* ==== sheet 2 colrow ====*/ .charsheet .sheet-2colrow .sheet-col { @@ -532,13 +559,18 @@ input.sheet-arrow { float: left; } -div.sheet-body { +div.sheet-body, +span.sheet-body { display: none; } -input.sheet-arrow:checked ~ div.sheet-body { +input.sheet-arrow:checked ~ span.sheet-body, +input.sheet-arrow:checked ~ div.sheet-body +{ display: block; } + +input.sheet-hider:checked ~ span.sheet-body, input.sheet-hider:checked ~ div.sheet-body { display: block; } @@ -1134,6 +1166,7 @@ input.sheet-power[type="checkbox"]:checked + span::before text-shadow: none; } +button.sheet-type, button.sheet-tab { line-height: 30px; outline: none !important; @@ -1161,6 +1194,9 @@ button.sheet-but-prime { margin-left: 1px; } +input.sheet-typeshow[value="pc"] ~ .sheet-type-pc, +input.sheet-typeshow[value="npc"] ~ .sheet-type-npc, +input.sheet-typeshow[value="ship"] ~ .sheet-type-ship, input.sheet-tabstoggle[value="prime"] ~ .sheet-but-prime, input.sheet-tabstoggle[value="skills"] ~ .sheet-but-skills, input.sheet-tabstoggle[value="inventory"] ~ .sheet-but-inventory, @@ -1172,4 +1208,65 @@ input.sheet-tabstoggle[value="powers"] ~ .sheet-but-powers { color:white; text-shadow: none; -} \ No newline at end of file +} + +span.sheet-shipcomponent { + font-size: 14px; + font-weight: bold; + width: 160px; + display: inline-block; + background: white; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +span.sheet-shipdetail, +input.sheet-shipdetail[type="text"] { + width: 300px; + display: inline-block; + background: white; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +span.sheet-shiptons, +input.sheet-shiptons[type="number"] { + width: 80px; + display: inline-block; + background: white; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.sheet-shipcost, +input.sheet-shipcost[type="number"] { + width: 80px; + display: inline-block; + background: white; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +span.sheet-shiphead, +input.sheet-shiphead { + border: solid 1px black; + font-size: 14px; + font-weight: bold; + padding-left:3px; + padding-right:2px; + padding-top:2px; + padding-bottom:2px; +} + +.sheet-critseverity { + width: 80px; + display: inline-block; + background: white; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} diff --git a/Mongoose_Traveller2e/MongooseTraveller.html b/Mongoose_Traveller2e/MongooseTraveller.html index b3dccb7805..64ce87b74e 100644 --- a/Mongoose_Traveller2e/MongooseTraveller.html +++ b/Mongoose_Traveller2e/MongooseTraveller.html @@ -1,2472 +1,2912 @@
    + +
    +    + + + +
    + Sheet Type: + + + + +
    + Roll behaviour: + + + Ask for Modifier? + + +
    + + + + + + + + + + +    + + + + + + + +
    -
    - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    RatingTempModRatingTempModRatingTempMod
    +
    +
    + + + + + + + + +
    +
    +
    +
    +

    Prime

    + + + + + + + + + + + + + + + + + + + + + +
    Name
    Age
    Homeworld
    Race
    Rads
    +
    +
    + +
    +

    Study Period

    + + + + + + + + + + + + + + +
    Weeks
    Periods
    Skill
    +
    +
    +

    History


    +
    +

    Character History

    + +

    Recent History

    +
    + + + + + + + + + + +
    Event NameEvent Date
    +
    +
    +
    +
    +

    Allies

    +
    + + + + + + + + + + + + + + + + + +
    Name
    Location
    Name
    Location
    +
    +
    +
    +
    +
    +

    Contacts

    +
    + + + + + + + + + + + + + + + + + +
    Name
    Location
    Name
    Location
    +
    +
    +
    +
    +
    +

    Enemies

    +
    + + + + + + + + + + + + + + + + + +
    Name
    Location
    Name
    Location
    +
    +
    +
    +
    +
    +

    Rivals

    +
    + + + + + + + + + + + + + + + + + +
    Name
    Location
    Name
    Location
    +
    +
    +
    +
    + +
    +
    +

    Skills

    +
        Select which skills to show
    - +
    - Roll behaviour: - - - Ask for Modifier? - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AdminAdvocateAnimalsAthleticsArtAstrogationBroker
    CarouseDeceptionDiplomatDriveElectronicsEngineerExplosives
    FlyerGamblerGunnerGun CombatHeavy WeaponsInvestigateJack-Of-All-Trades
    LanguageLeadershipMechanicMedicMeleeNavigationPersuade
    PilotProfessionReconScienceSeafarerStealthSteward
    StreetwiseSurvivalTacticsVaccSuit
    + + + + + + + +
    AllCombat
    - - - - - - - - - -    - - - - - + + + + + + + + + + + +
    SkillCharacteristicDMSkill
    Level
    Misc.
    Modifier
    TrainedTotalSpeciality
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    RollSpecialityLevelTotal
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    Other Skills

    + + + + + + + + + + + + +
    RollSkillSpecialityCharacteristicDMSkill
    Level
    Misc.
    Modifier
    TrainedTotal
    +
    + + + + + +
    + + + + + + +
    +
    +
    + +
    +
    +

    Equipment


    +
    +

    Gear

    +
    +
    + +
    +
    +
    +
    + + + + + + +
    Total Gear Weight
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + +
    GearQuantityKG each
    +
    +
    + + + + + + + + + + + + + + + +
    GearQuantityKG each
    +
    +
    +
    + +
    +
    +

    Finances

    + + + + + + + + + + + + + + + + + + + + + +
    Pension
    Debt
    Cash on Hand
    Monthly Ship Payment
    Monthly Life Support
    +

    Other Wealth

    +
    + + + + + + + + + + + + + + +
    Item
    Value
    Location
    +
    +
    +
    + +
    +
    +

    Combat

    +
    +
    +

    Armour

    +
    +
    +
    Type
    +
    TL
    +
    Protection
    +
    Protection (Laser)
    +
    Rad
    +
    KG
    +
    Required Skill
    +
    +
    +
    + + + + + + + + +
    +
    +
    + + + + + + + + +
    +
    +
    +
    + + + + + +
    + + + +
    +
    +
    + +
    +
    +
    +

    Weapons

    +
    +
    + Roll + Weapon + Skill Total + DM + Damage + TL + Range + KG + Magazine +
    +
    + + + + + + + + + +
     
    + +
    +
    + + + + + + + + + +
     
    + +
    +
    + + + + + + + + + +
     
    + +
    +
    + + + + + + + + + +
     
    + +
    +
    + + + + + + + + + +
     
    + +
    +
    + + + + + + + + + +
     
    + +
    +
    +
    + + + + + + + + + +
     
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    Powers

    +
    + + + + + + + + + + + + + + + +
    RatingTempMod
    +
    +
    + + + + + + + + + + + + + + + + +
    RollNameCharacteristicSkill Level
    +
    + + + + + + + + + + +
    +
    +
    +
    +
    +

    NPC Skills

    + + + + + + + + + + + + +
    RollSkillSpecialityCharacteristicDMSkill
    Level
    Misc.
    Modifier
    TrainedTotal
    +
    + + + + + +
    + + + + + + +
    +
    + + + + + +
    + + + +
    +

    Armour

    +
    +
    +
    Type
    +
    TL
    +
    Protection
    +
    Protection (Laser)
    +
    Rad
    +
    KG
    +
    Required Skill
    +
    +
    +
    + + + + + + + + +
    +
    +
    + Roll + Weapon + Skill Total + DM + Damage + TL + Range + KG + Magazine +
    +
    + + + + + + + + + +
     
    + +
    +
    +
    + + + + + + + + + +
     
    + +
    +
    +
    + + +
    +
    +
    + + + +
    +
    +
    +
    + Item + Detail + Tons + Cost (MCr) +
    +
    + Hull + + + +
    +
    + Armour + + + +
    +
    + M-Drive + + + +
    +
    + J-Drive + + + +
    +
    + Power Plant + + + +
    +
    + Fuel Tanks + + + +
    +
    + Bridge + + + +
    +
    + Computer + + + +
    +
    + Sensors + + + +    + + +
    +
    +
    + + + + +
    +
    +
    - - - - - - - - - - - - - - - - - - - - - - - - +
    + Weapons + + + +    + + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + Craft + + + +    + + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + Systems + + + +    + + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + Software + + + +    + + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + Staterooms + + + +    + + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    + Common Areas + + + +
    +
    + Cargo + + + +
    +
    + + + + +
    + +
    +
    +
    + +
    +
    +    + + +
    +
    +    + + +
    +
    +    + + +
    +
    +
    +
    +
    + +
    +
    +    + + +
    +
    +    + + + + + +    + + +
    +
    +
    +    + + + + + +
    +
    +
    +
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    RatingTempModRatingTempModRatingTempMod
    -
    -
    - - - - - - - - -
    -
    -
    -
    -

    Prime

    - - - - - - - - - - - - - - - - - - - - - -
    Name
    Age
    Homeworld
    Race
    Rads
    -
    -
    - -
    -

    Study Period

    - - - - - - - - - - - - - - -
    Weeks
    Periods
    Skill
    -
    -
    -

    History


    -
    -

    Character History

    - -

    Recent History

    -
    - - - - - - - - - - -
    Event NameEvent Date
    -
    -
    -
    -
    -

    Allies

    -
    - - - - - - - - - - - - - - - - - -
    Name
    Location
    Name
    Location
    -
    -
    -
    -
    -
    -

    Contacts

    -
    - - - - - - - - - - - - - - - - - -
    Name
    Location
    Name
    Location
    -
    -
    -
    -
    -
    -

    Enemies

    -
    - - - - - - - - - - - - - - - - - -
    Name
    Location
    Name
    Location
    -
    -
    -
    -
    -
    -

    Rivals

    -
    - - - - - - - - - - - - - - - - - -
    Name
    Location
    Name
    Location
    -
    -
    -
    -
    - -
    -
    -

    Skills

    -
        Select which skills to show
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AdminAdvocateAnimalsAthleticsArtAstrogationBroker
    CarouseDeceptionDiplomatDriveElectronicsEngineerExplosives
    FlyerGamblerGunnerGun CombatHeavy WeaponsInvestigateJack-Of-All-Trades
    LanguageLeadershipMechanicMedicMeleeNavigationPersuade
    PilotProfessionReconScienceSeafarerStealthSteward
    StreetwiseSurvivalTacticsVaccSuit
    - - - - - - - -
    AllCombat
    -
    -
    -
    - - - - - - - - - - - -
    SkillCharacteristicDMSkill
    Level
    Misc.
    Modifier
    TrainedTotalSpeciality
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - -
    RollSpecialityLevelTotal
    -
    - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Other Skills

    - - - - - - - - - - - - -
    RollSkillSpecialityCharacteristicDMSkill
    Level
    Misc.
    Modifier
    TrainedTotal
    -
    - - - - - -
    - - - - - - -
    -
    -
    - -
    -
    -

    Equipment


    -
    -

    Gear

    -
    -
    - -
    -
    -
    -
    - - - - - - -
    Total Gear Weight
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    GearQuantityKG each
    -
    -
    - - - - - - - - - - - - - - - -
    GearQuantityKG each
    -
    -
    -
    - -
    -
    -

    Finances

    - - - - - - - - - - - - - - - - - - - - - -
    Pension
    Debt
    Cash on Hand
    Monthly Ship Payment
    Monthly Life Support
    -

    Other Wealth

    -
    - - - - - - - - - - - - - - -
    Item
    Value
    Location
    -
    -
    -
    - -
    -
    -

    Combat

    -
    -
    -

    Armour

    -
    -
    -
    Type
    -
    TL
    -
    Protection
    -
    Protection (Laser)
    -
    Rad
    -
    KG
    -
    Required Skill
    -
    -
    -
    - - - - - - - - -
    -
    -
    - - - - - - - - -
    -
    -
    -
    - - - - - -
    - - - -
    -
    -
    - -
    -
    -
    -

    Weapons

    -
    -
    - Roll - Weapon - Skill Total - DM - Damage - TL - Range - KG - Magazine -
    -
    - - - - - - - - - -
     
    - -
    -
    - - - - - - - - - -
     
    - -
    -
    - - - - - - - - - -
     
    - -
    -
    - - - - - - - - - -
     
    - -
    -
    - - - - - - - - - -
     
    - -
    -
    - - - - - - - - - -
     
    - -
    -
    -
    - - - - - - - - - -
     
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -

    Powers

    -
    - - - - - - - - - - - - - - - -
    RatingTempMod
    -
    -
    - - - - - - - - - - - - - - - - -
    RollNameCharacteristicSkill Level
    -
    - - - - - - - - - - -
    -
    - -
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    @@ -3451,12 +3891,22 @@ skills.forEach(skill => { }); }); -const buttonlist = ["prime","skills","inventory","combat","powers"]; -buttonlist.forEach(button => { - on(`clicked:${button}`, function() { - setAttrs({ - sheetTab: button + const buttonlist = ["prime","skills","inventory","combat","powers"]; + buttonlist.forEach(button => { + on(`clicked:${button}`, function() { + setAttrs({ + sheetTab: button + }); }); }); -}); + + const buttonlist_sheettype = ["pc","npc","ship"]; + buttonlist_sheettype.forEach(button => { + on(`clicked:${button}`, function() { + setAttrs({ + sheetType: button, + sheetTypeShow: button + }); + }); + }); diff --git a/Mongoose_Traveller2e/ShipSheet.png b/Mongoose_Traveller2e/ShipSheet.png new file mode 100644 index 0000000000..71ac387832 Binary files /dev/null and b/Mongoose_Traveller2e/ShipSheet.png differ diff --git a/Mongoose_Traveller2e/translation.json b/Mongoose_Traveller2e/translation.json index a75fc2034a..aaefb948b3 100644 --- a/Mongoose_Traveller2e/translation.json +++ b/Mongoose_Traveller2e/translation.json @@ -101,6 +101,43 @@ "modprompt-u": "Modifier: ", "settings-u": "Settings: ", "mod_default-Q": "Ask for modifier?", - "mod_default-D": "Yes prompts for a modifier on every roll, No never pronpts for a modifier, Toggle displays Yes/No buttons." - + "mod_default-D": "Yes prompts for a modifier on every roll, No never pronpts for a modifier, Toggle displays Yes/No buttons.", + "shipname-u": "Ship Name", + "shipclass-u": "Class", + "shiptl-u": "TL", + "shipcomponent-u": "Component", + "shipdetail-u": "Detail", + "shiptons-u": "Tons", + "shipcost-u": "Cost (MCr)", + "shiphull-u": "Hull", + "shiparmour-u": "Armour", + "shipmdrive-u": "M-Drive", + "shipjdrive-u": "J-Drive", + "shippower-u": "Power Plant", + "shipfuel-u": "Fuel Tanks", + "shipbridge-u": "Bridge", + "shipcomputer-u": "Computer", + "shipsensors-u": "Sensors", + "shipweapons-u": "Weapons", + "shipcraft-u": "Craft", + "shipsystems-u": "Systems", + "shipsoftware-u": "Software", + "shipstaterooms-u": "Staterooms", + "shipcommon-u": "Common Areas", + "shipcargo-u": "Cargo", + "shiptotal-u": "TOTAL", + "powerreq-u": "Power Requirements", + "powmanu-u": "Manoeuvre Drive", + "powjump-u": "Jump Drive", + "powbasicsystem-u": "Basic Ship Systems", + "powfuelproc-u": "Fuel Processor", + "powsensors-u": "Sensors", + "powweapons-u": "Weapons", + "hullpoints-u": "Hull Points", + "hullpointsmax-u": "Max", + "hullpointscurr-u": "Current", + "hullcritdam-u": "Critical Damage", + "hulllocations-u": "Location", + "hullcritlevel-u": "Severity", + "crew-u": "Crew" } \ No newline at end of file diff --git a/Nahual/nahual.css b/Nahual/nahual.css new file mode 100644 index 0000000000..94c0f3a900 --- /dev/null +++ b/Nahual/nahual.css @@ -0,0 +1,1947 @@ +@font-face { + font-family: 'League Gothic'; + font-style: normal; + font-weight: 400; + src: local('League Gothic Regular'), local('LeagueGothic-Regular'), url(http://nahualrpg.com/roll20/fonts/leaguegothic-regular-webfont.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'La Ghandi Sans'; + font-style: normal; + font-weight: 400; + src: local('La Ghandi Sans Regular'), local('LaGhandiSans-Regular'), url(http://nahualrpg.com/roll20/fonts/GandhiSans-Regular-webfont.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'GandhiSansBold'; + font-style: normal; + font-weight: 400; + src: local('GandhiSansBold Regular'), local('GandiSansBold-Regular'), url(http://programmancer.000webhostapp.com/roll20/GandhiSansBold.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +button[type=roll].sheet-buttonbroadcast { + + font-family: pictos; + position: absolute; + border: none; + margin: 0; + padding: 0; + z-index: 3; +} + + +/* +.sheet-tabstoggle[value="barrioqs"] ~ div.sheet-barrioqsn, +.sheet-tabstoggle[value="barrioqs"] ~ div.sheet-nahualityg, +.sheet-tabstoggle[value="nahuality"] ~ div.sheet-nahualityn, +.sheet-tabstoggle[value="nahuality"] ~ div.sheet-barriosqsg{ + display: block; +} + +.sheet-tabstoggle[value="barrioqs"] ~ div.sheet-barriosqsg, +.sheet-tabstoggle[value="barrioqs"] ~ div.sheet-nahualityn, +.sheet-tabstoggle[value="nahuality"] ~ div.sheet-nahualityg, +.sheet-tabstoggle[value="nahuality"] ~ div.sheet-barriosqsn{ + display: none; +} +*/ + +/*TABS*/ +/*---------------------------*/ +/* Fake tabs style1 (reskinned radio button; fixed to work properly in firefox */ +div.sheet-tab-content { display: none; } + +input.sheet-tab1:checked ~ div.sheet-tab1, +input.sheet-tab2:checked ~ div.sheet-tab2 +{ + display: block; +} + +input.sheet-tab1:checked + span.sheet-tab1, +input.sheet-tab2:checked + span.sheet-tab2 +{ +/* background: gray; + color: white;*/ + color:#e0e0e0; + background:#000000; +} + +input.sheet-tab +{ + width: 200px; + height: 30px; + position: relative; + top: 5px; + left: 6px; + margin-left: -1.5px; + margin-top: -1.5px; + cursor: pointer; + opacity: 0; + z-index: 9999; +} +span.sheet-tab { + line-height:normal; + outline:none; + border:0px; + height:30px; + width:200px; + font-weight:bold; + font-size:1.0em; + font-family:'La Ghandi Sans','Helvetica',sans-serif; + padding:0; + /*margin:0;*/ + line-height:30px; + text-align: center; + color:#000000; + background:#e0e0e0; + + position: relative; + margin-left: -200px; + cursor:pointer; + display:inline-block; + /* + display: inline-block; + font-size: 13px; + background: white; + color: gray; + font-weight: bold; + width: 70px; + height: 20px; + cursor: pointer; + position: relative; + margin-left: -75px; + */ +} +input.sheet-tab::before +{ + content: attr(title); + border: solid 1px #a8a8a8; + border-bottom-color: black; + text-align: center; + display: inline-block; + background: #fff; + background: -moz-linear-gradient(to top, #c8c8c8, #fff, #c8c8c8); + background: -webkit-linear-gradient(to top, #c8c8c8, #fff, #c8c8c8); + background: -ms-linear-gradient(to top, #c8c8c8, #fff, #c8c8c8); + background: -o-linear-gradient(to top, #c8c8c8, #fff, #c8c8c8); + background: linear-gradient(to top, #c8c8c8, #fff, #c8c8c8); + width: 50px; + height: 20px; + font-size: 18px; +} + +input.sheet-tab:checked::before +{ + background: #dcdcdc; + background: -moz-linear-gradient(to top, #fcfcfc, #dcdcdc, #fcfcfc); + background: -webkit-linear-gradient(to top, #fcfcfc, #dcdcdc, #fcfcfc); + background: -ms-linear-gradient(to top, #fcfcfc, #dcdcdc, #fcfcfc); + background: -o-linear-gradient(to top, #fcfcfc, #dcdcdc, #fcfcfc); + background: linear-gradient(to top, #fcfcfc, #dcdcdc, #fcfcfc); + border-bottom-color: #fff; +} + +input.sheet-tab:not(:first-child)::before +{ + border-left: none; +} + +div.sheet-tab-content +{ + /* + border: 1px solid #a8a8a8; + border-top-color: #000; + margin: 2px 0 0 5px; + padding: 5px; + */ + +} + + +/* +button[type=roll].sheet-buttonbroadcast:hover { + background-image:url(http://programmancer.000webhostapp.com/roll20/volutan.png); + background-repeat: no-repeat; + background-size: 15px 15px; + font-family: pictos; + position: absolute; + border: none; + margin: 0; + padding: 0; + z-index: 3; +}*/ + +.sheet-flat{ +display: grid; +grid-template-columns:33% auto; +/*grid-template-rows: auto auto;*/ +grid-gap: 2px; +grid-template-areas: +"flat1 flat2"; + +} + +.sheet-flat1{ + grid-area:flat1; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-flat2{ + grid-area:flat2; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + + +.sheet-gral{ +display: grid; +grid-template-columns:7% 7% 35% 7% 33%; +/*grid-template-rows: auto auto;*/ +grid-gap: 2px; +grid-template-areas: +"gral0 gral1 gral1 gral1 gral1" +"gral0 gral2 gral3 gral4 gral5"; + +} + +.sheet-gral0{ + grid-area:gral0; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-gral1{ + grid-area:gral1; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-gral2{ + grid-area:gral2; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-gral3{ + grid-area:gral3; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-gral4{ + grid-area:gral4; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-gral5{ + grid-area:gral5; + justify-self: start: + align-self: end; + border: 0px solid #909090; +} + +.sheet-barrio-question{ + padding-left:11px; + font-size: 9px; + padding-top: 0px; +} + +.sheet-rombo{ + padding-left:11px; + font-size: 9px; + padding-top: 0px; +} + +.sheet-separador{ + height: 10px; +} + +.sheet-div-numerito{ +display:inline; +position:relative; +} + +.sheet-label-numerito{ +display:inline; +font-size:13px; +color:#909090; +position:absolute; +top:-9px +} +/*CHECKBOXS*/ +/*container-vices */ +.sheet-div-gearandnotes{ +display: grid; +grid: auto/ 50% 50%; +grid-gap: 10px; +} + +.sheet-div-stages{ +display: grid; +grid: auto/ 266px 263px 263px; +grid-gap: 15px; +} +/**/ +.sheet-titulo { + display: grid; + grid: auto / 5px auto; + height: 25px; + width: 100%; + justify-items:start; + grid-gap: 4px; + padding: 0; + margin: 0; + border: 0px solid #0FF; + background: #dedede; + padding-top:7px; + +} +.sheet-character{ + color: #FFF; + text-align: left; + /*width:100%;*/ + /*height:100%;*/ + /*justify-self: start;*/ + /*padding-top:21px;*/ + place-self: center start; + border: 0px solid #F00; +} +.sheet-descripcion{ + color: #FFF; + text-align: left; + /*width:100%;*/ + /*height:100%;*/ + /*justify-self: start;*/ + place-self: center start; + border: 0px solid #0FF; +} +/**/ +.sheet-barrioq{ +display: grid; +grid: auto/ 18px auto; +grid-gap: 2px; +} + +.sheet-container-vices { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 22px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Hide the browser's default checkbox */ +.sheet-container-vices input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +/* Create a custom checkbox */ +.sheet-checkmark-vices { + position: absolute; + top: 5px; + left: 0; + height: 9px; + width: 9px; + background-color: #fff; /*#eee*/ + border: 1px solid #000; +} + +.sheet-checkmark-gear { + position: absolute; + top: 1px; + left: 0; + height: 12px; + width: 12px; + background-color: #fff; /*#eee*/ + border: 1px solid #000; +} + +.sheet-gear-label{ + padding-top:1px; +} + +/* On mouse-over, add a grey background color */ +.sheet-container-vices:hover input ~ .sheet-checkmark-vices { + background-color: #FFF; /*ccc*/ +} + +/* When the checkbox is checked, add a blue background */ +.sheet-container-vices input:checked ~ .sheet-checkmark-vices { + background-color: #FFF; /*2196F3*/ + background: url("http://programmancer.000webhostapp.com/roll20/x1.jpg"); + background-size: cover; + border: 1px solid #000; +} + +/* Create the checkmark/indicator (hidden when not checked) */ +.sheet-checkmark-vices:after { + content: ""; + position: absolute; + display: none; +} +/* Show the checkmark when checked */ +.sheet-container-vices input:checked ~ .sheet-checkmark-vices:after { + display: block; +} + +/* Style the checkmark/indicator */ +.sheet-container-vices .sheet-checkmark-vices:after { + left: -1000px; + top: 5px; + width: 5px; + height: 10px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + + +/**/ +/* On mouse-over, add a grey background color */ +.sheet-container-vices:hover input ~ .sheet-checkmark-gear { + background-color: #FFF; /*ccc*/ +} + +/* When the checkbox is checked, add a blue background */ +.sheet-container-vices input:checked ~ .sheet-checkmark-gear { + background-color: #FFF; /*2196F3*/ + background: url("http://programmancer.000webhostapp.com/roll20/x1.jpg"); + background-size: cover; + border: 1px solid #000; +} + +/* Create the checkmark/indicator (hidden when not checked) */ +.sheet-checkmark-gear:after { + content: ""; + position: absolute; + display: none; +} +/* Show the checkmark when checked */ +.sheet-container-vices input:checked ~ .sheet-checkmark-gear:after { + display: block; +} + +/* Style the checkmark/indicator */ +.sheet-container-vices .sheet-checkmark-gear:after { + left: -1000px; + top: 5px; + width: 5px; + height: 10px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + + +/**container-harm*/ +.sheet-container-harm { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 22px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Hide the browser's default checkbox */ +.sheet-container-harm input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +.sheet-checkmark-harm { + position: absolute; + top: 0px; + left: 0; + height: 12px; + width: 12px; + background-color: #fff; /*#eee*/ + border: 1px solid #000; +} + +.sheet-container-harm:hover input ~ .sheet-checkmark-harm { + background-color: #FFF; /*ccc*/ +} + +.sheet-container-harm input:checked ~ .sheet-checkmark-harm { + background-color: #FFF; /*2196F3*/ + background: url("http://programmancer.000webhostapp.com/roll20/x1.jpg"); + background-size: cover; + border: 1px solid #000; +} + +.sheet-checkmark-harm:after { + content: ""; + position: absolute; + display: none; +} +.sheet-container-harm input:checked ~ .sheet-checkmark-harm:after { + display: block; +} + +.sheet-container-harm .sheet-checkmark-harm:after { + left: -1000px; + top: 5px; + width: 5px; + height: 10px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +/*****************************************************************************************/ +/*****************************************************************************************/ +/*container*/ +.sheet-container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 22px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Hide the browser's default checkbox */ +.sheet-container input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +/* Create a custom checkbox */ +.sheet-checkmark { + position: absolute; + top: -2px; + left: 0; + height: 17px; + width: 17px; + background-color: #fff; /*#eee*/ +} + +/* On mouse-over, add a grey background color */ +.sheet-container:hover input ~ .sheet-checkmark { + background-color: #FFF; /*ccc*/ +} + +/* When the checkbox is checked, add a blue background */ +.sheet-container input:checked ~ .sheet-checkmark { + background-color: #FFF; /*2196F3*/ + background: url("http://programmancer.000webhostapp.com/roll20/x1.jpg"); + background-size: cover; +} + +/* Create the checkmark/indicator (hidden when not checked) */ +.sheet-checkmark:after { + content: ""; + position: absolute; + display: none; +} + +/* Show the checkmark when checked */ +.sheet-container input:checked ~ .sheet-checkmark:after { + display: block; +} + +/* Style the checkmark/indicator */ +.sheet-container .sheet-checkmark:after { + left: -1000px; + top: 5px; + width: 5px; + height: 10px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} +/****************************************************************************************/ +/****************************************************************************************/ +/****************************************************************************************/ +/*Menu antes de todo*/ +.sheet-show-menu:not([value="1"]) ~ .sheet-container-menu .sheet-menu { + display: none; +} + +.sheet-menu-mode:not([value="sheet_choice"]) ~ .sheet-sheet_choice { + display: none; +} + +.sheet-menu { + background: rgba(0, 0, 0, 0.6); + position: absolute; + top: 0; + padding-top: 11px; + z-index: 100; + left: 0; + width: 100%; + height: 100%; +} + +.sheet-menu .sheet-content { + background: #eee; + border: 2px solid black; + margin: 0 auto; + border-radius: 10px; + padding: 15px; +} + +.sheet-menu .sheet-sheet_choice { + width: 450px; + display: grid; + grid: auto/repeat(3, 33%); + grid-row-gap: 5px; + justify-content: space-between; +} + +.sheet-menu .sheet-column { + display: grid; + align-content: start; + grid-row-gap: 8px; + justify-items: center; +} + +.sheet-menu .sheet-label { + font-family: 'Double'; + font-size: 20px; + text-align: center; + margin: 3px 0; +} + +.sheet-menu .sheet-desc { + text-align: center; + font-size: 12px; + margin-bottom: 4px; +} + +.sheet-menu .sheet-footer { + grid-column: 2; + font-size: 15px; + white-space: nowrap; + text-align: center; + font-style: italic; + align-self: center; +} + +.sheet-menu .sheet-cancelbutton { + align-self: center; + justify-self: end; +} + +button.sheet-generatebutton { + font-weight: bold; + font-variant: small-caps; + letter-spacing: 0.5px; + font-size: 14px; + padding: 2px 8px; + color: #444; + outline: none; +} + +button.sheet-generatebutton:hover { + color: #843398; + border-color: #843398; +} + +button.sheet-generatebutton .sheet-optional { + font-size: 0.8em; + font-style: italic; +} + +/*SELECCION HOJA*/ +.sheet-menu-mode[value="aguila"] ~ .sheet-aguila, +.sheet-menu-mode[value="armadillo"] ~ .sheet-armadillo, +.sheet-menu-mode[value="mono"] ~ .sheet-mono, +.sheet-menu-mode[value="jaguar"] ~ .sheet-jaguar, +.sheet-menu-mode[value="serpiente"] ~ .sheet-serpiente, +.sheet-menu-mode[value="tlacuache"] ~ .sheet-tlacuache, +.sheet-menu-mode[value="venado"] ~ .sheet-venado, +.sheet-menu-mode[value="perro"] ~ .sheet-perro, + +.sheet-menu-mode[value="cantina"] ~ .sheet-cantina, +.sheet-menu-mode[value="tacotruck"] ~ .sheet-tacotruck, +.sheet-menu-mode[value="carniceria"] ~ .sheet-carniceria, +.sheet-menu-mode[value="vecindad"] ~ .sheet-vecindad +{ + display: block; +} + +.sheet-menu-type[value="char"] ~ .sheet-setting-char, +.sheet-menu-type[value="chan"] ~ .sheet-setting-chan +{ + display: block; +} + +.sheet-setting-char, +.sheet-setting-chan, +.sheet-aguila, +.sheet-armadillo, +.sheet-mono, +.sheet-jaguar, +.sheet-serpiente, +.sheet-tlacuache, +.sheet-perro, +.sheet-venado, + +.sheet-tacotruck, +.sheet-carniceria, +.sheet-cantina, +.sheet-vecindad{ + display: none; +} + +.sheet-aguilax, +.sheet-armadillox, +.sheet-monox, +.sheet-jaguarx, +.sheet-serpientex, +.sheet-tlacuachex, +.sheet-perrox, +.sheet-venadox, + +.sheet-tacotruckx, +.sheet-carniceriax, +.sheet-cantinax, +.sheet-vecindadx{ + display: none; +} +/*******************************************************************/ +.sheet-voluta{ + background-image:url(http://programmancer.000webhostapp.com/roll20/volutag.png); + background-repeat: no-repeat; + background-size: 16px 10px; + height:10px; + width:16px; + margin-top:4px; +} +.sheet-voluta:hover { + background-image:url(http://programmancer.000webhostapp.com/roll20/volutan.png); + background-repeat: no-repeat; + background-size: 16px 10px; + height:10px; + width:16px; + margin-top:4px; +} + + +.sheet-totemmoves{ +display: grid; +grid: auto / 263px 263px; +grid-gap: 15px; +} + +.sheet-imagen{ + width:105px; + height:116px; +} +.sheet-imagen-titulo{ + width:180px; + padding-top:10px; +} + +.charsheet { + /*background: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Dungeon%20World%20by%20Roll20/images/background.png);*/ + /*background-repeat: repeat-y;*/ + /*background-color: rgb(230, 231, 233);*/ + height: auto; + border: 0px solid rgb(35, 31, 32); + min-width: 820px; + font-weight: normal; + font-family: 'League Gothic', 'Helvetica', sans-serif; +} +.charsheet label.sheet-mini-titulo { + font-weight: 400; + font-size: 2.3em; + font-family: 'League Gothic', 'Helvetica', sans-serif; + padding: 0; + margin: 0; +} +.charsheet label.sheet-gran-titulo { + font-weight: 400; + font-size: 2.5em; + font-family: 'League Gothic', 'Helvetica', sans-serif; + padding: 0; + margin: 0; +} + +.charsheet label.sheet-gran-titulo-masgrande{ + font-size: 3em; + font-weight: 400; + font-family: 'League Gothic', 'Helvetica', sans-serif; + padding: 0; + margin: 0; +} + + +.charsheet label.sheet-titulo-playbook { + font-weight: 400; + font-family: 'GandhiSansBold','Helvetica'; + font-variant: small-caps; + padding: 0; + margin:0; + font-size:40px; + padding-top:20px; +} +.charsheet label.sheet-name { + font-weight: 400; + font-size: 18px; + font-family: 'GandhiSansBold','Helvetica'; + font-variant: small-caps; + padding: 0; + margin:0; + /*padding: 5px 0 0 0;*/ +} + +.charsheet label.sheet-label-stress { + font-weight: 400; + font-size: 2.0em; + font-family: 'GandhiSansBold', 'Helvetica', sans-serif; + /*padding: 5px 0 0 0;*/ + /*display:inline;*/ + color:#FFFFFF; + /*position:absolute;*/ + /*margin:1px 0 0 5px;*/ + padding:0; + margin:0; +} + +.sheet-textarea{ + font-family:'la Ghandi Sans'; + outline:none; +} + +.charsheet label.sheet-name-normal { + font-size: 16px; + font-weight: 900; + font-family: 'GandhiSansBold','Helvetica'; + font-variant: small-caps; + margin: 0; +} + +.charsheet label.sheet-texto { + font-weight: 400; + font-size: 1.0em; + font-family: 'La Ghandi Sans', 'Helvetica', sans-serif; + padding: 0; + margin: 0; + line-height: normal; +} +.charsheet label.sheet-name-ch { + font-weight: bold; + font-size: 1.0em; + font-family: 'La Ghandi Sans', 'Helvetica', sans-serif; + padding: 0; + color:#707070; +} +.charsheet label.sheet-texto-lista { + font-weight: 400; + font-size: 1.0em; + font-family: 'La Ghandi Sans', 'Helvetica', sans-serif; + padding: 0; + margin:0; +} +/*V2.0 24/11/2020*/ +.sheet-vic{ +display: grid; +grid-template-columns:13px auto; +/*grid-template-rows: auto auto;*/ +grid-gap: 0px; +line-height:1.0; +grid-template-areas: +"vic1 vic2"; +} +.sheet-vic1{ +grid-area:vic1; +width:1px; +justify-self: start: +align-self: end; +border: 0px solid #909090; +} +.sheet-vic2{ +grid-area:vic2; +justify-self: start: +align-self: end; +padding-top: 2px; +border: 0px solid #909090; +padding-left: 3px; +} + +.sheet-vices{ +display: grid; +grid-template-columns:13px auto; +/*grid-template-rows: auto auto;*/ +grid-gap: 0px; +grid-template-areas: +"vices1 vices2" +"vices3 vices3"; + +} +.sheet-vices1{ +grid-area:vices1; +width:1px; +justify-self: start: +align-self: end; +border: 0px solid #909090; +} +.sheet-vices2{ +grid-area:vices2; +justify-self: start: +align-self: end; +padding-top: 2px; +border: 0px solid #909090; +} +.sheet-vices3{ +grid-area:vices3; +justify-self: start: +align-self: end; +border: 0px solid #909090; +} +/**/ + +/**********************************************************************************************************************/ +.sheet-tabla-check{ +display: grid; +grid-template-columns:8% *; +grid-template-rows: auto; +align-content: center; +grid-gap: 2px; +grid-template-areas: +"col1-check col2-check"; +} +.sheet-col1-check{ +grid-area:col1-check; +border: 0px solid blue; +} +.sheet-col2-check{ +grid-area:col2-check; +border: 0px solid blue; +} +.sheet-tabla-bullet{ +display: grid; +grid-template-columns:3% 97%; +grid-template-rows: auto; +align-content: left; +grid-gap: 3px; +grid-template-areas: +"col1-bullet col2-bullet"; +} +.sheet-col1-bullet{ +grid-area:col1-bullet; +border: 0px solid blue; +} +.sheet-col2-bullet{ +grid-area:col2-bullet; +border: 0px solid blue; +} + +.sheet-class-container{ +display: grid; +grid-template-columns:12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5%; +grid-template-rows: auto; +align-content: center; +grid-gap: 0px; +grid-template-areas: +"item-class1 item-class2 item-class3 item-class4 item-class5 item-class6 item-class7 item-class8"; +} +.sheet-item-class1{ +grid-area:item-class1; +border: 0px solid red; +} +.sheet-item-class2{ +grid-area:item-class2; +border: 0px solid red; +} +.sheet-item-class3{ +grid-area:item-class3; +border: 0px solid red; +} +.sheet-item-class4{ +grid-area:item-class4; +border: 0px solid red; +} +.sheet-item-class5{ +grid-area:item-class5; +border: 0px solid red; +} +.sheet-item-class6{ +grid-area:item-class6; +border: 0px solid red; +} +.sheet-item-class7{ +grid-area:item-class7; +border: 0px solid red; +} +.sheet-item-class8{ +grid-area:item-class8; +border: 0px solid red; +} + +.sheet-top-container +{ +display: grid; +grid-template-columns:266px 263px 263px; +grid-template-rows: auto; +align-content: center; +/*grid-gap: 15px;*/ +column-gap: 15px; +row-gap: 8px; + +grid-template-areas: +"clase-p clase-p barrio-p" +"name-p stats-p barrio-p"; +/* +background: url(http://programmancer.000webhostapp.com/roll20/layout-1.jpg); +background-repeat: no-repeat; +*/ +} +.sheet-top-clase-p +{ +display: grid; +grid-template-columns:20% 20% 20% 20% 20%; +grid-template-rows: auto; +grid-template-areas: +"top-clase-imagen-p top-clase-titulo-p top-clase-titulo-p top-clase-titulo-p top-clase-titulo-p" +"top-clase-imagen-p top-clase-dsc-p top-clase-dsc-p top-clase-dsc-p top-clase-dsc-p"; +} + +.sheet-alamitad +{ +display: grid; +grid-template-columns:263px 541px; +grid-template-rows: auto; +grid-gap: 15px; +} + + +.sheet-mid-container +{ +display: grid; +grid-template-columns: 266px 541px; +grid-template-rows: auto; +grid-gap: 15px; +/* +grid-template-areas: +"signature-p totem-p"; +*/ +} +.sheet-bottom-container +{ +display: grid; +grid-template-columns:33% 33% 33%; +grid-template-rows: auto; +grid-gap: 5px; +grid-template-areas: +"nahuality-p nahuality-p nahuality-p" +"nahual1-p nahual2-p nahual3-p"; +} +.sheet-final-container +{ +display: grid; +grid-template-columns:50% 50%; +grid-template-rows: auto; +grid-gap: 5px; +grid-template-areas: +"gear-p notes-p"; +} +/**/ +.sheet-item-clase-p{ +grid-area:clase-p; +border: 0px solid #BBBBBB; +} +.sheet-item-top-clase-imagen-p{ +grid-area:top-clase-imagen-p; +border: 0px solid powderblue; +} +.sheet-item-top-clase-titulo-p{ +grid-area:top-clase-titulo-p; +border: 0px solid powderblue; +margin-top:-8px; + +/*padding:5px 0 0 0;*/ +} +.sheet-item-top-clase-dsc-p{ +grid-area:top-clase-dsc-p; +border: 0px solid powderblue; +} + +.sheet-item-name-p{ +grid-area:name-p; +border: 0px solid #0FF; +} +.sheet-item-stats-p{ +grid-area:stats-p; +border: 0px solid #BBBBBB; +} +.sheet-item-barrio-p{ +grid-area:barrio-p; +border: 0px solid #BBBBBB; + +/*background-color: #dedede;*/ +} + +.sheet-item-signature-p{ +grid-area:signature-p; +border: 0px solid #BBBBBB; +} +.sheet-item-totem-p{ +grid-area:totem-p; +border: 0px solid #BBBBBB; +} + +.sheet-item-nahuality-p{ +grid-area:nahuality-p; +border: 0px solid #BBBBBB; +} +.sheet-item-nahual1-p{ +grid-area:nahual1-p; +border: 0px solid #BBBBBB; +} +.sheet-item-nahual2-p{ +grid-area:nahual2-p; +border: 0px solid #BBBBBB; +} +.sheet-item-nahual3-p{ +grid-area:nahual3-p; +border: 0px solid #BBBBBB; +} + +.sheet-item-gear-p{ +grid-area:gear-p; +border: 0px solid #BBBBBB; +} +.sheet-item-notes-p{ +grid-area:notes-p; +border: 0px solid #BBBBBB; +} + + +/*changarro*/ +.sheet-container-changarro +{ +display: grid; +grid-template-columns:33% 33% 33%; +grid-template-rows: auto; +align-content: center; +grid-gap: 5px; +grid-template-areas: +"renglon1-c renglon1-c col3-c" +"col1-c col2-c col3-c"; +} +.sheet-item-renglon1-c{ +grid-area:renglon1-c; +border: 1px solid powderblue; +} +.sheet-item-col1-c{ +grid-area:col1-c; +border: 1px solid powderblue; +} +.sheet-item-col2-c{ +grid-area:col2-c; +border: 1px solid powderblue; +} +.sheet-item-col3-c{ +grid-area:col3-c; +border: 1px solid powderblue; +} + +.sheet-top-changarro +{ +display: grid; +grid-template-columns:50% 50%; +grid-template-rows: 15px 40px; +align-content: center; +grid-gap: 1px; +grid-template-areas: +"top1-c top2-c" +"top1-c top3-c"; +} +.sheet-top1-c{ +grid-area:top1-c; +border: 1px solid red; +} +.sheet-top2-c{ +grid-area:top2-c; +border: 1px solid red; +} +.sheet-top3-c{ +grid-area:top3-c; +border: 0px solid red; +align-self:end; +} + +/**/ +/*ESTO FUE SOLAMENTE DE LA PARTE DE ARRIBA*/ +/*Utilizar como ejemplo para acomodar en el medio, pero hay que utilizar PX para el tamaño exacto de los checkx*/ +.sheet-div-stress { + background-color:#000000; + display: grid; + grid: auto / 2px 85px 17px 17px 17px 17px 17px 17px 17px; + height:37px; + justify-items:start; + grid-gap: 3px; + /*padding: 0;*/ + /*margin: 0;*/ + border: 0px solid #F00; +} +.sheet-div-stress-stress{ + color: #FFF; + /*text-align: left;*/ + /*padding-top:21px;*/ + align-self: center; + justify-self: start; + border: 0px solid #0FF; + padding-top: 2px; + margin:0; +} +.sheet-div-stress-in{ + color: #FFF; + /*text-align: left;*/ + /*padding-top:21px;*/ + align-self: center; + justify-self: start; + border: 0px solid #0FF; + padding:0; + margin:0; +} + +.sheet-div-harm { + display: grid; + grid: auto / 17px 17px 500px; + justify-items:start; + grid-gap: 0px; + /*padding: 0;*/ + /*margin: 0;*/ + border: 0px solid #F00; +} +.sheet-div-harm-harm{ + color: #FFF; + /*text-align: left;*/ + /*padding-top:21px;*/ + align-self: center; + justify-self: start; + border: 0px solid #0FF; + padding-top: 4px; + margin:0; +} +.sheet-div-harm-in{ + color: #FFF; + /*text-align: left;*/ + /*padding-top:21px;*/ + align-self: center; + justify-self: start; + border: 0px solid #0FF; + padding:0; + margin:0; +} + + + + +.sheet-btn { + /*background-color: #FF0000; */ + /*border: none;*//*solid 1px red;*/ + + color: #FFFFFF; + padding: 0; + text-align: center; + font-size: 20px; + font-weight:bold; + margin: 0; + cursor: pointer; + outline:none; + + /*height: 5px;*/ + /*border-radius: 50%;*/ + + background: none; + border: 0; + /*color: inherit;*/ + /* cursor: default; */ + line-height: 10px; + overflow: visible; + -webkit-user-select: none; /* for button */ + -webkit-appearance: button; /* for input */ + -moz-user-select: none; + -ms-user-select: none; + + +} +.sheet-btn-xp { + color: #000000; + padding: 0; + text-align: center; + font-size: 20px; + font-weight:bold; + margin: 0; + cursor: pointer; + + background: none; + border: 0; + font: inherit; + line-height: normal; + overflow: visible; + -webkit-user-select: none; /* for button */ + -webkit-appearance: button; /* for input */ + -moz-user-select: none; + -ms-user-select: none; +} + +li { +list-style: none; +padding: 0px; +text-align:left; +} + +ul { + list-style: none; + padding-left: 5px; + margin-left: 5px; +} + +input[type=checkbox] { + height:17px; + width:17px; + background-color:#fff; +} + +.sheet-rolltemplate-broadcast { + /*width: 299px;*/ + /*height: 258px;*/ + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/basic.jpg); + background-size: 282px 104px; + background-repeat: no-repeat; + color: white; + background-color: #dedede; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} +.sheet-rolltemplate-broadcast .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-broadcast .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + + + +.sheet-rolltemplate-moves { + /* + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/rollart_linea.jpg); + background-size: 282px 260px; + background-repeat: no-repeat; + color: white; + background-color: #dedede; + border: 0px solid black; + border-spacing: 0;*/ +} +/* +.sheet-rolltemplate-moves .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-moves .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} +*/ + +.sheet-rolltemplate-moves .sheet-roll-movesmiss{ + /*width: 299px;*/ + /*height: 258px;*/ + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/miss.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + background-color: #dedede; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-moves .sheet-roll-movesmiss .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-success .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-failure .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesmiss .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit{ + /*width: 299px;*/ + /*height: 258px;*/ + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/rollart.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + background-color: #dedede; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-moveshit .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-moveshit .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-moveshit .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-success .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-failure .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-moveshit .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + + +.sheet-rolltemplate-moves .sheet-roll-movesfull{ + /*width: 299px;*/ + /*height: 258px;*/ + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/fullhit.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + background-color: #dedede; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-moves .sheet-roll-movesfull .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesfull .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesfull .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesfull .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-success .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-failure .inlinerollresult, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-moves .sheet-roll-movesfull .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + + +/* +.sheet-rolltemplate-nahual { + height: 258px; + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/rollart.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-nahual .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-nahual .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-nahual .inlinerollresult, +.sheet-rolltemplate-nahual .inlinerollresult.fullcrit, +.sheet-rolltemplate-nahual .inlinerollresult.fullfail, +.sheet-rolltemplate-nahual .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nahual .sheet-success .inlinerollresult, +.sheet-rolltemplate-nahual .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-nahual .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-nahual .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nahual .sheet-failure .inlinerollresult, +.sheet-rolltemplate-nahual .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-nahual .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-nahual .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} +*/ +/* ROLL TEMPLATE NHL */ +.sheet-rolltemplate-nhl { +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss{ + /*width: 299px;*/ + height: 258px; + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/miss.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-success .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-failure .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlmiss .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit{ + /*width: 299px;*/ + height: 258px; + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/rollart.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-success .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-failure .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlhit .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull{ + /*width: 299px;*/ + height: 258px; + padding: 0px; + margin:0 -5px -4px -45px; + background: url(http://programmancer.000webhostapp.com/roll20/fullhit.jpg); + background-size: 282px 258px; + background-repeat: no-repeat; + color: white; + /*font-weight: bold;*/ + /*text-shadow: 2px 2px #171819;*/ + border: 0px solid black; + border-spacing: 0; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-rollnahual{ + display: grid; + grid: auto/ 280px; + grid-gap: 2px; + padding-top: 25px; + padding-left: 25px; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-rollnahual .sheet-roll{ + justify-self:start; + align-self: center; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-success .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-success .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-success .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-success .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} + +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-failure .inlinerollresult, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-failure .inlinerollresult.fullcrit, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-failure .inlinerollresult.fullfail, +.sheet-rolltemplate-nhl .sheet-roll-nhlfull .sheet-failure .inlinerollresult.importantroll{ + background-color: transparent; + border: none; + font-weight: normal; +} +/************************************************************************************************/ +/**/ +button[type="roll"] { + text-shadow: none; + background: transparent; + box-shadow: none; + box-sizing: border-box; + /*font-weight: bold;*/ + /*font-family: 'Double';*/ + outline: none; + border-radius: 0; + transition: all 0.2s; + color: #000; + + font-weight: 400; + font-size: 18px; + font-family: 'League Gothic','Helvetica'; + font-variant: small-caps; + padding: 5px 0 0 0; + +} + +button[type="roll"].btn::before { + content: ""; + outline: none; +} + +button[type="roll"].sheet-buttonroll { + display: flex; + border: none; + margin: 0; + padding: 0; + outline: none; + font-size:46px; +} + +button[type="roll"].sheet-buttonroll:hover { + color: #d3d3d3; + outline: none; +} + +/**/ +/* +input[type=radio], +.sheet-invisible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +*/ +.sheet-input-text +{ + width:35px; + font-weight:bold; + text-align:right; +} + +.sheet-input-text-stat +{ + width:53px; + height:53px; + font-size: 22px; + font-weight:bold; + text-align:center; + background-repeat: no-repeat; + background-size:cover;/*35px 35px;*/ + background-image:url(http://nahualrpg.com/roll20/Nahual-Roll20-stat.jpg); + border:0px; + padding-top:8px; + outline: none; + font-family: 'GandhiSansBold','La Ghandi Sans','Helvetica'; +} + +.sheet-input-text-statx +{ + width:35px; + font-size: 15px; + font-weight:bold; + text-align:center; + background-repeat: no-repeat; + background-size:35px 35px; + background-image:url(http://nahualrpg.com/roll20/Nahual-Roll20-stat.jpg); + border:0px; +} +.sheet-div-relaciones{ + width: 100px; + padding: 0; + margin: 0; + border: none; + border-bottom: 1px solid black; +} +.sheet-div-input-harm{ + width: 100px; + padding: 0; + margin: 0; + border: none; + border-bottom: 1px solid black; +} + +.sheet-input-relaciones { + height: 10px; + width: 100px; + font-family: 'La Ghandi Sans'; + font-size: 12px; + padding: 0; + margin: 0; + border: none; + /*border-bottom: 1px solid black;*/ + background: transparent; + outline:none; +} + +.sheet-input-harm { + height: 10px; + width: 100px; + font-family: 'La Ghandi Sans'; + font-size: 12px; + padding: 0; + margin: 0; + border: none; + /*border-bottom: 1px solid black;*/ + background: transparent; + outline:none; +} + +.sheet-input-name{ + font-family:'La Ghandi Sans'; + width:100%; + margin:0 0 12px 0; + outline:none; +} + +.sheet-input-name-ch { + width: 275px; + padding: 0; + margin: 0; + border: none; + border-bottom: 1px solid black; + font-size:30px; +} + + +textarea { + height: 48px; + box-sizing: border-box; +} + diff --git a/Nahual/nahual.html b/Nahual/nahual.html new file mode 100644 index 0000000000..ac39c4be20 --- /dev/null +++ b/Nahual/nahual.html @@ -0,0 +1,7804 @@ + + +
    +
    + + +
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    + + +
    +
    +
    + + + + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
     
    + + + + +
    +
    +
    ♦
    +
    +
    + + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    + + +
     
    + + + +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
     
    + +
     
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
     
    +
    +
    + +
    +
     
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    +
     
    +
     
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
     
    +
     
    + + +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
     
    +
    +
    + +
    +
    +
    +
    +
    + + +
     
    + + + +
     
    + + + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    + +
     
    +
     
    +
     
    + + +
     
    +
     
    + +
    +
    +
    +
    + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    + +
    +    + +
    +
    +
     
    +
    +
    +
    +
    +    + +
    +
    +
     
    +
    +
    +
    +
    +    + +
    +
    +
     
    +
     
    + + + +
     
    +
     
    + +
    +
    +
    +
    +    + +
    +
    +
     
    +
    +
    +
    +
    +    + +
    +
    + + + + + +
    + + +
    +
     
    +
     
    + +
    +
    + + + +
     
    + +
    + +
    +
    + +
    +
    + + + + + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
     
    +
    +
     
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
     
    +
    +
     
    +
    +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    +
    +
    +
     
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    + +
    + +
    + +
    + + +
     
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
     
    + + + BARRIO, RELACIONES & GEAR + + STAGES OF NAHUALITY + +
     
    + +
    +
    +
    + +
     
    + + + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
     
    + + +
     
    + + +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    ♦
    +
    +
    +
    +
    +
    + +
     
    + + +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    + +
    + +
     
    + + + + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
     
    + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + ♦ +
    +
    + +
    +
    +
    +
    + ♦ +
    +
    + +
    +
    + +
     
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + + + + +
     
    + +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + +
    +
    + + + + +
    + + + + + + + + + +
    + + + +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    col3
    +
    +
    +
    + + +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    + + + {{#rollGreater() result 9}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    + {{/rollGreater() result 9}} + {{#rollBetween() result 7 9}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    + {{/rollBetween() result 7 9}} + {{#rollLess() result 7}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    + {{/rollLess() result 7}} +
    + + + {{#rollGreater() result 9}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    +
    + {{/rollGreater() result 9}} + {{#rollBetween() result 7 9}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    +
    + {{/rollBetween() result 7 9}} + {{#rollLess() result 7}} +
    +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    +
    + {{/rollLess() result 7}} +
    + + +
    +
    + +
    +
     
    +
    + +
    +
     
    +
    + +
    +
    +
    +
    + + + + + diff --git a/Nahual/nahual.png b/Nahual/nahual.png new file mode 100644 index 0000000000..980224f1e7 Binary files /dev/null and b/Nahual/nahual.png differ diff --git a/Nahual/sheet.json b/Nahual/sheet.json new file mode 100644 index 0000000000..b53a972ae3 --- /dev/null +++ b/Nahual/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "nahual.html", + "css": "nahual.css", + "authors": "Roberto Martinez", + "roll20userid": "505520", + "preview": "nahual.png", + "instructions": "Choose your playbook or changarro. Write your name, choose your stats." +} \ No newline at end of file diff --git a/Nahual/translation.json b/Nahual/translation.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translation.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/af.json b/Nahual/translations/af.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/af.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/ca.json b/Nahual/translations/ca.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/ca.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/cs.json b/Nahual/translations/cs.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/cs.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/da.json b/Nahual/translations/da.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/da.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/de.json b/Nahual/translations/de.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/de.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/el.json b/Nahual/translations/el.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/el.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/en.json b/Nahual/translations/en.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/en.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/es.json b/Nahual/translations/es.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/es.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/fr.json b/Nahual/translations/fr.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/fr.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/he.json b/Nahual/translations/he.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/he.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/hu.json b/Nahual/translations/hu.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/hu.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/it.json b/Nahual/translations/it.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/it.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/ja.json b/Nahual/translations/ja.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/ja.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/ko.json b/Nahual/translations/ko.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/ko.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/nl.json b/Nahual/translations/nl.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/nl.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/pl.json b/Nahual/translations/pl.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/pl.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/pt.json b/Nahual/translations/pt.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/pt.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/ru.json b/Nahual/translations/ru.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/ru.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/sl.json b/Nahual/translations/sl.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/sl.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/sv.json b/Nahual/translations/sv.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/sv.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/tr.json b/Nahual/translations/tr.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/tr.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/uk.json b/Nahual/translations/uk.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/uk.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/zh.json b/Nahual/translations/zh.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/zh.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Nahual/translations/zu.json b/Nahual/translations/zu.json new file mode 100644 index 0000000000..01a092a2ed --- /dev/null +++ b/Nahual/translations/zu.json @@ -0,0 +1,623 @@ +{ + "peripheral1_dsc": "When you intervene in another PC’s action, mark stress to give them a -2 or +1 to their roll. Mark an additional stress to also:
    • Keep your meddling hidden from your target
    • Avoid exposing yourself to costs and complications
    • Set up another character with an opportunity
    ", + "basicmove_roll": "BASIC MOVE", + "peripheralmove_roll": "PERIPHERAL MOVE", + "flat_roll": "FLAT ROLL", + "generalmodifiers_label": "GENERAL MODIFIERS", + "forward_label": "
    Forward", + "ongoing_label": "
    Ongoing", + "choose_sheet_type": "Choose sheet type", + "agetsa": "and gets a", + "aguila_dsc": "You are the Eagle. You project security and a regal bearing. A natural tactician with a strong personality, you can’t stand taking orders. You are arrogant... because you soar far above everyone else. Your view from these heights allows you to analyze things with great precision.", + "aguila_label": "ÁGUILA", + "armadillo_dsc": "You are the Armadillo. You have a tough nature and a noble heart. Shielded by your own code of honor, you have a soft spot for those in trouble and do every- thing in your power to protect them. You are a stubborn defender, a paragon of resistance and perseverance.", + "armadillo_label": "ARMADILLO", + "barrio_dsc": "Barrio", + "barrio_label": "BARRIO", + "barrioquestion1_aguila_label": "You see yourself above everyone in the barrio. Who was the only person in the barrio close to your level, and what did you do to make them fall?", + "barrioquestion2_aguila_label": "You once helped a dangerous enemy of the barrio. Who is this, and why was this the best decision for your long-term plans?", + "barrioquestion1_armadillo_label": "Someone has been snooping around the barrio, and you are determined to find out why. Who are they, and why is it dangerous to get involved with them?", + "barrioquestion2_armadillo_label": "You once helped someone in the barrio with a big problem. Who did you help, and what happened recently that rekindled the problem or brought dire consequences to you?", + "barrioquestion1_jaguar_label": "You grow up in the barrio, but you’ve always been isolated from everyone. Who’s the only person here you consider yourself close too?", + "barrioquestion2_jaguar_label": "You killed a dangerous threat to the barrio: someone is happy you took care of the problem, but someone else is not. Who are they? Why do they feel as they feel?", + "barrioquestion1_mono_label": "You are the artist of the barrio. Most people like you, but there’s one person who is your craziest fan. Why do you find this person so annoying?", + "barrioquestion2_mono_label": "You recently poked your nose into something you shouldn’t have investigated. What dangerous secret did you unveil?", + "barrioquestion1_perro_label": "You’re utmostly loyal and friendly to your pack, but people in the barrio are pretty much terrified of you. Why?", + "barrioquestion2_perro_label": "You consider the whole barrio an extension of your pack. You’ll do anything for them, and everyone likes you. Everyone but one person. Why do they hold a grudge against you?", + "barrioquestion1_serpiente_label": "You have a dangerous and powerful enemy of the barrio in your pocket. Why are you seducing them?", + "barrioquestion2_serpiente_label": "You are charming and friendly to the barrio and everyone loves you. Who is the only person that knows you are only playing with them? And why are they still keeping it a secret?", + "barrioquestion1_tlacuache_label": "Your scams are infamous all over the barrio, and you’re the usual suspect for any trouble. Who always gives you a heads-up when someone is looking for you?", + "barrioquestion2_tlacuache_label": "You grew up all by yourself in the barrio and know it like the back of your hand. Name two other persons that grew up with you on the streets: one of them is your camarada and would die for you, the other hates you and wants you dead. Why?", + "barrioquestion1_venado_label": "Everyone in the barrio is either jealous or has the hots for you. Or both! But there’s someone who treats you like a normal person. Who are they, and why do you care?", + "barrioquestion2_venado_label": "A powerful and dangerous person is crazy about you, and keeps sending you gifts. Who is it and how do you feel about them?", + "barrioquestions_dsc": "Choose and answer only one of the following questions. Use only NPCs for the answers.", + "barrioquestions_label": "BARRIO QUESTIONS", + "peripheralmoves_label": "PERIPHERAL MOVES", + "peripheral1_label": "INTERVENE", + "peripheral2_label": "GET HIT HARD", + "peripheral2_dsc": "When you get hit hard, roll and add your armor (if any). On a hit, reduce the harm you mark by one level. On a 7-9, the Marakame also chooses 1:
    • You lose control of your nahual momentarily.
    • You mark a condition of your choice.
    • You give your opposition an advantage or opportunity.
    On a miss, you’re caught off-guard or flat-footed; you can still choose to reduce the harm by one level, but you’ll be taken out of the scene.", + "basicmoves1_label": "AVOID TROUBLE", + "basicmoves1_dsc": "When you rely on instinct and quick thinking to avoid danger, difficulty, or trouble, roll with INSTINTO. On a 10+, your reaction gets you through. On a 7-9, things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_miss": "The Marakame tells you what happens.", + "basicmoves1_hit": "Things get complicated; the Marakame reveals an unexpected hardship or offers you a cost you have to pay to carry on.", + "basicmoves1_full": "Your reaction gets you through.", + "basicmoves2_label": "ASSAIL SOMEONE", + "basicmoves2_dsc": "When you assail someone with violence, roll with GARRA. On a hit, trade harm as established. On a 10+, choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    ", + "basicmoves2_miss": "The Marakame tells you what happens.", + "basicmoves2_hit": "Trade harm as established.", + "basicmoves2_full": "Choose one as well:
    • You inflict terrible harm; upgrade your harm one level
    • You stand your ground; take +1 forward to get hit hard
    • You create an opportunity for yourself or your allies
    .", + "basicmoves3_label": "MAKE A FUSS", + "basicmoves3_dsc": "When you make a fuss to get someone to do what you want, roll with MAÑA.
    For NPCs: On a 10+, they take the bait and act accordingly. On a 7-9, they aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: On a 10+, both. On a 7-9, choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_miss": "The Marakame tells you what happens.", + "basicmoves3_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves3_full": "For NPCs: On a 10+, they take the bait and act accordingly.
    For PCs: On a 10+, both:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves4_label": "SNEAK AROUND", + "basicmoves4_dsc": "When you sneak around a watchful threat, roll with MAÑA. On a hit, you move past or close to your opposition. On a 10+, choose 2. On a 7-9, choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_miss": "The Marakame tells you what happens.", + "basicmoves4_hit": "You move past or close to your opposition. Choose 1:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves4_full": "Choose 2:
    • Seize an exposed asset or resource
    • Bring others along with you
    • Take a secure or strong position
    ", + "basicmoves5_label": "FIGURE SOMEONE OUT", + "basicmoves5_dsc": "When you figure someone out, roll with BARRIO. On a 10+, ask 3. On a 7-9, ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_miss": "The Marakame tells you what happens.", + "basicmoves5_hit": "Ask 1:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves5_full": "Ask 3:
    • What are your true intentions?
    • What do you wish I’d do?
    • What are you really feeling?
    • What do you fear might happen?
    • How could I get you to ______?
    ", + "basicmoves6_label": "HIT UP YOUR CONECTE", + "basicmoves6_dsc": "When you hit up your conecte for info or resources, tell the Marakame who you are going to and roll with BARRIO. On a hit, they’re available and can get what you need at a fair price. On a 10+, also choose one:
    • Your conecte has an intriguing or profitable opportunity for you.
    • Your conecte knows some sweet secret or dirty intel they are willing to share.
    ", + "basicmoves6_miss": "The Marakame tells you what happens.", + "basicmoves6_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves6_full": "I don't know.", + "basicmoves7_label": "OPEN THE DOORS OF PERCEPTION", + "basicmoves7_2_label": "OPEN THE DOORS ...", + "basicmoves7_dsc": "When you open the doors of perception, roll with INSTINTO. On a hit, the Marakame will unveil something new or interesting about your current situation. On a 10+, you get to ask a follow-up question.", + "basicmoves7_miss": "The Marakame tells you what happens.", + "basicmoves7_hit": "The Marakame will unveil something new or interesting about your current situation.", + "basicmoves7_full": "You get to ask a follow-up question.", + "basicmoves8_label": "SUMMON YOUR NAHUAL", + "basicmoves8_dsc": "When you summon your nahual to transform into a stage you control, answer the questions:
    • Do you have your mask on? If no, mark stress.
    • Did you consume an enhancer? If no, mark stress.
    While transformed you have access to your totem moves, and to all the channel abilities of the stage you activated and lower.", + "basicmoves8_miss": "The Marakame tells you what happens.", + "basicmoves8_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves8_full": "I don't know.", + "basicmoves9_label": "UNLEASH YOUR NAHUAL", + "basicmoves9_dsc": "When you unleash your nahual to push yourself over your highest stage of control, mark a condition and roll. Add +1 to your roll for each enhancer you eat (max +4). On a hit, you do it. On a 7-9, mark a condition. On a 12+, you briefly transform to an even higher stage (5th stage max), and you cross off one of your conditions permanently!", + "basicmoves9_miss": "The Marakame tells you what happens.", + "basicmoves9_hit": "For NPCs: They aren’t quite convinced; the Marakame will tell you what it will take to make them give in.
    For PCs: Choose one:
    • If they concede, they mark XP.
    • If they resist, they mark stress.
    ", + "basicmoves9_full": "I don't know.", + "basicmoves_label": "BASIC MOVES", + "cantina_label": "CANTINA", + "carniceria_label": "CARNICERIA", + "chan_mode": "Changarro", + "changarro_label": "CHANGARRO", + "channel_label": "Channel Abilities", + "channn": "Changarro", + "char_mode": "Personaje", + "charrr": "Character", + "conditions_dsc": "If all your conditions are marked you can’t summon or unleash your nahual. If you need to mark a condition and cannot, your nahual gets out of your control; ask the Marakame what happens.", + "conditions_label": "CONDITIONS", + "deadlyharm_label": "DEADLY HARM", + "condition_afraid": "AFRAID", + "penalty_afraid": "-2 to assail someone", + "condition_anxious": "ANXIOUS", + "penalty_anxious": "-2 to hit up your conecte", + "condition_frustrated": "FRUSTRARED", + "penalty_frustrated": "-2 to figure someone out", + "condition_haunted": "HAUNTED", + "penalty_haunted": "-2 to opening the doors of perception", + "condition_insecure": "INSECURE", + "penalty_insecure": "-2 to make a fuss", + "condition_shaken": "SHAKEN", + "penalty_shaken": "-2 to sneak around", + "condition_restless": "RESTLESS", + "penalty_restless": "-2 to avoid trouble", + "garra_dsc": "Garra", + "garra_label": "GARRA", + "gear_assaultrifle": "An assault rifle [close/far, loud, auto-fire]", + "gear_longbow": "A longbow [close/far, reload]", + "gear_pair9mm": "A pair of 9mm [close, loud]", + "gear_sniperrifle": "A sniper rifle [far, loud, reload]", + "gear_throwingknives": "Throwing knives [hand/close, finite]", + "gear_9mm": "9mm [close, loud]", + "gear_shotgun": "Shotgun [close, messy]", + "gear_cleaver": "Cleaver, machete, or hatchet [touch, messy]", + "gear_9mmsupressor": "9mm with suppressor [close]", + "gear_smgsupressor": "SMG with suppressor [close, auto-fire]", + "gear_tacticalknife": "Tactical knife [touch]", + "gear_lightarmorknife": "Light armor [+1] and folding knife [touch]", + "gear_basement": "The basement of an old building", + "gear_sewer": "An deserted sewer section", + "gear_subway": "An abandoned subway section", + "gear_site": "An undiscovered archeological site", + "gear_lightarmor": "Light armor [+1]", + "gear_apartment": "An apartment in a fancy neighborhood", + "gear_hotride": "A hot ride (nice bike, classic car, fancy truck, etc.)", + "gear_wardrobe": "An outstanding wardrobe (with all sorts of exotic outfits)", + "gear_luxury": "A pair of luxury handguns (ivory, ebony, gold, diamonds, you name it)", + "gear_stylish": "A top-notch stylish blade (katana, kukri, jian, etc.)", + "gearandstuff_eagle_dsc": "You have a tough vehicle, your Eagle’s Nest (see Signature Move), your nahual mask, and two hearts of the earth. Pick your weapon of choice:", + "gearandstuff_armadillo_dsc": "You have a secure apartment, a sturdy vehicle, a simple mobile phone, your nahual mask, and 2 hearts of the earth. Then choose 1 from the list below:", + "gearandstuff_jaguar_dsc": "You have an old apartment, a third or fourth hand car, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Choose 3 from this list:", + "gearandstuff_mono_dsc": "In addition to your workshop, you have a smartphone, your nahual mask, and 2 hearts of the earth. You also have three items you crafted at your workshop: one has supernatural properties, one is astonishingly beautiful, and one is cursed. Work out with the Marakame what the items are and how they work.", + "gearandstuff_perro_dsc": "You have an old apartment, a third or fourth hand vehicle, a cheap cell phone, your nahual mask, and 2 hearts of the earth. Then, pick 2 from the list:", + "gearandstuff_serpiente_dsc": "You have a fancy ride, a simple mobile phone, a small blade or two (e.g., switchblade, folding knife, butterfly knife, barber knife, etc.), your nahual mask, and 2 hearts of the earth. You also have a place to crash that’s underground, and known only to those you trust. Pick what type of hideout it is:", + "gearandstuff_tlacuache_dsc": "You have a middle sized apartment full of all sorts of stolen stuff, a vehicle in regular shape, your nahual mask, and 2 hearts of the earth. Decide on three things you carry with you, whatever you want. The Marakame will give them to you, with or without strings attached, their choice.", + "gearandstuff_venado_dsc": "You have a smartphone, your nahual mask, and two hearts of the earth. Pick 2 from the list; they are either gifts from admirers, loot from former lovers, or otherwise trophies from the past:", + "gearandstuff_label": "GEAR AND STUFF", + "harm_label": "HARM", + "heavyharm_label": "HEAVY HARM", + "instinto_dsc": "Instinto", + "instinto_label": "INSTINTO", + "jaguar_dsc": "You are the Jaguar, a perfect predator and creature of the night. Lethal in combat and stealth. Strong, fearless, proud, solitary and ever stern. Your majestic and imposing bearing inspires fear and respect. You are at the top of the food chain.", + "jaguar_label": "JAGUAR", + "lightharm_label": "LIGHT HARM", + "mania_dsc": "Maña", + "mania_label": "MAÑA", + "mono_dsc": "You are the Monkey: smart, inquisitive, and creative. A true artist and an inventor with extraordinary crafting talents. Your curiosity is always getting you in trouble, but you cannot help yourself. Your need to know what makes things tick is your passion...and your obsession.", + "mono_label": "MONO", + "name_label": "NAME", + "notes_label": "Notes", + "perro_dsc": "You are the Dog. You have a gregarious personality and a loyal nature. But you can be pretty violent when provoked. And even though you possess a strong sense of duty, you have an inner wild side that can get out of control. You are the ultimate tracker and the perfect companion.", + "perro_label": "PERRO", + "persona_aguila_1": "androgynous, conforming, shifting, nonconforming", + "persona_aguila_2": "young, mature, senior, elder", + "persona_aguila_3": "piercing eyes, deep eyes, strong eyes, confident eyes", + "persona_aguila_4": "elegant look, tactical look, modern look, practical look", + "persona_armadillo_1": "androgynous, conforming, shifting, transgressing", + "persona_armadillo_2": "young, mature, senior, elder", + "persona_armadillo_3": "placid eyes, tender eyes, guarding eyes, fervent eyes", + "persona_armadillo_4": "professional look, traditional look, street look, messy look", + "persona_jaguar_1": "androgynous, conforming, shifting, transgressing", + "persona_jaguar_2": "young, mature, senior, elder", + "persona_jaguar_3": "scary eyes, sharp eyes, wild eyes, cold eyes", + "persona_jaguar_4": "tidy look, messy look, discreet look, native look", + "persona_mono_1": "androgynous, conforming, shifting, transgressing", + "persona_mono_2": "young, mature, senior, elder", + "persona_mono_3": "sharp eyes, inquisitive eyes, bright eyes, innocent eyes", + "persona_mono_4": "colorful look, striking look, messy look, practical look", + "persona_perro_1": "androgynous, conforming, shifting, transgressing", + "persona_perro_2": "young, mature, senior, elder", + "persona_perro_3": "tender eyes, fierce eyes, watchful eyes, calm eyes", + "persona_perro_4": "professional look, street look, aggressive look, destitute look", + "persona_serpiente_1": "androgynous, conforming, shifting, transgressing", + "persona_serpiente_2": "young, mature, senior, elder", + "persona_serpiente_3": "cold eyes, charming eyes, friendly eyes, arresting eyes", + "persona_serpiente_4": "elegant look, sensual look, extravagant look, misleading look", + "persona_tlacuache_1": "androgynous, conforming, shifting, transgressing", + "persona_tlacuache_2": "young, mature, senior, elder", + "persona_tlacuache_3": "sharp eyes, naughty eyes, sassy eyes, lazy eyes", + "persona_tlacuache_4": "messy look, destitute look, discreet look, luxurious look", + "persona_venado_1": "androgynous, conforming, shifting, transgressing", + "persona_venado_2": "young, mature, senior, elder", + "persona_venado_3": "bright eyes, sweet eyes, arresting eyes, playful eyes", + "persona_venado_4": "colorful look, elegant look, flashy look, arousing look", + "persona_dsc": "You are Mexican, and you are poor. Choose one for each bullet:", + "persona_label": "PERSONA", + "playbook_label": "PLAYBOOK", + "sm_mono_task1": "First you must
    ", + "sm_mono_task2": "It will take you hours/days/weeks/months to complete
    ", + "sm_mono_task3": "You’ll need help from
    ", + "sm_mono_task4": "The best you’ll get is a lesser result, unreliable and limited
    ", + "sm_mono_task5": "You and your fellow angeleros will risk danger from
    ", + "sm_mono_task6": "The process will be terribly disturbing; you have to mark a condition
    ", + "relaciones_aguila_label1": "You think
    is completely useless; why are you okay with them hanging around?", + "relaciones_aguila_label2": "
    once got themselves into some bad trouble you saw coming from a mile away. Why didn’t you warn them?", + "relaciones_aguila_label3": "An error in your judgment resulted in the death of someone important to
    . Have they forgiven you for your mistake?", + "relaciones_aguila_label4": "
    is always trying to boss you around. Why are you holding back from telling them to fuck off?", + "relaciones_aguila_label5": "
    looks up to you and always follows your lead. How do you take advantage of their admiration?", + "relaciones_aguila_label6": "
    is the only person you truly take advice from. Why do you trust them?", + "relaciones_armadillo_label1": "You once broke your code for
    . Why did you do it, and what happened that made you regret it?", + "relaciones_armadillo_label2": "You rescued
    from a certain death. What terrible thing did you have to do to save them?", + "relaciones_armadillo_label3": "You feel
    is the only one you can trust to protect the innocent almost as well as you can. Have you told them this?", + "relaciones_armadillo_label4": "You think
    is a terrible influence on someone in the barrio. What trick have you pulled to keep them apart?", + "relaciones_armadillo_label5": "You can’t trust
    , even though they have done nothing to merit your suspicion. What do you see in them that makes you feel this way?", + "relaciones_armadillo_label6": "You once failed to protect someone important to
    . Have you forgiven yourself? Have they?", + "relaciones_jaguar_label1": "You see
    almost as an equal. Have you told them so?", + "relaciones_jaguar_label2": "
    is the only person that can keep your violence in check. Why is that?", + "relaciones_jaguar_label3": "
    knows your darkest secret. What is it?", + "relaciones_jaguar_label4": "
    thinks you’re the coolest badass and follows you around. How do you feel about it?", + "relaciones_jaguar_label5": "
    once saved you from certain death. Do you feel thankful or ashamed about it?", + "relaciones_jaguar_label6": "You killed someone important to
    . Do they know you’re responsible for the death?", + "relaciones_mono_label1": "You crafted an object for
    . What is it? Is it beautiful, resilient, or lethal?", + "relaciones_mono_label2": "You feel something special for
    . What is it about them that excites your curiosity?", + "relaciones_mono_label3": "You think
    is the most brutish and insensitive person you know. Yet you care deeply about them! Why?", + "relaciones_mono_label4": "
    thinks all your “artsy stuff” is a waste of time. What have they said or done to you that struck a sensible chord?", + "relaciones_mono_label5": "You got
    in serious trouble because of your curiosity. What happened and why do you feel so bad about it?", + "relaciones_mono_label6": "
    helped you with something you were working on, and you owe them. Why are you dragging your feet on paying back the favor?", + "relaciones_perro_label1": "
    has let you down more than once, but you are still fond of them. Why?", + "relaciones_perro_label2": "
    is your oldest friend. What’s the toughest moment you have had together?", + "relaciones_perro_label3": "
    is like a sibling to you, but you inadvertently hurt them badly recently. How do they feel about it?", + "relaciones_perro_label4": "You are always keeping an eye on
    because you care for them. What did you see them do recently that you didn’t like?", + "relaciones_perro_label5": "
    always asks your help when things get violent! Why can’t you refuse them?", + "relaciones_perro_label6": "You’re secretly in love with
    ! Why can’t you tell them how you feel?", + "relaciones_serpiente_label1": "
    is the only person you truly care about. What did they do to gain your genuine affection?", + "relaciones_serpiente_label2": "You enjoy sharing fun and pleasure with
    . Ask them if they are in just for the fun too, or are they feeling something serious?", + "relaciones_serpiente_label3": "
    thinks you’re the most beautiful creature they’ve ever met. Do you like exploiting their feelings, or is it too easy and boring?", + "relaciones_serpiente_label4": "You saved someone important to
    in the past. What was the price you asked for this favor?", + "relaciones_serpiente_label5": "You lured
    into doing something awful for you. What was it, and how did they find out you were just using them?", + "relaciones_serpiente_label6": "You killed someone for
    . Who? Why did you enjoy it so much you didn’t even ask for anything in return?", + "relaciones_tlacuache_label1": "You care so much about gaining
    ‘s respect. Why is that?", + "relaciones_tlacuache_label2": "
    is the only person you wouldn’t dare to trick or cheat. Why? Do they know it?", + "relaciones_tlacuache_label3": "
    knows about a scam you’re currently working. Ask them why they haven’t told anyone.", + "relaciones_tlacuache_label4": "
    looks down on you and thinks you’re a hopeless cause. Are they right or do you want to prove them wrong?", + "relaciones_tlacuache_label5": "
    used to hang around with you, thinking you were cool. What did you do to disappoint them?", + "relaciones_tlacuache_label6": "
    believes in you and always has your back when you get in trouble. What is it that they see in you?", + "relaciones_venado_label1": "You neglected
    in a time of need. What trivial thing were you caught up with?", + "relaciones_venado_label2": "
    and you have a thing together. Are you toying with their feelings or are you also serious about it?", + "relaciones_venado_label3": "You feel
    can’t stand your presence. Do you think it’s because they are jealous of you or secretly in love with you?", + "relaciones_venado_label4": "
    is always so serious and boring. Why are you so set on making them loosen up a bit and enjoy the pleasures of life?", + "relaciones_venado_label5": "
    is the only one that makes you feel safe. You are able to let your guard down with them. Have you told them?", + "relaciones_venado_label6": "
    rejected your affections before. Why is this still gnawing at you?", + "relaciones_dsc": "Once everyone has presented their character, go around again establishing relaciones—pick only one for each other player character:", + "relaciones_label": "RELACIONES", + "rollswith": "rolls with", + "send_details_to_chat": "Send details to chat", + "serpiente_dsc": "You are the Snake, a sensual manipulator. Social and charming, but without any real relationship or attachment. Merciless. You have the power to heal, but also the power to kill with your venom. You are patient and cold-blooded, always waiting for the right moment to strike.", + "serpiente_label": "SERPIENTE", + "signaturemoves_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves1_dsc": "You get this move—it is active all the time, when you are transformed and when you are not.", + "signaturemoves2_dsc": "You get these two moves—they are active all the time, whether you are transformed or not.", + "signaturemoves3_dsc": "These are your signature moves; choose one. You can use the move you choose whether you are transformed or not.", + "signaturemoves_dsc2": "Anytime you need something related to one of your chosen categories, mark your eagle’s nest track to already have it with you. When you have a chance to go back and restock your supplies, clear your eagle’s nest track.", + "signaturemoves_label": "SIGNATURE MOVES", + "sm1_aguila_label": "FIREPOWER (specialized weaponry, small explosives, stun grenades, special ammo, etc.)", + "sm2_aguila_label": "TACTICAL & COMM GEAR (flashlights, special vision devices, motion detectors, tactical tools, high-tech comms, etc.)", + "sm3_aguila_label": "PROTECTIVE & SURVIVAL GEAR. (pads, ads, vests, helmets, guards, survival kit, first aid, etc.)", + "sm4_aguila_label": "SECURITY BYPASSING (hacking devices, fake IDs, decoders, bolt cutters, battering ram, lockpicking tools etc.)", + "sm5_aguila_label": "SUPERNATURAL MOJOS (protective charms, hearts of the earth, talismans, ritual components, ancient relics, etc.)", + "sm6_aguila_label": "OCCULT KNOWLEDGE (ancient and esoteric tomes, a collection of scrolls, a cryptic database, etc.)", + "sm_aguila_1_dsc": "You have a hidden lair: safe, secret, and secure. It’s hard for everyone but you to access; tell the group what makes reaching it a challenge. In your nest, you have all sorts of prepared equipment. Choose three categories from the list below:", + "sm_perro_1_label": "Manada", + "sm_perro_1_dsc": "You consider the other PCs as your manada. Choose two options from the following list. When you are with your manada, you gain those benefits.", + "sm_aguila_1_label": "Eagle's Nest", + "sm1_perro_label": "JAURÍA. When a member of your manada inflicts harm, mark stress to assist them; they inflict terrible harm.", + "sm2_perro_label": "CHAROLASTRAS. When a member of your manada is about to take harm, any other member can choose to mark stress to get in the way and suffer the harm instead.", + "sm3_perro_label": "TERRITORIO. The barrio respects your manada. When a manada member hits up their conecte in the barrio, mark stress to give them a 12+ without rolling.", + "sm4_perro_label": "ALFA. When you order an unwilling member of your manada to do something important for you, mark stress to offer them 1 XP if they comply.", + "sm_armadillo_1_dsc": "You have a noble and gentle heart, and a code of honor you try to uphold. You are always helping those in need, and protecting others from danger.", + "sm_armadillo_1_label": "Knight in Shining Armor", + "sm_armadillo_1_1_dsc": "When you stand by while an innocent or helpless person suffers harm, mark a condition.", + "sm_armadillo_1_2_dsc": "When someone comes through a dangerous situation safe and sound thanks to your actions, clear a condition, empty your stress track, or mark XP.", + "sm_armadillo_2_label": "Código", + "sm_armadillo_2_dsc": "You live by a code, and you try to uphold it the best you can. Pick three from the list to define it. Whenever you break your code, mark a condition.", + "sm_armadillo_3_label": "Protector", + "sm_armadillo_3_dsc": "When you protect someone from an impending threat, roll with Garra. On a hit, you keep them safe. On a 7-9, it costs you: you are exposed to serious danger or cause collateral damage keeping them safe, your choice.", + "sm1_armadillo_label": "Always speak the truth", + "sm2_armadillo_label": "Always show mercy to your foes", + "sm3_armadillo_label": "Always avoid collateral damage", + "sm4_armadillo_label": "Never break a promise", + "sm5_armadillo_label": "Never strike the first blow", + "sm6_armadillo_label": "Never deny your aid to a friend", + "sm_jaguar_1_dsc": "You are at the top of the food chain. You always count as one Threat level higher than you normally would be. Chose what type of predator you are:", + "sm_jaguar_1_label": "Apex Predator", + "sm1_jaguar_label": "Savage and messy", + "sm2_jaguar_label": "Precise and skillful", + "sm3_jaguar_label": "Artful and impressive", + "sm4_jaguar_label": "Powerful and frightening", + "sm_mono_1_dsc": "You have a workshop where you do crafting and research, mixing angel parts with mundane materials. You have there all the usual stuff a regular craft-shop would have: tools, materials, and space. Choose and underline three special features of your workshop:", + "sm_mono_1_label": "Artesano", + "sm_mono_2_dsc": "a forge heated with hellish fires; a set of tools stolen from heaven; a supernaturally resistant testing room; a library of cryptic tomes; a room full of otherworldly junk; wards against angels; wards against demons; a high tech lab; an ancient alchemy set; a walk-in-fridge full of weird ingredients; a well equipped medical kit; a mysterious ancient relic you don’t understand", + "sm_mono_3_dsc": "When you go to your workshop to craft an object or study a problem, say what it is you’re trying to accomplish. The Marakame will tell you 1 to 4 requirements you need to meet to complete your task:", + "sm_snake_1_dsc": "When you have time and intimacy with someone to work your charms, roll with Barrio. On a 10+, hold 3. On a 7-9, hold 2. For both PCs and NPCs, you can spend your hold to ask them to do something for you, and...", + "sm_snake_1_label": "Encanto", + "sm_snake_2_dsc": "For NPCs: ...while you have hold on them, they can’t act against you. If you spend hold, they can’t resist, and must do as you want. If you cause them harm, or somehow push them away, you lose all your hold on them. On a miss, they overreact and do something crazy or extreme for you, something they think you want.", + "sm_snake_3_dsc": "For PCs: ...when you spend hold on them, they mark XP if they comply; if they refuse, they mark a condition. On a miss, they see your true face; take -1 ongoing against them until you do something to gain their trust again.", + "sm_tlacuache_1_dsc": "You carry with you some sort of bag or backpack full of stuff you stole. It has an exhaustion track with 4 boxes; when the track is full you cannot use this move any more. The track empties when time passes or when you have a chance to go to your place and refill your tambache.", + "sm_tlacuache_1_label": "Tambache", + "sm_tlacuache_2_dsc": "When you need something small enough to fit in your tambache, no matter how otherwise expensive or specialized, mark one box and roll with Maña. On a hit, you have it, say where and how you got it. On a 7-9, choose one:", + "sm_tlacuache_3_dsc": "On a miss, the Marakame chooses one:", + "sm_tlacuache_task1": "It is malfunctioning or unstable.", + "sm_tlacuache_task2": "You have to mark another exhaustion box.", + "sm_tlacuache_task3": "You have it, but the people you stole it from are coming for you very soon.", + "sm_tlacuache_task4": "You empty the contents and still you can’t find it, mark another box on your track.", + "sm_venado_1_dsc": "When you make a show of your presence to a group of NPCs, roll with Instinto. On a hit, everyone locks their full attention on you for the rest of the scene; you can exempt individual people by name if you want. On a 10+, take +1 ongoing against everyone affected as well. On a miss, everyone looks toward you, but someone is completely overwhelmed by your irresistible panache; ask the Marakame who it is and how they overreact.", + "sm_venado_1_label": "Hunter Prey", + "sm_venado_2_dsc": "When you give yourself in flesh or soul to someone, roll with Instinto. On a hit, you both choose one benefit from the list below. On a 10+, they get beguiled by the experience; they cannot act to harm you until you do something to push them away.", + "sm_venado_2_label": "Kiss of the Hikuri", + "sm_venado_2_2_dsc": "On a miss, you give yourself too fully; in your intimacy you let slip a secret you wish you hadn’t told them.", + "sm_venado_task1": "Heal 1 harm, clear a condition, or empty your stress track", + "sm_venado_task2": "Take +1 ongoing to avoiding trouble for the rest of the session", + "sm_venado_task3": "Take +1 ongoing to figure them out for the rest of the session", + "stage1_channel1": "Zoom in your sight to uncanny levels", + "stage1_channel2": "Make an impossible jump (10 m or so)", + "stage1_channel3": "Identify a hidden weakness or flaw", + "stage1_channel1_armadillo": "See perfectly in the dark by scent", + "stage1_channel2_armadillo": "Climb with uncanny skill", + "stage1_channel3_armadillo": "Smell someone to know if they are lying", + "stage1_channel1_jaguar": "See perfectly in the dark", + "stage1_channel3_jaguar": "Detect the true position of an enemy", + "stage1_channel1_mono": "See an aura around supernatural objects", + "stage1_channel3_mono": "Open or bypass a security lock", + "stage1_channel2_perro": "Expand your hearing and scent to uncanny levels", + "stage1_channel1_serpiente": "See perfectly in the dark by sensing the infrared spectrum", + "stage1_channel2_serpiente": "Expand your sense of smell to uncanny levels", + "stage1_channel3_serpiente": "Touch someone to know their true emotions", + "stage1_channel1_venado": "Heighten your hearing to uncanny levels", + "stage1_channel2_venado": "Jump with uncanny skill", + "stage1_channel3_venado": "Run as fast as a car for a short burst", + "stage1_label": "1st Stage: Novato", + "stage1_label1": "Take a totem move", + "stage1_label2": "Take +1 to any stat (max +3)", + "stage2_aguila_label1": "Take 2 more categories from eagle’s nest", + "stage2_mono_label1": "Take 3 more special features from your workshop", + "stage2_perro_label1": "Take another manada option", + "stage2_venado_label1": "Take a totem or signature move", + "stage2_channel1": "Fly a short distance (100 m or so)", + "stage2_channel2": "Make an impossible shot with a gun or bow", + "stage2_channel3": "Summon an impressive gust of wind", + "stage2_channel1_armadillo": "Make an impossible jump (10 mts or so)", + "stage2_channel2_armadillo": "Hold a door shut, making it impassable to any non-overwhelming threat", + "stage2_channel3_armadillo": "Burrow through solid ground or concrete for a short distance (5 mts or so)", + "stage2_channel2_jaguar": "Make yourself invisible to mundane eyes", + "stage2_channel3_jaguar": "Break through a heavy wooden door", + "stage2_channel2_mono": "Make a tool appear in your hand", + "stage2_channel3_mono": "Safely parkour yourself across a dangerous battlefield", + "stage2_channel2_perro": "See by scent what happened here recently", + "stage2_channel3_perro": "Break through a heavy wooden door", + "stage2_channel2_serpiente": "Slither through narrow spaces", + "stage2_channel3_serpiente": "Make yourself invisible to normal eyes", + "stage2_channel3_tlacuache": "Make your tambache appear next to you", + "stage2_channel2_venado": "Run over water or vertical surfaces", + "stage2_channel3_venado": "Change your attire to whatever you want", + "stage2_label": "2nd Stage: Aprendiz", + "stage3_channel1": "Fly for the rest of the scene", + "stage3_channel2": "See through solid objects", + "stage3_channel3": "Throw razor sharp feathers to assail someone", + "stage3_channel4": "Phase through a solid wall", + "stage3_channel1_armadillo": "Leap a tall building in a single bound", + "stage3_channel2_armadillo": "Heal one harm from a helpless person by marking that harm yourself.", + "stage3_channel3_armadillo": "Step in front of a car and stop it dead on its tracks", + "stage3_channel2_jaguar": "Shoot a golpe de nahual to destroy a barrier or assail someone", + "stage3_channel3_jaguar": "Topple a car barehanded", + "stage3_channel2_mono": "Make a device function or malfunction at your will", + "stage3_channel3_mono": "Hack into a secure network in a matter of seconds", + "stage3_channel3_perro": "Detect the exact location of all your pack members", + "stage3_channel2_serpiente": "Temporarily turn into a snake", + "stage3_channel3_serpiente": "Use the senses of someone you have hold from encanto", + "stage3_channel2_tlacuache": "Manipulate the short term memories of a person", + "stage3_channel3_tlacuache": "Pull from your tambache an object too big to fit in (move still applies)", + "stage3_channel2_venado": "Move with supernatural speed for a short burst", + "stage3_channel3_venado": "Visit the dreams of someone who has met you before", + "stage3_label": "3rd Stage: Brujo", + "stage3_label1": "No mask needed to transform", + "stage4_channel1": "Cover a few kilometers of distance with a single jump", + "stage4_channel2": "Kill all vulnerable threats in the area with a rain of sharp feathers", + "stage4_channel3": "Increase your established harm by 1 step", + "stage4_channel4": "Heal a wound by decreasing it one step down (yours or someone else’s)", + "stage4_channel2_armadillo": "Burrow through reality to any place you’ve been before", + "stage4_channel3_armadillo": "Reduce by 1 step the harm type of an attack directed at someone helpless.", + "stage4_channel2_jaguar": "Kill all vulnerable threats in the area in a flurry of claws and teeth", + "stage4_channel3_jaguar": "Increase the established harm you inflict by 1 step.", + "stage4_channel2_mono": "Ignore 1 requirement from a task in your workshop", + "stage4_channel3_mono": "Temporarily create an object or device by sheer will.", + "stage4_channel2_perro": "Do a howl that will clear 1 stress to every pack member that hears it", + "stage4_channel2_serpiente": "Shed your skin to completely heal any harm", + "stage4_channel3_serpiente": "Increase your established harm by 1 step", + "stage4_channel4_serpiente": "Heal all wounds from an ally", + "stage4_channel2_tlacuache": "Make something disappear, to make it reappear later at any time in any place", + "stage4_channel3_tlacuache": "Reduce by 1 step the harm type of an attack directed at you.", + "stage4_channel2_venado": "Kill an equal or lesser threat with a fiery dash", + "stage4_channel3_venado": "Put anyone that can see you into a psychedelic trip (good or bad, your choice)", + "stage4_label": "4th Stage: Nahual", + "stage4_label1": "Take a second totem animal", + "stage4_label2": "No enhancer needed to transform", + "stage5_channel1": "Break the laws of physics", + "stage5_channel2": "Temporarily become a living sun that radiates immeasurable heat and light", + "stage5_channel2_armadillo": "Resurrect someone you failed to protect by permanently marking one condition. If all are permanently marked, you can give up your life instead.", + "stage5_channel2_jaguar": "Release a mighty roar that creates a localized earthquake", + "stage5_channel2_mono": "Create a temporary clone of yourself with angel parts, and give it life. The clone is an exact copy of you with moves and everything.", + "stage5_channel2_perro": "Go to the Underworld to bring back the soul of someone recently deceased (with or without a cost)", + "stage5_channel2_serpiente": "Summon forth the snake goddess Coatlicue, Mother of the Gods, to grant you a boon or a favor", + "stage5_channel2_tlacuache": "Resurrect yourself, even if you were torn to pieces, melt in acid or disintegrated", + "stage5_channel2_venado": "Create a monster hurricane by running fast in circles", + "stage5_label": "5th Stage: Kibal", + "stage5_label1": "Take a third totem animal", + "stage5_label2": "Unlock the chimeric transformation", + "stage6_dsc": "Once you control this stage of Nahuality, your character has surpassed all the limits of mortality. Retire your character, and tell the Marakame if you want your character to reappear as an NPC.", + "stage6_label": "6th Stage: Postome", + "stages_dsc": "There are six known Stages of Nahuality. You start with control over the First Stage. Each time your XP track fills, clear it and take an advancement. When you’ve taken both advancements for your current stage of control, you now control the next stage.", + "stages_label": "STAGES OF NAHUALITY", + "stages_mark1": "Mark 1 stress to...", + "stages_mark2": "Mark 2 stress to...", + "stages_mark3": "Mark 3 stress to...", + "stats_dsc": "You can modify one of your starting stats by adding +1.", + "stress_dsc": "When you fill your stress track, mark a condition and clear your stress track.", + "stress_label": "STRESS", + "tacotruck_label": "TACO TRUCK", + "tlacuache_dsc": "You are the Opossum, a scoundrel and party animal. A talented thief and skillful deceiver. You love drinking and the good life. You hate duty and commitments. And although you are not very brave, you are cunning and pretty resilient. When you play dead, you can withstand literally anything.", + "tlacuache_label": "TLACUACHE", + "totem1_aguila_dsc": "When you observe a charged situation from a distance, roll with Instinto. On a 10+, hold 3. On a 7-9, hold 2. On a miss, hold 1 and take -1 forward. During the charged situation, you can spend your hold 1 for 1 to:", + "totem1_aguila_label": "Bird’s-Eye View", + "totem1_aguila_label1": "Kill, disable, or disarm (your choice) an NPC of a lower threat level within reach.", + "totem1_aguila_label2": "Warn a PC of an impending harm; they suffer no harm if they mark stress to heed your warning.", + "totem1_aguila_label3": "Give another PC a tactical order. If they comply, they get +1 ongoing when following your instructions.", + "totem1_aguila_label4": "Create an opening or opportunity for an ally or yourself to escape or advance.", + "totem1_aguila_label5": "Ask the Marakame: “What’s my enemy’s true position?”", + "totem1_aguila_label6": "Cross the distance to any character outside of your reach before anyone has time to adjust or react.", + "totem2_aguila_dsc": "You can roll Instinto instead of Garra when you assail someone with a ranged weapon.", + "totem2_aguila_label": "Sharpshooter", + "totem3_aguila_dsc": "When you impose your regal bearing upon a human NPC, give them an order and roll with Instinto. On a hit, they comply with your orders or suffer heavy harm, their choice. On a 7-9, they can instead choose one of the following:", + "totem3_aguila_dsc2": "On a miss, they think you’re someone you’re not and treat you accordingly.", + "totem3_aguila_label": "Águila Real", + "totem3_aguila_label1": "Pass you off to a higher power.", + "totem3_aguila_label2": "Stall, flee, or barricade themselves in.", + "totem3_aguila_label3": "Reveal a useful secret about their resources or superiors.", + "totem4_aguila_dsc": "You can mark stress to instantly travel to a person—or place—you know well, or to a place you can see. Mark an extra stress to bring a few allies with you; each of them has to mark stress as well to complete the trip. If your allies can’t mark stress, you can mark it for them instead.", + "totem4_aguila_label": "Eagle Wings", + "totem1_armadillo_dsc": "You’re tougher than most. You have two extra stress boxes (even when not transformed, already included in your stress track), and you have armor 2 when transformed. If you ever have to mark a third deadly harm, you may mark a condition instead.
    Then choose another one:", + "totem1_armadillo_label": "Armadura", + "totem2_armadillo_dsc": "When you smash your way through scenery to reach someone or something, roll with Garra. On a hit, you reach your target. On a 10+, choose 1. On a 7–9, choose 2.", + "totem2_armadillo_label": "Cannonball", + "totem2_armadillo_label1": "You hurt yourself; mark 1 heavy harm.", + "totem2_armadillo_label2": "You lose your cool; mark 2 stress.", + "totem2_armadillo_label3": "You cause serious collateral damage.", + "totem2_armadillo_dsc2": "On a miss, you smash through, but you leave yourself totally vulnerable on the other side", + "totem3_armadillo_dsc": "When you make a fuss to convince a PC to calm down, give up a violent intention, or sooth their out of control nahual, roll with Garra instead of Maña.", + "totem3_armadillo_label": "Calmantes Montes", + "totem4_armadillo_dsc": "When you approach a hostile NPC with heartfelt words of peace, roll with Barrio. On a hit, your nahual touches their heart; they calm down, at least for a moment. On a 7-9, choose 1. On a 10+, choose 2.", + "totem4_armadillo_label": "Warm Soul", + "totem4_armadillo_label1": "The effect lasts for some time; they forget why they were hostile.", + "totem4_armadillo_label2": "The effect makes them let down their guard; you get an opportunity.", + "totem4_armadillo_label3": "The effect appeases your soul too; clear 2 stress.", + "totem4_armadillo_dsc2": "On a miss, they take advantage of your opening and lash out; they inflict harm on you as established and put you in a bad spot.", + "totem1_jaguar_dsc": "When you pounce on your prey from the shadows, roll with Garra. On a hit, mark stress and inflict your harm as established. On a 10+, choose 2. On a 7-9 choose 1.", + "totem1_jaguar_label": "Killing Pounce", + "totem1_jaguar_label1": "You inflict terrible harm; increase your harm type.", + "totem1_jaguar_label2": "You return to the shadows; no one knows where you are.", + "totem1_jaguar_label3": "You keep your cool; forgo marking the stress.", + "totem1_jaguar_dsc2": "On a miss, you inflict your harm as established, but you’re vulnerable to retaliation and notice.", + "totem2_jaguar_dsc": "When you figure someone out by watching them from a hidden position, roll with Garra instead of Barrio.", + "totem2_jaguar_label": "Night Stalker", + "totem3_jaguar_dsc": "When you let out a mighty roar to impress your prey, roll with Garra. On a hit, they either fight or flee, their choice. Those who stay go all against you in a frenzied panic or mindless rage; take +1 ongoing against them. On a 7-9, your roar attracts the unwanted attention of a new threat.", + "totem3_jaguar_label": "Hear Me Roar", + "totem4_jaguar_dsc": "Take +1 to Garra (max +3).", + "totem4_jaguar_label": "Terrifying", + "totem5_jaguar_dsc": "When you would suffer harm, you can mark stress to reduce the harm type by one level. Also, whenever you mark deadly harm, take +1 forward.", + "totem5_jaguar_label": "Guerrero Jaguar", + "totem1_mono_dsc": "You have an alebrije figurine you crafted, no bigger than a cat. When you transform, it comes to life and appears next to you. Each time it comes to life, choose two basic moves and tell the Marakame how your alebrije can help you with those moves to get +1 to the roll.", + "totem1_mono_label": "Alebrije", + "totem2_mono_dsc": "When you use improvised materials to quickly create a temporary machine or device, roll with Maña. On a 10+, choose one. On a 7-9, choose two.", + "totem2_mono_label": "Tinker", + "totem2_mono_label1": "The thing is noisy as hell; it immediately attracts attention.", + "totem2_mono_label2": "The thing is fragile; it will break after a few uses.", + "totem2_mono_label3": "The thing is hard to handle; you must mark stress to use it.", + "totem3_mono_dsc": "When you draw a door, window, or hatch on a wall or barrier, roll with Maña. On a hit, the thing comes into existence for a while, and opens to the other side. On a 7-9, it won’t last long or has unwanted side effects, your choice. On a miss, the passage opens to a dangerous place, and something comes out or gets sucked in, Marakames choice.", + "totem3_mono_label": "Pluma Mágica", + "totem4_mono_dsc": "When you closely examine something interesting, roll with Instinto. On a hit, you can ask the Marakame questions. On a 10+, ask 3. On a 7–9, ask 1:", + "totem4_mono_label": "Psychometry", + "totem4_mono_label1": "What makes this tick?", + "totem4_mono_label2": "What can I do to improve it or fix it?", + "totem4_mono_label3": "What supernatural forces have been near this recently?", + "totem4_mono_label4": "What has this object witnessed most recently?", + "totem4_mono_label5": "How can I make this thing
    ?", + "totem1_perro_dsc": "When you track your prey, roll with Instinto. On a hit, you know exactly where to find them and can follow their trail until you do. On a 7-9 mark stress. On a miss, you still know where to find them, but the Marakame picks one:", + "totem1_perro_label": "Bloodhound", + "totem1_perro_label1": "Your prey knows you are tracking them.", + "totem1_perro_label2": "When you finally get to them, the situation is complicated for you.", + "totem1_perro_label3": "While you follow your prey, someone else follows you.", + "totem2_perro_dsc": "When you are with a member of your manada and they need to mark stress, you can take the burden upon yourself and mark stress for them.", + "totem2_perro_label": "Pack Mate", + "totem3_perro_dsc": "You can sense when a member of your manada is in trouble, even if you are not transformed. When they are, mark stress to transform (if you were not already) and appear in their scene. Mark another stress to arrive with a useful resource in hand or in an advantageous position, your choice.", + "totem3_perro_label": "Watchdog", + "totem4_perro_dsc": "When you unleash your inner wild side upon your enemies, mark stress and roll with Garra. On a hit, you inflict terrible harm upon them and escalate the situation. On a 7-9 choose one:", + "totem4_perro_label": "Wild Dog", + "totem4_perro_label1": "Your reckless assault leaves you vulnerable; they inflict harm on you as well.", + "totem4_perro_label2": "Your frenzied outburst leaves you troubled; mark a condition.", + "totem4_perro_dsc2": "On a miss, you still inflict terrible harm, but your savage attack leads to collateral damage you didn’t expect.", + "totem1_serpiente_dsc": "When you sink your fangs into someone’s skin and inject your venom, roll with stress paid (max+3). On a 10+, hold 2. On a 7-9, hold 1. Spend your hold at any time —regardless of distance—to cause any of the following effects while the venom courses through their veins:", + "totem1_serpiente_label": "Veneno", + "totem1_serpiente_label1": "Inflict one deadly harm without regard to their threat level.", + "totem1_serpiente_label2": "Temporarily stiffen their muscles, so they have trouble moving.", + "totem1_serpiente_label3": "Temporarily boost their physical prowess, but inflict low harm on them.", + "totem1_serpiente_label4": "Heal a wound by decreasing it two steps down.", + "totem1_serpiente_dsc2": "On a miss, your venom has an unexpected side effect, the Marakame chooses one.", + "totem2_serpiente_dsc": "When you summon a snake familiar out of your body, mark one stress. You can summon up to a max number of snakes equal to your Barrio. You can sense through your snakes’ senses and communicate with them telepathically. At any time, you may mark a condition to switch places with one of your familiars.", + "totem2_serpiente_label": "Snake Familiar", + "totem3_serpiente_dsc": "When you assail someone with a small blade, you can mark stress to increase your established harm by one level.", + "totem3_serpiente_label": "Viper", + "totem4_serpiente_dsc": "When you make noise with your rattle in a turf full of threats, roll with Barrio. On a hit, choose which NPC is the only one that hears it; you can make them either walk towards the sound in a trance, or cower away from it cautiously. If the NPC is hurt the effect ends. On a 7-9, only NPCs of equal or lower threat level than you can be affected. On a 10+, you can affect NPCs of up to 2 threat levels above you. On a miss, every threat in the vicinity hears the sound and considers it hostile; you must mark stress to keep your location unknown to them.", + "totem4_serpiente_label": "Cascabel", + "totem5_serpiente_dsc": "When you lock eyes with a human NPC at close distance, roll with Barrio. On a hit, they get momentarily lost in your gaze. Choose one from the list. On a 10+, you can hold their complete attention as long as you like.", + "totem5_serpiente_label": "Hypnotic Eyes", + "totem5_serpiente_label1": "They can’t resist answering your questions to the best of their ability.", + "totem5_serpiente_label2": "They recall, outloud, uncanny details of a past event of your choice.", + "totem5_serpiente_label3": "You can give them a one word command; if they refuse, they mark heavy harm.", + "totem5_serpiente_label4": "You can plant or erase a simple memory in their mind.", + "totem5_serpiente_dsc2": "On a miss, choose one, but they develop a psychic connection to you; they become obsessed with you and get random flashes of your activities without your knowledge until the connection fades.", + "totem1_tlacuache_dsc": "When you try to sneakily snatch something, roll with Maña. On a 10+, you grab it. On a 7-9, you can get your hands on it, but mark stress if you do...and whoever you stole it from will find out it was you. On a miss, you’re caught and exposed before you can snatch it up.", + "totem1_tlacuache_label": "Snatch", + "totem2_tlacuache_dsc": "Your nahual warps reality to favor you. When you avoid trouble while transformed, roll with Maña instead of Instinto. On a 9 or less, you can mark stress to redirect any difficulty, cost or consequence towards another allied character in the vicinity; if the character is a PC, they mark XP.", + "totem2_tlacuache_label": "Lucky", + "totem3_tlacuache_dsc": "When you play dead to avoid a conflict, mark stress. Your body will look dead—you won’t even have a pulse. They can do any harm to your body, tear it apart, burn it, etc. It doesn’t matter, whenever you choose to end the effect, you wake up completely unharmed.", + "totem3_tlacuache_label": "Play Possum", + "totem4_tlacuache_dsc": "You are a tough nut to crack. When you get hit hard while transformed, you get armor equal to your Maña.", + "totem4_tlacuache_label": "Correoso", + "totem5_tlacuache_dsc": "When you disguise yourself with a mirage, mark 2 stress to look like someone specific or 1 stress to look like any person in general: an old man, a young lady, etc. Then roll with Maña. On a 10+, choose 3. On a 7-9, choose 2:", + "totem5_tlacuache_label": "Guise", + "totem5_tlacuache_label1": "The mirage stays in the memories of those affected by it.", + "totem5_tlacuache_label2": "The mirage can fool a physical examination.", + "totem5_tlacuache_label3": "The mirage extends to electronic devices: video, photos, etc.", + "totem5_tlacuache_label4": "The mirage affects supernatural eyes as well as those of mortals.", + "totem5_tlacuache_dsc2": "On a miss, the mirage works...but has a serious flaw or deficiency that can reveal your true identity to those watching closely.", + "totem1_venado_dsc": "You move with uncanny reflexes in dangerous situations. When you get hit hard while transformed, you get armor equal to your Instinto.", + "totem1_venado_label": "Nimble", + "totem2_venado_dsc": "When you jump into battle without forethought or planning, roll with Instinto. On a hit, your nahual bestows upon you a vision the Marakame will make come true, if it’s even remotely possible. On a 7-9, choose one. On a 10+, both.", + "totem2_venado_label": "Visions of Mictlan", + "totem2_venado_label1": "An NPC will die. Name them.", + "totem2_venado_label2": "An NPC will live. Name them", + "totem2_venado_dsc2": "On a miss, you foresee your own death; take a -1 ongoing throughout the battle.", + "totem3_venado_dsc": "When you open the doors of perception, you get to ask a follow up question even on a 7-9. On a 10+, name a place or an NPC related to the current situation, the Nahual will also show you a vision about either their past or future, Marakame’s choice.", + "totem3_venado_label": "Sixth Sense", + "totem4_venado_dsc": "Mark stress to make your antlers transmute into pure lightning energy. If you use them as a weapon [touch, supernatural, bright], roll with Instinto instead of Garra when you assail someone.", + "totem4_venado_label": "Lightning Antlers", + "totemmoves_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed.", + "totemmoves1_dsc": "You only have access to Totem Moves while transformed. You get this one:", + "totemmoves2_dsc": "Choose two Totem Moves. You only have access to Totem Moves while transformed (with the exception of watchdog, see below for more info).", + "totemmoves_label": "TOTEM MOVES", + "vecindad_label": "VECINDAD", + "venado_dsc": "You are the Deer, the embodiment of beauty and grace. Nimble and evasive, your movements enthrall the eyes that set upon you. You are a force to be reckoned with, a beautiful swirling storm that runs like brother wind, and electrifies the air around you.", + "venado_label": "VENADO", + "vice_aguila_1_dsc": "When you put someone close to you in grave danger with your exaggerated sense of competence, activate this vice.", + "vice_aguila_1_label": "ARROGANCE:", + "vice_aguila_2_dsc": "When you convince or cow a group to abandon a plan or strategy in favor of your new idea, activate this vice.", + "vice_aguila_2_label": "TYRANNY:", + "vice_aguila_3_dsc": "When you insult or demean someone you care about by pointing out their flaws or mistakes, activate this vice.", + "vice_aguila_3_label": "CRUELTY:", + "vice_aguila_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_aguila_4_label": "DEFIANCE:", + "vice_armadillo_1_dsc": "When you pry into the affairs of a friend or loved one to uncover a secret or truth, activate this vice.", + "vice_armadillo_1_label": "DISTRUST:", + "vice_armadillo_2_dsc": "When you reject a compromise in a complicated situation to stay true to your worldview, activate this vice.", + "vice_armadillo_2_label": "RIGIDITY:", + "vice_armadillo_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_armadillo_3_label": "OBSTINACY:", + "vice_armadillo_4_dsc": "When you jump into danger without a plan or forethought, activate this vice.", + "vice_armadillo_4_label": "DANGER:", + "vice_jaguar_1_dsc": "When you ruthlessly kill a helpless target, activate this vice.", + "vice_jaguar_1_label": "BLOODLUST:", + "vice_jaguar_2_dsc": "When you enter a dangerous situation without backup or assistance, activate this vice.", + "vice_jaguar_2_label": "HUBRIS:", + "vice_jaguar_3_dsc": "When you insult or demean someone you care about by pointing out their flaws, activate this vice.", + "vice_jaguar_3_label": "CRUELTY:", + "vice_jaguar_4_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_jaguar_4_label": "INDIFFERENCE:", + "vice_mono_1_dsc": "When you refuse to meet your obligations or commitments in order to work on a project or research, activate this vice.", + "vice_mono_1_label": "OBSESSION:", + "vice_mono_2_dsc": "When you put yourself in danger to investigate a secret or mystery, activate this vice.", + "vice_mono_2_label": "CURIOSITY:", + "vice_mono_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_mono_3_label": "GREED:", + "vice_mono_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_mono_4_label": "INDISCRETION:", + "vice_perro_1_dsc": "When you lash out against a pack member for an innocent mistake or clumsy error, activate this vice.", + "vice_perro_1_label": "WRATH:", + "vice_perro_2_dsc": "When you resort to violence as your first solution to a problem, activate this vice.", + "vice_perro_2_label": "VIOLENCE:", + "vice_perro_3_dsc": "When you refuse to retreat in the face of terrible odds, activate this vice.", + "vice_perro_3_label": "OBSTINACY:", + "vice_perro_4_dsc": "When you sacrifice a resource or relationship to get payback against someone who previously wronged you, activate this vice.", + "vice_perro_4_label": "VENGEANCE:", + "vice_serpiente_1_dsc": "When you manipulate someone for your personal gain without regard to their feelings, activate this vice.", + "vice_serpiente_1_label": "EGOISM:", + "vice_serpiente_2_dsc": "When you mislead someone close to you into entering a dangerous situation or joining you in a malicious scheme, activate this vice.", + "vice_serpiente_2_label": "DECEIT:", + "vice_serpiente_3_dsc": "When you deny your help or spare resources to someone in dire need, activate this vice.", + "vice_serpiente_3_label": "INDIFFERENCE:", + "vice_serpiente_4_dsc": "When you cause someone close to you pain or trouble by revealing their secrets or confidences, activate this vice.", + "vice_serpiente_4_label": "INDISCRETION:", + "vice_tlacuache_1_dsc": "When you run from danger instead of standing with your friends or allies, activate this vice.", + "vice_tlacuache_1_label": "COWARDICE:", + "vice_tlacuache_2_dsc": "When you trick someone into doing your work for you, activate this vice.", + "vice_tlacuache_2_label": "SLOTH:", + "vice_tlacuache_3_dsc": "When you endanger yourself or someone close to you to acquire something you covet, activate this vice.", + "vice_tlacuache_3_label": "GREED:", + "vice_tlacuache_4_dsc": "When you violate an obligation or responsibility to get your fix, activate this vice.", + "vice_tlacuache_4_label": "ADDICTION:", + "vice_venado_1_dsc": "When you push someone you care about to sacrifice something important to accommodate your vanity, activate this vice.", + "vice_venado_1_label": "VANITY:", + "vice_venado_2_dsc": "When you escalate a conflict or endanger innocents to demand the spotlight, activate this vice.", + "vice_venado_2_label": "NARCISSISM", + "vice_venado_3_dsc": "When you jump into danger without a plan or assistance, activate this vice.", + "vice_venado_3_label": "DANGER:", + "vice_venado_4_dsc": "When you purposefully challenge or taunt figures of power, activate this vice.", + "vice_venado_4_label": "DEFIANCE:", + "vices_dsc": "Killing angels and dabbling with the Nahual is an ugly business, and it takes its toll. Choose two vices that represent your character’s flaws and compulsions. When you activate a vice, clear one condition, empty your stress track, or mark XP, your choice.", + "vices_label": "VICES" +} \ No newline at end of file diff --git a/Pendragon5thEdition/pendragon.css b/Pendragon5thEdition/pendragon.css index bc55218591..d997012958 100644 --- a/Pendragon5thEdition/pendragon.css +++ b/Pendragon5thEdition/pendragon.css @@ -807,6 +807,15 @@ input:checked + .sheet-slider:before { .sheet-rolltemplate-rolls div.sheet-season { padding-top: 2%; } +.sheet-rolltemplate-rolls span[data-i18n="rolled"], +.sheet-rolltemplate-rolls span[data-i18n="threshold"], +.sheet-rolltemplate-rolls span[data-i18n="spring"], +.sheet-rolltemplate-rolls span[data-i18n="summer"], +.sheet-rolltemplate-rolls span[data-i18n="autum"], +.sheet-rolltemplate-rolls span[data-i18n="autumn"], +.sheet-rolltemplate-rolls span[data-i18n="luck"] { + text-transform: capitalize; } + /* REPEATING SECTIONS ----------------------------- */ div.sheet-repeating-container { diff --git a/Pendragon5thEdition/pendragon.html b/Pendragon5thEdition/pendragon.html index 570e910a63..4c6737e1a8 100644 --- a/Pendragon5thEdition/pendragon.html +++ b/Pendragon5thEdition/pendragon.html @@ -1,6 +1,6 @@ -

    King Arthur Pendragon Knight's Character SheetKing Arthur Pendragon Woman's Character Sheet

    *
    /
    **
    /
    /
    *
    /
    *
    /
    *
    /
    *
    /
    **
    /
    *
    /
    /
    *
    /
    /
    *
    /

    King Arthur Pendragon Knight's Character SheetKing Arthur Pendragon Woman's Character Sheet

    King Arthur Pendragon

    King Arthur Pendragon

    King Arthur Pendragon

    King Arthur Pendragon

    =

    +

    +

    +

    King Arthur Pendragon

    {{#header}}{{header}}{{/header}}
    {{#luck}}
    {{luck}} Luck
    {{#calamity}}
    {{calamity}} Benefit/Calamity
    {{/calamity}}
    {{/luck}} -{{#dice}}
    {{dice}} Rolled
    {{/dice}} -{{#threshold}}
    {{threshold}} Threshold
    {{/threshold}} +

    King Arthur Pendragon Knight's Character SheetKing Arthur Pendragon Woman's Character Sheet

    *
    /
    **
    /
    /
    *
    /
    *
    /
    *
    /
    *
    /
    **
    /
    *
    /
    /
    *
    /
    /
    *
    /

    King Arthur Pendragon Knight's Character SheetKing Arthur Pendragon Woman's Character Sheet

    King Arthur Pendragon

    King Arthur Pendragon

    King Arthur Pendragon

    King Arthur Pendragon

    =

    +

    +

    +

    King Arthur Pendragon

    {{#header}}{{header}}{{/header}}
    {{#luck}}
    {{luck}}
    {{#calamity}}
    {{calamity}}
    {{/calamity}}
    {{/luck}} +{{#dice}}
    {{dice}}
    {{/dice}} +{{#threshold}}
    {{threshold}}
    {{/threshold}} {{#dice}}
    {{#rollGreater() threshold 19}} {{#rollGreater() dice 19}}
    {{/rollGreater() dice 19}} {{#^rollGreater() dice 19}}
    {{/^rollGreater() dice 19}} @@ -15,18 +15,18 @@ {{/^rollTotal() dice threshold}} {{/^rollBetween() dice fumbleVal 20}} {{/^rollGreater() threshold 19}}
    {{/dice}} -{{#damage}}
    {{damage}}
    Rolled
    {{/damage}} -{{#knightly}}
    {{knightly}}
    Rolled
    {{/knightly}} -{{#conflict}}
    {{conflict}}
    Rolled
    {{/conflict}} -{{#build}}
    {{build}}
    Rolled{{#rollTotal() build 20}}
    {{/rollTotal() build 20}}
    {{/build}} +{{#damage}}
    {{damage}}
    {{/damage}} +{{#knightly}}
    {{knightly}}
    {{/knightly}} +{{#conflict}}
    {{conflict}}
    {{/conflict}} +{{#build}}
    {{build}}
    {{#rollTotal() build 20}}
    {{/rollTotal() build 20}}
    {{/build}} {{#season}}
    {{#rollTotal() season 1}} -{{season}}
    Spring{{/rollTotal() season 1}} +{{season}}
    {{/rollTotal() season 1}} {{#rollBetween() season 2 4}} -{{season}}
    Summer{{/rollBetween() season 2 4}} +{{season}}
    {{/rollBetween() season 2 4}} {{#rollBetween() season 5}} -{{season}}
    Autumn{{/rollBetween() season 5}} +{{season}}
    {{/rollBetween() season 5}} {{#rollTotal() season 6}} -{{season}}
    Winter{{/rollTotal() season 6}}
    {{/season}}
    {{#desc}}
    {{desc}}
    {{/desc}}
    diff --git a/PokemonTabletopAdventures_v3/README.md b/PokemonTabletopAdventures_v3/README.md index 035b84f5f3..ab32fea5fe 100644 --- a/PokemonTabletopAdventures_v3/README.md +++ b/PokemonTabletopAdventures_v3/README.md @@ -10,22 +10,45 @@ https://discord.gg/F24Ka8E Things we want to add to the character sheet, presented in no particular order of priority: +- [ ] Allow a second ability score to apply to skill checks +- [ ] Allow formula calculations for the extra damage fields +- [ ] Allow modifications to movement (maybe just an extra box) +- [ ] Refactor the sheet workers to remove the cascading change observation; each `setAttrs` call takes way too long, so we want to capitalise on making them as low as possible +- [ ] JSON import and export of sheet data, to support the Pokelicious Sheets and also migrating/copying characters +- [ ] Add Struggle to the move lists automatically +- [ ] Add status effects that you can click + - [ ] Burn, Poison/Toxified, and Paralyzed should modify stats automatically +- [ ] Somehow make it easier to get tokens into initiative. No idea how to accomplish this. - [x] ~~Display the full bonus to skill checks~~ - [x] ~~Handle temporary stat changes somehow, this may be a lot of work~~ - [x] ~~Prevent critical range from going below 0 or above 20, maybe do similar to other fields~~ - [x] ~~Add a Settings page~~ -- [ ] Allow a second ability score to apply to skill checks -- [ ] Allow formula calculations for the extra damage fields -- [ ] Allow modifications to movement (maybe just an extra box) -- [ ] Display the adjusted stat score when temporary stat changes are provided -- [ ] Display the skills section for Pokémon characters -- [ ] Moves deserve a section for "bonuses that apply to all moves." Things that should go here include: - - [ ] A spot for Attack and Special Attack bonuses, for things like Ace Trainer - - [ ] The critical hit range for the moves, as this is used for passives, items, etc. -- [ ] Refactor the sheet workers to remove the cascading change observation; each `setAttrs` call takes way too long, so we want to capitalise on making them as low as possible +- [X] ~~Display the adjusted stat score when temporary stat changes are provided~~ +- [X] ~~Display the skills section for Pokémon characters~~ +- [X] ~~Moves deserve a section for "bonuses that apply to all moves." Things that should go here include:~~ + - [X] ~~A spot for Attack and Special Attack bonuses, for things like Ace Trainer~~ + - [X] ~~The critical hit range for the moves, as this is used for passives, items, etc.~~ ## Changelog +### Mar 7th, 2021 + +- The big stat calculation overhaul! + - The stat balls are now read-only, except for HP. + - Stats are summed from a stat grid that is listed underneath the stat balls + - Grid is collapsible to show only one row for ease of use + - Stat changes from natures are calculated automatically + - Temporary stat changes work now! + - Script to fill in data automatically for any existing character sheets +- Convert var to let +- Pokemon can use skills now +- Moved around some boxes and made skills two columns, mostly to support Pokemon getting them +- STAB is calculated automatically - the previous box for STAB has been removed +- New section for bonuses that apply to all moves: + - Critical Threshold goes here, and has been removed from Pokemon skills. + - Bonuses for Attack and Special Attack, to make the Ace Trainers happy + - Accuracy bonus field, for things like Hone Claws + ### Feb 23rd, 2021 - Unifies background colours for text areas and number inputs diff --git a/PokemonTabletopAdventures_v3/sheet.json b/PokemonTabletopAdventures_v3/sheet.json index 1b39a0f2c8..32c6926932 100644 --- a/PokemonTabletopAdventures_v3/sheet.json +++ b/PokemonTabletopAdventures_v3/sheet.json @@ -4,6 +4,6 @@ "authors": "Adam Talbot, Ian", "roll20userid": "199597,1319761", "preview": "PTA3.png", - "instructions": "# Welcome to the wonderful world of Pokemon (Tabletop Adventures!)\nHi Guys! We made this character sheet to make playing the game way easier, and we _really hope_ that we've succeeded. \nThat being said - if you find any issues, or have any suggestions for improvements, please feel free to reach out to us at the _[PTA Discord server](https://discord.gg/F24Ka8E) (we hang out in the `pta-tool-dev` channel)!_\n\n### Some things that may not be super obvious to beginners:\nHead on over to *[this handy FAQ](https://docs.google.com/document/d/10seBEJonoWJJyNRpZm9-ijjnj_aezLqflsB63m41mmw/edit)* regarding the PTA 3 system, which has way more information than has been crammed into this section. That said; here are some of the sheet-relevant points:\n- Moves and Skills are rolled to the chat log by pressing on the d20 icon; these are rollable buttons, even if they might not look like it!\n- Natural 1s and 20s are, in most cases, not actually that special in PTA 3, and we've handled every case for critical hits that can come up.\n - 1s are not, by default, an auto-miss, so we disabled the appearance of them as such _(you'll see `cf0` in most dice rolls - this is what disables the red highlighting of natural 1s!)_\n\n### Here are some tips that we think will make your use of the sheet much more productive:\n- Create a new character sheet for each Trainer and Pokemon\n - Use the buttons on the top left to choose which sheet to use\n - The _`Hybrid`_ option is mainly for player characters using the Pokemon class from the PHB2\n- Trainers can enjoy the same colorful backgrounds as Pokemon by selecting a type as either a Pokemon or Hybrid character, and then changing back to a Trainer character\n- Effect Thresholds in the Move sections are for additional effects like Poison Sting's _\"On hit, if you got 15 or higher on Accuracy Check, the target is Poisoned\"_\n - They also handle moves such as Slash and Karate Chop's customised critical hit ranges.\n- You don't have a limited number of moves that you can add to a character sheet! If you want to, you can add the same move multiple times for different effects, such as for a Pokemon with the _\"Sheer Force\"_ passive\n - This allows you to have one move that has all the additional effects coded into it, and one that doesn't where you add 1d20 to the damage pop-up, saving you space in the chat log!\n - We've got it on our to-do list to allow adding things like `1d20` or `@{Red|ATKMOD}` to the _\"Extra Damage\"_ field in moves - for now you'll need to use the pop-up to add these things _(or figure out the number and add it manually)_", + "instructions": "# Welcome to the wonderful world of Pokemon (Tabletop Adventures!)\nHello! We made this character sheet to make playing the game way easier, and we _really hope_ that we've succeeded. \nThat being said - if you find any issues, or have any suggestions for improvements, please feel free to reach out to us at the _[PTA Discord server](https://discord.gg/F24Ka8E) (we hang out in the `pta-tool-dev` channel)!_\n\n### Some things that may not be super obvious to beginners:\nHead on over to *[this handy FAQ](https://docs.google.com/document/d/10seBEJonoWJJyNRpZm9-ijjnj_aezLqflsB63m41mmw/edit)* regarding the PTA 3 system, which has way more information than has been crammed into this section. That said; here are some of the sheet-relevant points:\n- Moves and Skills are rolled to the chat log by pressing on the d20 icon; these are rollable buttons, even if they might not look like it!\n- Natural 1s and 20s are, in most cases, not actually that special in PTA 3, and we've handled every case for critical hits that can come up.\n - 1s are not, by default, an auto-miss, so we disabled the appearance of them as such _(you'll see `cf0` in most dice rolls - this is what disables the red highlighting of natural 1s!)_\n\n### Here are some tips that we think will make your use of the sheet much more productive:\n- Create a new character sheet for each Trainer and Pokemon\n - Use the Configuration page to choose which sheet to use\n - The _`Pokemon (Character Class)`_ option is for player characters using the Pokemon class from the PHB2\n- Trainers can enjoy the same colorful backgrounds as Pokemon by selecting a type from the Configuration page\n- Effect Thresholds in the Move sections are for additional effects like Poison Sting's _\"On hit, if you got 15 or higher on Accuracy Check, the target is Poisoned\"_\n - They also handle moves such as Slash and Karate Chop's customised critical hit ranges.\n- You don't have a limited number of moves that you can add to a character sheet! If you want to, you can add the same move multiple times for different effects, such as for a Pokemon with the _\"Sheer Force\"_ passive\n - This allows you to have one move that has all the additional effects coded into it, and one that doesn't where you add 1d20 to the damage pop-up, saving you space in the chat log!\n - We've got it on our to-do list to allow adding things like `1d20` or `@{Red|ATKMOD}` to the _\"Extra Damage\"_ field in moves - for now you'll need to use the pop-up to add these things _(or figure out the number and add it manually)_", "legacy": true } \ No newline at end of file diff --git a/RolemasterUnified/sheet_RMU_v1.0.html b/RolemasterUnified/sheet_RMU_v1.0.html index 3ecbb2b7fe..d02d982d05 100644 --- a/RolemasterUnified/sheet_RMU_v1.0.html +++ b/RolemasterUnified/sheet_RMU_v1.0.html @@ -5,7 +5,7 @@ -

    V2. 05/25/2020 by Diana P.

    +

    V2. 02/04/2021 by PantsWorth

    @@ -86,6 +86,8 @@ + +
    Deity: @@ -5614,13 +5616,13 @@ Auto calculate experience needed for next level (using RMSS std scale where level 1 is at 10000 xp).
    -
    +
    - Auto populate profession skill-category bonuses for professions in the Rolemaster Standard Rules book.
    Supported: Fighter, Thief, Rogue, Warrior Monk, Layman, Magician, Illusionist, Cleric, Animist, Mentalist, Lay Healer, Healer, Mystic, Sorcerer, Ranger, Paladin, Monk, Dabbler, Bard, Magent. If this box is checked and the Profession field does not match the spelling of one of the above professions, no bonuses will be populated. To clear the profession bonuses, enter the keyword: None .
    + Auto populate profession skill-category bonuses for professions in the Rolemaster Unified Rules book.
    Supported: Fighter, Warrior Monk, Thief, Rogue, Laborer, Scholar, Cleric, Druid, Magician, Illusionist, Mentalist, Lay Healer, Healer, Mystic, Sorcerer, Paladin, Ranger, Monk, Bard, Magent, Dabbler, No Profession. If this box is checked and the Profession field does not match the spelling of one of the above professions, no bonuses will be populated. To clear the profession bonuses, enter the keyword: None .
    @@ -5682,14 +5684,14 @@
    - Coins per Pound (RMSS suggested value is 64 coins weigh 1 pound): + Coins per Pound:

    -
    +
    Skill Progression Setup
    - These Skill Rank Progressions are per the rules in the RMSS Standard Rules. + These Skill Rank Progressions are per the rules in the RMU.
    @@ -7964,7 +7966,7 @@ function StatCalc(base, racial, special) { // takes skill rank and progression and returns rank bonus function GenSkillMod(rank, prog0, prog10, prog20, prog30, prog31) { let mod = 0; - // console.log('/* ----------inside GenSkillMod rank:'+rank+'------------ */'); + console.log('/* ----------inside GenSkillMod rank:'+rank+'------------ */'); if (rank == 0) { if (isNaN(prog0)) {mod=0;} else {mod = prog0;} @@ -7982,7 +7984,7 @@ function GenSkillMod(rank, prog0, prog10, prog20, prog30, prog31) { mod = Math.round(100 + ((rank - 30) * prog31)); // mod = 45 + Math.round(rank / 2); } - // console.log('/* ----------leaving GenSkillMod mod:'+mod+'------------ */'); + console.log('/* ----------leaving GenSkillMod mod:'+mod+'------------ */'); return mod; } @@ -8058,77 +8060,34 @@ on('change:realmselect change:race change:racialcalc change:inbonus change:embon function SkillChange(name) { getAttrs(['skillcalc'], function(values) { if (parseInt(values.skillcalc,10) == 1){ - // console.log('/* ----------entering SkillChange ------------ */'); + console.log('/* ----------entering SkillChange ------------ */'); let prog; prog = name.replace(/ranks/g,'prog'); let bonus = name.replace(/ranks/g,'rankbonus'); - // console.log('/* ----------SkillChange: prog:'+prog+' bonus:'+bonus+' ------------ */'); // debug + console.log('/* ----------SkillChange: prog:'+prog+' bonus:'+bonus+' ------------ */'); // debug getAttrs([prog],function(values) { - // console.log('/* ----------SkillChange: prog value:'+values[prog]+' ------------ */'); // debug - if (values[prog] == 1) { //combined - getAttrs([name, 'combprog0', 'combprog10', 'combprog20', 'combprog30', 'combprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.combprog0),parseFloat(values.combprog10), parseFloat(values.combprog20), parseFloat(values.combprog30), parseFloat(values.combprog31)); - setAttrs(update); - }); - } else if (values[prog] == 2) { // Category - getAttrs([name, 'catprog0', 'catprog10', 'catprog20', 'catprog30', 'catprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.catprog0),parseFloat(values.catprog10), parseFloat(values.catprog20), parseFloat(values.catprog30), parseFloat(values.catprog31)); - setAttrs(update); - }); - } else if (values[prog] == 3) { // Standard + console.log('/* ----------SkillChange: prog value:'+values[prog]+' ------------ */'); // debug + // Standard getAttrs([name, 'stdprog0', 'stdprog10', 'stdprog20', 'stdprog30', 'stdprog31'], function(values) { let update = {}; update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.stdprog0),parseFloat(values.stdprog10), parseFloat(values.stdprog20), parseFloat(values.stdprog30), parseFloat(values.stdprog31)); setAttrs(update); }); - } else if (values[prog] == 4) { // Special/Spell - getAttrs([name, 'spellprog0', 'spellprog10', 'spellprog20', 'spellprog30', 'spellprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.spellprog0),parseFloat(values.spellprog10), parseFloat(values.spellprog20), parseFloat(values.spellprog30), parseFloat(values.spellprog31)); - setAttrs(update); - }); - } else if (values[prog] == 5) { // Bodydev - getAttrs([name, 'bodydevprog0', 'bodydevprog10', 'bodydevprog20', 'bodydevprog30', 'bodydevprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.bodydevprog0),parseFloat(values.bodydevprog10), parseFloat(values.bodydevprog20), parseFloat(values.bodydevprog30), parseFloat(values.bodydevprog31)); - setAttrs(update); - }); - } else if (values[prog] == 6) { // PPDev - getAttrs([name, 'ppdevprog0', 'ppdevprog10', 'ppdevprog20', 'ppdevprog30', 'ppdevprog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.ppdevprog0),parseFloat(values.ppdevprog10), parseFloat(values.ppdevprog20), parseFloat(values.ppdevprog30), parseFloat(values.ppdevprog31)); - setAttrs(update); - }); - } else if (values[prog] == 7) { // Custom1 - getAttrs([name, 'cust1prog0', 'cust1prog10', 'cust1prog20', 'cust1prog30', 'cust1prog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.cust1prog0),parseFloat(values.cust1prog10), parseFloat(values.cust1prog20), parseFloat(values.cust1prog30), parseFloat(values.cust1prog31)); - setAttrs(update); - }); - } else if (values[prog] == 8) { // Custom2 - getAttrs([name, 'cust2prog0', 'cust2prog10', 'cust2prog20', 'cust2prog30', 'cust2prog31'], function(values) { - let update = {}; - update[bonus]=GenSkillMod(parseInt(values[name],10), parseFloat(values.cust2prog0),parseFloat(values.cust2prog10), parseFloat(values.cust2prog20), parseFloat(values.cust2prog30), parseFloat(values.cust2prog31)); - setAttrs(update); - }); - } }); - // console.log('/* ----------exiting SkillChange ------------ */'); + console.log('/* ----------exiting SkillChange ------------ */'); } }); } // Update the dropdown stats for the skills since they got renamed and we don't want to lose data NYI -//function FixDropdownStats(name) { -// let stat = name + 'stat'; +function FixDropdownStats(name) { + let stat = name + 'stat'; let display = name + 'statdisplay'; let choice = name + 'statchoice'; let svalue = 0; let cvalue = ''; //console.log('/* ---------- stat:'+stat+'; choice:'+choice+'------------ */'); - getAttrs([stat, display, choice, 'agbonus', 'cobonus', 'mebonus', 'rebonus', 'sdbonus', 'embonus', 'inbonus', 'prbonus', 'qubonus', 'stbonus'], function(values) { + getAttrs([stat, display, choice, 'rlbonus', 'nabonus', 'agbonus', 'cobonus', 'mebonus', 'rebonus', 'sdbonus', 'embonus', 'inbonus', 'prbonus', 'qubonus', 'stbonus'], function(values) { console.log('/* ---------- stat:'+stat+' value stat:'+values[stat]+'; display:'+display+'; value display:'+values[display]+'; choice:'+choice+'; value choice:'+values[choice]+'------------ */'); if (values[stat].includes('ag')) { svalue = parseInt(values.agbonus,10); @@ -8169,6 +8128,18 @@ function SkillChange(name) { if (values.stat.includes('st')) { svalue = parseInt(values.stbonus,10); cvalue = 'st'; + } + if (values.stat.includes('rl')) { + svalue = parseInt(values.rlbonus,10); + cvalue = 'rl'; + } + if (values.stat.includes('co')) { + svalue = parseInt(values.cobonus,10); + cvalue = 'co'; + } + if (values.stat.includes('na')) { + svalue = parseInt(0); + cvalue = 'na'; } console.log ('/*------ svalue:'+svalue+'; cvalue:'+cvalue); setAttrs({ @@ -9015,114 +8986,6 @@ on('change:levelexpcalc change:level', function() { }); }); -// -//on('change:race change:racialcalc', function() { -// getAttrs(['race', 'racialnotes', 'racialcalc'], function(values) { - // console.log('/* ---------- can we set up racial bonuses?------------ */'); - // first set up a table of mods for all the racial stats. - // note you can put linespaces after any comma here, if you want to arrange it so its easily read. -// const modsbyrace = { -// 'common man': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 0, meracial: 0, reracial: 0, sdracial: 2, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 12, recoverymult: 1, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'mixed man': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:5, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial:2, meracial: 0, reracial: 0, sdracial: 2, emracial: 2, inracial: 0, prracial: 2, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 11, recoverymult: 0.9, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'high man': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:5, bodydevprog30:3, bodydevprog31:1, agracial: -2, coracial: 4, meracial: 0, reracial: 0, sdracial: 0, emracial: 0, inracial: 0, prracial: 4, quracial: -2, stracial: 4, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 10, recoverymult: 0.75, racetypeforstatloss: 2, exhaustmiscbonus: 0}, -// 'half-elf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:5, bodydevprog30:3, bodydevprog31:1, agracial: 2, coracial: 2, meracial: 0, reracial: 0, sdracial: -3, emracial: 0, inracial: 0, prracial: 4, quracial: 4, stracial: 2, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 0, diseasesaverace: 50, willsaverace: -15, souldepart: 6, recoverymult: 1.5, racetypeforstatloss: 3, exhaustmiscbonus: 0}, -// 'wood elf': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:1, bodydevprog31:1, agracial: 4, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 2, quracial: 2, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 3, recoverymult: 1.5, racetypeforstatloss: 3, exhaustmiscbonus: 0}, -// 'grey elf': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 2, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 4, quracial: 4, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 2, recoverymult: 2, racetypeforstatloss: 4, exhaustmiscbonus: 0}, -// 'high elf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 2, coracial: 0, meracial: 2, reracial: 0, sdracial: -5, emracial:2, inracial: 0, prracial: 6, quracial: 6, stracial: 0, esssaverace: -5, chansaverace: -5, mentsaverace: -5, poisonsaverace: 10, diseasesaverace: 100, willsaverace: -15, souldepart: 1, recoverymult: 3, racetypeforstatloss: 5, exhaustmiscbonus: 0}, -// 'dwarf': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: -2, coracial: 6, meracial: 0, reracial: 0, sdracial: 2, emracial: -4, inracial: 0, prracial: -4, quracial: -2, stracial: 2, esssaverace: 40, chansaverace: 0, mentsaverace: 40, poisonsaverace: 20, diseasesaverace: 15, willsaverace: 80, souldepart: 21, recoverymult: 0.5, racetypeforstatloss: 1, exhaustmiscbonus: 0}, -// 'halfling': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:2, bodydevprog30:2, bodydevprog31:1, agracial: 6, coracial: 6, meracial: 0, reracial: 0, sdracial: -4, emracial:-2, inracial: 0, prracial: -6, quracial: 4, stracial: -8, esssaverace: 40, chansaverace: 0, mentsaverace: 40, poisonsaverace: 30, diseasesaverace: 15, willsaverace: 90, souldepart: 18, recoverymult: 0.5, racetypeforstatloss: 1, exhaustmiscbonus: 0}, -// 'half-orc': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:4, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 2, meracial: 0, reracial: 0, sdracial: 2, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 5, diseasesaverace: 5, willsaverace: 0, souldepart: 6, recoverymult: 0.75, racetypeforstatloss: 2, exhaustmiscbonus: 10}, -// 'common orc': {bodydevprog0:0, bodydevprog10:6, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 2, meracial: -4, reracial:-2, sdracial:-4, emracial:-2, inracial: -4, prracial:-2, quracial: 0, stracial: 2, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 5, willsaverace: 0, souldepart: 1, recoverymult: 0.5, racetypeforstatloss: 2, exhaustmiscbonus: 20}, -// 'greater orc': {bodydevprog0:0, bodydevprog10:7, bodydevprog20:3, bodydevprog30:2, bodydevprog31:1, agracial: 0, coracial: 4, meracial: -2, reracial:-2, sdracial:-2, emracial:-2, inracial: -2, prracial:-2, quracial: 0, stracial: 4, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 5, diseasesaverace: 10, willsaverace: 0, souldepart: 1, recoverymult: 0.5, racetypeforstatloss: 2, exhaustmiscbonus: 30}, -// 'none': {bodydevprog0:0, bodydevprog10:0, bodydevprog20:0, bodydevprog30:0, bodydevprog31:0, agracial: 0, coracial: 0, meracial: 0, reracial: 0, sdracial: 0, emracial: 0, inracial: 0, prracial: 0, quracial: 0, stracial: 0, esssaverace: 0, chansaverace: 0, mentsaverace: 0, poisonsaverace: 0, diseasesaverace: 0, willsaverace: 0, souldepart: 0, recoverymult: 0, racetypeforstatloss: 0, exhaustmiscbonus: 0} -// }; - // check to make sure that it's ok to do the racial setup per the setup tab -// if (parseInt(values.racialcalc) == 1) { - //console.log('/* ---------- racial calc is 1; setup racialbonuses etc!------------ */'); -// const race = values.race.toLowerCase(); -// if (modsbyrace.hasOwnProperty(race)) { - // race exists in data set above so use it. -// const mods = modsbyrace[race]; -// setAttrs(mods); - - // Note: skill bonuses would probably be handled best in a skill worker. - // racial skill bonuses? Swimming (-50 for dwarves), Scaling(+20 Hillmen), Acrobatics(+20 Hillmen, Woodmen), Public Speaking(+20 Hillmen), Acting(+20 Hillmen), Boat Piloting(+20 Mariners), Navigation(+20 Mariners), Rope Mastery(+20 Mariners), Rowing(+20 Mariners), Sailing(+20 Mariners), Star-gazing(+20 Mariners), Weather Watching(+20 Mariners), Mounted Combat(+20 Nomads), all Outdoor-Animal skills(+20 Nomads), Trickery(+10 Wood-elves), Stalking(+10 Wood-elves), Hiding(+10 Wood-elves), Climbing(+20 Woodmen), Foraging(+10 Woodmen), bard based spell attacks (+10 Wood-elves)?, Awareness involving hearing (+10 elves)???, + DB/RR for heat and/or cold (various) - - // racial notes? (maybe but how to keep it from over-writing what's there or inserting itself again everytime??) - // The simple solution is to add racialnotes: to the race data object above, then it's be printed automatically, replacing whats there at - // no loss in performance, since its just part of a single setAttrs. - -// } -// } -// }); - //console.log('/* ---------- exiting set up racial bonuses call------------ */'); -//}); - -// -//on('change:bodydevprog0 change:bodydevprog10 change:bodydevprog20 change:bodydevprog30 change:bodydevprog31 change:racialcalc change:skillcalc', function() { -// getAttrs(['bodydevranks', 'bodydevprog0', 'bodydevprog10', 'bodydevprog20', 'bodydevprog30', 'bodydevprog31', 'racialcalc', 'skillcalc'], function(values) { - // console.log('/* ----------entering bodydevcalc; racialcalc:' + values.racialcalc + ' skillcalc:' + values.skillcalc + ' bodydevranks:' + values.bodydevranks+ '------------ */'); -// if ((parseInt(values.skillcalc,10) == 1) && (parseInt(values.racialcalc,10) == 1)) { -// setAttrs({ -// bodydevrankbonus: GenSkillMod(parseInt(values.bodydevranks,10), parseFloat(values.bodydevprog0), parseFloat(values.bodydevprog10), parseFloat(values.bodydevprog20), parseFloat(values.bodydevprog30), parseFloat(values.bodydevprog31)) -// }); -// } -// }); -//}); - -// -//on('change:realm change:ppdevranks change:ppdevprog0 change:ppdevprog10 change:ppdevprog20 change:ppdevprog30 change:ppdevprog31 change:skillcalc change:racialcalc change:inbonus change:embonus change:prbonus', function() { -// getAttrs(['ppdevranks', 'ppdevprog0', 'ppdevprog10', 'ppdevprog20', 'ppdevprog30', 'ppdevprog31', 'skillcalc', 'racialcalc'], function(values) { - // console.log('/* ------------------ppdevranks:'+parseInt(values.ppdevranks,10)+' ppdevprog0:'+parseFloat(values.ppdevprog0)+' ppdevprog10:'+parseFloat(values.ppdevprog10)+' ppdevprog20:'+parseFloat(values.ppdevprog20)+' ppdevprog30:'+parseFloat(values.ppdevprog30)+' ppdevprog31:'+parseFloat(values.ppdevprog31)+'-----------*/'); -// if ((parseInt(values.skillcalc,10) == 1)) { -// setAttrs({ -// ppdevrankbonus: GenSkillMod(parseInt(values.ppdevranks,10), parseFloat(values.ppdevprog0), parseFloat(values.ppdevprog10), parseFloat(values.ppdevprog20), parseFloat(values.ppdevprog30), parseFloat(values.ppdevprog31)) -// }); -// } -// }); -//}); - -// -on('change:profession change:professioncalc', function() { - getAttrs(['profession', 'professioncalc'], function(values) { - //console.log('/* ---------- can we set up profession bonuses?------------ */'); - // first set up a table of mods for all the profession bonuses. - const profbonusbyprofession = { - 'none': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'fighter': {'cat-armor-heavy-profbonus': 10, 'cat-armor-light-profbonus': 10, 'cat-armor-med-profbonus': 10, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 10, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 20, 'cat-weapon-1hedged-profbonus': 20, 'cat-weapon-2handed-profbonus': 20, 'cat-weapon-missile-profbonus': 20, 'cat-weapon-missileartillery-profbonus': 20, 'cat-weapon-polearms-profbonus': 20, 'cat-weapon-thrown-profbonus': 20}, - 'thief': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 15, 'cat-subterfuge-mechanics-profbonus': 15, 'cat-subterfuge-stealth-profbonus': 15, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 10, 'cat-weapon-1hedged-profbonus': 10, 'cat-weapon-2handed-profbonus': 10, 'cat-weapon-missile-profbonus': 10, 'cat-weapon-missileartillery-profbonus': 10, 'cat-weapon-polearms-profbonus': 10, 'cat-weapon-thrown-profbonus': 10}, - 'rogue': {'cat-armor-heavy-profbonus': 5, 'cat-armor-light-profbonus': 5, 'cat-armor-med-profbonus': 5, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 5, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 10, 'cat-subterfuge-mechanics-profbonus': 10, 'cat-subterfuge-stealth-profbonus': 10, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 15, 'cat-weapon-1hedged-profbonus': 15, 'cat-weapon-2handed-profbonus': 15, 'cat-weapon-missile-profbonus': 15, 'cat-weapon-missileartillery-profbonus': 15, 'cat-weapon-polearms-profbonus': 15, 'cat-weapon-thrown-profbonus': 15}, - 'warrior monk': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 15, 'cat-ma-sweeps-profbonus': 15, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 15, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'layman': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 5, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 5, 'cat-outdoor-environ-profbonus': 5, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 5, 'cat-tech-professional': 5, 'cat-tech-vocational-profbonus': 5, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'magician': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 10, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 10, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'illusionist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 5, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 10, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'cleric': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 5, 'cat-outdoor-environ-profbonus': 5, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'animist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 20, 'cat-outdoor-environ-profbonus': 20, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'mentalist': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 10, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'lay healer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'healer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'mystic': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'sorcerer': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 0, 'cat-aware-search-profbonus': 0, 'cat-aware-senses-profbonus': 0, 'bodydevcatbonus': 0, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 5, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 10, 'cat-power-manipulation-profbonus': 15, 'ppdevcatbonus': 5, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 5, 'cat-sropenprofbonus': 5, 'cat-srclosedprofbonus': 5, 'cat-srotherbprofbonus': 5, 'cat-oropenprofbonus': 5, 'cat-orclosedprofbonus': 5, 'cat-orbaseprofbonus': 5, 'cat-arcopenprofbonus': 5, 'cat-arcclosedprofbonus': 5, 'cat-arcbaseprofbonus': 5, 'cat-arcotherbaseprofbonus': 5, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 0, 'cat-weapon-1hedged-profbonus': 0, 'cat-weapon-2handed-profbonus': 0, 'cat-weapon-missile-profbonus': 0, 'cat-weapon-missileartillery-profbonus': 0, 'cat-weapon-polearms-profbonus': 0, 'cat-weapon-thrown-profbonus': 0}, - 'ranger': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 5, 'cat-athletic-endur-profbonus': 5, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 20, 'cat-outdoor-environ-profbonus': 20, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'paladin': {'cat-armor-heavy-profbonus': 5, 'cat-armor-light-profbonus': 5, 'cat-armor-med-profbonus': 5, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 5, 'cat-athletic-endur-profbonus': 5, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 10, 'cat-combat-maneuvers-profbonus': 10, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 0, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 10, 'cat-weapon-1hedged-profbonus': 10, 'cat-weapon-2handed-profbonus': 10, 'cat-weapon-missile-profbonus': 10, 'cat-weapon-missileartillery-profbonus': 10, 'cat-weapon-polearms-profbonus': 10, 'cat-weapon-thrown-profbonus': 10}, - 'monk': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 5, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 0, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 10, 'cat-ma-sweeps-profbonus': 10, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'dabbler': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 0, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 5, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 5, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 0, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 5, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'bard': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 5, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 5, 'cat-aware-search-profbonus': 5, 'cat-aware-senses-profbonus': 5, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 5, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 10, 'cat-lore-magical-profbonus': 10, 'cat-lore-obscure-profbonus': 10, 'cat-lore-technical-profbonus': 10, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 5, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 0, 'cat-subterfuge-mechanics-profbonus': 0, 'cat-subterfuge-stealth-profbonus': 0, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5}, - 'magent': {'cat-armor-heavy-profbonus': 0, 'cat-armor-light-profbonus': 0, 'cat-armor-med-profbonus': 0, 'cat-artistic-active-profbonus': 0, 'cat-artistic-passive-profbonus': 0, 'cat-athletic-brawn-profbonus': 0, 'cat-athletic-endur-profbonus': 0, 'cat-athletic-gym-profbonus': 0, 'cat-aware-percept-profbonus': 10, 'cat-aware-search-profbonus': 10, 'cat-aware-senses-profbonus': 10, 'bodydevcatbonus': 5, 'cat-combat-maneuvers-profbonus': 0, 'cat-communications-profbonus': 5, 'cat-crafts-profbonus': 0, 'cat-directed-spells-profbonus': 0, 'cat-influence-profbonus': 5, 'cat-lore-general-profbonus': 0, 'cat-lore-magical-profbonus': 0, 'cat-lore-obscure-profbonus': 0, 'cat-lore-technical-profbonus': 0, 'cat-ma-striking-profbonus': 0, 'cat-ma-sweeps-profbonus': 0, 'cat-outdoor-animal-profbonus': 0, 'cat-outdoor-environ-profbonus': 0, 'cat-power-awareness-profbonus': 5, 'cat-power-manipulation-profbonus': 0, 'ppdevcatbonus': 0, 'cat-science-basic-profbonus': 0, 'cat-science-specialized-profbonus': 0, 'cat-self-control-profbonus': 10, 'cat-special-attacks-profbonus': 0, 'cat-srobprofbonus': 0, 'cat-sropenprofbonus': 0, 'cat-srclosedprofbonus': 0, 'cat-srotherbprofbonus': 0, 'cat-oropenprofbonus': 0, 'cat-orclosedprofbonus': 0, 'cat-orbaseprofbonus': 0, 'cat-arcopenprofbonus': 0, 'cat-arcclosedprofbonus': 0, 'cat-arcbaseprofbonus': 0, 'cat-arcotherbaseprofbonus': 0, 'cat-subterfuge-attack-profbonus': 5, 'cat-subterfuge-mechanics-profbonus': 5, 'cat-subterfuge-stealth-profbonus': 5, 'cat-tech-general-profbonus': 0, 'cat-tech-professional': 0, 'cat-tech-vocational-profbonus': 0, 'cat-urban-profbonus': 0, 'cat-weapon-1hconcussion-profbonus': 5, 'cat-weapon-1hedged-profbonus': 5, 'cat-weapon-2handed-profbonus': 5, 'cat-weapon-missile-profbonus': 5, 'cat-weapon-missileartillery-profbonus': 5, 'cat-weapon-polearms-profbonus': 5, 'cat-weapon-thrown-profbonus': 5} - }; - // check to make sure that it's ok to do the profession setup per the setup tab - if (parseInt(values.professioncalc) == 1) { - //console.log('/* ---------- profession calc is 1; setup professionbonuses etc!------------ */'); - const profession = values.profession.toLowerCase(); - if (profbonusbyprofession.hasOwnProperty(profession)) { - // profession exists in data set above so use it. - const mods = profbonusbyprofession[profession]; - setAttrs(mods); - } - } - }); - //console.log('/* ---------- exiting set up profession bonuses call------------ */'); -}); // on('sheet:opened', function() { @@ -9453,58 +9316,31 @@ categories.forEach(cat => { }); }); -// -on('change:heightunit sheet:opened', function() { - getAttrs(['heightunit'], function(values) { - const heightunit = values.heightunit.toLowerCase(); - if ( (heightunit == "in") || (heightunit == 'in.') || (heightunit == 'inches') || (heightunit == 'inch')) { - setAttrs({ 'feetinches-show': 1 }); - } else { - setAttrs({ 'feetinches-show': 0 }); - } - }); -}); - // -on('change:heightunit sheet:opened change:height change:qubonus change:weightpenalty change:bonusbasemoverate', function() { - getAttrs(['heightunit', 'height', 'qubonus', 'stbonus', 'weightpenalty', 'bonusbasemoverate'], function(values) { +on('sheet:opened change:height change:qubonus change:weightpenalty change:bonusbasemoverate', function() { + getAttrs([ 'height', 'qubonus', 'stbonus', 'weightpenalty', 'bonusbasemoverate'], function(values) { const output = {}; - const heightunit = values.heightunit.toLowerCase(); const height = int(values.height); const qubonus = int(values.qubonus); const stbonus = int(values.stbonus); const weightpenalty = int(values.weightpenalty); const bonusbasemoverate = int(values.bonusbasemoverate); - if ( (heightunit == "in") || (heightunit == 'in.') || (heightunit == 'inches') || (heightunit == 'inch')) { - //let p1 = Math.ceil((height/6)-12.5); - //let p2 = 5*p1; - //let p3 = 50 + p2 + 3*qubonus; - let basemove = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus +bonusbasemoverate); - let movement = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus + weightpenalty +bonusbasemoverate); + + //let basemove = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus +bonusbasemoverate); + //let movement = (50+(5*Math.ceil((height/6)-12.5)) + 3*qubonus + weightpenalty +bonusbasemoverate); + let basemove = (20+(Math.ceil(qubonus/2))) + bonusbasemoverate); + let movement = (20+(Math.ceil(qubonus/2))) + bonusbasemoverate); output['basemoverate'] = basemove; output['currentmoverate'] = movement; - let runninghorizjump = Math.round((height-70)/2 +50 + 2*stbonus); + let runninghorizjump = 50 + bonusbasemoverate); output['runhorizjump'] = runninghorizjump; let standinghorizjump = Math.round(runninghorizjump/2); output['standhorizjump'] = standinghorizjump; - let runningvertjump = Math.round((height-70)/3 +12 +stbonus); + let runningvertjump = Math.round(runninghorizjump/5); output['runvertjump'] = runningvertjump; - let standingvertjump = Math.round(runningvertjump/3); + let standingvertjump = Math.round(runninghorizjump/10); output['standvertjump'] = standingvertjump; - //console.log('heightunit:' + heightunit + '_ height:' + height + '_ qubonus:' + qubonus + '_ stbonus:' + stbonus + '_ p1:' + p1 + '_ p2:' + p2 + '_ p3:' + p3 + '_ weightpenalty:' + weightpenalty + '_ bonusbasemoverate:' + bonusbasemoverate + '_ basemoverate:'+ basemove + '_ runninghorizjump:' + runninghorizjump + '_ standinghorizjump:' + standinghorizjump + '_ runningvertjump' + runningvertjump + '_ standingvertjump:' + standingvertjump); - } else { - let basemove = (50+(5*Math.ceil((height/6)-12.5)) +3*qubonus+ weightpenalty+bonusbasemoverate); - output['basemoverate'] = basemove; - let runninghorizjump = Math.round((height-70)/2 +50 +2*stbonus); - output['runhorizjump'] = runninghorizjump; - let standinghorizjump = Math.round(runninghorizjump/2); - output['standhorizjump'] = standinghorizjump; - let runningvertjump = Math.round((height-70)/3 +12 +stbonus); - output['runvertjump'] = runningvertjump; - let standingvertjump = Math.round(runningvertjump/3); - output['standvertjump'] = standingvertjump; - //console.log('heightunit:' + heightunit + '_ height:' + height + '_ qubonus:' + qubonus + '_ stbonus:' + stbonus + '_ weightpenalty:' + weightpenalty + '_ bonusbasemoverate:' + bonusbasemoverate + 'basemoverate:'+ basemove + '_ runninghorizjump:' + runninghorizjump + '_ standinghorizjump:' + standinghorizjump + '_ runningvertjump' + runningvertjump + '_ standingvertjump:' + standingvertjump); - } + } setAttrs(output); }); }); @@ -10405,1037 +10241,5 @@ on('change:skillcalc', function() { }); }); -// -on('sheet:opened', function() { - getAttrs(['sheetversion', 'npchitscode'], function(values) { - const output = {}; - var npchitscode = parseFloat(values.npchitscode); - if (parseFloat(values.sheetversion) < 3.13){ - if (npchitscode == .01){ //- - output['npcbasehitscode']= 0; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } else if (npchitscode == .02){ //A - output['npcbasehitscode']= 1; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 1; - output['npcstaminabonus']= '-7(01); -5(02-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-92); 5(93-99); 7(100)'; - } else if (npchitscode == .03){ //B - output['npcbasehitscode']= 2; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 2; - output['npcstaminabonus']= '-8(01); -7(02-04); -5(05-11); -3(12-31); -2(32-35); 0(36-65); 2(66-69); 3(70-89); 5(90-96); 7(97-99); 8(100)'; - } else if (npchitscode == .04){ //C - output['npcbasehitscode']= 3; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 3; - output['npcstaminabonus']= '-10(01); -8(02-03); -7(04-08); -5(09-23); -3(24-74); -2(75-79); 0(75-89); 2(86-89); 3(90-94); 5(95-97); 7(98-99); 8(100)'; - } else if (npchitscode == .05){ //D - output['npcbasehitscode']= 4; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 5; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-89); 5(90-94); 7(95-97); 8(98-99); 10(100)'; - } else if (npchitscode == 50){ //E; - output['npcbasehitscode']= 5; - output['npcexhaustmiscbonus']= 50; - output['npchitsperleveldiff']= 8; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-24); -2(25-29); 0(30-67); 2(68-72); 3(73-87); 5(88-92); 7(93-95); 8(96-97); 10(98); 12(99); 13(100)'; - } else if (npchitscode == 100){ //F - output['npcbasehitscode']= 6; - output['npcexhaustmiscbonus']= 100; - output['npchitsperleveldiff']= 10; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04-05); -3(06-10); -2(11-15); 0(16-20); 2(21-25); 3(26-72); 5(73-87); 7(88-92); 8(93-95); 10(96-97); 12(98); 13(99); 17(100)'; - } else if (npchitscode == 150){ //G - output['npcbasehitscode']= 7; - output['npcexhaustmiscbonus']= 150; - output['npchitsperleveldiff']= 12; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05-06); -2(07-11); 0(12-16); 2(17-31); 3(32-36); 5(37-71); 7(72-86); 8(87-91); 10(92-94); 12(95-96); 13(97-98); 17(99); 22(100)'; - } else if (npchitscode == 200){ //H - output['npcbasehitscode']= 8; - output['npcexhaustmiscbonus']= 200; - output['npchitsperleveldiff']= 15; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05); -2(06-07); 0(08-12); 2(13-17); 3(18-32); 5(32-37); 7(38-72); 8(73-88); 10(89-93); 12(94-96); 13(97-98); 17(99); 22(100)'; - } else { - output['npcbasehitscode']= 0; - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } - setAttrs(output); - } - }); -}); - -// -on('change:npcbasehitscode', function() { -//console.log('------------entering npcbasehitscode change---------------'); - getAttrs(['npcbasehitscode'], function(values) { - const output = {}; - var npcbasehitscode = parseFloat(values.npcbasehitscode); - // console.log('/* ---------- npcbasehitscode: '+values.npcbasehitscode+' ------------ */'); - if (npcbasehitscode == 1){ //A - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 1; - output['npcstaminabonus']= '-7(01); -5(02-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-92); 5(93-99); 7(100)'; - } else if (npcbasehitscode == 2){ //B - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 2; - output['npcstaminabonus']= '-8(01); -7(02-04); -5(05-11); -3(12-31); -2(32-35); 0(36-65); 2(66-69); 3(70-89); 5(90-96); 7(97-99); 8(100)'; - } else if (npcbasehitscode == 3){ //C - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 3; - output['npcstaminabonus']= '-10(01); -8(02-03); -7(04-08); -5(09-23); -3(24-74); -2(75-79); 0(75-89); 2(86-89); 3(90-94); 5(95-97); 7(98-99); 8(100)'; - } else if (npcbasehitscode == 4){ //D - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 5; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-25); -2(26-30); 0(31-70); 2(71-75); 3(76-89); 5(90-94); 7(95-97); 8(98-99); 10(100)'; - } else if (npcbasehitscode == 5){ //E - output['npcexhaustmiscbonus']= 50; - output['npchitsperleveldiff']= 8; - output['npcstaminabonus']= '-10(01); -8(02); -7(03-04); -5(05-09); -3(10-24); -2(25-29); 0(30-67); 2(68-72); 3(73-87); 5(88-92); 7(93-95); 8(96-97); 10(98); 12(99); 13(100)'; - } else if (npcbasehitscode == 6){ //F - output['npcexhaustmiscbonus']= 100; - output['npchitsperleveldiff']= 10; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04-05); -3(06-10); -2(11-15); 0(16-20); 2(21-25); 3(26-72); 5(73-87); 7(88-92); 8(93-95); 10(96-97); 12(98); 13(99); 17(100)'; - } else if (npcbasehitscode == 7){ //G - output['npcexhaustmiscbonus']= 150; - output['npchitsperleveldiff']= 12; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05-06); -2(07-11); 0(12-16); 2(17-31); 3(32-36); 5(37-71); 7(72-86); 8(87-91); 10(92-94); 12(95-96); 13(97-98); 17(99); 22(100)'; - } else if (npcbasehitscode == 8){ //H - output['npcexhaustmiscbonus']= 200; - output['npchitsperleveldiff']= 15; - output['npcstaminabonus']= '-10(01); -8(02); -7(03); -5(04); -3(05); -2(06-07); 0(08-12); 2(13-17); 3(18-32); 5(32-37); 7(38-72); 8(73-88); 10(89-93); 12(94-96); 13(97-98); 17(99); 22(100)'; - } else { - output['npcexhaustmiscbonus']= 0; - output['npchitsperleveldiff']= 0; - output['npcstaminabonus']= '-'; - } - setAttrs(output); - }); -}); - -// -on('change:habitatclear', function() { - setAttrs({ - habitat1code: 0, - habitat2code: 0, - habitat3code: 0, - habitat4code: 0, - habitat5code: 0, - habitat6code: 0, - habitat7code: 0, - habitat8code: 0, - habitat9code: 0, - habitat10code: 0, - habitat11code: 0, - habitat12code: 0, - habitatclear: 0 - }); -}); - -// -on('change:spfeaturesclear', function() { - setAttrs({ - spfeatures1code: 0, - spfeatures2code: 0, - spfeatures3code: 0, - spfeatures4code: 0, - spfeatures5code: 0, - spfeatures6code: 0, - spfeatures7code: 0, - spfeatures8code: 0, - spfeatures9code: 0, - spfeatures10code: 0, - spfeatures11code: 0, - spfeatures12code: 0, - spfeaturesclear: 0 - }); -}); - -// -on('change:watersourcesclear', function() { - setAttrs({ - watersources1code: 0, - watersources2code: 0, - watersources3code: 0, - watersources4code: 0, - watersources5code: 0, - watersources6code: 0, - watersources7code: 0, - watersources8code: 0, - watersources9code: 0, - watersources10code: 0, - watersources11code: 0, - watersources12code: 0, - watersourcesclear: 0 - }); -}); - -// -on('change:terrainclear', function() { - setAttrs({ - terrain1code: 0, - terrain2code: 0, - terrain3code: 0, - terrain4code: 0, - terrain5code: 0, - terrain6code: 0, - terrainclear: 0 - }); -}); - -// -on('change:vegetationclear', function() { - setAttrs({ - vegetation1code: 0, - vegetation2code: 0, - vegetation3code: 0, - vegetation4code: 0, - vegetation5code: 0, - vegetation6code: 0, - vegetation7code: 0, - vegetation8code: 0, - vegetationclear: 0 - }); -}); - - -// -on('change:npcimportcheckbox', function(){ -//console.log('------------entering NPC Import change---------------'); - getAttrs(['npcinput','npcimportcheckbox'], function(text) { - if(text.npcimportcheckbox=='1'){ - var goodcode=true; - var error=''; - //console.log('------------checkbox is 1---------------'); - try{ - var npcinputfile=JSON.parse(text.npcinput); - }catch(err){ - goodcode=false; - } - if(goodcode){ - var attributes={}; - try{ - if(npcinputfile.category!=null) - attributes.npccategory=npcinputfile.category; - if(npcinputfile.type!=null) - attributes.type=npcinputfile.type; - if(npcinputfile.class!=null) - attributes.class=npcinputfile.class; - if(npcinputfile.level!=null) - attributes.npclevel=npcinputfile.level; - if(npcinputfile.levelcode!=null) - attributes.levelcode=npcinputfile.levelcode; - if(npcinputfile.carrycapacity!=null) - attributes.npccarrycapacity=npcinputfile.carrycapacity; - if(npcinputfile.ridingbonus!=null) - attributes.npcridingbonus=npcinputfile.ridingbonus; - if(npcinputfile.description!=null) - attributes.npcdescription=npcinputfile.description; - if(npcinputfile.lifestyle!=null) - attributes.npclifestyle=npcinputfile.lifestyle; - if(npcinputfile.combat!=null) - attributes.npccombatnotes=npcinputfile.combat; - if(npcinputfile.background!=null) - attributes.npcbackgroundnotes=npcinputfile.background; - if(npcinputfile.observations!=null) - attributes.npcobservationsnotes=npcinputfile.observations; - if(npcinputfile.notes!=null) - attributes.npcothernotes=npcinputfile.notes; - if(npcinputfile.numenc!=null) - attributes.npcnumenc=npcinputfile.numenc; - if(npcinputfile.height!=null) - attributes.npcheight=npcinputfile.height; - if(npcinputfile.offspring!=null) - attributes.npcoffspring=npcinputfile.offspring; - if(npcinputfile.treasure!=null){ - attributes.treasurecode=npcinputfile.treasure; - } - if(npcinputfile.bonusxp!=null){ - if(npcinputfile.bonusxp=='-'){ - attributes.bonusxpcode=' --(1-2)/ --(3)/ --(5)/ --(7)/ --(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='A'){ - attributes.bonusxpcode=' 50(1-2)/ 40(3)/ 30(5)/ 20(7)/ 10(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='B'){ - attributes.bonusxpcode=' 75(1-2)/ 60(3)/ 50(5)/ 40(7)/ 30(9)/ 20(11)/ 10(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - }else if(npcinputfile.bonusxp=='C'){ - attributes.bonusxpcode=' 100(1-2)/ 95(3)/ 90(5)/ 85(7)/ 80(9)/ 75(11)/ 70(13)/ 65(15)/ 60(17)/ 55(19)/ 50(21+)'; - }else if(npcinputfile.bonusxp=='D'){ - attributes.bonusxpcode=' 200(1-2)/ 190(3)/ 180(5)/ 170(7)/ 160(9)/ 150(11)/ 140(13)/ 130(15)/ 120(17)/ 110(19)/ 100(21+)'; - }else if(npcinputfile.bonusxp=='E'){ - attributes.bonusxpcode=' 400(1-2)/ 380(3)/ 360(5)/ 340(7)/ 320(9)/ 300(11)/ 280(13)/ 260(15)/ 240(17)/ 220(19)/ 210(21+)'; - }else if(npcinputfile.bonusxp=='F'){ - attributes.bonusxpcode=' 800(1-2)/ 760(3)/ 720(5)/ 680(7)/ 640(9)/ 600(11)/ 560(13)/ 520(15)/ 480(17)/ 440(19)/ 400(21+)'; - }else if(npcinputfile.bonusxp=='G'){ - attributes.bonusxpcode='1200(1-2)/ 1140(3)/ 1080(5)/ 1020(7)/ 960(9)/ 900(11)/ 840(13)/ 780(15)/ 720(17)/ 660(19)/ 600(21+)'; - }else if(npcinputfile.bonusxp=='H'){ - attributes.bonusxpcode='1600(1-2)/ 1520(3)/ 1440(5)/ 1360(7)/ 1280(9)/ 1200(11)/ 1120(13)/ 1040(15)/ 960(17)/ 880(19)/ 800(21+)'; - }else if(npcinputfile.bonusxp=='I'){ - attributes.bonusxpcode='2000(1-2)/ 1900(3)/ 1800(5)/ 1700(7)/ 1600(9)/ 1500(11)/ 1400(13)/ 1300(15)/ 1200(17)/ 1100(19)/ 1000(21+)'; - }else if(npcinputfile.bonusxp=='J'){ - attributes.bonusxpcode='3000(1-2)/ 2850(3)/ 2700(5)/ 2550(7)/ 2400(9)/ 2250(11)/ 2100(13)/ 1950(15)/ 1800(17)/ 1650(19)/ 1500(21+)'; - }else if(npcinputfile.bonusxp=='K'){ - attributes.bonusxpcode='4000(1-2)/ 3800(3)/ 3600(5)/ 3400(7)/ 3200(9)/ 3000(11)/ 2800(13)/ 2600(15)/ 2400(17)/ 2200(19)/ 2000(21+)'; - }else if(npcinputfile.bonusxp=='L'){ - attributes.bonusxpcode='5000(1-2)/ 4750(3)/ 4500(5)/ 4250(7)/ 4000(9)/ 3750(11)/ 3500(13)/ 3250(15)/ 3000(17)/ 2750(19)/ 2500(21+)'; - }else { - attributes.bonusxpcode=' --(1-2)/ --(3)/ --(5)/ --(7)/ --(9)/ --(11)/ --(13)/ --(15)/ --(17)/ --(19)/ --(21+)'; - } - } - if(npcinputfile.outlook!=null){ - if(npcinputfile.outlook=='-'){ - attributes.outlookcode='---'; - }else if(npcinputfile.outlook=='---'){ - attributes.outlookcode='---'; - }else if(npcinputfile.outlook=='Aggres'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Agress'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Agress.'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Aggres.'){ - attributes.outlookcode='Aggressive and will attack if provoked or hungry.'; - }else if(npcinputfile.outlook=='Aloof'){ - attributes.outlookcode='Ignores other creatures unless interfered with or attacked.'; - }else if(npcinputfile.outlook=='Altru'){ - attributes.outlookcode='Altruistic, has an unselfish regard for the interests of others, often to the extent of risking own safety.'; - }else if(npcinputfile.outlook=='Altru.'){ - attributes.outlookcode='Altruistic, has an unselfish regard for the interests of others, often to the extent of risking own safety.'; - }else if(npcinputfile.outlook=='Belig'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Belig.'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Bellig'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Bellig.'){ - attributes.outlookcode='Belligerent, often attacks without provocation.'; - }else if(npcinputfile.outlook=='Berserk'){ - attributes.outlookcode='Attacks closest living creature until it is destroyed.'; - }else if(npcinputfile.outlook=='Carefree'){ - attributes.outlookcode='Does not believe danger or misfortune exists for it.'; - }else if(npcinputfile.outlook=='Cruel'){ - attributes.outlookcode='Not only hostile, but delights in death, pain, and suffering.'; - }else if(npcinputfile.outlook=='Domin'){ - attributes.outlookcode='Desires power, attempts to control or dominate other creatures.'; - }else if(npcinputfile.outlook=='Domin.'){ - attributes.outlookcode='Desires power, attempts to control or dominate other creatures.'; - }else if(npcinputfile.outlook=='Good'){ - attributes.outlookcode='Opposed to those who are evil(cruel, hostile, belligerent, etc); supportive of those who are also good.'; - }else if(npcinputfile.outlook=='Greedy'){ - attributes.outlookcode='Will attack or attempt to steal from other creatures if risk does not seem too high.'; - }else if(npcinputfile.outlook=='Hostile'){ - attributes.outlookcode='Normally attacks other creatures on sight.'; - }else if(npcinputfile.outlook=='Hungry'){ - attributes.outlookcode='If hungry, will attack anything edible; otherwise normal.'; - }else if(npcinputfile.outlook=='Inquis'){ - attributes.outlookcode='Inquisitive and curious; will approach and examine unusual situations.'; - }else if(npcinputfile.outlook=='Inquis.'){ - attributes.outlookcode='Inquisitive and curious; will approach and examine unusual situations.'; - }else if(npcinputfile.outlook=='Jumpy'){ - attributes.outlookcode='Normally bolts at any sign of other creatures.'; - }else if(npcinputfile.outlook=='Mission'){ - attributes.outlookcode='Created with a specific purpose or mission.'; - }else if(npcinputfile.outlook=='Normal'){ - attributes.outlookcode='Watches and is wary of other creatures; will sometimes attack if hungry.'; - }else if(npcinputfile.outlook=='Passive'){ - attributes.outlookcode='Ignores the presence of other creatures unless threatened.'; - }else if(npcinputfile.outlook=='Playful'){ - attributes.outlookcode='Mischievous but playful; will attempt to play with or play pranks on other creatures.'; - }else if(npcinputfile.outlook=='Protect'){ - attributes.outlookcode='Protective of a thing, place, other creature, etc.'; - }else if(npcinputfile.outlook=='Timid'){ - attributes.outlookcode='Skittish around other creatures, runs at the slightest hint of danger.'; - }else if(npcinputfile.outlook=='Varies'){ - attributes.outlookcode='Varies by individual.'; - }else if(npcinputfile.outlook=='Special'){ - attributes.outlookcode='See description.'; - }else { - attributes.outlookcode='Unknown'; - } - } - if(npcinputfile.iq!=null){ - if(npcinputfile.iq=='NO'){ - attributes.iqcode='None; Animal Instincts'; - }else if(npcinputfile.iq=='VL'){ - attributes.iqcode='Very Low; Re/Me=1-5'; - }else if(npcinputfile.iq=='LO'){ - attributes.iqcode='Low; Re/Me=3-12'; - }else if(npcinputfile.iq=='LI'){ - attributes.iqcode='Little; Re/Me=7-25'; - }else if(npcinputfile.iq=='IN'){ - attributes.iqcode='Inferior; Re/Me=13-40'; - }else if(npcinputfile.iq=='MD'){ - attributes.iqcode='Mediocre; Re/Me=23-50'; - }else if(npcinputfile.iq=='AV'){ - attributes.iqcode='Average; Re/Me=35-65'; - }else if(npcinputfile.iq=='AA'){ - attributes.iqcode='Above Average; Re/Me=50-77'; - }else if(npcinputfile.iq=='SU'){ - attributes.iqcode='Superior; Re/Me=60-86'; - }else if(npcinputfile.iq=='HI'){ - attributes.iqcode='High; Re/Me=80-98'; - }else if(npcinputfile.iq=='VH'){ - attributes.iqcode='Very High; Re/Me=94-99'; - }else if(npcinputfile.iq=='EX'){ - attributes.iqcode='Exceptional; Re/Me=100-102'; - }else if(npcinputfile.iq=='*'){ - attributes.iqcode='*'; - }else { - attributes.iqcode='Unknown'; - } - } - if(npcinputfile.habitat!=null){ - if(npcinputfile.habitat.includes('-')){ - attributes.habitat1code='1'; - }else if(npcinputfile.habitat.includes('ø')){ - attributes.habitat2code='1'; - }else if(npcinputfile.habitat.includes('(')){ - attributes.habitat3code='1'; - attributes.habitat4code='1'; - attributes.habitat5code='1'; - attributes.habitat6code='1'; - attributes.habitat7code='1'; - attributes.habitat8code='1'; - attributes.habitat9code='1'; - attributes.habitat10code='1'; - attributes.habitat11code='1'; - attributes.habitat12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.habitat.includes('a')) - attributes.habitat5code=state; - if(npcinputfile.habitat.includes('c')) - attributes.habitat11code=state; - if(npcinputfile.habitat.includes('f')) - attributes.habitat12code=state; - if(npcinputfile.habitat.includes('h')) - attributes.habitat3code=state; - if(npcinputfile.habitat.includes('k')) - attributes.habitat9code=state; - if(npcinputfile.habitat.includes('m')) - attributes.habitat7code=state; - if(npcinputfile.habitat.includes('n')) - attributes.habitat4code=state; - if(npcinputfile.habitat.includes('s')) - attributes.habitat8code=state; - if(npcinputfile.habitat.includes('t')) - attributes.habitat10code=state; - if(npcinputfile.habitat.includes('w')) - attributes.habitat6code=state; - } - if(npcinputfile.specialfeatures!=null){ - if(npcinputfile.specialfeatures.includes('-')){ - attributes.spfeatures1code='1'; - }else if(npcinputfile.specialfeatures.includes('ø')){ - attributes.spfeatures2code='1'; - }else if(npcinputfile.specialfeatures.includes('(')){ - attributes.spfeatures3code='1'; - attributes.spfeatures4code='1'; - attributes.spfeatures5code='1'; - attributes.spfeatures6code='1'; - attributes.spfeatures7code='1'; - attributes.spfeatures8code='1'; - attributes.spfeatures9code='1'; - attributes.spfeatures10code='1'; - attributes.spfeatures11code='1'; - attributes.spfeatures12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.specialfeatures.includes('E')) - attributes.spfeatures3code=state; - if(npcinputfile.specialfeatures.includes('K')) - attributes.spfeatures4code=state; - if(npcinputfile.specialfeatures.includes('N')) - attributes.spfeatures5code=state; - if(npcinputfile.specialfeatures.includes('V')) - attributes.spfeatures6code=state; - if(npcinputfile.specialfeatures.includes('X')) - attributes.spfeatures7code=state; - if(npcinputfile.specialfeatures.includes('Y')) - attributes.spfeatures8code=state; - if(npcinputfile.specialfeatures.includes('†')) - attributes.spfeatures9code=state; - if(npcinputfile.specialfeatures.includes('@')) - attributes.spfeatures10code=state; - if(npcinputfile.specialfeatures.includes('§')) - attributes.spfeatures11code=state; - if(npcinputfile.specialfeatures.includes('#')) - attributes.spfeatures12code=state; - } - if(npcinputfile.watersources!=null){ - if(npcinputfile.watersources.includes('-')){ - attributes.watersources1code='1'; - }else if(npcinputfile.watersources.includes('ø')){ - attributes.watersources2code='1'; - }else if(npcinputfile.watersources.includes('(')){ - attributes.watersources3code='1'; - attributes.watersources4code='1'; - attributes.watersources5code='1'; - attributes.watersources6code='1'; - attributes.watersources7code='1'; - attributes.watersources8code='1'; - attributes.watersources9code='1'; - attributes.watersources10code='1'; - attributes.watersources11code='1'; - attributes.watersources12code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.watersources.includes('B')) - attributes.watersources3code=state; - if(npcinputfile.watersources.includes('F')) - attributes.watersources4code=state; - if(npcinputfile.watersources.includes('G')) - attributes.watersources5code=state; - if(npcinputfile.watersources.includes('I')) - attributes.watersources6code=state; - if(npcinputfile.watersources.includes('L')) - attributes.watersources7code=state; - if(npcinputfile.watersources.includes('M')) - attributes.watersources8code=state; - if(npcinputfile.watersources.includes('O')) - attributes.watersources9code=state; - if(npcinputfile.watersources.includes('Q')) - attributes.watersources10code=state; - if(npcinputfile.watersources.includes('S')) - attributes.watersources11code=state; - if(npcinputfile.watersources.includes('Z')) - attributes.watersources12code=state; - } - if(npcinputfile.terrain!=null){ - if(npcinputfile.terrain.includes('-')){ - attributes.terrain1code='1'; - }else if(npcinputfile.terrain.includes('ø')){ - attributes.terrain2code='1'; - }else if(npcinputfile.terrain.includes('(')){ - attributes.terrain3code='1'; - attributes.terrain4code='1'; - attributes.terrain5code='1'; - attributes.terrain6code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.terrain.includes('A')) - attributes.terrain3code=state; - if(npcinputfile.terrain.includes('R')) - attributes.terrain4code=state; - if(npcinputfile.terrain.includes('U')) - attributes.terrain5code=state; - if(npcinputfile.terrain.includes('W')) - attributes.terrain6code=state; - } - if(npcinputfile.vegetation!=null){ - if(npcinputfile.vegetation.includes('-')){ - attributes.vegetation1code='1'; - }else if(npcinputfile.vegetation.includes('ø')){ - attributes.vegetation2code='1'; - }else if(npcinputfile.vegetation.includes('(')){ - attributes.vegetation3code='1'; - attributes.vegetation4code='1'; - attributes.vegetation5code='1'; - attributes.vegetation6code='1'; - attributes.vegetation7code='1'; - attributes.vegetation8code='1'; - state='0'; - }else { - state='1'; - } - if(npcinputfile.vegetation.includes('C')) - attributes.vegetation3code=state; - if(npcinputfile.vegetation.includes('D')) - attributes.vegetation4code=state; - if(npcinputfile.vegetation.includes('H')) - attributes.vegetation5code=state; - if(npcinputfile.vegetation.includes('J')) - attributes.vegetation6code=state; - if(npcinputfile.vegetation.includes('P')) - attributes.vegetation7code=state; - if(npcinputfile.vegetation.includes('T')) - attributes.vegetation8code=state; - } - if(npcinputfile.frequency!=null){ - if(npcinputfile.frequency=='1'){ - attributes.frequencycode='Hunting modifier=+30; Frequency Occurring=100%'; - }else if(npcinputfile.frequency=='2'){ - attributes.frequencycode='Hunting modifier=+20; Frequency Occurring=90%'; - }else if(npcinputfile.frequency=='3'){ - attributes.frequencycode='Hunting modifier=+10; Frequency Occurring=75%'; - }else if(npcinputfile.frequency=='4'){ - attributes.frequencycode='Hunting modifier=+0; Frequency Occurring=50%'; - }else if(npcinputfile.frequency=='5'){ - attributes.frequencycode='Hunting modifier=-10; Frequency Occurring=40%'; - }else if(npcinputfile.frequency=='6'){ - attributes.frequencycode='Hunting modifier=-20; Frequency Occurring=30%'; - }else if(npcinputfile.frequency=='7'){ - attributes.frequencycode='Hunting modifier=-30; Frequency Occurring=20%'; - }else if(npcinputfile.frequency=='8'){ - attributes.frequencycode='Hunting modifier=-50; Frequency Occurring=9%'; - }else if(npcinputfile.frequency=='9'){ - attributes.frequencycode='Hunting modifier=-70; Frequency Occurring=4%'; - }else { - attributes.frequencycode='Unknown'; - } - } - attributes.frequency=npcinputfile.frequency; - if(npcinputfile.size!=null) - attributes.npcsize=npcinputfile.size; - if(npcinputfile.basemove!=null) - attributes.npcbmmr=npcinputfile.basemove; - if(npcinputfile.maxpace!=null){ - if(npcinputfile.maxpace=='Walk'){ - attributes.npcmaxpace='1'; - }else if(npcinputfile.maxpace=='Jog'){ - attributes.npcmaxpace='1.5'; - }else if(npcinputfile.maxpace=='Run'){ - attributes.npcmaxpace='2'; - }else if(npcinputfile.maxpace=='Spt'){ - attributes.npcmaxpace='3'; - }else if(npcinputfile.maxpace=='FSpt'){ - attributes.npcmaxpace='4'; - }else if(npcinputfile.maxpace=='Dash'){ - attributes.npcmaxpace='5'; - }else if(npcinputfile.maxpace=='Var'){ - attributes.npcmaxpace='0 [varies]'; - }else { - attributes.npcmaxpace='Unknown'; - } - } - if(npcinputfile.mmbonus!=null) - attributes.npcmmbonus=npcinputfile.mmbonus; - if(npcinputfile.ms!=null){ - if(npcinputfile.ms=='IN'){ - attributes.npcms='-25'; - }else if(npcinputfile.ms=='CR'){ - attributes.npcms='-20'; - }else if(npcinputfile.ms=='VS'){ - attributes.npcms='-10'; - }else if(npcinputfile.ms=='SL'){ - attributes.npcms='0'; - }else if(npcinputfile.ms=='MD'){ - attributes.npcms='10'; - }else if(npcinputfile.ms=='MF'){ - attributes.npcms='20'; - }else if(npcinputfile.ms=='FA'){ - attributes.npcms='30'; - }else if(npcinputfile.ms=='VF'){ - attributes.npcms='40'; - }else if(npcinputfile.ms=='BF'){ - attributes.npcms='50'; - }else { - attributes.npcms='0.5'; - } - } - if(npcinputfile.aq!=null){ - if(npcinputfile.aq=='IN'){ - attributes.npcaq='-16'; - }else if(npcinputfile.aq=='CR'){ - attributes.npcaq='-12'; - }else if(npcinputfile.aq=='VS'){ - attributes.npcaq='-8'; - }else if(npcinputfile.aq=='SL'){ - attributes.npcaq='-4'; - }else if(npcinputfile.aq=='MD'){ - attributes.npcaq='0'; - }else if(npcinputfile.aq=='MF'){ - attributes.npcaq='4'; - }else if(npcinputfile.aq=='FA'){ - attributes.npcaq='8'; - }else if(npcinputfile.aq=='VF'){ - attributes.npcaq='12'; - }else if(npcinputfile.aq=='BF'){ - attributes.npcaq='16'; - }else { - attributes.npcaq='0.5'; - } - } - if(npcinputfile.hits!=null){ - attributes.npchitpoints=npcinputfile.hits; - attributes.npchitpoints_max=npcinputfile.hits; - } - if(npcinputfile.hitcode!=null){ - if(npcinputfile.hitcode=='A'){ - attributes.npcbasehitscode='1'; - } else if(npcinputfile.hitcode=='B'){ - attributes.npcbasehitscode='2'; - } else if(npcinputfile.hitcode=='C'){ - attributes.npcbasehitscode='3'; - } else if(npcinputfile.hitcode=='D'){ - attributes.npcbasehitscode='4'; - } else if(npcinputfile.hitcode=='E'){ - attributes.npcbasehitscode='5'; - } else if(npcinputfile.hitcode=='F'){ - attributes.npcbasehitscode='6'; - } else if(npcinputfile.hitcode=='G'){ - attributes.npcbasehitscode='7'; - } else if(npcinputfile.hitcode=='H'){ - attributes.npcbasehitscode='8'; - } else { - attributes.npcbasehitscode='0'; - } - } - if(npcinputfile.crit!=null){ - if(npcinputfile.crit=='I'){ - attributes.npccritscode1='Decrease crit severity by 1 (A mod by -20; B becomes A, etc.).'; - } else if(npcinputfile.crit=='II'){ - attributes.npccritscode1='Decrease crit severity by 2 (A mod by -50; B by -20; C becomes A, etc).'; - } else if(npcinputfile.crit=='LA'){ - attributes.npccritscode1='Use Large Creature Critical Strike Table.'; - } else if(npcinputfile.crit=='SL'){ - attributes.npccritscode1='Use Super Large Creature Critical Strike Table.'; - } else if(npcinputfile.crit=='-'){ - attributes.npccritscode1='Normal crits.'; - } else { - attributes.npccritscode1='Normal crits.'; - } - } - if(npcinputfile.critcode!=null){ - if(npcinputfile.critcode=='-'){ - attributes.npccritscode2='---'; - } else if(npcinputfile.critcode=='@'){ - attributes.npccritscode2='Stun results do not affect creature.'; - } else if(npcinputfile.critcode=='#'){ - attributes.npccritscode2='Stun results and bleeders do not affect creature.'; - } else { - attributes.npccritscode2='---'; - } - } - if(npcinputfile.at!=null) - attributes.npcat=npcinputfile.at; - if(npcinputfile.db!=null) - attributes.npcdb=npcinputfile.db; - if(npcinputfile.othercombatinformation!=null) - attributes.npcspecialdefences=npcinputfile.othercombatinformation; - // <<<<<<<<<<<<<<<<<<<<<<<<<<< Attack Parsing Stuff >>>>>>>>>>>>>>>>>>>>>>>>>>> - if(npcinputfile.attack!=null) // old attack field - attributes.npcatts=npcinputfile.attack; - if(npcinputfile.attack1name!=null) - attributes.npcattack1name=npcinputfile.attack1name; - if(npcinputfile.attack1ob!=null) - attributes.npcattack1bonus=npcinputfile.attack1ob; - if(npcinputfile.attack1perc!=null) - attributes.npcattack1percent=npcinputfile.attack1perc; - if(npcinputfile.attack1type!=null){ - if(npcinputfile.attack1type=='Melee'){ - attributes.npcattack1select='npcmelee'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<@{npcattack1fumble}'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack1type=='Ranged'){ - attributes.npcattack1select='npcranged'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<@{npcattack1fumble}'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack1type=='Basic Spell'){ - attributes.npcattack1select='npcbasic'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100cf<2cs>96'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack1type=='Directed Spell'){ - attributes.npcattack1select='npcdirected'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack1attackcalc='@{npcattack1bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack1type=='Area Spell'){ - attributes.npcattack1select='npcarea'; - attributes.npcattack1type='[[@{npcattack1rolltype} +@{npcattack1attackcalc}]]'; - attributes.npcattack1rolltype='1d100cf<4cs>96'; - attributes.npcattack1attackcalc='@{npcattack1bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack1select='none'; - } - } - if(npcinputfile.attack2name!=null) - attributes.npcattack2name=npcinputfile.attack2name; - if(npcinputfile.attack2ob!=null) - attributes.npcattack2bonus=npcinputfile.attack2ob; - if(npcinputfile.attack2perc!=null) - attributes.npcattack2percent=npcinputfile.attack2perc; - if(npcinputfile.attack2type!=null){ - if(npcinputfile.attack2type=='Melee'){ - attributes.npcattack2select='npcmelee'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<@{npcattack2fumble}'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack2type=='Ranged'){ - attributes.npcattack2select='npcranged'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<@{npcattack2fumble}'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack2type=='Basic Spell'){ - attributes.npcattack2select='npcbasic'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100cf<2cs>96'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack2type=='Directed Spell'){ - attributes.npcattack2select='npcdirected'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack2attackcalc='@{npcattack2bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack2type=='Area Spell'){ - attributes.npcattack2select='npcarea'; - attributes.npcattack2type='[[@{npcattack2rolltype} +@{npcattack2attackcalc}]]'; - attributes.npcattack2rolltype='1d100cf<4cs>96'; - attributes.npcattack2attackcalc='@{npcattack2bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack2select='none'; - } - } - if(npcinputfile.attack3name!=null) - attributes.npcattack3name=npcinputfile.attack3name; - if(npcinputfile.attack3ob!=null) - attributes.npcattack3bonus=npcinputfile.attack3ob; - if(npcinputfile.attack3perc!=null) - attributes.npcattack3percent=npcinputfile.attack3perc; - if(npcinputfile.attack3type!=null){ - if(npcinputfile.attack3type=='Melee'){ - attributes.npcattack3select='npcmelee'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<@{npcattack3fumble}'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack3type=='Ranged'){ - attributes.npcattack3select='npcranged'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<@{npcattack3fumble}'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack3type=='Basic Spell'){ - attributes.npcattack3select='npcbasic'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100cf<2cs>96'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack3type=='Directed Spell'){ - attributes.npcattack3select='npcdirected'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack3attackcalc='@{npcattack3bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack3type=='Area Spell'){ - attributes.npcattack3select='npcarea'; - attributes.npcattack3type='[[@{npcattack3rolltype} +@{npcattack3attackcalc}]]'; - attributes.npcattack3rolltype='1d100cf<4cs>96'; - attributes.npcattack3attackcalc='@{npcattack3bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack3select='none'; - } - } - if(npcinputfile.attack4name!=null) - attributes.npcattack4name=npcinputfile.attack4name; - if(npcinputfile.attack4ob!=null) - attributes.npcattack4bonus=npcinputfile.attack4ob; - if(npcinputfile.attack4perc!=null) - attributes.npcattack4percent=npcinputfile.attack4perc; - if(npcinputfile.attack4type!=null){ - if(npcinputfile.attack4type=='Melee'){ - attributes.npcattack4select='npcmelee'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<@{npcattack4fumble}'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack4type=='Ranged'){ - attributes.npcattack4select='npcranged'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<@{npcattack4fumble}'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack4type=='Basic Spell'){ - attributes.npcattack4select='npcbasic'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100cf<2cs>96'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack4type=='Directed Spell'){ - attributes.npcattack4select='npcdirected'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack4attackcalc='@{npcattack4bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack4type=='Area Spell'){ - attributes.npcattack4select='npcarea'; - attributes.npcattack4type='[[@{npcattack4rolltype} +@{npcattack4attackcalc}]]'; - attributes.npcattack4rolltype='1d100cf<4cs>96'; - attributes.npcattack4attackcalc='@{npcattack4bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack4select='none'; - } - } - if(npcinputfile.attack5name!=null) - attributes.npcattack5name=npcinputfile.attack5name; - if(npcinputfile.attack5ob!=null) - attributes.npcattack5bonus=npcinputfile.attack5ob; - if(npcinputfile.attack5perc!=null) - attributes.npcattack5percent=npcinputfile.attack5perc; - if(npcinputfile.attack5type!=null){ - if(npcinputfile.attack5type=='Melee'){ - attributes.npcattack5select='npcmelee'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<@{npcattack5fumble}'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack5type=='Ranged'){ - attributes.npcattack5select='npcranged'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<@{npcattack5fumble}'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack5type=='Basic Spell'){ - attributes.npcattack5select='npcbasic'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100cf<2cs>96'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack5type=='Directed Spell'){ - attributes.npcattack5select='npcdirected'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack5attackcalc='@{npcattack5bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack5type=='Area Spell'){ - attributes.npcattack5select='npcarea'; - attributes.npcattack5type='[[@{npcattack5rolltype} +@{npcattack5attackcalc}]]'; - attributes.npcattack5rolltype='1d100cf<4cs>96'; - attributes.npcattack5attackcalc='@{npcattack5bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack5select='none'; - } - } - if(npcinputfile.attack6name!=null) - attributes.npcattack6name=npcinputfile.attack6name; - if(npcinputfile.attack6ob!=null) - attributes.npcattack6bonus=npcinputfile.attack6ob; - if(npcinputfile.attack6perc!=null) - attributes.npcattack6percent=npcinputfile.attack6perc; - if(npcinputfile.attack6type!=null){ - if(npcinputfile.attack6type=='Melee'){ - attributes.npcattack6select='npcmelee'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<@{npcattack6fumble}'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack6type=='Ranged'){ - attributes.npcattack6select='npcranged'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<@{npcattack6fumble}'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack6type=='Basic Spell'){ - attributes.npcattack6select='npcbasic'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100cf<2cs>96'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack6type=='Directed Spell'){ - attributes.npcattack6select='npcdirected'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack6attackcalc='@{npcattack6bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack6type=='Area Spell'){ - attributes.npcattack6select='npcarea'; - attributes.npcattack6type='[[@{npcattack6rolltype} +@{npcattack6attackcalc}]]'; - attributes.npcattack6rolltype='1d100cf<4cs>96'; - attributes.npcattack6attackcalc='@{npcattack6bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack6select='none'; - } - } - if(npcinputfile.attack7name!=null) - attributes.npcattack7name=npcinputfile.attack7name; - if(npcinputfile.attack7ob!=null) - attributes.npcattack7bonus=npcinputfile.attack7ob; - if(npcinputfile.attack7perc!=null) - attributes.npcattack7percent=npcinputfile.attack7perc; - if(npcinputfile.attack7type!=null){ - if(npcinputfile.attack7type=='Melee'){ - attributes.npcattack7select='npcmelee'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<@{npcattack7fumble}'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack7type=='Ranged'){ - attributes.npcattack7select='npcranged'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<@{npcattack7fumble}'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack7type=='Basic Spell'){ - attributes.npcattack7select='npcbasic'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100cf<2cs>96'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack7type=='Directed Spell'){ - attributes.npcattack7select='npcdirected'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack7attackcalc='@{npcattack7bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack7type=='Area Spell'){ - attributes.npcattack7select='npcarea'; - attributes.npcattack7type='[[@{npcattack7rolltype} +@{npcattack7attackcalc}]]'; - attributes.npcattack7rolltype='1d100cf<4cs>96'; - attributes.npcattack7attackcalc='@{npcattack7bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack7select='none'; - } - } - if(npcinputfile.attack8name!=null) - attributes.npcattack8name=npcinputfile.attack8name; - if(npcinputfile.attack8ob!=null) - attributes.npcattack8bonus=npcinputfile.attack8ob; - if(npcinputfile.attack8perc!=null) - attributes.npcattack8percent=npcinputfile.attack8perc; - if(npcinputfile.attack8type!=null){ - if(npcinputfile.attack8type=='Melee'){ - attributes.npcattack8select='npcmelee'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<@{npcattack8fumble}'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]-(100-?{% Activity used on attack|100})[% Action]'; - } else if(npcinputfile.attack8type=='Ranged'){ - attributes.npcattack8select='npcranged'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<@{npcattack8fumble}'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[Att Bonus]+?{Position Bonus?|0}[Position]+?{Status Bonus/Penalty?|0}[Status]+?{Parry(db adjust: should be negative)|0}[Parry]+?{Range Modification|0}[Range]-@{dbmisspenworn}[Missile Penalty for arm covering]-(60-?{% Activity used on attack|60})[% Action]'; - } else if(npcinputfile.attack8type=='Basic Spell'){ - attributes.npcattack8select='npcbasic'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100cf<2cs>96'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[List Ranks]+?{Special Item Bonus?|0}+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}'; - } else if(npcinputfile.attack8type=='Directed Spell'){ - attributes.npcattack8select='npcdirected'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100!>@{oeuproll}cf<2cs=100'; - attributes.npcattack8attackcalc='@{npcattack8bonus}Att Bonus]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]'; - } else if(npcinputfile.attack8type=='Area Spell'){ - attributes.npcattack8select='npcarea'; - attributes.npcattack8type='[[@{npcattack8rolltype} +@{npcattack8attackcalc}]]'; - attributes.npcattack8rolltype='1d100cf<4cs>96'; - attributes.npcattack8attackcalc='@{npcattack8bonus}[List Ranks]+?{Special Item Bonus?|0}[Special Item]+?{Status Bonus/Penalty?|0}[Status]+?{Range Modification|0}[Range]+20*?{Center point of spell?(1=yes)|0}[Spell Center]'; - } else { - attributes.npcattack8select='none'; - } - } - - if(npcinputfile.creature!=null){ - attributes.npcname=npcinputfile.creature; - attributes.character_name=npcinputfile.creature; - } - - attributes.npcimportcheckbox='0'; - attributes.npcinput=''; - }catch(err){ - goodcode=false; - error='Error with Character Info'; - } - try{ - setAttrs(attributes); - }catch(err){ - setAttrs({ - npcinput:'Error setting Attributes', - npcimportcheckbox:'0', - warningcheckbox:'0' - }); - } - }else{ - setAttrs({ - npcinput:'Error: invalid Structure', - npcimportcheckbox:'0' //, <-- last item should not have a comma - // warningcheckbox:"0" - }); - } - } - }); -}); - - - diff --git a/Serenity/serenity.css b/Serenity/serenity.css index 390128ea28..f5a220918c 100644 --- a/Serenity/serenity.css +++ b/Serenity/serenity.css @@ -18,7 +18,7 @@ margin: 0; font-family: "Papyrus", serif; border-collapse: separate; - line-height: normal; + line-height: 1.42857143; vertical-align: middle; } @@ -57,7 +57,7 @@ top: -15px; left: 10px; padding: 0 5px; - background-color: white; + background-color: white !important; text-align: left; font-weight: bold; font-size: 125%; @@ -80,6 +80,12 @@ margin-bottom: 15px; } +@media print { + .sheet-serenity-charactersheet .sheet-serenity-float-group { + page-break-inside: avoid; + } +} + .sheet-serenity-charactersheet .sheet-serenity-asset-specialization, .sheet-serenity-charactersheet .sheet-serenity-complication-specialization { display: inline-block; @@ -206,20 +212,20 @@ .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-stuns-taken { border-radius: 30px 0 0 0; - background-color: #e8af20; - background-image: linear-gradient(left, #e8af20, #c93f00); + background-color: #e8af20 !important; + background-image: linear-gradient(left, #e8af20, #c93f00) !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-wounds-taken { border-radius: 0 0 30px 0; - background-color: #c93f00; - background-image: linear-gradient(left, #c93f00, #e8af20); + background-color: #c93f00 !important; + background-image: linear-gradient(left, #c93f00, #e8af20) !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-shocks-taken { border-radius: 0 0 30px 30px; - background-color: #cedce7; - background-image: linear-gradient(to right, #cedce7, #596a72); + background-color: #cedce7 !important; + background-image: linear-gradient(to right, #cedce7, #596a72) !important; display: flex; width: 475px; padding-left: 15px; @@ -526,7 +532,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; font-size: 150%; font-weight: bold; @@ -537,7 +543,7 @@ border: none; box-shadow: none; content: 'S'; - background: #e8af20; + background: #e8af20 !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-stuns-taken input+span:before { @@ -555,7 +561,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; } @@ -578,7 +584,7 @@ .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked:not(.sheet-serenity-stun0).sheet-serenity-stun+span:before, .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked.sheet-serenity-stun~input:not(.sheet-serenity-stun0).sheet-serenity-stun+span:before { - background-color: red; + background-color: red !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-wound0 { @@ -881,7 +887,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; font-size: 150%; font-weight: bold; @@ -892,7 +898,7 @@ border: none; box-shadow: none; content: 'W'; - background: #e8af20; + background: #e8af20 !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-wounds-taken input+span:before { @@ -910,7 +916,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; } @@ -933,7 +939,7 @@ .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked:not(.sheet-serenity-wound0).sheet-serenity-wound+span:before, .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked.sheet-serenity-wound~input:not(.sheet-serenity-wound0).sheet-serenity-wound+span:before { - background-color: red; + background-color: red !important; } .sheet-serenity-charactersheet .sheet-character-life-points .sheet-serenity-shock0 { @@ -1113,7 +1119,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; width: 24px; height: 24px; @@ -1126,8 +1132,8 @@ border: none; box-shadow: none; content: 'Shock'; - background-color: #cedce7; - background-image: linear-gradient(to right, #cedce7, #c0ccd6); + background-color: #cedce7 !important; + background-image: linear-gradient(to right, #cedce7, #c0ccd6) !important; font-size: 100%; top: 0; right: 25px; @@ -1146,7 +1152,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; width: 24px; height: 24px; @@ -1171,7 +1177,7 @@ .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked:not(.sheet-serenity-shock0).sheet-serenity-shock+span:before, .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"]:checked.sheet-serenity-shock~input:not(.sheet-serenity-shock0).sheet-serenity-shock+span:before { - background-color: red; + background-color: red !important; } .sheet-serenity-charactersheet .sheet-character-life-points input[type="radio"].sheet-serenity-shock0 { @@ -1223,13 +1229,29 @@ font-size: 60%; } +.sheet-serenity-charactersheet .sheet-serenity-advancement-points { + height: 55px; + width: 330px; + float: right; + margin-top: 15px; +} + +.sheet-serenity-charactersheet .sheet-serenity-advancement-points input { + width: 100%; +} + .sheet-serenity-charactersheet .sheet-serenity-plot-points { - height: 230px; + height: 160px; width: 330px; position: relative; float: right; } +.sheet-serenity-charactersheet .sheet-serenity-plot-points .sheet-serenity-plot-points-notes { + font-size: small; + padding: 10px; +} + .sheet-serenity-charactersheet .sheet-serenity-plot-points .sheet-serenity-plot-points-input { display: flex; flex-flow: row wrap; @@ -1405,7 +1427,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; font-family: "Papyrus", serif; font-weight: bold; @@ -1426,7 +1448,7 @@ bottom: 0; right: 0; cursor: pointer; - background-color: lightgrey; + background-color: lightgrey !important; box-shadow: 1px 1px 2px #333; } @@ -1448,36 +1470,17 @@ .sheet-serenity-charactersheet .sheet-serenity-plot-points input[type="radio"]:checked:not(.sheet-serenity-plotpoint0).sheet-serenity-plotpoint+span:before, .sheet-serenity-charactersheet .sheet-serenity-plot-points input[type="radio"]:checked.sheet-serenity-plotpoint~input:not(.sheet-serenity-plotpoint0).sheet-serenity-plotpoint+span:before { - background-color: #e8af20; + background-color: #e8af20 !important; } .sheet-serenity-charactersheet .sheet-serenity-plot-points .sheet-serenity-plotpoint0:checked+span:before { - background-color: darkgrey; + background-color: darkgrey !important; } .sheet-serenity-charactersheet .sheet-serenity-plot-points .sheet-serenity-plotpoint0:active+span:before { border: 2px inset grey; } -.sheet-serenity-charactersheet .sheet-serenity-plot-points table { - font-size: 10pt; - white-space: nowrap; - bottom: 0; - position: absolute; -} - -.sheet-serenity-charactersheet .sheet-serenity-plot-points td:first-child { - border-right: 1px solid grey; - padding-right: 5px; - padding-bottom: 5px; - text-align: right; -} - -.sheet-serenity-charactersheet .sheet-serenity-plot-points td:last-child { - padding-left: 2px; - text-align: left; -} - .sheet-serenity-charactersheet .sheet-character-skills { text-align: right; float: left; @@ -1709,6 +1712,7 @@ z-index: 1; text-align: left; font-size: 12pt; + font-weight: normal; /* vertically center */ top: 50%; -webkit-transform: translateY(-50%); @@ -1717,7 +1721,7 @@ width: 400px; padding: 10px; border-radius: 10px; - background: #111111; + background: #111111 !important; color: #CCC; opacity: 0; transition: 0.3s opacity; @@ -1730,7 +1734,7 @@ .sheet-serenity-charactersheet .sheet-serenity-tooltip .sheet-serenity-tooltip-text table { color: inherit; - margin: 5px; + margin: 5px auto; border-spacing: 0; } @@ -1744,6 +1748,7 @@ .sheet-serenity-charactersheet .sheet-serenity-tooltip .sheet-serenity-tooltip-text table th { text-align: center; + padding: 0 8px; } .sheet-serenity-charactersheet .sheet-serenity-tooltip .sheet-serenity-tooltip-text table tr:first-child td { diff --git a/Serenity/serenity.html b/Serenity/serenity.html index c1bb019788..7df8d9a15f 100644 --- a/Serenity/serenity.html +++ b/Serenity/serenity.html @@ -936,7 +936,35 @@
    - Plot Points + + Plot Points + + Plot Points are a way for major characters in the game to add a + little drama to the story. Plot Points can be used to improve the + odds for important actions, prevent someone from getting killed or + badly injured, or even used to alter the story. + + + + + + + + + + + + + + + + + + + +
    Reduce Damage+1 Step per Point / +1 LP after
    Add to Rolls+1 Step per Point / +1 to roll after
    Utilize AssetsSee Asset description, 1-6 Points
    Affect PlotGM discretion, can use 1-12 Points
    +
    +
    - - - - - - - - - - - - - - - - - - - -
    Reduce Damage+1 Step per Point / +1 LP after
    Add to Rolls+1 Step per Point / +1 to roll after
    Utilize AssetsSee Asset description, 1-6 Points
    Affect PlotGM discretion, can use 1-12 Points
    + +
    + Plot points above 6 are converted to Advancement points at the end + of each session. +
    +
    + +
    + + Advancement Points + + Advancement Points represent the accumulation of experience and + are the building blocks for improvement. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    DieSkill costAttribute cost
    d22–
    d44–
    d6624
    d8832
    d101040
    d121248
    d12 + d21456
    d12 + d41664
    +
    +
    + +
    + +
    diff --git a/Shadowrun Sixth World/.gitignore b/Shadowrun Sixth World/.gitignore new file mode 100644 index 0000000000..9331a439e8 --- /dev/null +++ b/Shadowrun Sixth World/.gitignore @@ -0,0 +1 @@ +Todo.txt diff --git a/Shadowrun Sixth World/CHANGELOG.md b/Shadowrun Sixth World/CHANGELOG.md index aec52a2d6c..fe9233429f 100644 --- a/Shadowrun Sixth World/CHANGELOG.md +++ b/Shadowrun Sixth World/CHANGELOG.md @@ -1,5 +1,19 @@ Change Log ============================================== +**2021-03-08** v.22 Chuz (James Culp) + Add Defense roll-button and DR roll-button to Core->Combat Info tab + Updated Skills to split Skills and Knowledge/Languages into separate tabs + Finished Magic->Spells, Preparations, Rituals, Adept Powers, Conjuring and Metamagic sections + Minor formatting changes to css and html + Bugfix DR not adding Body in + Bugfix calculations for Cold and Hot Sim initiative roll buttons + Bugfix Essence Mod not allowing a zero value + Bugfix Removed roll query from flat attribute rolls + Bugfix Added Athletics skill to ranged weapons + +**2021-03-03** Chuz (James Culp) + Included in roll20 repository for one-click access + **2021-02-28** Chuz (James Culp) Updated Social Tab, Contacts and SINs Changed the header Shadowrun logo to a smaller version, this may change again depending on feedback. diff --git a/Shadowrun Sixth World/README.md b/Shadowrun Sixth World/README.md index d912ffd02f..2bfa609552 100644 --- a/Shadowrun Sixth World/README.md +++ b/Shadowrun Sixth World/README.md @@ -4,25 +4,41 @@ Shadowrun Sixth World Character Sheet **`This is a work in progress.`** = -At this point only the PC sheet is functional and that is lacking some work in the Magic section. +At this point only the PC sheet is functional and that is lacking all work in the Matrix section. +Roll20 Forum Post: https://app.roll20.net/forum/post/9862344/shadowrun-sixth-world-character-sheet-for-shadowrun-sixth-world-6e TO DO = **`PC Sheet`** - - * Finish updating Rituals - * Finish updating Preparations - * Finish updating Adept Powers * Entire Matrix tab + * Add Mod inputs to the repeating skills to allow for temporary mods to skill based rolls. + * Add Armor Social Ratings from Firing Squad pg50 -**`Grunt Sheet`** - everything +**`Grunt Sheet`** + * everything -**`Host Sheet`** - everything +**`Host Sheet`** + * everything -**`Sprite Sheet`** - everything +**`Sprite Sheet`** + * everything + +**`Vehicle Sheet`** + * everything + + +**`Future Features Wishlist`** + * Extended Tests Roller? + * Make current "Modifiers" text parsed and used to apply modifiers directly to sheet attributes. For example having "Reaction: +1" in the Modifiers box would automatically apply +1 to the reaction attribute, thus affecting all rolls relying on that attribute. An advanced idea for this is to have checkboxes to indicate if these modifiers are active currently or not. I can see these being useful in Adept Powers, Augments, Equipment and possibly other areas. + * Add Autosofts to Vehicles tab + * Make Magic updated if Essence drops below it + * Add Magic AR to Metamagic Tab + * Armor Social Ratings (Firing Squad p50) + * Have Firing Mode automatically change how many rounds are used when firing. + * Add Mod inputs to the repeating skills to allow for temporary mods to skill based rolls. -**`Vehicle Sheet`** - everything diff --git a/Shadowrun Sixth World/Shadowrun6thEdition.css b/Shadowrun Sixth World/Shadowrun6thEdition.css index 28577aa39b..1ae54401f9 100644 --- a/Shadowrun Sixth World/Shadowrun6thEdition.css +++ b/Shadowrun Sixth World/Shadowrun6thEdition.css @@ -22,7 +22,7 @@ GLOBALS border-radius: 0.25em !important; border-right: 0.02em solid #333333; border-style: outset; } - button[name='roll_range_weapon'], button[name='roll_soak'], button[name='roll_melee_weapon'] { + button[name='roll_range_weapon'], button[name='roll_soak'], button[name='roll_defense'], button[name='roll_melee_weapon'], button[name='roll_spell'], button[name='roll_preparation'], button[name='roll_drain'], button[name='roll_ritual'], button[name='roll_conjuring'], button[name='roll_matrix_device_rating'], button[name='roll_matrix_attack'], button[name='roll_matrix_sleaze'], button[name='roll_matrix_data_processing'], button[name='roll_matrix_firewall'], button[name='roll_fade'] { color: #ee99ff; } button[specname=''] { display: none; } @@ -301,17 +301,8 @@ div.sheet-matrix-device .sheet-matrixFirewall { border: 3px solid; box-shadow: inset 0px 0px 3px 1px #040404; margin-left: -1%; - padding-left: 0.5%; - /***** DECORATIVE BOX THAT ADDS THE RED OUTLINE ON PC SHEET *****/ - /***** REPEATING CONTAINERS *****/ - /***** STATIC *****/ - /***** CORE *****/ - /***** SKILLS *****/ - /*** ARMS ****/ - /*** AUGS ****/ - /*** GEAR ****/ - /***** MAGIC *****/ - /*** MATRIX ****/ } + padding-left: 0.5%; } + .sheet-pc button > h2:hover, .sheet-pc button > span:hover, .sheet-pc label > button[type='roll']:hover, @@ -341,13 +332,13 @@ div.sheet-matrix-device .sheet-matrixFirewall { margin: 7px 0px -2px 0px; } .sheet-pc input { border-radius: 0px; } +/***** PLAYER DATA INPUTS *****/ .sheet-pc .sheet-tabs { grid-template-columns: 1fr 5em 1fr 5em 2.5em 5em 5em 5em 5em 5em 5em 5em; grid-column-gap: 0.25%; padding: 0px 1% 3% 1%; margin-top: 1%; - grid-row-gap: 10%; - /***** PLAYER DATA INPUTS *****/ } + grid-row-gap: 10%; } .sheet-pc .sheet-tabs button[type='roll'] { grid-area: 2 / 5 / 2 / 5; } .sheet-pc .sheet-tabs h1 { @@ -475,7 +466,6 @@ div.sheet-matrix-device .sheet-matrixFirewall { border-top-right-radius: 0px; border-top-left-radius: 10px; } .sheet-pc div.sheet-core { - /***** QUALITIES *****/ } .sheet-pc div.sheet-core div.sheet-armor-buttons { display: inline-block; font-size: 1.5em; @@ -489,14 +479,16 @@ div.sheet-matrix-device .sheet-matrixFirewall { color: #fff; } .sheet-pc div.sheet-core div.sheet-armor-buttons span { font-size: 1em; } + } - +/***** QUALITIES *****/ .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-htab input[type='radio'] { margin-right: -100px; width: 100px; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-header:nth-of-type(2) .sheet-htab input[type='radio'] { margin-right: -150px; width: 150px; } + .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality h2:nth-of-type(2) { text-align: center; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.sheet-headers { @@ -511,13 +503,13 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem div.sheet-collapse { grid-column: 1 / 7; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-collapse-flag { - grid-area: 1 / 4 / 1 / 5; } + grid-area: 1 / 5 / 1 / 6; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-flag .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, .repcontrol .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-collapse-flag + span.repcontrol_del { - grid-area: 1 / 4 / 1 / 5; } + grid-area: 1 / 5 / 1 / 6; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-settings-flag, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-settings-flag + span.sheet-pictos, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, @@ -531,10 +523,12 @@ div.sheet-matrix-device .sheet-matrixFirewall { .repcontrol .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-settings-flag + span.repcontrol_add:after, .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem input.sheet-settings-flag + span.repcontrol_del { - grid-area: 1 / 5 / 1 / 6; } + grid-area: 1 / 6 / 1 / 7; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-quality div.repitem div.sheet-settings { grid-column: 1 / 7; grid-template-columns: 1fr 3em 3em 1.25em 1.25em 1.25em; } + + .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-martial h2:nth-of-type(2) { text-align: center; } .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-martial div.sheet-headers { @@ -571,6 +565,10 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-core div.sheet-quality-box div.sheet-martial div.repitem div.sheet-settings { grid-column: 1 / 6; grid-template-columns: 2fr 1fr 1.5em 1em 1em; } + + + +/***** SKILLS *****/ .sheet-pc div.sheet-skill-box h2:nth-of-type(1n+2) { text-align: center; } .sheet-pc div.sheet-skill-box label { @@ -578,20 +576,18 @@ div.sheet-matrix-device .sheet-matrixFirewall { font-size: 0.8em; text-transform: capitalize; } .sheet-pc div.sheet-skill-box label[data-i18n-title='ratingmodifier'] { - grid-area: 1 / 3 / 1 / 7; + grid-area: 1 / 3 / 1 / 6; width: 100%; } - .sheet-pc div.sheet-skill-box label[data-i18n-title='type'] { - grid-area: 1 / 4 / 1 / 7; } .sheet-pc div.sheet-skill-box label[data-i18n-title='ratingmodifier'] input[type='number'] { width: 3em; } .sheet-pc div.sheet-skill-box label[data-i18n-title='specialization'] { padding-left: 10px; - grid-area: 3 / 1 / 3 / 7; } + grid-area: 3 / 1 / 3 / 6; } .sheet-pc div.sheet-skill-box label[data-i18n-title='expertise'] { padding-left: 20px; - grid-area: 4 / 1 / 4 / 7; } + grid-area: 4 / 1 / 4 / 6; } .sheet-pc div.sheet-skill-box label[data-i18n-title='notes'], .sheet-pc div.sheet-skill-box label textarea { - grid-area: 5 / 1 / 5 / 7; } + grid-area: 5 / 1 / 5 / 6; } .sheet-pc div.sheet-skill-box label > input { text-align: left; border-radius: 0px; @@ -599,47 +595,94 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-skill-box input[name='attr_rating_modifier'] { width: 3.5em; } .sheet-pc div.sheet-skill-box div.sheet-row-long { - grid-template-columns: 1fr 3em 5em 3em 1em 1em; + grid-template-columns: 1fr 3em 5em 1em 1em; padding: 1% 0.5%; width: 100%; } .sheet-pc div.sheet-skill-box div.sheet-row-long h3:nth-of-type(1n+2) { text-align: center; } - .sheet-pc div.sheet-skill-box div.repitem { - grid-template-columns: 1fr 3em 5em 3em 1em 1em; } - .sheet-pc div.sheet-skill-box div.repitem label[data-i18n-title='notes'], - .sheet-pc div.sheet-skill-box div.repitem h3[data-i18n='notes'], - .sheet-pc div.sheet-skill-box div.repitem div.sheet-collapse { - grid-column: 1 / 7; } - .sheet-pc div.sheet-skill-box div.repitem input.sheet-collapse-flag { + +/*** Skills ***/ + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem { + grid-template-columns: 1fr 3em 5em 1em 1em; } + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem label[data-i18n-title='notes'], + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem h3[data-i18n='notes'], + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem div.sheet-collapse { + grid-column: 1 / 6; } + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-collapse-flag { + grid-area: 1 / 4 / 1 / 5; } + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[type='checkbox'].sheet-collapse-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-collapse-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 5; } + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-settings-flag, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-settings-flag + span.sheet-pictos, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-settings-flag + span.repcontrol_add:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, + .itemcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input.sheet-settings-flag + span.repcontrol_del { grid-area: 1 / 5 / 1 / 6; } - .sheet-pc div.sheet-skill-box div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-skill-box div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.repitem input[type='checkbox'].sheet-collapse-flag + span, - .sheet-pc div.sheet-skill-box div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, - .sheet-settings-flag .sheet-pc div.sheet-skill-box div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, - .sheet-pc div.sheet-skill-box div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, - .repcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-skill-box div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-collapse-flag + span.repcontrol_del { - grid-area: 1 / 5 / 1 / 6; } - .sheet-pc div.sheet-skill-box div.repitem input.sheet-settings-flag, - .sheet-pc div.sheet-skill-box div.repitem input.sheet-settings-flag + span.sheet-pictos, - .sheet-pc div.sheet-skill-box div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, - .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.repitem input[type='checkbox'].sheet-settings-flag + span, - .sheet-pc div.sheet-skill-box div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, - .sheet-settings-flag .sheet-pc div.sheet-skill-box div.repitem input[type='checkbox'].sheet-settings-flag + span, - .sheet-pc div.sheet-skill-box div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, - .sheet-pc div.sheet-skill-box div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, - .repcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, - .sheet-pc div.sheet-skill-box div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, - .repcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-settings-flag + span.repcontrol_add:after, - .sheet-pc div.sheet-skill-box div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, - .itemcontrol .sheet-pc div.sheet-skill-box div.repitem input.sheet-settings-flag + span.repcontrol_del { - grid-area: 1 / 6 / 1 / 7; } - .sheet-pc div.sheet-skill-box div.repitem input[name='attr_damage'], - .sheet-pc div.sheet-skill-box div.repitem input[name='attr_dicepool_modifier'] { + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[name='attr_damage'], + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem input[name='attr_dicepool_modifier'] { width: 3.5em; } - .sheet-pc div.sheet-skill-box div.repitem div.sheet-settings { - grid-column: 1 / 7; - grid-template-columns: 1fr 3.5em 5em 5em 1em 1em; } + .sheet-pc div.sheet-skill-box div.sheet-skills-active div.repitem div.sheet-settings { + grid-column: 1 / 6; + grid-template-columns: 1fr 3.5em 5em 1em 1em; } +/* + .sheet-pc div.sheet-skill-box button.sheet-skill_spec span:not(:empty)::before { + content: "Sp:"; } + .sheet-pc div.sheet-skill-box button.sheet-skill_expert span:not(:empty)::before { + content: "Ex:"; } +*/ + +/*** Knowledges ***/ + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.sheet-headers { + display: grid; + grid-template-columns: 1fr 6em 1em 1em; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem { + grid-template-columns: 1fr 6em 1em 1em; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem label[data-i18n-title='notes'], + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem h3[data-i18n='notes'], + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem div.sheet-collapse { + grid-column: 1 / 5; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-collapse-flag { + grid-area: 1 / 3 / 1 / 3; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input[type='checkbox'].sheet-collapse-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-collapse-flag + span.repcontrol_del { + grid-area: 1 / 3 / 1 / 3; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-settings-flag, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-settings-flag + span.sheet-pictos, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-toggle .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-settings-flag + span.repcontrol_add:after, + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, + .itemcontrol .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem input.sheet-settings-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 4; } + .sheet-pc div.sheet-skill-box div.sheet-skills-knowledge div.repitem div.sheet-settings { + grid-column: 1 / 5; + grid-template-columns: 1fr 6em 1em 1em; } + + +/*** ARMS ****/ /* Weapons */ .sheet-pc div.sheet-arms div.sheet-headers { display: grid; } @@ -785,6 +828,9 @@ div.sheet-matrix-device .sheet-matrixFirewall { grid-template-columns: 30% 3.5em 2.5em 2.5em 2.5em 2.5em 2.5em 1em 1em; } .sheet-pc div.sheet-arms div.sheet-armor div.repitem div.sheet-settings div.sheet-row { grid-column: 1 / 11; } + + +/*** AUGS ****/ .sheet-pc div.sheet-augs div.sheet-headers { display: grid; grid-template-columns: 1fr 5em 5em 1em 1em; } @@ -825,6 +871,10 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-augs div.repitem div.sheet-settings { grid-column: 1 / 6; grid-template-columns: 1fr 5em 5em 1em 1em; } + + + +/*** GEAR ****/ .sheet-pc div.sheet-gear div.sheet-headers { display: grid; grid-template-columns: 1fr 5em 5em 1em 1em; } @@ -865,11 +915,11 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-gear div.repitem div.sheet-settings { grid-column: 1 / 6; grid-template-columns: 1fr 5em 5em 1em 1em; } + + +/***** MAGIC *****/ .sheet-pc div.sheet-magic { - /***** SPELLS & PREPARATIONS *****/ - /***** RITUALS *****/ - /***** PREPARATIONS *****/ - /***** ADEPT POWERS *****/ } + } .sheet-pc div.sheet-magic h2:nth-of-type(1n+2) { text-align: center; } .sheet-pc div.sheet-magic h3 { @@ -879,6 +929,8 @@ div.sheet-matrix-device .sheet-matrixFirewall { grid-template-columns: 30% 1.5fr 1.5fr 2fr 2em 1em 1em; } .sheet-pc div.sheet-magic div.sheet-headers h3:nth-of-type(1n+2) { text-align: center; } + + /***** SPELLS *****/ .sheet-pc div.sheet-magic div.sheet-spellsFormulas div.repitem { grid-template-columns: 30% 1.5fr 1.5fr 2fr 2em 1em 1em; } .sheet-pc div.sheet-magic div.sheet-spellsFormulas div.repitem label[data-i18n-title='notes'], @@ -917,18 +969,21 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-magic div.sheet-spellsFormulas div.repitem div.sheet-settings { grid-column: 1 / 8; grid-template-columns: 30% 1.5fr 1.5fr 2fr 2em .75em .75em; } + + + /***** RITUALS *****/ .sheet-pc div.sheet-magic div.sheet-magic-rituals label[data-i18n-title='notes'], .sheet-pc div.sheet-magic div.sheet-magic-rituals h3[data-i18n='notes'], .sheet-pc div.sheet-magic div.sheet-magic-rituals div.sheet-collapse { grid-column: 1 / 4; } .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-collapse-flag { - grid-area: 1 / 2 / 1 / 3; } + grid-area: 1 / 3 / 1 / 4; } .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-magic-rituals .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-magic-rituals input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-magic-rituals .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-magic-rituals input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-magic-rituals .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-magic-rituals .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-collapse-flag + span.repcontrol_edit:after, .sheet-pc div.sheet-magic div.sheet-magic-rituals .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-magic-rituals .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-collapse-flag + span.repcontrol_del { - grid-area: 1 / 2 / 1 / 3; } + grid-area: 1 / 3 / 1 / 4; } .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-settings-flag, .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-settings-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-magic-rituals .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, @@ -942,20 +997,27 @@ div.sheet-matrix-device .sheet-matrixFirewall { .repcontrol .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-settings-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-magic-rituals .itemcontrol input.sheet-settings-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-magic-rituals input.sheet-settings-flag + span.repcontrol_del { - grid-area: 1 / 3 / 1 / 4; } + grid-area: 1 / 4 / 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-magic-rituals div.sheet-headers { + grid-template-columns: 1fr 6em 1em 1em; } .sheet-pc div.sheet-magic div.sheet-magic-rituals div.repitem { - grid-template-columns: 1fr 1em 1em; } + grid-template-columns: 1fr 6em 1em 1em; } .sheet-pc div.sheet-magic div.sheet-magic-rituals div.repitem label[data-i18n-title='name'] { - grid-column: 1 / 4; } + grid-column: 1 / 1; } + .sheet-pc div.sheet-magic div.sheet-magic-rituals div.repitem label[data-i18n-title='threshold'] { + grid-column: 2 / 2; } .sheet-pc div.sheet-magic div.sheet-magic-rituals div.repitem div.sheet-row { - grid-column: 1 / 4; } + grid-column: 1 / 5; } .sheet-pc div.sheet-magic div.sheet-magic-rituals div.sheet-settings { - grid-template-columns: 1fr 1em 1em; - grid-column: 1 / 4; } + grid-template-columns: 1fr 6em 1em 1em; + grid-column: 1 / 5; } + + + /***** PREPARATIONS *****/ .sheet-pc div.sheet-magic div.sheet-magic-preps textarea, .sheet-pc div.sheet-magic div.sheet-magic-spells textarea { width: 93%; } .sheet-pc div.sheet-magic div.sheet-magic-preps { - /* READIED PREPARATIONS */ } + } .sheet-pc div.sheet-magic div.sheet-magic-preps div.sheet-prepared-preparations div.sheet-headers { grid-template-columns: 40% 1fr 1fr 2fr 1em 1em; } .sheet-pc div.sheet-magic div.sheet-magic-preps div.sheet-prepared-preparations div.repitem { @@ -989,45 +1051,141 @@ div.sheet-matrix-device .sheet-matrixFirewall { .sheet-pc div.sheet-magic div.sheet-magic-preps div.sheet-prepared-preparations div.repitem div.sheet-settings { grid-column: 1 / 7; grid-template-columns: 40% 1fr 1fr 2fr 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-magic-preps div.repitem div.sheet-row { + grid-column: 1 / 7; } .sheet-pc div.sheet-magic div.sheet-magic-preps div.sheet-prepared-preparations div.repitem div.sheet-settings select { grid-column: 4 / 7; } .sheet-pc div.sheet-magic div.sheet-magic-preps div.sheet-prepared-preparations div.repitem div.sheet-settings textarea { width: 100%; } - .sheet-pc div.sheet-magic div.sheet-powers div.sheet-headers { - grid-template-columns: 1fr 3em 1em 1em; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem { - grid-template-columns: 1fr 3em 1em 1em; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem label[data-i18n-title='notes'], - .sheet-pc div.sheet-magic div.sheet-powers div.repitem h3[data-i18n='notes'], - .sheet-pc div.sheet-magic div.sheet-powers div.repitem div.sheet-collapse { - grid-column: 1 / 5; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-collapse-flag { - grid-area: 1/1/1 / 4; + + + /***** ADEPT POWERS *****/ + .sheet-pc div.sheet-magic div.sheet-powers-adept div.sheet-headers { + grid-template-columns: 1fr 3em 5em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem { + grid-template-columns: 1fr 3em 5em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem label[data-i18n-title='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem h3[data-i18n='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem label[data-i18n-title='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem h3[data-i18n='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem div.sheet-collapse { + grid-column: 1 / 6; } + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-collapse-flag { + grid-area: 1 / 4 / 1 / 5; position: absolute; width: 100%; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers div.repitem input[type='checkbox'].sheet-collapse-flag + span, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, - .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, - .repcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-powers div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-collapse-flag + span.repcontrol_del { - grid-area: 1 / 3 / 1 / 4; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-settings-flag, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-settings-flag + span.sheet-pictos, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, - .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers div.repitem input[type='checkbox'].sheet-settings-flag + span, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, - .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers div.repitem input[type='checkbox'].sheet-settings-flag + span, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, - .repcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, - .repcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-settings-flag + span.repcontrol_add:after, - .sheet-pc div.sheet-magic div.sheet-powers div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, - .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers div.repitem input.sheet-settings-flag + span.repcontrol_del { + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input[type='checkbox'].sheet-collapse-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-collapse-flag + span.repcontrol_del { grid-area: 1 / 4 / 1 / 5; } - .sheet-pc div.sheet-magic div.sheet-powers div.repitem div.sheet-settings { + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-settings-flag, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-settings-flag + span.sheet-pictos, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-settings-flag + span.repcontrol_add:after, + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, + .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem input.sheet-settings-flag + span.repcontrol_del { + grid-area: 1 / 5 / 1 / 6; } + .sheet-pc div.sheet-magic div.sheet-powers-adept div.repitem div.sheet-settings { + grid-column: 1 / 6; + grid-template-columns: 1fr 3em 5em 1em 1em; } + + + + /***** Conjuring *****/ + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.sheet-headers { + grid-template-columns: 1fr 3em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem { + grid-template-columns: 1fr 3em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem label[data-i18n-title='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem h3[data-i18n='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem label[data-i18n-title='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem h3[data-i18n='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem div.sheet-collapse { + grid-column: 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-collapse-flag { + grid-area: 1 / 1 / 1 / 4; + position: absolute; + width: 100%; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input[type='checkbox'].sheet-collapse-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-collapse-flag + span.repcontrol_del { + grid-area: 1 / 3 / 1 / 4; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-settings-flag, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-settings-flag + span.sheet-pictos, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-settings-flag + span.repcontrol_add:after, + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, + .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem input.sheet-settings-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem div.sheet-row { + grid-column: 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-powers-conjuring div.repitem div.sheet-settings { grid-column: 1 / 5; grid-template-columns: 1fr 3em 1em 1em; } + + + + + /***** METAMAGIC *****/ + .sheet-pc div.sheet-magic div.sheet-powers-meta div.sheet-headers { + grid-template-columns: 1fr 3em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem { + grid-template-columns: 1fr 3em 1em 1em; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem label[data-i18n-title='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem h3[data-i18n='notes'], + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem label[data-i18n-title='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem h3[data-i18n='modifications'], + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem div.sheet-collapse { + grid-column: 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-collapse-flag { + grid-area: 1 / 1 / 1 / 4; + position: absolute; + width: 100%; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-collapse-flag + span.sheet-pictos, .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-collapse-flag + span, .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input[type='checkbox'].sheet-collapse-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-settings-flag input[type='checkbox'].sheet-collapse-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input[type='checkbox'].sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-flag-primary + div > input.sheet-collapse-flag + span, .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_edit:after, .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-collapse-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .repcontrol input.sheet-collapse-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-collapse-flag + span.repcontrol_add:after, .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .itemcontrol input.sheet-collapse-flag + span.repcontrol_del, .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-collapse-flag + span.repcontrol_del { + grid-area: 1 / 3 / 1 / 4; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-settings-flag, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-settings-flag + span.sheet-pictos, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-settings-toggle input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-toggle .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-settings-flag input[type='checkbox'].sheet-settings-flag + span, + .sheet-settings-flag .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input[type='checkbox'].sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .sheet-flag-primary + div > input.sheet-settings-flag + span, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_edit:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-settings-flag + span.repcontrol_edit:after, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .repcontrol input.sheet-settings-flag + span.repcontrol_add:after, + .repcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-settings-flag + span.repcontrol_add:after, + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem .itemcontrol input.sheet-settings-flag + span.repcontrol_del, + .itemcontrol .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem input.sheet-settings-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 5; } + .sheet-pc div.sheet-magic div.sheet-powers-meta div.repitem div.sheet-settings { + grid-column: 1 / 5; + grid-template-columns: 1fr 3em 1em 1em; } + + + +/*** MATRIX ****/ .sheet-pc div.sheet-matrix h3 { color: #040404; } .sheet-pc div.sheet-matrix div.sheet-programs div.repitem { @@ -1106,6 +1264,8 @@ div.sheet-matrix-device .sheet-matrixFirewall { grid-column: 1 / 7; grid-template-columns: 30% 1fr 1fr 4em 1em 1em; } + + /***** PC ROWS & COLUMNS SETTINGS *****/ .sheet-pc-row { margin-bottom: 10px; } @@ -1145,6 +1305,10 @@ div.sheet-right-header { margin-right: -8%; float: left; } +div.sheet-left-header { + margin-left: -8%; + float: right; } + /***** SECONDARY HEADERS LIKE ON SKILLS *****/ div.sheet-htab input[type='radio'] { margin-right: -80px; @@ -1213,10 +1377,10 @@ div.sheet-htab input[type='radio'] { .sheet-cc-row button[type='action'] { font-family: fontello; } .sheet-cc-row button[name*='primary_ammo'] { } + /** The x# after ammo button **/ .sheet-cc-row button[type='action'] > span { display: inline; - margin-left: 0px; - /** The x# after ammo button **/ } + margin-left: 0px; } .sheet-cc-row button[type='action'] > span:before { content: 'x'; } .sheet-cc-row button[name*='shots'], .sheet-cc-row button[name='act_reload'], .sheet-cc-row button[name='act_primary_ammo'] { @@ -1228,10 +1392,10 @@ div.sheet-htab input[type='radio'] { border-style: outset; } .sheet-cc-row button[name*='shots_remove'] { transform: rotate(180deg); - -ms-transform: rotate(180deg); /* IE 9 */ - -webkit-transform: rotate(180deg); - /* Safari 3-8 */ } + -ms-transform: rotate(180deg); + /* Safari 3-8 */ + -webkit-transform: rotate(180deg); } .sheet-cc-row button[type='roll'] > span, .sheet-cc-row h3 + span { display: inline-block; @@ -1259,7 +1423,7 @@ div.sheet-htab input[type='radio'] { div.sheet-armor-info { display: grid; width: 100%; - grid-template-columns: auto 1fr 7em 3em 5em; } + grid-template-columns: 5em 3em auto 3em auto 1fr; } div.sheet-armor-resists { display: grid; grid-template-columns: .2fr .2fr .2fr .2fr .2fr; } @@ -1417,8 +1581,10 @@ div.sheet-htab input[type='radio'] { .sheet-condition-box .sheet-display, .sheet-condition-box .sheet-settings { margin-top: -10px; } + + /***** CONDITION MONITOR DISPLAY*****/ .sheet-condition-box .sheet-settings { - /***** CONDITION MONITOR DISPLAY*****/ } + } .sheet-condition-box .sheet-settings input { border-bottom: 1px solid #000; border-radius: 0px; @@ -1520,12 +1686,13 @@ div.sheet-htab input[type='radio'] { margin-top: -5px; } /***** REPEATING FIELDS FOR PC SECTIONS SUCH AS SKILLS *****/ -.sheet-repeat-box { /***** REPEATING SECTION *****/ /***** REPEATING SECTION TOGGLES *****/ /***** REPEATING BOX SECTION INPUTS *****/ /***** REPEATING BOX DISPLAY *****/ - /***** REPEATING SECTION SELECTS *****/ } + /***** REPEATING SECTION SELECTS *****/ + .sheet-repeat-box { + } .sheet-repeat-box .sheet-medium-box { height: auto; min-height: 200px; } @@ -1637,9 +1804,10 @@ input.sheet-skill-select[type='checkbox'] { width: 3%; } /***** LIFESTYLES *****/ -.sheet-lifestyle { /***** LIFESTYLE SETTINGS *****/ - /***** LIFESTYLE DISPLAY *****/ } + /***** LIFESTYLE DISPLAY *****/ + .sheet-lifestyle { + } .sheet-lifestyle h3:nth-of-type(2) { margin-right: 1%; } .sheet-lifestyle input[type='text'] { @@ -2153,6 +2321,12 @@ span.sheet-d6 { /******************************************************************************************/ /**************************** START OF THE NPC SHEET *************************************/ /****************************************************************************************/ + + /*:+:+:+: REPEATING SECTIONS :+:+:+:*/ + /*:+:+:+: NPC ATTRIBUTES :+:+:+:*/ + /*:+:+:+: NPC BODY :+:+:+:*/ + /*:+:+:+: NPC TEXT BOXES AND REPEATING SECTIONS :+:+:+:*/ + /*:+:+:+: NPC MATRIX :+:+:+:*/ .sheet-npc { background-color: #040404; border-radius: 3px; @@ -2160,12 +2334,7 @@ span.sheet-d6 { margin-top: -20px; min-height: 800px; padding: 10px 10px; - width: 720px; - /*:+:+:+: REPEATING SECTIONS :+:+:+:*/ - /*:+:+:+: NPC ATTRIBUTES :+:+:+:*/ - /*:+:+:+: NPC BODY :+:+:+:*/ - /*:+:+:+: NPC TEXT BOXES AND REPEATING SECTIONS :+:+:+:*/ - /*:+:+:+: NPC MATRIX :+:+:+:*/ } + width: 720px; } .sheet-npc button { background: #333; color: #fff; } @@ -2311,14 +2480,15 @@ span.sheet-d6 { .sheet-npc div.sheet-mid span[name='attr_physical_limit']:after, .sheet-npc div.sheet-mid span[name='attr_mental_limit']:after { content: ','; } - .sheet-npc div.sheet-end { /*:+:+:+: TEXT AREAS :+:+:+:*/ /*:+:+:+: REPEATING SECTIONS :+:+:+:*/ /*:+:+:+: NPC INLINE REPEAITNG SECTIONS SUCH AS SKILLS :+:+:+:*/ /*:+:+:+: WEAPONS :+:+:+:*/ /*:+:+:+: SPELLS :+:+:+:*/ /*:+:+:+: COMPLEX FORMS :+:+:+:*/ - /*:+:+:+: IC :+:+:+:*/ } + /*:+:+:+: IC :+:+:+:*/ + .sheet-npc div.sheet-end { + } .sheet-npc div.sheet-end div.sheet-rows, .sheet-npc div.sheet-end div.sheet-textrow { width: 100%; } .sheet-npc div.sheet-end div.sheet-textrow { @@ -2383,9 +2553,9 @@ span.sheet-d6 { grid-column: 1 / 6; } .sheet-npc div.sheet-matrix { width: 100%; } + /*:+:+:+: NPC PROGRAMS :+:+:+:*/ .sheet-npc div.sheet-matrix-device { - margin-bottom: 5%; - /*:+:+:+: NPC PROGRAMS :+:+:+:*/ } + margin-bottom: 5%; } .sheet-npc div.sheet-matrix-device div.sheet-rows { display: inline-grid; grid-template-columns: 12em 45% 10em 1fr; @@ -2402,12 +2572,14 @@ span.sheet-d6 { height: 25px; margin-left: 25%; width: 25px; } + + + /*:+:+:+: NPC MATRIX BUBBLES :+:+:+:*/ .sheet-npc div.sheet-matrix-device div.sheet-matrix-bubble { background-color: transparent; grid-column: 2 / 4; height: 15px; - margin-left: 10%; - /*:+:+:+: NPC MATRIX BUBBLES :+:+:+:*/ } + margin-left: 10%; } .sheet-npc div.sheet-matrix-device div.sheet-matrix-bubble input[type='radio'] { height: 25px; width: 20px; @@ -2467,9 +2639,11 @@ span.sheet-d6 { .sheet-textboxes, .sheet-optional-flag[value='0'] + .sheet-attr-header, .sheet-category + div, -.sheet-category + div + div, .sheet-npc, .sheet-pc, .sheet-arms, .sheet-augs, .sheet-core, .sheet-gear, .sheet-options, .sheet-social, .sheet-vehicle, .sheet-skills-active, -.sheet-skills-know, -.sheet-skills-lang, .sheet-magic-spells, .sheet-magic-preps, .sheet-magic-rituals, .sheet-quality, .sheet-martial, div.sheet-collapse, +.sheet-category + div + div, .sheet-npc, .sheet-pc, .sheet-arms, .sheet-augs, .sheet-core, .sheet-gear, .sheet-options, .sheet-social, .sheet-vehicle, +.sheet-skills-active, .sheet-skills-knowledge, .sheet-skills-language, +.sheet-magic-spells, .sheet-magic-preps, .sheet-magic-rituals, +.sheet-powers-adept, .sheet-powers-meta, .sheet-powers-conjuring, +.sheet-quality, .sheet-martial, div.sheet-collapse, .sheet-settings, input.sheet-settings-toggle:checked ~ div.sheet-display, input.sheet-settings-toggle:checked ~ .sheet-attr-col .sheet-attr-und div.sheet-display, input.sheet-settings-toggle ~ .sheet-attr-lim div.sheet-settings, @@ -2505,9 +2679,11 @@ input[name='attr_category']:not([value='Combat']) ~ select[name='attr_combat_typ input[name='attr_category']:not([value='Combat']) ~ label[data-i18n-title='dam'] { display: none; } -.sheet-display-flag:checked ~ .sheet-collapsable .sheet-desc, .sheet-tab-switch[value='active'] ~ .sheet-skills-active, -.sheet-tab-switch[value='knowledge'] ~ .sheet-skills-know, -.sheet-tab-switch[value='language'] ~ .sheet-skills-lang, .sheet-magic-toggle[value='spells'] ~ .sheet-magic-spells, .sheet-magic-toggle[value='preps'] ~ .sheet-magic-preps, .sheet-magic-toggle[value='rituals'] ~ .sheet-magic-rituals, .sheet-tab-switch[value='quality'] ~ .sheet-quality, .sheet-tab-switch[value='martial'] ~ .sheet-martial { +.sheet-display-flag:checked ~ .sheet-collapsable .sheet-desc, +.sheet-skills-toggle[value='active'] ~ .sheet-skills-active, .sheet-skills-toggle[value='knowledge'] ~ .sheet-skills-knowledge, .sheet-skills-toggle[value='language'] ~ .sheet-skills-language, +.sheet-magic-toggle[value='spells'] ~ .sheet-magic-spells, .sheet-magic-toggle[value='preps'] ~ .sheet-magic-preps, .sheet-magic-toggle[value='rituals'] ~ .sheet-magic-rituals, +.sheet-powers-toggle[value='adept'] ~ .sheet-powers-adept, .sheet-powers-toggle[value='meta'] ~ .sheet-powers-meta, .sheet-powers-toggle[value='conjuring'] ~ .sheet-powers-conjuring, +.sheet-tab-switch[value='quality'] ~ .sheet-quality, .sheet-tab-switch[value='martial'] ~ .sheet-martial { display: inline; } .sheet-pc h2, .sheet-pc h3, .sheet-pc .sheet-tabs, .sheet-pc div.sheet-skill-box div.sheet-row-long, .sheet-npc div.sheet-tabs, .sheet-npc div.sheet-mid, input[name='attr_sheet_type'][value='grunt'] ~ .sheet-npc .sheet-attribute.sheet-grunt, input[name='attr_sheet_type'][value='host'] ~ .sheet-npc .sheet-attribute.sheet-host, input[name='attr_sheet_type'][value='sprite'] ~ .sheet-npc .sheet-attribute.sheet-sprite, input[name='attr_sheet_type'][value='vehicle'] ~ .sheet-npc .sheet-attribute.sheet-vehicle { diff --git a/Shadowrun Sixth World/Shadowrun6thEdition.html b/Shadowrun Sixth World/Shadowrun6thEdition.html index 832a078d00..390e9b61ed 100644 --- a/Shadowrun Sixth World/Shadowrun6thEdition.html +++ b/Shadowrun Sixth World/Shadowrun6thEdition.html @@ -30,7 +30,7 @@ - + @@ -64,27 +64,29 @@

    Reputation

    Heat

    +

    Nuyen

    Karma

    Total Karma

    -

    Base Essence

    -

    Modifier

    -

    Augmentations

    =

    Current Essence

    +

    Base Essence

    +

    Modifier

    -

    Augmentations

    =

    Current Essence

    -

    Attributes

    +
    +

    Attributes

    x
    - +
    + @@ -95,7 +97,7 @@
    - +
    + @@ -106,7 +108,7 @@
    - +
    + @@ -117,7 +119,7 @@
    - +
    + @@ -128,7 +130,7 @@
    - +
    + @@ -139,7 +141,7 @@
    - +
    + @@ -150,7 +152,7 @@
    - +
    + @@ -161,7 +163,7 @@
    - +
    + @@ -171,7 +173,7 @@
    - +
    @@ -192,8 +194,9 @@
    - - + + +
    @@ -367,28 +370,34 @@
    -
    +
    + +

    Knowledge

    +
    +
    +
    +
    +

    Skills

    -
    -
    -

    Skill

    -

    RTG

    -

    Attribute

    -

    Type

    -
    -
    - -
    + + + +
    +
    +

    Skill

    +

    RTG

    +

    Attribute

    +
    - -1 + -1
    - - - + + +
    - i x
    @@ -452,26 +460,23 @@ + + - - + + + + + + + + + +
    + + +
    +
    +
    +

    Knowledge

    +

    Type

    +
    +
    + + + + i + x +
    +
    + + + +
    +
    +
    +
    +
    @@ -503,12 +537,18 @@
    + +
     
    + +
     
    -   -

    DR

    - +
     

    Resists

    @@ -668,7 +708,10 @@
    -
    +
    + + +
    @@ -730,7 +773,7 @@
    - + i x
    @@ -865,6 +908,7 @@

    specialization

    + +
    @@ -1057,7 +1104,7 @@

    Augmentations

    Rating

    -

    Essence

    +

    Ess Cost

    @@ -1089,6 +1136,8 @@
    + +
    @@ -1123,7 +1172,7 @@

    modifications

    @@ -1163,46 +1212,49 @@
    - - + - -

    modifier

    - - + -
    -

    Spells

    -

    Type

    -

    Range

    -

    Duration

    -

    Drain

    -
    +
    + + + + +

    modifier

    + +
    +
    +
    +

    Spell

    +

    Type

    +

    Range

    +

    Duration

    +

    Drain

    +
    @@ -1288,98 +1340,51 @@
    -
    -
    -
    - - - i - x -
    -
    - - - - - -
    -

    Category

    - -

    Combat

    - -

    Damage

    - -
    -
    -

    Skill

    - -

    Specialization

    - -

    Expertise

    - -
    -
    -

    modifier dice

    - -
    -

    notes

    - -
    -
    -
    +
    +
    + + + + +

    modifier

    + +
    -

    Preparations

    -

    name

    -

    force

    +

    preparation

    +

    magic

    potency

    trigger

    - + + + + i x
    @@ -1387,8 +1392,8 @@ -
    +
    +
    + + + + +

    modifier

    + +
    +
    +

    Ritual

    +

    Threshold

    +
    - + + i x
    - -
    -

    skill

    - -

    specialization

    + + +
    + +

    Specialization

    -

    modifier

    +

    Expertise

    + +

    mod

    notes

    @@ -1451,48 +1506,216 @@ -
    +
    -

    Adept Powers / Metamagics

    -
    +
    +
    + +

    Adept

    +
    +
    +
    +
    + +

    Conjuring

    +
    +
    +
    +
    + +

    Meta

    +
    +
    - - + - -

    modifier

    - + + +
    +
    + + + + +

    modifier

    + +
    -

    Name

    -

    Rating

    +

    Power

    +

    Level

    +

    Act

    -
    +
    + + + + i + x +
    +
    + + + +

    notes

    + +

    modifications

    + +
    +
    +
    +
    + + +
    +
    + + + + +

    modifier

    + +
    +
    +

    Spirit

    +

    Force

    +
    +
    +
    + + + i + x +
    +
    + + + +
    + +

    Specialization

    + +

    Expertise

    + +

    mod

    + +
    + +

    notes

    + +
    +
    +
    +
    + + +
    +
    + +

    Initiate Grade

    + +

    Aspect

    + +
    +

    Tradition

    + +
    +
    +

    Metamagic

    +

    Level

    +
    +
    +
    + + i x
    @@ -1507,13 +1730,23 @@ +

    modifications

    +
    +
    + +
    + + +
    @@ -1527,7 +1760,7 @@
    - + @@ -1536,7 +1769,7 @@

    Total

    Temp

    modifier

    Base

    Base slider


    -
    - +
    = + + @@ -1579,7 +1812,7 @@
    - +
    = + + @@ -1600,7 +1833,7 @@
    - +
    = + + @@ -1759,7 +1992,10 @@
    -
    +
    +
    @@ -1903,7 +2140,7 @@   - + @@ -2077,8 +2314,19 @@
    + + + + +
    -
    Shadowrun black and metallic logo +
    +

    THIS IS COMPLETELY UNTESTED AND ROLLS ARE INCORRECT. DATA WILL BE CHANGING AS IT IS EDITED. USE KNOWING THE DATA WILL BE LOST.

    +
    +
    + Shadowrun black and metallic logo + +

    /w GM

    - + - + - + - + - + - + - + - + - +

    ess

    m

    {{#dice}}
    Hits: {{dice}}
    {{/dice}} + {{#defenserating}}
    DR: {{defenserating}}
    {{/defenserating}} {{#ampup}}{{#rollGreater() ampup 0}}
    Amp Up: {{ampup}} @@ -3286,7 +3535,7 @@ //Sheet workers on("sheet:opened", function() { - const version = '0.21'; + const version = '0.22'; console.log(`%c Shadowrun 6th World v`+version, "color: blue; font-weight:bold"); }); @@ -3358,7 +3607,7 @@ on("change:body change:strength change:lift_carry_modifier", (eventinfo) => { //ONLY RUN ON BODY CHANGE if (source.includes("body")) { - update_common_rolls(["body", "overflow_modifier"]); + update_common_rolls(["body", "body", "overflow_modifier"]); update_common_rolls(["body", "armor_rating", "soak_modifier", "soak_temp", `soak_temp_flag`]); update_track("physical"); }; @@ -3398,6 +3647,7 @@ on("change:charisma change:composure_modifier change:judge_intentions_modifier", }); on("change:essence", () => { + // This shouldn't be manually changed by the player it's a calculated value. See the update_essence function. }); on("change:physical_modifier change:flag_drone", () => { @@ -3424,6 +3674,16 @@ on("change:pain_tolerance", () => { update_wounds(); }); +// Update the name of the attribute used when rolling Unskilled Skill Use +on("change:default_attribute", (eventinfo) => { + var new_attr = eventinfo.newValue; + + // newValue will be something like "@{attribute_name}" so we cut out the @{ and } and capitalize the first letter + setAttrs({ + 'default_display': new_attr.charAt(2).toUpperCase() + new_attr.slice(3, -1) + }); +}); + //Calculate ATTRIBUTES ['body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition','charisma','magic', 'resonance'].forEach(attr => { // Attach listener @@ -3467,8 +3727,19 @@ var update_essence = () => { }); }); - getAttrs(['essence_mod'], (ess_mod) => { - ess -= ess_mod['essence_mod']; + getAttrs(['essence_mod', 'magic'], (ess_mod) => { + var em = 0; + if(! isNaN(ess_mod['essence_mod']) && ess_mod['essence_mod'] !== '') { + em = ess_mod['essence_mod']; + } + ess += parseFloat(em); + +// Trying to update magic as essence drops but it's not a simple process will revisit later +// var magic = 0; +// if(! isNaN(ess_mod['magic']) && ess_mod['magic'] !== '') { +// magic = ess_mod['magic']; +// } + setAttrs({ essence: parseFloat(ess).toFixed(2) }); @@ -3476,6 +3747,7 @@ var update_essence = () => { }); }; + //This function watches for changes to augmentations and updates recalculates essence on("change:essence_mod remove:repeating_augmentations change:repeating_augmentations:essence_cost", (eventInfo) => { update_essence(); @@ -3570,6 +3842,10 @@ on("change:repeating_armor", (eventInfo) => { elecTot = 0, fireTot = 0; + getAttrs(['body'], (v) => { + ratingTot = v['body']; + }); + ids.forEach(id => { var armorFields = [`${arm}_${id}_rating`, `${arm}_${id}_chem`, `${arm}_${id}_cold`, `${arm}_${id}_elec`, `${arm}_${id}_fire`, `${arm}_${id}_primary`, `${arm}_${id}_cumulative`]; getAttrs(armorFields, (af) => { @@ -3608,7 +3884,9 @@ const update_common_rolls = (attrs) => { //DEFENSE & SOAK HAVE TWO EXTRA ATTRIBUTES. TEMP IS NEEDED BUT ONLY IF THE FLAG IS CHECKED IN SETTINGS const array = (name === "defense" || name === "soak") ? (v[`${name}_temp_flag`] === "on") ? attrs.splice(0, 4) : attrs.splice(0, 3) : attrs; - _.each(array, (attr) => { numbers.push(parseInt(v[`${attr}`]) || 0); }); + _.each(array, (attr) => { + numbers.push(parseInt(v[`${attr}`]) || 0); + }); const add = (a, b) => a + b, sum = numbers.reduce(add); setAttrs({[`${name}`]: sum}); @@ -3767,7 +4045,9 @@ on("change:host_rating change:data_processing change:pilot change:intuition chan const hot_sim_dice_mod = parseInt(v.hot_sim_dice_mod) || 0; let update = {}; - matrixdice = 1; + matrix_dice = 1; + cold_sim_dice = 2; + hot_sim_dice = 3; switch(v.sheet_type) { case 'pc': diff --git a/Shadowrun Sixth World/sheet.json b/Shadowrun Sixth World/sheet.json index e9fe4fcc14..76375fbd5d 100644 --- a/Shadowrun Sixth World/sheet.json +++ b/Shadowrun Sixth World/sheet.json @@ -1,7 +1,7 @@ { "html": "Shadowrun6thEdition.html", "css": "Shadowrun6thEdition.css", - "authors": ["James Culp (Chuz)", "Cassie Levett (Original Author)"], + "authors": "James Culp (Chuz), Cassie Levett (Original Author)", "roll20userid" : "4306461", "patreon" : "https://www.patreon.com/ChuzGaming", "preview": "preview.png", diff --git a/Shadowrun Sixth World/translation.json b/Shadowrun Sixth World/translation.json index cb94a0a57b..d938644d93 100644 --- a/Shadowrun Sixth World/translation.json +++ b/Shadowrun Sixth World/translation.json @@ -5,8 +5,10 @@ "acceleration": "Acceleration", "acid": "Acid", "acidprotection": "Acid Protection", + "act": "Act", "active": "Active", - "adeptpowers": "Adept Powers / Metamagics", + "adept": "Adept", + "adeptpowers": "Adept Powers", "age": "Age", "agility": "Agility", "alchemy": "Alchemy", @@ -31,10 +33,13 @@ "base": "Base", "baseslider": "Base slider", "bf": "BF", + "bike": "Bike", "biotech": "Biotech", + "boat": "Boat", "body": "Body", "bonuses": "Bonuses", "c": "C", + "car": "Car", "category": "Category", "character": "Character", "charactername": "Character Name", @@ -108,11 +113,13 @@ "enchanting": "Enchanting", "engineering": "Engineering", "ess": "Ess", - "essence": "Base Essence", + "esscost": "Ess Cost", + "essence": "Essence", "essencemodifier": "Mod", "ethnicity": "Ethnicity", "exoticmelee": "Exotic Melee", - "exoticweapon": "Exotic Weapons", + "exoticweapon": "Exotic Weapon", + "exoticweapons": "Exotic Weapons", "exoticnote": "Exotic weapons are not linked to a skill. Use Modifier input to set dicepool", "expertise": "Expertise (+3)", "extended": "Extended", @@ -131,6 +138,7 @@ "fireprotection": "Fire Protection", "firewall": "Firewall", "firingmodes": "Firing Modes", + "fixedwingaircraft": "Fixed Wing Aircraft", "focus": "Focus", "force": "Force", "funds": "Funds", @@ -145,6 +153,7 @@ "health": "Health", "heat": "Heat", "height-u": "Height", + "hermeticism": "Hermeticism", "host": "Host", "host_rating": "Host Rating", "hotsiminit": "Hot Sim Init", @@ -160,6 +169,7 @@ "indirectcombatarea": "Indirect Combat, Area", "influence": "Influence", "initiate": "Initiate", + "initiategrade": "Initiate Grade", "initiative": "Initiative", "initiativedice": "Initiative Dice", "instant": "Instant", @@ -173,6 +183,7 @@ "l": "L", "language": "Language", "languageskills": "Language Skills", + "largedrone": "Large Drone", "level": "Level", "licenses": "Licenses", "lifestyle": "Lifestyle", @@ -183,8 +194,11 @@ "los (a)": "LOS (A)", "loyalty": "Loyalty", "m": "M", + "mage": "Mage", "magic": "Magic", "magicres": "Magic/Resonance", + "maj": "Maj", + "major": "Major", "mana": "Mana", "manipulation": "Manipulation", "martialarts": "Martial Arts", @@ -193,12 +207,20 @@ "matrixinit": "Matrix Init", "matrixinitiative": "Matrix Initiative", "matrixsoak": "Matrix Soak", + "mediumdrone": "Medium Drone", "melee": "Melee", "memory": "Memory", "mental": "Mental", + "meta": "Meta", "metamagic": "Metamagic", "metatype": "Metatype", + "microdrone": "Microdrone", + "minidrone": "Minidrone", + "minor": "Minor", + "min": "Min", "misc": "Misc", + "miscmagic": "Miscellaneous Magic", + "mod": "Mod", "mode": "Mode", "model": "Model", "modeoptions": "Mode Options", @@ -211,11 +233,13 @@ "movementmodifier": "Movement Modifier", "multisense": "Multi-Sense", "mundane": "Mundane", + "mysticadept": "Mystic Adept", "n": "N", "name": "Name", "namealias": "NAME/PRIMARY ALIAS", "nauticalmechanic": "Nautical Mechanic", "near": "Near", + "non-aspected": "Non-Aspected", "none": "None", "notes": "Notes", "notoriety": "Notoriety", @@ -228,6 +252,8 @@ "p": "P", "painfooter": "Low Pain Tolerance applies a +1 and High Pain Tolerance applies a -1 modifier to wound penalty related to damage.", "paintolerance": "Pain Tolerance", + "pas": "Pas", + "passive": "Passive", "pc": "PC", "perception": "Perception", "permanent": "Permanent", @@ -247,6 +273,7 @@ "powers": "Powers", "pr": "Professional Rating", "prep": "Prep...", + "preparation": "Preparation", "preparations": "Preparations", "primary": "Primary", "primaryarmor": "Primary Armor", @@ -274,7 +301,9 @@ "reputation": "Reputation", "resists": "Resists", "resonance": "Resonance", + "ritual": "Ritual", "rituals": "Rituals", + "rotorcraft": "Rotarcraft", "rtg": "RTG", "runmodifier": "Run Modifier", "running": "Running", @@ -286,6 +315,7 @@ "sensor": "Sensor", "sex": "Sex", "shadowamps": "Shadow Amps", + "shamanism": "Shamanism", "sheetdescription": "Set the default sheet type.", "sheetselect": "Sheet Select", "sheettype": "Sheet Type", @@ -294,6 +324,7 @@ "skill": "Skill", "skills": "Skills", "sleaze": "Sleaze", + "smalldrone": "Small Drone", "soak": "Soak", "social": "Social", "sorcery": "Sorcery", @@ -301,7 +332,9 @@ "specialization": "Specialization (+2)", "speed": "Speed", "speedoff": "Speed (Off)", + "spell": "Spell", "spells": "Spells", + "spirit": "Spirit", "sprint": "Sprint", "sprite": "Sprite", "ss": "SS", @@ -312,6 +345,7 @@ "stunbonus": "Stun Bonus", "stundamagetrack": "Stun Damage Track", "style": "Style", + "submarine": "Submarine", "submersion": "Submersion", "sustained": "Sustained", "t": "T", @@ -321,14 +355,19 @@ "technique": "Technique", "temp": "Temp", "temporarymodifiers": "Temporary Modifiers", + "threshold": "Threshold", "time": "Time", "topps": "The Topps Company, Inc. has sole ownership of the names, logo, artwork, marks, photographs, sounds, audio, video and/or any proprietary material used in connection with the game Shadowrun. The Topps Company, Inc. has granted permission to use such names, logos, artwork, marks and/or any proprietary materials for promotional and informational purposes on its website but does not endorse, and is not affiliated with any official capacity whatsoever.", "total": "Total", "total karma": "Total Karma", + "tradition": "Tradition", "trigger": "Trigger", + "truck": "Truck", "type": "Type", + "van": "Van", "vehicle": "Vehicle", "vehicleweapons": "Vehicle Weapons", + "vtolvstol": "VTOL/VSTOL", "w": "W", "walkmodifier": "Walk Modifier", "weakness": "Weakness", diff --git a/Shadowrun Sixth World/translations/de.json b/Shadowrun Sixth World/translations/de.json index 48d1cb9611..d05f558369 100644 --- a/Shadowrun Sixth World/translations/de.json +++ b/Shadowrun Sixth World/translations/de.json @@ -48,8 +48,8 @@ "coldsiminit": "Kalte Sim INI", "coldsiminitiative": "Kalte Sim VR INI", "combat": "Kampf", - "combattype": "Combat Type", - "command": "Command", + "combattype": "Kampfstil", + "command": "Befehl", "complexform": "Komplexe Form", "composure": "Selbstbeherrschung", "con": "Überreden", @@ -68,8 +68,8 @@ "corecombatinfo": "Kampf Informationen", "cracking": "Cracken", "cumulative": "Kumulativ", - "currentessence": "Total", - "cybercombat": "Cybercombat", + "currentessence": "Summe", + "cybercombat": "Cyberkampf", "cyberdeck": "Cyberdeck", "d6": "W6", "dam": "Sch", @@ -77,7 +77,7 @@ "damagetype": "Kampfschaden", "data_processing": "Datenverarbeitung", "dataproc": "Dat. Ver.", - "decompiling": "Decompiling", + "decompiling": "Dekompilieren", "default": "Ungeübte Anwendung", "defense": "Verteidigung", "defenserating": "Verteidigungswert", @@ -87,20 +87,20 @@ "device": "Gerät", "devicerating": "Gerätestufe", "dice": "Würfel", - "direct": "Direct", - "directcombat": "Direct Combat", - "directcombatarea": "Direct Combat, Area", - "disguise": "Disguise", + "direct": "Direkt", + "directcombat": "Direkt Kampf", + "directcombatarea": "Direkt Kampf, Fläche", + "disguise": "Verkleiden", "diving": "Steuern", "dr": "VW", "drain": "Entzug", "drain-2": "Entzug 2", "drone": "Drohne", - "duration": "Duration", + "duration": "Dauer", "e": "E", "echos": "Echos", "edge": "Edge", - "effecttype": "Effect Type", + "effecttype": "Effektart", "elec": "Elek.", "electricalprotection": "Elektrische Isolierung", "electronics": "Elektronik", @@ -111,11 +111,11 @@ "essence": "Essenz", "essencemodifier": "Mod.", "ethnicity": "Ethnizität", - "exoticmelee": "Exotic Melee", - "exoticweapon": "Exotic Weapons", - "exoticnote": "Exotic weapons are not linked to a skill. Use Modifier input to set dicepool", + "exoticmelee": "Exotische Nahkampfwaffe", + "exoticweapon": "Exotische Waffen", + "exoticnote": "Exotische Waffen sind nicht mit einer Fertigkeit verbunden. Verwende den Modifikator um den Würfelpool festzulegen.", "expertise": "Expertise (+3)", - "extended": "Extended", + "extended": "Erweitert", "f": "F", "fa": "AM", "fade": "Schwund", @@ -124,15 +124,15 @@ "fakesin": "Gefälschte SIN", "fakeidsrelated": "SIN Name / Stufe / Lebensstil / Lizenzen / Notizen", "far": "Weit", - "favor": "Favor", + "favor": "Gefallen", "file": "File", "fire": "Feuer", "firearms": "Feuerwaffen", "fireprotection": "Feuerresistenz", "firewall": "Firewall", "firingmodes": "Feuermodi", - "focus": "Focus", - "force": "Force", + "focus": "Fokus", + "force": "Kraft", "funds": "Gelder", "gear": "Inv.", "gm": "An SL", @@ -146,18 +146,18 @@ "heat": "Fahndungsstufe", "height-u": "Größe", "host": "Host", - "host_rating": "Host Rating", - "hotsiminit": "Hot Sim Init", - "hotsiminitiative": "Hot Sim VR Initiative", + "host_rating": "Hoststufe", + "hotsiminit": "Heißes Sim INI", + "hotsiminitiative": "Heißes Sim VR INI", "i": "I", "ic": "IC", "ic limit": "IC Limit", "idslifestylecurrency": "SINs/Lebenstile/Finanzen", "lifestylelicensesnotes": "Lebensstile / Lizenzen / Notizen", "illusion": "Illusion", - "indirect": "Indirect", - "indirectcombat": "Indirect Combat", - "indirectcombatarea": "Indirect Combat, Area", + "indirect": "Indirekt", + "indirectcombat": "Indirekt Kampf", + "indirectcombatarea": "Indirekt Kampf, Fläche", "influence": "Einfluss", "initiate": "Initiant", "initiative": "Initiative", @@ -192,127 +192,127 @@ "matrixdevice": "Matrixgerät", "matrixinit": "Matrix Init", "matrixinitiative": "Matrix Initiative", - "matrixsoak": "Matrix Soak", + "matrixsoak": "Matrixschaden Widerstand", "melee": "Nahkampf", "memory": "Erinnerungsvermögen", - "mental": "Mental", + "mental": "Geistig", "metamagic": "Metamagie", "metatype": "Metatyp", - "misc": "Misc", - "mode": "Mode", - "model": "Model", - "modeoptions": "Mode Options", - "modes": "Modes", - "modifications": "Modifications", - "modifier": "Modifier", - "modifierdice": "Modifier Dice", - "modifiers": "Modifiers", - "movement": "Movement", - "movementmodifier": "Movement Modifier", - "multisense": "Multi-Sense", + "misc": "Sonst.", + "mode": "Modus", + "model": "Modell", + "modeoptions": "Feuermodi", + "modes": "Modi", + "modifications": "Modifikationen", + "modifier": "Modifikator", + "modifierdice": "Würfelmodifikatoren", + "modifiers": "Modifikatoren", + "movement": "Bewegung", + "movementmodifier": "Bewegungsmodifikator", + "multisense": "Vollsensorisch", "mundane": "Mundan", "n": "N", "name": "Name", "namealias": "Name/Straßenname", - "nauticalmechanic": "Nautical Mechanic", + "nauticalmechanic": "Seefahrtsmechanik", "near": "Nah", - "none": "None", + "none": "Keine", "notes": "Notizen", "notoriety": "Schlechter Ruf", "nuyen": "Nuyen", "options": "Optionen", - "other": "Other", - "outdoors": "Outdoors", - "overflow": "Overflow", - "overflowmodifier": "Overflow Modifier", + "other": "Andere", + "outdoors": "Natur", + "overflow": "Überzählig", + "overflowmodifier": "Überzählig Modifikator", "p": "P", - "painfooter": "Low Pain Tolerance applies a +1 and High Pain Tolerance applies a -1 modifier to wound penalty related to damage.", - "paintolerance": "Pain Tolerance", - "pc": "PC", + "painfooter": "Niedrige Schmerztoleranz erhöht den Verletzungsmodifikator um +1, während Hohe Schmerztoleranz diesem um -1 reduziert.", + "paintolerance": "Schmerztoleranz", + "pc": "SC", "perception": "Wahrnehmung", "permanent": "Permanent", "persona": "Persona", - "personal": "Personal Data", - "physical": "Physical", - "physicalbonus": "Physical Bonus", - "physicaldamagetrack": "Physical Damage Track", - "pilot": "pilot", - "piloting": "Piloting", - "player": "Player", - "playername": "Player Name", + "personal": "Persönliches", + "physical": "Physisch", + "physicalbonus": "Physischer Bonus", + "physicaldamagetrack": "Physischer Schadensmonitor", + "pilot": "Pilot", + "piloting": "Steuern", + "player": "Spieler", + "playername": "Spielername\n", "plot": "Plot", "pool": "Pool", - "potency": "Potency", - "power": "Power", - "powers": "Powers", - "pr": "Professional Rating", - "prep": "Prep...", - "preparations": "Preparations", - "primary": "Primary", - "primaryarmor": "Primary Armor", - "primarylifestyle": "Primary Lifestyle", - "primarymeleeweapon": "Primary Melee Weapon", - "primaryrangedweapon": "Primary Ranged Weapon", - "programs": "Programs", - "public": "Public", - "publicawareness": "Public Awereness", - "qualities": "Qualities", - "quality": "Quality", - "quantity": "Quantity", + "potency": "Wirksamkeit", + "power": "Kraft", + "powers": "Kräfte", + "pr": "Professionalitätsstufe", + "prep": "Vorb…", + "preparations": "Vorbereitungen", + "primary": "Aktiv", + "primaryarmor": "Aktive Panzerung", + "primarylifestyle": "Aktueller Lebenstil", + "primarymeleeweapon": "Aktive Nahkampfwaffe", + "primaryrangedweapon": "Aktive Fernkampfwaffe", + "programs": "Programme", + "public": "Öffentlich", + "publicawareness": "Prominenz", + "qualities": "Vor/Nachteile", + "quality": "Vor/Nachteil", + "quantity": "Anzahl", "r": "R", - "radi": "Radi.", + "radi": "Strah.", "radiationprotection": "Strahlungsschutz", - "range": "Range", - "ranged": "Ranged", - "rating": "Rating", - "rating modifier": "rating modifier", - "rc": "RC", - "reach": "Reach", + "range": "RW", + "ranged": "Fernkampf", + "rating": "Stufe", + "rating modifier": "Stufenmodifikator", + "rc": "RK", + "reach": "Reichweite", "reaction": "Reaktion", - "recoil": "Recoil", - "relatedlifestyle": "Related Lifestyles", + "recoil": "Rückstoß", + "relatedlifestyle": "zugehörige Lebensstile", "reputation": "Reputation", - "resists": "Resists", - "resonance": "Resonance", - "rituals": "Rituals", - "rtg": "RTG", - "runmodifier": "Run Modifier", - "running": "Running", + "resists": "Widerstände", + "resonance": "Resonanz", + "rituals": "Rituale", + "rtg": "St.", + "runmodifier": "Laufrate", + "running": "Laufen", "s": "S", - "sa": "SA", - "seat": "Seat", - "seats": "Seats", - "self": "Self", + "sa": "HM", + "seat": "Sitz", + "seats": "Sitze", + "self": "Selbst", "sensor": "Sensor", "sex": "Geschlecht", "shadowamps": "Shadow Amps", - "sheetdescription": "Set the default sheet type.", - "sheetselect": "Sheet Select", - "sheettype": "Sheet Type", - "singlesense": "Single-Sense", + "sheetdescription": "Wähle den Standard Bogen aus.", + "sheetselect": "Bogenauswahl", + "sheettype": "Bogenart", + "singlesense": "Monosensorisch", "sinname": "SIN Name", "skill": "Fertigkeit", "skills": "Fertigkeiten", - "sleaze": "Sleaze", - "soak": "Soak", + "sleaze": "Schleicher", + "soak": "Widerstand", "social": "Sozial", - "sorcery": "Sorcery", + "sorcery": "Hexerei", "special": "Speziell", "specialization": "Spezialisierung (+2)", - "speed": "Speed", - "speedoff": "Speed (Off)", + "speed": "Geschwindigkeit", + "speedoff": "Geschwindigkeit (Off-R.)", "spells": "Zauber", - "sprint": "Sprint", + "sprint": "Sprinten", "sprite": "Sprite", - "ss": "SS", + "ss": "EM", "stealth": "Heimlichkeit", - "streetcred": "Street Cred", + "streetcred": "Straßenruf", "strength": "Stärke", - "stun": "Stun", - "stunbonus": "Stun Bonus", - "stundamagetrack": "Stun Damage Track", - "style": "Style", - "submersion": "Submersion", + "stun": "Betäubung", + "stunbonus": "Betäubungsbonus", + "stundamagetrack": "Betäubungs Zustandsmonitor", + "style": "Stil", + "submersion": "Wandlung", "sustained": "Aufrechterhalten", "t": "B", "t (a)": "B (F)", @@ -321,22 +321,22 @@ "technique": "Technik", "temp": "Temp.", "temporarymodifiers": "Temporäre Modifikatoren", - "time": "Time", + "time": "Zeitzünder", "topps": "The Topps Company, Inc. has sole ownership of the names, logo, artwork, marks, photographs, sounds, audio, video and/or any proprietary material used in connection with the game Shadowrun. The Topps Company, Inc. has granted permission to use such names, logos, artwork, marks and/or any proprietary materials for promotional and informational purposes on its website but does not endorse, and is not affiliated with any official capacity whatsoever.", - "total": "Total", - "total karma": "Total Karma", - "trigger": "Trigger", - "type": "Type", + "total": "Summe", + "total karma": "Gesamtkarma", + "trigger": "Auslöser", + "type": "Typ", "vehicle": "Fahrzeug", "vehicleweapons": "Fahrzeugwaffen", "w": "W", - "walkmodifier": "Walk Modifier", - "weakness": "Weakness", + "walkmodifier": "Gehrate", + "weakness": "Schwäche", "weapon": "Waffe", "weapons": "Waffen", "weight": "Gewicht", - "whisper": "Whisper", - "whisperdescription": "Set the default for rolling in public or to gm.", + "whisper": "Flüstern", + "whisperdescription": "Schalte zwischen öffentlichen und Würfen an den SL um.", "willpower": "Willenskraft", - "wounds": "Wounds" + "wounds": "Wunden" } \ No newline at end of file diff --git a/Shadowrun6th-German/translations/fr.json b/Shadowrun6th-German/translations/fr.json index 84fb797b8f..569ef1268b 100644 --- a/Shadowrun6th-German/translations/fr.json +++ b/Shadowrun6th-German/translations/fr.json @@ -403,7 +403,7 @@ "title_stun": "Etourdissant", "title_total_wounds": "Nombre total de blessures", "total": "Total", - "tradition_attribute": "Traditionsattribut", + "tradition_attribute": "Attribut de tradition", "unarmed": "Désarmé", "unown": "?", "unown_shifted": "  ?", diff --git a/Spire - The City Must Fall/translations/fr.json b/Spire - The City Must Fall/translations/fr.json index d87d7142bf..3fc5dd9ce8 100644 --- a/Spire - The City Must Fall/translations/fr.json +++ b/Spire - The City Must Fall/translations/fr.json @@ -1,40 +1,40 @@ { - "list-skills": "compel,deceive,fight,fix,investigate,pursue,refresh,sneak,steal", - "list-domains": "academia,crime,commerce,high-society,low-society,occult,order,religion,technology", - "spire-the-city-must-fall": "Spire - The City Must Fall", - "profile": "Profil", + "list-skills": "manipulation,tromperie,combat,rafistolage,investigation,poursuite,endurance,larcin", + "list-domains": "académie,crime,commerce,haute-société,prolétariat,occultisme,ordre,religion,technologie", + "spire-the-city-must-fall": "Spire - Le soulèvement", + "profile": "Personnage", "stress": "Stress", "roll": "Lancer", - "character-name": "Nom du Perso:", - "class": "Classe:", + "character-name": "Nom du Personnage :", + "class": "Classe :", "durance": "Corvée", "skills": "Compétences", - "compel": "Contrainte", - "deceive": "Subterfuge", + "compel": "Manipulation", + "deceive": "Tromperie", "fight": "Combat", - "fix": "Réparer", - "investigate": "Découverte", + "fix": "Rafistolage", + "investigate": "Investigation", "pursue": "Poursuite", - "resist": "Résister", + "resist": "Endurance", "sneak": "Furtivité", - "steal": "Vol", + "steal": "Larcin", "domains": "Domaines", "academia": "Académie", "crime": "Crime", "commerce": "Commerce", "high-society": "Haute Société", - "low-society": "Low Society", - "occult": "Occulte", - "order": "Order", + "low-society": "Prolétariat", + "occult": "Occultisme", + "order": "Ordre", "religion": "Religion", - "technology": "Technology", - "advances": "Augmentation", + "technology": "Technologie", + "advances": "Capacités", "refresh": "Restauration", "equipment": "Équipement", "bonds": "Attaches", - "fallout": "Fallout", - "free-slots": "Free Slots", - "resistances": "Resistances", + "fallout": "Contrecoup", + "free-slots": "Emplacements supplémentaires", + "resistances": "Résistances", "current": "Actuel", "armor": "Armure", "blood": "Sang", diff --git a/Star Wars FFG API-Compatible/translations/ja.json b/Star Wars FFG API-Compatible/translations/ja.json index c3dbf00f7b..0c77322156 100644 --- a/Star Wars FFG API-Compatible/translations/ja.json +++ b/Star Wars FFG API-Compatible/translations/ja.json @@ -30,7 +30,7 @@ "aqualishq": "Aqualish (Quara)", "aqualishu": "Aqualish (Ualaq)", "arbiter": "Arbiter", - "arc": "Arc", + "arc": "射界", "archaeologist": "Archaeologist", "arcona": "Arcona", "arctrooper": "ARC Trooper", @@ -84,8 +84,8 @@ "campaigndetails": " Campaign Details ", "capacity": "Capacity", "career": "経歴", - "cargohold": "Cargo Hold", - "cargotype": "Cargo Type", + "cargohold": "貨物積載", + "cargotype": "貨物タイプ", "category:": "カテゴリー:", "cerean": "セレアン", "chadrafan": "Chadra-Fan", @@ -131,7 +131,7 @@ "commited": "コミット", "commodore": "提督", "companion": "同行者", - "companioninfo": "Companion Info", + "companioninfo": "同行者情報", "companionsheet": "同行者シート", "completed:": "Completed?:", "computerint": "コンピュータ(理知)", @@ -209,7 +209,7 @@ "Discipline": "自制心", "disciplinewill": "自制心(意志)", "displayinskill": "Display in Skill", - "dmg": "DMG", + "dmg": "ダメージ", "doctor": "医者", "downgrade": ":ダウングレード", "dowutin": "Dowutin", @@ -247,7 +247,7 @@ "ewok": "イウォーク", "example": "Example: 1b 1g outputs ", "example:": "Example: 1b 1g outputs ", - "exampletext": "b -> Blue = Boost, blk -> BLack = Setback
    g -> Green = Ability, y -> Yellow = Proficiency
    p-> Purple = Difficulty, r -> Red = Challenge
    w -> White = Force
    s = Success, f = Failure, a = Advantage, t = Threat", + "exampletext": "b→青=援助、blk→黒=妨害
    g→緑=能力、y→黃=専門
    p→紫=難易度、r→赤=挑戦
    w→白=フォース
    s=成功、f=失敗、a=有利、t=脅威", "executioner": "Executioner", "expectedsessionstocomplete:": "Expected sessions to complete:", "explorer": "探検家", @@ -279,9 +279,9 @@ "gandnl": "Gand (Without Lungs)", "gank": "Gank", "gender:": "性別:", - "general": "General", + "general": "一般", "generalinfo": "一般情報", - "generalinformation": "General Information", + "generalinformation": "一般情報", "generalskills": "一般技能", "geonosian": "Geonosian", "gigoran": "Gigoran", @@ -327,12 +327,12 @@ "hotshot": "Hotshot", "hp": "HP", "hulltrauma": "船体外傷", - "hulltypeclass:": "Hull Type/Class:", + "hulltypeclass:": "船体タイプ/クラス:", "human": "人間", "hunter": "狩人", "hutt": "ハット", - "hyperdriveprimclass:": "Hyperdrive Primary Class:", - "hyperdrivesecondclass:": "Hyperdrive Backup Class:", + "hyperdriveprimclass:": "ハイパードライブ 主要クラス:", + "hyperdrivesecondclass:": "ハイパードライブ バックアップクラス:", "iakaru": "Iakaru", "ifknown": "(if known)", "iktochi": "Iktotchi", @@ -392,7 +392,7 @@ "makemodel": "作成/モデル", "makemodel:": "作成/モデル:", "mandalorianhuman": "Mandalorian Human", - "manufacturer:": "Manufacturer:", + "manufacturer:": "製造元:", "marauder": "襲撃者", "marshal": "Marshal", "martialartist": "Martial Artist", @@ -505,7 +505,7 @@ "pantoran": "Pantoran", "partycareerskill:": "Party Career Skill:", "passengername": "Passenger Name", - "passengers": "Passengers", + "passengers": "乗客", "passive": "受動", "pathfinder": "探索者", "pauan": "Pau'an", @@ -577,7 +577,7 @@ "Resilience": "不屈", "resiliencebr": "不屈(強靭)", "restricted:": "制限:", - "results": "具合", + "results": "結果", "retail": "Retail", "retiredclonetrooper": "Retired Clone Trooper", "rewardgiven:": "Rewards Given:", @@ -632,7 +632,7 @@ "skilllist": "技能リスト", "skillname": "技能名", "skills": "技能", - "skillstalentsweaponspowers": "Skills, Talents, Weapons & Powers", + "skillstalentsweaponspowers": "技能、特技、武器 & パワー", "skillstitle": "スキル", "skillsuggestions": "Skill Suggestions", "skillsuggestionsdisplay": "Skill Suggestions Display", @@ -659,8 +659,8 @@ "squadronleader": "中隊長", "starboard": "右舷", "starfighterace": "スターファイターエース", - "starship": " Starship ", - "starshipcritical": "Starship Critical", + "starship": "宇宙船", + "starshipcritical": "宇宙船致命傷", "stats": "ステータス", "stealth": "隠密", "Stealth": "隠密", @@ -752,7 +752,7 @@ "weekay": "Weequay", "whatkindofslot": "どんなイニシアチブの割当てですか?", "whipid": "Whiphid", - "whispergm": "Whisper GM", + "whispergm": "GMに耳打ち", "willpower": "意志", "wookie": "ウーキー", "wounds": "負傷", diff --git a/StarWars5E/StarWars5E_HTML.html b/StarWars5E/StarWars5E_HTML.html index e493b60880..f28dcb8713 100644 --- a/StarWars5E/StarWars5E_HTML.html +++ b/StarWars5E/StarWars5E_HTML.html @@ -10072,9 +10072,6 @@ getSectionIDs("repeating_inventory", function(idarray) { update_inventory_from_weight_change("repeating_inventory_", idarray, "weighttotal"); }); - getSectionIDs("repeating_hiddeninventory", function(idarray) { - update_inventory_from_weight_change("repeating_hiddeninventory_", idarray, "hiddenweighttotal"); - }); }; var update_inventory_from_weight_change = function (inventory, idarray, weightAttrToUpdate){ diff --git a/SvardOchSvartkonst/svardsvartkonst.css b/SvardOchSvartkonst/svardsvartkonst.css index 801fcb7028..92bcbddc89 100644 --- a/SvardOchSvartkonst/svardsvartkonst.css +++ b/SvardOchSvartkonst/svardsvartkonst.css @@ -1,7 +1,6 @@ .charsheet { -/*background-image: url(https://techfindings.net/svardsvartkonst/svardsvartkonst.jpg);*/ - background-image: url(https://raw.githubusercontent.com/zo0ok/roll20-character-sheets/master/SvardOchSvartkonst/svardsvartkonst.jpg); + background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/SvardOchSvartkonst/svardsvartkonst.jpg); background-repeat: no-repeat; background-size: 800px 1128px; } diff --git a/Torchbearer 2E/torchbearer.html b/Torchbearer 2E/torchbearer.html index fb82df14c0..8af30418b9 100644 --- a/Torchbearer 2E/torchbearer.html +++ b/Torchbearer 2E/torchbearer.html @@ -12270,7 +12270,7 @@ updateConditions(eventinfo.sourceAttribute); }); - on("change:will_trigger change:health_trigger change:nature_trigger change:resources_trigger change:circles_trigger change:alchemist_trigger change:arcanist_trigger change:armorer_trigger change:cartographer_trigger change:commander_trigger change:cook_trigger change:criminal_trigger change:dungeoneer_trigger change:fighter_trigger change:haggler_trigger change:healer_trigger change:hunter_trigger change:loremaster_trigger change:manipulator_trigger change:mentor_trigger change:orator_trigger change:pathfinder_trigger change:persuader_trigger change:rider_trigger change:ritualist_trigger change:scavenger_trigger change:scholar_trigger change:scout_trigger change:survivalist_trigger change:theologian_trigger change:skill1_trigger change:skill2_trigger change:skill3_trigger change:skill4_trigger change:skill5_trigger change:laborer_trigger change:peasant_trigger change:recovery_angry_trigger change:recovery_afraid_trigger change:recovery_exhausted_trigger change:recovery_injured_trigger change:recovery_sick_trigger ", function(eventinfo) { + on("change:will_trigger change:health_trigger change:nature_trigger change:resources_trigger change:circles_trigger change:alchemist_trigger change:arcanist_trigger change:armorer_trigger change:cartographer_trigger change:commander_trigger change:cook_trigger change:criminal_trigger change:dungeoneer_trigger change:fighter_trigger change:haggler_trigger change:healer_trigger change:hunter_trigger change:loremaster_trigger change:manipulator_trigger change:mentor_trigger change:orator_trigger change:pathfinder_trigger change:persuader_trigger change:rider_trigger change:ritualist_trigger change:sapper_trigger change:scavenger_trigger change:scholar_trigger change:scout_trigger change:survivalist_trigger change:theologian_trigger change:skill1_trigger change:skill2_trigger change:skill3_trigger change:skill4_trigger change:skill5_trigger change:laborer_trigger change:peasant_trigger change:recovery_angry_trigger change:recovery_afraid_trigger change:recovery_exhausted_trigger change:recovery_injured_trigger change:recovery_sick_trigger ", function(eventinfo) { activateComplexRollModal(eventinfo.sourceAttribute) }); diff --git a/Villains and Vigilantes/VandVMightyProtectors.html b/Villains and Vigilantes/VandVMightyProtectors.html index 72911b51c4..0bb31a65ae 100644 --- a/Villains and Vigilantes/VandVMightyProtectors.html +++ b/Villains and Vigilantes/VandVMightyProtectors.html @@ -102,7 +102,7 @@   Security Clearance: - +
    diff --git a/approved.yaml b/approved.yaml index c65e4c8ad7..40daf4b00d 100644 --- a/approved.yaml +++ b/approved.yaml @@ -3929,3 +3929,7 @@ talesofxadia: - CortexPrime-Tales-of-Xadia-Playtest - 'Tales of Xadia: The Dragon Prince' - Cortex System +nahua: +- Nahual +- 'Nahua ' +- Powered by the Apocalypse