The Happy Anarchist 2020-09-05 01:12:15 -10:00
commit 771cc0636c
11 changed files with 133 additions and 108 deletions

View File

@ -821,11 +821,11 @@
line-height: 30px;
}
.acks.sheet.actor.character .sheet-body .exploration .attribute {
margin: 4px;
margin: 1px;
}
.acks.sheet.actor.character .sheet-body .exploration .attribute .attribute-name {
text-align: left;
flex: 1 0 60px;
text-align: center;
flex: 1 0 45px;
line-height: 25px;
font-size: 12px;
}

View File

@ -38,7 +38,7 @@
"ACKS.roll.attribute": "{attribute} check",
"ACKS.roll.details.attribute": "Roll 1d20 <= {score} for success",
"ACKS.roll.exploration": "{exploration} test",
"ACKS.roll.details.exploration": "Roll 1d6 <= {expl} for success",
"ACKS.roll.details.exploration": "Roll 1d20 >= {expl} for success",
"ACKS.roll.reaction": "Reaction roll",
"ACKS.roll.initiative": "Group {group} rolls for Initiative!",
"ACKS.roll.individualInit": "{name} rolls for Initiative!",
@ -68,8 +68,8 @@
"ACKS.Retainer": "Retainer",
"ACKS.RetainerWage": "Wage",
"ACKS.RetainerUpkeep": "Upkeep",
"ACKS.Loyalty": "Loyalty Rating",
"ACKS.LoyaltyShort": "LR",
"ACKS.Loyalty": "Henchmen Morale",
"ACKS.LoyaltyShort": "MOR",
"ACKS.scores.str.long": "Strength",
"ACKS.scores.str.short": "STR",
@ -95,7 +95,7 @@
"ACKS.saves.spell.short": "S",
"ACKS.saves.spell.long": "Spells",
"ACKS.saves.magic.long": "Bonus vs Magic",
"ACKS.saves.magic.short": "vs Magic",
"ACKS.saves.magic.short": "vs Magic",
"ACKS.Health": "Hit Points",
"ACKS.HealthMax": "Maximum Hit Points",
@ -116,11 +116,11 @@
"ACKS.ArmorClassNaked": "Naked Armor Class",
"ACKS.ArmorClass": "Armor Class",
"ACKS.ArmorClassShort": "AC",
"ACKS.AscArmorClassShort": "AAC",
"ACKS.AscArmorClassShort": "AC",
"ACKS.ArmorClassBonus": "Armor Class Bonus",
"ACKS.Thac0": "THAC0",
"ACKS.ABShort": "AB",
"ACKS.AB": "Attack Bonus",
"ACKS.ABShort": "Throw",
"ACKS.AB": "Throw",
"ACKS.MeleeShort": "MEL",
"ACKS.Melee": "Melee",
"ACKS.MeleeBonus": "Melee Bonus",
@ -163,6 +163,8 @@
"ACKS.Setting.Initiative": "Initiative",
"ACKS.Setting.InitiativeHint": "Grouped or individual initiative.",
"ACKS.Setting.InitiativeIndividual": "Individual initiative",
"ACKS.Setting.InitiativeGroup": "Grouped Initiative",
"ACKS.Setting.RerollInitiative": "Initiative persistence",
"ACKS.Setting.RerollInitiativeHint": "Keeps, resets or rerolls initiative each round",
@ -185,9 +187,9 @@
"ACKS.items.Equip": "Equip",
"ACKS.items.Unequip": "Unequip",
"ACKS.items.Misc": "Misc",
"ACKS.items.Misc": "Items",
"ACKS.items.Weapons": "Weapons",
"ACKS.items.Treasure": "Treasure",
"ACKS.items.Treasure": "Heavy Items",
"ACKS.items.Armors": "Armors",
"ACKS.items.Weight": "Wgt.",
"ACKS.items.Qualities": "Qualities",
@ -200,7 +202,7 @@
"ACKS.items.RollType": "Type",
"ACKS.items.Damage": "Damage",
"ACKS.items.ArmorAC": "AC",
"ACKS.items.ArmorAAC": "AAC",
"ACKS.items.ArmorAAC": "AC",
"ACKS.items.Bonus": "Bonus",
"ACKS.items.AtkBonus": "Attack Bonus",
"ACKS.items.roundAttacks": "Attacks Spent this Round",
@ -241,9 +243,9 @@
"ACKS.abilities.Requirements": "Requirements",
"ACKS.exploration.ld.long": "Listen at Door",
"ACKS.exploration.ld.short": "Listen Door",
"ACKS.exploration.ld.abrev": "LD",
"ACKS.exploration.ld.long": "Listen for noises",
"ACKS.exploration.ld.short": "Hear Noise",
"ACKS.exploration.ld.abrev": "HN",
"ACKS.exploration.od.long": "Open Stuck Door",
"ACKS.exploration.od.short": "Open Door",
"ACKS.exploration.od.abrev": "OD",
@ -272,9 +274,9 @@
"ACKS.colors.white": "White",
"ACKS.reaction.check": "Reaction Check",
"ACKS.reaction.Hostile": "{name} is Hostile",
"ACKS.reaction.Unfriendly": "{name} is Unfriendly",
"ACKS.reaction.Neutral": "{name} is Neutral",
"ACKS.reaction.Indifferent": "{name} is Indifferent",
"ACKS.reaction.Friendly": "{name} is Friendly"
"ACKS.reaction.Hostile": "{name} is Hostile and attacks",
"ACKS.reaction.Unfriendly": "{name} is Unfriendly and may attack",
"ACKS.reaction.Neutral": "{name} is Neutral and uncertain",
"ACKS.reaction.Indifferent": "{name} is Indifferent and uninterested",
"ACKS.reaction.Friendly": "{name} is Friendly and helpful"
}

