Skip to content

Commit

Permalink
adding rules to components picker
Browse files Browse the repository at this point in the history
  • Loading branch information
dmdorman committed May 13, 2023
1 parent 24d2f61 commit 354a15e
Show file tree
Hide file tree
Showing 8 changed files with 163 additions and 73 deletions.
4 changes: 2 additions & 2 deletions Rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ Advantages
Area Of Effect (AoE)
Circle - character ability affects all in cirlce
Small (1) - 1m
Medium (2) - 5m
Large (3) - 25m
Medium (2) - 3m
Large (3) - 5m

Cone - character ability affects all in cone
Small (1) - 5m
Expand Down
87 changes: 69 additions & 18 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,15 @@
"None": "None",
"Other": "Other",
"Name": "Name",
"AbilitiesPerks": "Abilities & Perks"
"AbilitiesPerks": "Abilities & Perks",
"EmptyString": ""
},
"Dice": {
"1d4": "1d4",
"1d6": "1d6",
"1d8": "1d8",
"1d10": "1d10",
"1d12": "1d12"
},
"Settings": {
"ArmorBudget": {
Expand Down Expand Up @@ -91,55 +99,93 @@
"advantages": "Advantages",
"disadvantages": "Disadvantages",
"dice": {
"Name": "Dice"
"Name": "Dice",
"Root": "What dice an attack made using this ability will use"
},
"updefenseself": {
"Name": "Up Defense - Self"
"Name": "Up Defense - Self",
"Root": "Add defense to user"
},
"updefenseothers": {
"Name": "Up Defense - Others"
"Name": "Up Defense - Others",
"Root": "Add defense to other characters"
},
"staticdefense": {
"Name": "Static Defense"
"Name": "Static Defense",
"Root": "Add temporary defense to yourself or other characters"
},
"dash": {
"Name": "Dash"
"Name": "Dash",
"Root": "Character moves during ability use"
},
"teleport": {
"Name": "Teleport"
"Name": "Teleport",
"Root": "Character instantly appears a distance away from starting location"
},
"fly": {
"Name": "Fly",
"Root": "Character can fly during ability use"
},
"pull": {
"Name": "Pull"
"Name": "Pull",
"Root": "Pull targeted character (Note: it is not necessary to purchase ranged for this ability to work)"
},
"push": {
"Name": "Push"
"Name": "Push",
"Root": "Push targeted character"
},
"manipulate": {
"Name": "Manipulate"
"Name": "Manipulate",
"Root": "Move targeted character in any direction"
},
"sizechange": {
"Name": "Size Change"
"Name": "Size Change",
"Root": "Temporarily change Character size. You must choose at the time of purchase whether or not it shrinks or enlarges the character when used",
"Minor": "Alter character size by 1",
"Major": "Alter character size by 2",
"FullControl": "Alter character size up to Minimum or Maximum"
},
"ranged": {
"Name": "Ranged"
"Name": "Ranged",
"Root": "Ability can be used on targets some distance from the user",
"Short": "Can target anything within 10m of character current position",
"Medium": "Can target anything within 100m of character current position",
"Far": "Can target anything the character can see"
},
"areaofeffectcircle": {
"Name": "Area of Effect - Circle"
"Name": "Area of Effect - Circle",
"Root": "Ability affects all in a cirlce"
},
"areaofeffectcone": {
"Name": "Area of Effect - Cone"
"Name": "Area of Effect - Cone",
"Root": "Ability affects all in a cone"
},
"areaofeffectline": {
"Name": "Area of Effect - Line"
"Name": "Area of Effect - Line",
"Root": "Ability affects all in a line"
},
"areaofeffectadvantages": {
"Name": "Area of Effect Advantages"
"Name": "Area of Effect Advantages",
"Root": "",
"SmartTargeting": "AoE abilities only effect desired characters"
},
"other": {
"Name": "Other"
"Name": "Other",
"Root": ""
},
"hurtstouse": {
"Name": "Hurts to Use"
"Name": "Hurts to Use",
"Root": "Using this ability causes damage to the user",
"Minor": "1HP of damage",
"Major": "1d4+1 HP of damage",
"Massive": "1d6+2 HP of damage",
"Extreme": "Causes character death"
},
"doesntrequireextremities": {
"Description": "Ability can be used without extremeties. (Ex: a character can still use ability with their hands tied behind their back)"
},
"physicalitem": {
"Description": "Ability is attached to something physical that the character has. That means it can be taken away, but can also be given."
},
"Options": {
"1d4": "1d4",
Expand Down Expand Up @@ -237,5 +283,10 @@
"Attack": {
"AccuracyModifiers": "Accuracy Modifiers",
"Aim": "Aim"
},
"Movement": {
"1x": "1x Character Movement",
"2x": "2x Character Movement",
"4x": "4x Character Movement"
}
}
3 changes: 2 additions & 1 deletion scripts/chat/ability-chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ export async function abilityChat(item) {
content: cardContent,
speaker: speaker,
borderColor: borderColor,
itemId: item._id
itemId: item._id,
sound: CONFIG.sounds.dice
}

const message = await UnTChatMessage.create(chatData)
Expand Down
6 changes: 4 additions & 2 deletions scripts/chat/damage-chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ export async function damageChat(rootMessageId, item, hitRollTotal) {
content: cardContent,
speaker: speaker,
borderColor: borderColor,
itemId: item._id
itemId: item._id,
sound: CONFIG.sounds.dice
}

return UnTChatMessage.create(chatData)
Expand Down Expand Up @@ -175,7 +176,8 @@ export async function appliedDamageChat(rootMessageId, item, targetActor, hitRol
content: cardContent,
speaker: speaker,
borderColor: borderColor,
itemId: item._id
itemId: item._id,
sound: CONFIG.sounds.dice
}

return UnTChatMessage.create(chatData)
Expand Down
117 changes: 69 additions & 48 deletions scripts/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,98 +48,119 @@ Rules.abilities.componentsPerOneCost = 3
Rules.abilities.components = {
"attacks": {
"dice": {
"1d4": { "cost": 1, "description": "Abilities.Components.Attacks.Dice.1d4"},
"1d6": { "cost": 3, "description": "Abilities.Components.Attacks.Dice.1d6"},
// "1d8": { "cost": 3, "description": "Abilities.Components.Attacks.Dice.1d8"},
// "1d10": { "cost": 4, "description": "Abilities.Components.Attacks.Dice.1d10"},
"1d12": { "cost": 5, "description": "Abilities.Components.Attacks.Dice.1d12"}
"root": { "description": "Item.Ability.Component.dice.Root" },
"1d4": { "cost": 1, "description": "General.EmptyString"},
"1d6": { "cost": 3, "description": "General.EmptyString"},
"1d12": { "cost": 5, "description": "General.EmptyString"}
}
},
"defenses": {
"updefenseself": {
"minor": { "cost": 2, "description": "Abilities.Components.Defenses.UpDefensesSelf.Minor" },
"major": { "cost": 3, "description": "Abilities.Components.Defenses.UpDefensesSelf.Major" }
"root": { "description": "Item.Ability.Component.updefenseself.Root" },
"minor": { "cost": 2, "description": "Dice.1d4" },
"major": { "cost": 3, "description": "Dice.1d6" }
},
"updefenseothers": {
"minor": { "cost": 3, "description": "Abilities.Components.Defenses.UpDefensesOthers.Minor" },
"major": { "cost": 4, "description": "Abilities.Components.Defenses.UpDefensesOthers.Major" }
"root": { "description": "Item.Ability.Component.updefenseothers.Root" },
"minor": { "cost": 3, "description": "Dice.1d4" },
"major": { "cost": 4, "description": "Dice.1d6" }
},
"staticdefense": {
"minor": { "cost": 1, "description": "Abilities.Components.Defenses.StaticDefense.Minor" },
"major": { "cost": 2, "description": "Abilities.Components.Defenses.StaticDefense.Major" },
"extreme": { "cost": 3, "description": "Abilities.Components.Defenses.StaticDefense.Extreme" }
"root": { "description": "Item.Ability.Component.staticdefense.Root" },
"minor": { "cost": 1, "description": "5" },
"major": { "cost": 2, "description": "10" },
"extreme": { "cost": 3, "description": "15" }
}
},
"movement": {
"dash": {
"minor": { "cost": 2, "description": "Abilities.Components.Movement.Dash.Minor" },
"major": { "cost": 3, "description": "Abilities.Components.Movement.Dash.Major" },
"extreme": { "cost": 4, "description": "Abilities.Components.Movement.Dash.Extreme" }
"root": { "description": "Item.Ability.Component.dash.Root" },
"minor": { "cost": 2, "description": "Movement.1x" },
"major": { "cost": 3, "description": "Movement.2x" },
"extreme": { "cost": 4, "description": "Movement.4x" }
},
"teleport": {
"minor": { "cost": 3, "description": "Abilities.Components.Movement.Teleport.Minor" },
"major": { "cost": 4, "description": "Abilities.Components.Movement.Teleport.Major" },
"extreme": { "cost": 5, "description": "Abilities.Components.Movement.Teleport.Extreme" }
"root": { "description": "Item.Ability.Component.teleport.Root" },
"minor": { "cost": 3, "description": "Movement.1x" },
"major": { "cost": 4, "description": "Movement.2x" },
"extreme": { "cost": 5, "description": "Movement.4x" }
},
"fly": {
"root": { "description": "Item.Ability.Component.fly.Root" },
"minor": { "cost": 3, "description": "Movement.1x" },
"major": { "cost": 4, "description": "Movement.2x" },
"extreme": { "cost": 5, "description": "Movement.4x" }
}
},
"control": {
"pull": {
"minor": { "cost": 1, "description": "Abilities.Components.Control.Pull.Minor" },
"major": { "cost": 2, "description": "Abilities.Components.Control.Pull.Major" },
"extreme": { "cost": 3, "description": "Abilities.Components.Control.Pull.Extreme" }
"root": { "description": "Item.Ability.Component.pull.Root" },
"minor": { "cost": 1, "description": "1m" },
"major": { "cost": 2, "description": "5m" },
"extreme": { "cost": 3, "description": "25m" }
},
"push": {
"minor": { "cost": 1, "description": "Abilities.Components.Control.Push.Minor" },
"major": { "cost": 2, "description": "Abilities.Components.Control.Push.Major" },
"extreme": { "cost": 3, "description": "Abilities.Components.Control.Push.Extreme" }
"root": { "description": "Item.Ability.Component.push.Root" },
"minor": { "cost": 1, "description": "1m" },
"major": { "cost": 2, "description": "5m" },
"extreme": { "cost": 3, "description": "25m" }
},
"manipulate": {
"minor": { "cost": 3, "description": "Abilities.Components.Control.Manipulate.Minor" },
"major": { "cost": 4, "description": "Abilities.Components.Control.Manipulate.Major" }
"root": { "description": "Item.Ability.Component.manipulate.Root" },
"minor": { "cost": 3, "description": "5m" },
"major": { "cost": 4, "description": "25m" }
}
},
"utility": {
"sizechange": {
"minor": { "cost": 1, "description": "Abilities.Components.Utility.SizeChange.Minor" },
"major": { "cost": 2, "description": "Abilities.Components.Utility.SizeChange.Major" },
"fullcontrol": { "cost": 3, "description": "Abilities.Components.Utility.SizeChange.FullControl" }
"root": { "description": "Item.Ability.Component.sizechange.Root" },
"minor": { "cost": 1, "description": "Item.Ability.Component.sizechange.Minor" },
"major": { "cost": 2, "description": "Item.Ability.Component.sizechange.Major" },
"fullcontrol": { "cost": 3, "description": "Item.Ability.Component.sizechange.FullControl" }
}
},
"advantages": {
"ranged": {
"short": { "cost": 1, "description": "Abilities.Components.Advantages.Ranged.Short" },
"medium": { "cost": 2, "description": "Abilities.Components.Advantages.Ranged.Medium" },
"far": { "cost": 3, "description": "Abilities.Components.Advantages.Ranged.Large" }
"root": { "description": "Item.Ability.Component.ranged.Root" },
"short": { "cost": 1, "description": "Item.Ability.Component.ranged.Short" },
"medium": { "cost": 2, "description": "Item.Ability.Component.ranged.Medium" },
"far": { "cost": 3, "description": "Item.Ability.Component.ranged.Far" }
},
"areaofeffectcircle": {
"small": { "cost": 1, "description": "Abilities.Components.Advantages.AreaOfEffect.Circle.Small" },
"medium": { "cost": 2, "description": "Abilities.Components.Advantages.AreaOfEffect.Circle.Medium" },
"large": { "cost": 3, "description": "Abilities.Components.Advantages.AreaOfEffect.Circle.Large" }
"root": { "description": "Item.Ability.Component.areaofeffectcircle.Root" },
"small": { "cost": 1, "description": "1m" },
"medium": { "cost": 2, "description": "3m" },
"large": { "cost": 3, "description": "5m" }
},
"areaofeffectcone": {
"small": { "cost": 1, "description": "Abilities.Components.Advantages.AreaOfEffect.Cone.Small" },
"medium": { "cost": 2, "description": "Abilities.Components.Advantages.AreaOfEffect.Cone.Medium" },
"large": { "cost": 3, "description": "Abilities.Components.Advantages.AreaOfEffect.Cone.Large" }
"root": { "description": "Item.Ability.Component.areaofeffectcone.Root" },
"small": { "cost": 1, "description": "5m" },
"medium": { "cost": 2, "description": "10m" },
"large": { "cost": 3, "description": "15m" }
},
"areaofeffectline": {
"small": { "cost": 1, "description": "Abilities.Components.Advantages.AreaOfEffect.Line.Small" },
"medium": { "cost": 2, "description": "Abilities.Components.Advantages.AreaOfEffect.Line.Medium" },
"large": { "cost": 3, "description": "Abilities.Components.Advantages.AreaOfEffect.Line.Large" }
"root": { "description": "Item.Ability.Component.areaofeffectline.Root" },
"small": { "cost": 1, "description": "5m" },
"medium": { "cost": 2, "description": "25m" },
"large": { "cost": 3, "description": "125m" }
},
"areaofeffectadvantages": {
"smarttargeting": { "cost": 1, "description": "Abilities.Components.Advantages.AreaOfEffect.Advantages.SmartTargeting" }
"root": { "description": "Item.Ability.Component.areaofeffectadvantages.Root" },
"smarttargeting": { "cost": 1, "description": "Item.Ability.Component.areaofeffectadvantages.SmartTargeting" }
},
"other": {
"doesntrequireextremities": { "cost": 2, "description": "Abilities.Components.Advantages.Other.DoesntRequireExtremities" },
"physicalitem": { "cost": 0, "description": "Abilities.Components.Advantages.AreaOfEffect.Other.PhysicalItem" }
"root": { "description": "Item.Ability.Component.other.Root" },
"doesntrequireextremities": { "cost": 2, "description": "Item.Ability.Component.doesntrequireextremities.Description" },
"physicalitem": { "cost": 0, "description": "Item.Ability.Component.physicalitem.Description" }
}
},
"disadvantages": {
"hurtstouse": {
"minor": { "cost": -2, "description": "Abilities.Components.Disadvantages.HurtsToUse.Minor" },
"major": { "cost": -3, "description": "Abilities.Components.Disadvantages.HurtsToUse.Major" },
"massive": { "cost": -4, "description": "Abilities.Components.Disadvantages.HurtsToUse.Massive" },
"extreme": { "cost": -5, "description": "Abilities.Components.Disadvantages.HurtsToUse.Extreme" }
"root": { "description": "Item.Ability.Component.hurtstouse.Root" },
"minor": { "cost": -2, "description": "Item.Ability.Component.hurtstouse.Minor" },
"major": { "cost": -3, "description": "Item.Ability.Component.hurtstouse.Major" },
"massive": { "cost": -4, "description": "Item.Ability.Component.hurtstouse.Massive" },
"extreme": { "cost": -5, "description": "Item.Ability.Component.hurtstouse.Extreme" }
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions scripts/handlebars-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,16 @@ export function initializeHandlebarsHelpers() {

return actorAbilityPerkCost.reduce((accumulator, currentValue) => accumulator + currentValue)
});

Handlebars.registerHelper('getComponentDescription', function(typeId, componentId, optionId) {
UnT.log(false, CONFIG.UnT.abilities.components[typeId][componentId][optionId])
UnT.log(false, CONFIG.UnT.abilities.components[typeId][componentId][optionId].description)
UnT.log(false, game.i18n.localize(CONFIG.UnT.abilities.components[typeId][componentId][optionId].description))

const description = game.i18n.localize(CONFIG.UnT.abilities.components[typeId][componentId][optionId].description)

if (description === "") { return ""; }

return " (" + description + ")"
});
}
5 changes: 4 additions & 1 deletion templates/ComponentPicker.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@
<div>{{localizeVariableKey "Item.Ability.Component" typeId emptyOptions=true}}</div>

{{#each typeData as |componentData componentId|}}
<div class="UnT-tab">{{localizeVariableKey "Item.Ability.Component" componentId "Name" emptyOptions=true}}</div>
<div class="UnT-tab">{{localizeVariableKey "Item.Ability.Component" componentId "Name" emptyOptions=true}} {{getComponentDescription typeId componentId "root"}}</div>
{{#each componentData as |optionData optionId|}}
<div class="flex-row UnT-tab2">
{{#if (ne optionId "root")}}
<input type="checkbox" name="system.components.{{typeId}}.{{componentId}}.{{optionId}}"
{{#if (hasComponent @root.item typeId componentId optionId)}}checked{{/if}}
>
<div>
{{localizeVariableKey "Item.Ability.Component.Options" optionId emptyOptions=true}} ({{optionData.cost}})
{{getComponentDescription typeId componentId optionId}}
</div>
{{/if}}
</div>
{{/each}}
{{/each}}
Expand Down
Loading

0 comments on commit 354a15e

Please sign in to comment.