View File

@ -333,12 +333,12 @@ export class AcksActor extends Actor {
rollExploration(expl, options = {}) {
const label = game.i18n.localize(`ACKS.exploration.${expl}.long`);
const rollParts = ["1d6"];
const rollParts = ["1d20"];
const data = {
actor: this.data,
roll: {
type: "below",
type: "above",
target: this.data.data.exploration[expl],
},
details: game.i18n.format("ACKS.roll.details.exploration", {
@ -519,8 +519,9 @@ export class AcksActor extends Actor {
let hasItems = false;
Object.values(this.data.items).forEach((item) => {
if (item.type == "item" && !item.data.treasure) {
if (option === "detailed") totalWeight += 166.6;
hasItems = true;
// hasItems = true;
}
if (
item.type == "item" &&
@ -531,7 +532,7 @@ export class AcksActor extends Actor {
totalWeight += item.data.weight;
}
});
if (option === "detailed" && hasItems) totalWeight += 80;
// if (option === "detailed" && hasItems) totalWeight += 166.6;
data.encumbrance = {
pct: Math.clamped(
@ -541,7 +542,7 @@ export class AcksActor extends Actor {
),
max: data.encumbrance.max,
encumbered: totalWeight > data.encumbrance.max,
value: totalWeight,
value: Math.round(totalWeight),
};
if (data.config.movementAuto && option != "disabled") {
@ -553,15 +554,15 @@ export class AcksActor extends Actor {
const data = this.data.data;
let option = game.settings.get("acks", "encumbranceOption");
let weight = data.encumbrance.value;
let delta = data.encumbrance.max - 1600;
let delta = data.encumbrance.max - 20000;
if (["detailed", "complete"].includes(option)) {
if (weight > data.encumbrance.max) {
data.movement.base = 0;
} else if (weight > 800 + delta) {
} else if (weight > 10000 + delta) {
data.movement.base = 30;
} else if (weight > 600 + delta) {
} else if (weight > 7000 + delta) {
data.movement.base = 60;
} else if (weight > 400 + delta) {
} else if (weight > 5000 + delta) {
data.movement.base = 90;
} else {
data.movement.base = 120;
@ -606,7 +607,7 @@ export class AcksActor extends Actor {
(i) => i.type == "item" && i.data.treasure
);
treasure.forEach((item) => {
total += item.data.quantity.value * item.data.cost;
total += item.data.quantity.value * item.data.cost
});
data.treasure = total;
}
@ -703,11 +704,13 @@ export class AcksActor extends Actor {
const od = {
0: 0,
3: 1,
9: 2,
13: 3,
16: 4,
18: 5,
3: 30,
4: 26,
6: 22,
9: 18,
13: 14,
16: 10,
18: 6,
};
data.exploration.odMod = AcksActor._valueFromTable(
od,

View File

@ -106,75 +106,91 @@ export const ACKS = {
monster_saves: {
0: {
label: "Normal Human",
d: 14,
w: 15,
d: 15,
w: 17,
p: 16,
b: 17,
s: 18
},
1: {
label: "1-3",
d: 12,
w: 13,
label: "1",
d: 14,
w: 16,
p: 15,
b: 16,
s: 17
},
2: {
label: "2-3",
d: 13,
w: 15,
p: 14,
b: 15,
s: 16
},
4: {
label: "4-6",
d: 10,
w: 11,
label: "4",
d: 12,
w: 14,
p: 13,
b: 14,
s: 15
},
5: {
label: "5-6",
d: 11,
w: 13,
p: 12,
b: 13,
s: 14
},
7: {
label: "7-9",
d: 8,
w: 9,
label: "7",
d: 10,
w: 12,
p: 11,
b: 12,
s: 13
},
8: {
label: "8-9",
d: 9,
w: 11,
p: 10,
b: 10,
b: 11,
s: 12
},
10: {
label: "10-12",
d: 6,
w: 7,
label: "10",
d: 8,
w: 10,
p: 9,
b: 10,
s: 11
},
11: {
label: "11-12",
d: 7,
w: 9,
p: 8,
b: 8,
b: 9,
s: 10
},
13: {
label: "13-15",
d: 4,
w: 5,
label: "13",
d: 6,
w: 8,
p: 7,
b: 8,
s: 9
},
14: {
label: "14+",
d: 5,
w: 7,
p: 6,
b: 5,
b: 7,
s: 8
},
16: {
label: "16-18",
d: 2,
w: 3,
p: 4,
b: 3,
s: 6
},
19: {
label: "19-21",
d: 2,
w: 2,
p: 2,
b: 2,
s: 4
},
22: {
label: "22+",
d: 2,
w: 2,
p: 2,
b: 2,
s: 2
},
}
},
};

View File

@ -16,14 +16,14 @@ export class AcksDice {
result.isFailure = true;
}
} else if (data.roll.type == "below") {
// MORALE, EXPLORATION
// MORALE
if (roll.total <= result.target) {
result.isSuccess = true;
} else {
result.isFailure = true;
}
} else if (data.roll.type == "check") {
// SCORE CHECKS (1s and 20s)
// SCORE CHECKS (1s and 20s), EXPLORATION
if (die == 1 || (roll.total <= result.target && die < 20)) {
result.isSuccess = true;
} else {

View File

@ -33,6 +33,10 @@ export const registerHelpers = async function () {
Handlebars.registerHelper("mult", function (lh, rh) {
return parseFloat(lh) * parseFloat(rh);
});
Handlebars.registerHelper("multround", function (lh, rh) {
return Math.round((parseFloat(lh) * parseFloat(rh)) * 100) / 100;
})
Handlebars.registerHelper("roundWeight", function (weight) {
return Math.round(parseFloat(weight) / 100) / 10;

View File

@ -2,7 +2,7 @@
"name": "acks",
"title": "Adventurer Conqueror Kings System",
"description": "Play B/X OSR modules with ACKS on Foundry VTT",
"version": "0.1.0",
"version": "0.2.0",
"minimumCoreVersion": "0.6.2",
"compatibleCoreVersion": "0.6.6",
"templateVersion": 2,

View File

@ -10,8 +10,8 @@
},
"hp": {
"hd": "1d8",
"value": 20,
"max": 20
"value": 4,
"max": 4
},
"ac": {
"value": 0,
@ -31,19 +31,19 @@
},
"saves": {
"death": {
"value": 0
"value": 15
},
"wand": {
"value": 0
"value": 17
},
"paralysis": {
"value": 0
"value": 16
},
"breath": {
"value": 0
"value": 17
},
"spell": {
"value": 0
"value": 18
}
},
"movement": {
@ -98,10 +98,10 @@
}
},
"exploration": {
"ld": 1,
"od": 2,
"sd": 1,
"ft": 1
"ld": 18,
"od": 18,
"sd": 18,
"ft": 18
},
"scores": {
"str": {
@ -130,7 +130,7 @@
}
},
"encumbrance": {
"max": 1600
"max": 20000
},
"languages": {
"value": []
@ -140,7 +140,7 @@
"templates": ["common", "spellcaster"],
"details": {
"biography": "",
"alignment": "",
"alignment": "Neutral",
"xp": 0,
"treasure": {
"table": "",
@ -150,7 +150,7 @@
"d": 0,
"w": 0
},
"morale": 0
"morale": 7
},
"attacks": ""
}
@ -165,7 +165,7 @@
},
"treasure": false,
"cost": 0,
"weight": 0
"weight": 166.6
},
"weapon": {
"range": {
@ -184,7 +184,7 @@
"melee": true,
"cost": 0,
"equipped": false,
"weight": 0,
"weight": 167,
"counter": {
"value": 0,
"max": 0
@ -193,11 +193,11 @@
"armor": {
"description": "",
"ac": 9,
"aac": 10,
"aac": 0,
"type": "light",
"cost": 0,
"equipped": false,
"weight": 0
"weight": 2000
},
"spell": {
"lvl": 1,

View File

@ -6,7 +6,7 @@
{{localize 'ACKS.Melee'}} ({{mod data.scores.str.mod}})
</li>
<li>
{{localize 'ACKS.exploration.od.long'}} ({{data.exploration.odMod}} in 6)
{{localize 'ACKS.exploration.od.long'}} ({{data.exploration.odMod}}+)
</li>
</ol>
</div>

View File

@ -2,28 +2,28 @@
<li class="attribute flexrow" data-exploration="ld">
<h4 class="attribute-name box-title" title="({{localize 'ACKS.exploration.ld.abrev'}}) {{localize 'ACKS.exploration.ld.long'}}"><a>{{ localize "ACKS.exploration.ld.short" }}</a></h4>
<div class="attribute-value">
<input name="data.exploration.ld" type="text" value="{{data.exploration.ld}}" data-dtype="Number" placeholder="0" />
<input name="data.exploration.ld" type="text" value="{{data.exploration.ld}}" value="18" data-dtype="Number" placeholder="0" />
</div>
</li>
<li class="attribute flexrow" data-exploration="od">
<h4 class="attribute-name box-title" title="({{localize 'ACKS.exploration.od.abrev'}}) {{localize 'ACKS.exploration.od.long'}}"><a>{{ localize "ACKS.exploration.od.short" }}</a>
</h4>
<div class="attribute-value">
<input name="data.exploration.od" type="text" value="{{data.exploration.od}}" placeholder="0" data-dtype="String" />
<input name="data.exploration.od" type="text" value="{{data.exploration.od}}" value="18" placeholder="0" data-dtype="String" />
</div>
</li>
<li class="attribute flexrow" data-exploration="sd">
<h4 class="attribute-name box-title" title="({{localize 'ACKS.exploration.sd.abrev'}}) {{localize 'ACKS.exploration.sd.long'}}"><a>{{ localize "ACKS.exploration.sd.short" }}</a>
</h4>
<div class="attribute-value">
<input name="data.exploration.sd" type="text" value="{{data.exploration.sd}}" placeholder="0" data-dtype="String" />
<input name="data.exploration.sd" type="text" value="{{data.exploration.sd}}" value="18" placeholder="0" data-dtype="String" />
</div>
</li>
<li class="attribute flexrow" data-exploration="ft">
<h4 class="attribute-name box-title" title="({{localize 'ACKS.exploration.ft.abrev'}}) {{localize 'ACKS.exploration.ft.long'}}"><a>{{ localize "ACKS.exploration.ft.short" }}</a>
</h4>
<div class="attribute-value">
<input name="data.exploration.ft" type="text" value="{{data.exploration.ft}}" placeholder="0" data-dtype="String" />
<input name="data.exploration.ft" type="text" value="{{data.exploration.ft}}" value="18" placeholder="0" data-dtype="String" />
</div>
</li>
</ul>

View File

@ -176,7 +176,7 @@
</h4>
</a>
</div>
<div class="field-long">{{mult item.data.quantity.value item.data.cost}}</div>
<div class="field-long">{{multround item.data.quantity.value item.data.cost}}</div>
<div class="field-short quantity">
<input value="{{item.data.quantity.value}}" type="text"
placeholder="0" />{{#if item.data.quantity.max}}<span>/{{item.data.quantity.max}}</span>{{/if}}