mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-21 23:13:39 +02:00
Compare commits
8 commits
a839ca0066
...
a62d28cd96
| Author | SHA1 | Date | |
|---|---|---|---|
| a62d28cd96 | |||
|
|
8d8dea81fe | ||
|
|
fb07938e54 | ||
|
|
c337338c8b | ||
|
|
f900011510 | ||
|
|
56a6613a73 | ||
|
|
e003db3ec1 | ||
|
|
66c90d69e3 |
17 changed files with 180 additions and 174 deletions
|
|
@ -1,78 +1,9 @@
|
||||||
# Contributing to Foundryborne
|
# Contributing to Daggerheart
|
||||||
|
|
||||||
Welcome! This is a community-driven project to bring [Daggerheart](https://www.daggerheart.com/) to [FoundryVTT](https://foundryvtt.com/) as a full system. We're excited to have you here and appreciate your interest in contributing.
|
Thank you for your interest in contributing to the Foundryborne project!
|
||||||
|
|
||||||
---
|
To ensure that all contributions align with our project goals and architectural standards, we ask that you **do not submit outside contributions without first receiving feedback from the development team.**
|
||||||
|
|
||||||
## 🤝 How to Contribute
|
If you have an idea or a fix you'd like to contribute, please start a discussion or open an issue first. We'd love to hear from you and collaborate on the best way to move forward!
|
||||||
|
|
||||||
We welcome contributions of all kinds:
|
Thank you for your understanding and support.
|
||||||
|
|
||||||
- Bug reports
|
|
||||||
- Feature suggestions
|
|
||||||
- Code contributions
|
|
||||||
- UI/UX mockups
|
|
||||||
- Documentation improvements
|
|
||||||
- Questions and discussions
|
|
||||||
|
|
||||||
Please be respectful and collaborative — we’re all here to build something great together.
|
|
||||||
|
|
||||||
### Community Translations
|
|
||||||
|
|
||||||
Please note that we are not accepting community translations in the main project. Instead, community translations should be published as a module.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧭 General Guidelines
|
|
||||||
|
|
||||||
- **Use GitHub Issues** to report bugs or propose features
|
|
||||||
- **Start a Discussion** for larger ideas or questions
|
|
||||||
- **Open a Pull Request** once you've confirmed your work aligns with project direction
|
|
||||||
- **Keep things modular and maintainable** — if you're not sure how to structure something, ask!
|
|
||||||
- **Orient your code on existing examples**, and feel free to suggest a standard if it makes things clearer
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🗂️ Project Structure
|
|
||||||
|
|
||||||
Please try to follow the general logic of the existing code when submitting PRs.
|
|
||||||
|
|
||||||
We encourage contributors to leave comments or open Discussions when proposing structural or organizational changes.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧾 Issue & PR Best Practices
|
|
||||||
|
|
||||||
**For Issues:**
|
|
||||||
|
|
||||||
- Use clear, descriptive titles
|
|
||||||
- Provide a concise explanation of the problem or idea
|
|
||||||
- Include reproduction steps or example scenarios if it's a bug
|
|
||||||
- Add screenshots or logs if helpful
|
|
||||||
|
|
||||||
**For Pull Requests:**
|
|
||||||
|
|
||||||
- Use a clear title summarizing the change
|
|
||||||
- Provide a brief description of what your code does and why
|
|
||||||
- Link to any related Issues
|
|
||||||
- Keep PRs focused — smaller is better
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔖 Labels and Boards
|
|
||||||
|
|
||||||
We use GitHub labels to help organize contributions. If your issue or PR relates to a specific category, feel free to tag it. There is also a GitHub Project Board to help track active work and priorities.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📣 Communication
|
|
||||||
|
|
||||||
Discussions are currently happening on GitHub — in Issues, PRs, and [GitHub Discussions](https://github.com/Foundryborne/daggerheart/discussions). You're welcome to use any of these, though we may consolidate to one in the future.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤗 Thank You!
|
|
||||||
|
|
||||||
Whether you're fixing a typo or designing entire mechanics — every contribution matters. Thank you for helping bring _Daggerheart_ to life in FoundryVTT through **Foundryborne**!
|
|
||||||
|
|
||||||
🐸🛠️
|
|
||||||
|
|
|
||||||
|
|
@ -355,6 +355,8 @@ Hooks.on(CONFIG.DH.HOOKS.hooksConfig.groupRollStart, async data => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const updateActorsRangeDependentEffects = async token => {
|
const updateActorsRangeDependentEffects = async token => {
|
||||||
|
if (!token) return;
|
||||||
|
|
||||||
const rangeMeasurement = game.settings.get(
|
const rangeMeasurement = game.settings.get(
|
||||||
CONFIG.DH.id,
|
CONFIG.DH.id,
|
||||||
CONFIG.DH.SETTINGS.gameSettings.variantRules
|
CONFIG.DH.SETTINGS.gameSettings.variantRules
|
||||||
|
|
|
||||||
21
lang/en.json
21
lang/en.json
|
|
@ -74,9 +74,7 @@
|
||||||
"name": "Summon",
|
"name": "Summon",
|
||||||
"tooltip": "Create tokens in the scene.",
|
"tooltip": "Create tokens in the scene.",
|
||||||
"error": "You do not have permission to summon tokens or there is no active scene.",
|
"error": "You do not have permission to summon tokens or there is no active scene.",
|
||||||
"invalidDrop": "You can only drop Actor entities to summon.",
|
"invalidDrop": "You can only drop Actor entities to summon."
|
||||||
"chatMessageTitle": "Test2",
|
|
||||||
"chatMessageHeaderTitle": "Summoning"
|
|
||||||
},
|
},
|
||||||
"transform": {
|
"transform": {
|
||||||
"name": "Transform",
|
"name": "Transform",
|
||||||
|
|
@ -2016,6 +2014,10 @@
|
||||||
"hint": "Multiply any damage dealt to you by this number"
|
"hint": "Multiply any damage dealt to you by this number"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Battlepoints": {
|
||||||
|
"full": "Battlepoints",
|
||||||
|
"short": "BP"
|
||||||
|
},
|
||||||
"Bonuses": {
|
"Bonuses": {
|
||||||
"rest": {
|
"rest": {
|
||||||
"downtimeAction": "Downtime Action",
|
"downtimeAction": "Downtime Action",
|
||||||
|
|
@ -2431,6 +2433,7 @@
|
||||||
"next": "Next",
|
"next": "Next",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"noTarget": "No current target",
|
"noTarget": "No current target",
|
||||||
|
"optionalThing": "Optional {thing}",
|
||||||
"partner": "Partner",
|
"partner": "Partner",
|
||||||
"player": {
|
"player": {
|
||||||
"single": "Player",
|
"single": "Player",
|
||||||
|
|
@ -2457,6 +2460,7 @@
|
||||||
"rollDamage": "Roll Damage",
|
"rollDamage": "Roll Damage",
|
||||||
"rollWith": "{roll} Roll",
|
"rollWith": "{roll} Roll",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
|
"saveSettings": "Save Settings",
|
||||||
"scalable": "Scalable",
|
"scalable": "Scalable",
|
||||||
"scars": "Scars",
|
"scars": "Scars",
|
||||||
"situationalBonus": "Situational Bonus",
|
"situationalBonus": "Situational Bonus",
|
||||||
|
|
@ -2611,8 +2615,14 @@
|
||||||
},
|
},
|
||||||
"Weapon": {
|
"Weapon": {
|
||||||
"weaponType": "Weapon Type",
|
"weaponType": "Weapon Type",
|
||||||
"primaryWeapon": "Primary Weapon",
|
"primaryWeapon": {
|
||||||
"secondaryWeapon": "Secondary Weapon"
|
"full": "Primary Weapon",
|
||||||
|
"short": "Primary"
|
||||||
|
},
|
||||||
|
"secondaryWeapon": {
|
||||||
|
"full": "Secondary Weapon",
|
||||||
|
"short": "Secondary"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MACROS": {
|
"MACROS": {
|
||||||
|
|
@ -3067,6 +3077,7 @@
|
||||||
},
|
},
|
||||||
"ItemBrowser": {
|
"ItemBrowser": {
|
||||||
"title": "Daggerheart Compendium Browser",
|
"title": "Daggerheart Compendium Browser",
|
||||||
|
"windowTitle": "Compendium Browser",
|
||||||
"hint": "Select a Folder in sidebar to start browsing through the compendium",
|
"hint": "Select a Folder in sidebar to start browsing through the compendium",
|
||||||
"browserSettings": "Browser Settings",
|
"browserSettings": "Browser Settings",
|
||||||
"columnName": "Name",
|
"columnName": "Name",
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,10 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
|
||||||
this.character = character;
|
this.character = character;
|
||||||
|
|
||||||
this.setup = {
|
this.setup = {
|
||||||
traits: this.character.system.traits,
|
traits: Object.keys(this.character.system.traits).reduce((acc, key) => {
|
||||||
|
acc[key] = { value: null };
|
||||||
|
return acc;
|
||||||
|
}, {}),
|
||||||
ancestryName: {
|
ancestryName: {
|
||||||
primary: '',
|
primary: '',
|
||||||
secondary: ''
|
secondary: ''
|
||||||
|
|
@ -377,8 +380,10 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
|
||||||
];
|
];
|
||||||
return Object.values(this.setup.traits).reduce((acc, x) => {
|
return Object.values(this.setup.traits).reduce((acc, x) => {
|
||||||
const index = traitCompareArray.indexOf(x.value);
|
const index = traitCompareArray.indexOf(x.value);
|
||||||
|
if (index === -1) return acc;
|
||||||
|
|
||||||
traitCompareArray.splice(index, 1);
|
traitCompareArray.splice(index, 1);
|
||||||
acc += index !== -1;
|
acc += 1;
|
||||||
return acc;
|
return acc;
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
tag: 'div',
|
tag: 'div',
|
||||||
window: {
|
window: {
|
||||||
frame: true,
|
frame: true,
|
||||||
title: 'Compendium Browser',
|
title: 'DAGGERHEART.UI.ItemBrowser.windowTitle',
|
||||||
icon: 'fa-solid fa-book-atlas',
|
icon: 'fa-solid fa-book-atlas',
|
||||||
positioned: true,
|
positioned: true,
|
||||||
resizable: true
|
resizable: true
|
||||||
|
|
@ -583,7 +583,9 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
const { itemUuid } = event.target.closest('[data-item-uuid]').dataset,
|
const { itemUuid } = event.target.closest('[data-item-uuid]').dataset,
|
||||||
item = await foundry.utils.fromUuid(itemUuid),
|
item = await foundry.utils.fromUuid(itemUuid),
|
||||||
dragData = item.toDragData();
|
dragData = item.toDragData();
|
||||||
|
|
||||||
event.dataTransfer.setData('text/plain', JSON.stringify(dragData));
|
event.dataTransfer.setData('text/plain', JSON.stringify(dragData));
|
||||||
|
event.dataTransfer.setDragImage(event.target.querySelector('img'), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
_canDragStart() {
|
_canDragStart() {
|
||||||
|
|
|
||||||
|
|
@ -74,12 +74,13 @@ export const typeConfig = {
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
key: 'type',
|
key: 'type',
|
||||||
label: 'DAGGERHEART.GENERAL.type'
|
label: 'DAGGERHEART.GENERAL.type',
|
||||||
|
format: type => type ? `TYPES.Item.${type}` : '-'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'system.secondary',
|
key: 'system.secondary',
|
||||||
label: 'DAGGERHEART.UI.ItemBrowser.subtype',
|
label: 'DAGGERHEART.UI.ItemBrowser.subtype',
|
||||||
format: isSecondary => (isSecondary ? 'secondary' : isSecondary === false ? 'primary' : '-')
|
format: isSecondary => (isSecondary ? 'DAGGERHEART.ITEMS.Weapon.secondaryWeapon.short' : isSecondary === false ? 'DAGGERHEART.ITEMS.Weapon.primaryWeapon.short' : '-')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'system.tier',
|
key: 'system.tier',
|
||||||
|
|
@ -99,8 +100,8 @@ export const typeConfig = {
|
||||||
key: 'system.secondary',
|
key: 'system.secondary',
|
||||||
label: 'DAGGERHEART.UI.ItemBrowser.subtype',
|
label: 'DAGGERHEART.UI.ItemBrowser.subtype',
|
||||||
choices: [
|
choices: [
|
||||||
{ value: false, label: 'DAGGERHEART.ITEMS.Weapon.primaryWeapon' },
|
{ value: false, label: 'DAGGERHEART.ITEMS.Weapon.primaryWeapon.full' },
|
||||||
{ value: true, label: 'DAGGERHEART.ITEMS.Weapon.secondaryWeapon' }
|
{ value: true, label: 'DAGGERHEART.ITEMS.Weapon.secondaryWeapon.full' }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -258,11 +259,13 @@ export const typeConfig = {
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
key: 'system.type',
|
key: 'system.type',
|
||||||
label: 'DAGGERHEART.GENERAL.type'
|
label: 'DAGGERHEART.GENERAL.type',
|
||||||
|
format: type => type ? `DAGGERHEART.CONFIG.DomainCardTypes.${type}` : '-'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'system.domain',
|
key: 'system.domain',
|
||||||
label: 'DAGGERHEART.GENERAL.Domain.single'
|
label: 'DAGGERHEART.GENERAL.Domain.single',
|
||||||
|
format: domain => domain ? CONFIG.DH.DOMAIN.allDomains()[domain].label : '-'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'system.level',
|
key: 'system.level',
|
||||||
|
|
@ -374,7 +377,7 @@ export const typeConfig = {
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
key: 'system.linkedClass',
|
key: 'system.linkedClass',
|
||||||
label: 'Class',
|
label: 'TYPES.Item.class',
|
||||||
format: linkedClass => linkedClass?.name ?? 'DAGGERHEART.UI.ItemBrowser.missing'
|
format: linkedClass => linkedClass?.name ?? 'DAGGERHEART.UI.ItemBrowser.missing'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -386,7 +389,7 @@ export const typeConfig = {
|
||||||
filters: [
|
filters: [
|
||||||
{
|
{
|
||||||
key: 'system.linkedClass.uuid',
|
key: 'system.linkedClass.uuid',
|
||||||
label: 'Class',
|
label: 'TYPES.Item.class',
|
||||||
choices: items => {
|
choices: items => {
|
||||||
const list = items
|
const list = items
|
||||||
.filter(item => item.system.linkedClass)
|
.filter(item => item.system.linkedClass)
|
||||||
|
|
@ -410,7 +413,8 @@ export const typeConfig = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'system.mainTrait',
|
key: 'system.mainTrait',
|
||||||
label: 'DAGGERHEART.GENERAL.Trait.single'
|
label: 'DAGGERHEART.GENERAL.Trait.single',
|
||||||
|
format: trait => (trait ? `DAGGERHEART.CONFIG.Traits.${trait}.name` : '-')
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
filters: [
|
filters: [
|
||||||
|
|
|
||||||
|
|
@ -68,31 +68,33 @@
|
||||||
"type": "withinRange",
|
"type": "withinRange",
|
||||||
"target": "hostile",
|
"target": "hostile",
|
||||||
"range": "melee"
|
"range": "melee"
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.resistance.physical.resistance",
|
"key": "system.resistance.physical.resistance",
|
||||||
"mode": 5,
|
"type": "override",
|
||||||
"value": "1",
|
"value": 1,
|
||||||
"priority": null
|
"priority": null,
|
||||||
|
"phase": "initial"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "system.disadvantageSources",
|
"key": "system.disadvantageSources",
|
||||||
"mode": 2,
|
"type": "add",
|
||||||
"value": "Retract",
|
"value": "Action rolls",
|
||||||
"priority": null
|
"priority": null,
|
||||||
|
"phase": "initial"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"duration": {
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"value": null,
|
||||||
"combat": null,
|
"units": "seconds",
|
||||||
"seconds": null,
|
"expiry": null,
|
||||||
"rounds": null,
|
"expired": false
|
||||||
"turns": null,
|
|
||||||
"startRound": null,
|
|
||||||
"startTurn": null
|
|
||||||
},
|
},
|
||||||
"description": "<p>While in your shell, you have resistance to physical damage, you have disadvantage on action rolls, and you can’t move.</p>",
|
"description": "<p>While in your shell, you have resistance to physical damage, you have disadvantage on action rolls, and you can’t move.</p>",
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
|
|
@ -102,6 +104,16 @@
|
||||||
"_stats": {
|
"_stats": {
|
||||||
"compendiumSource": null
|
"compendiumSource": null
|
||||||
},
|
},
|
||||||
|
"start": {
|
||||||
|
"time": 0,
|
||||||
|
"combat": null,
|
||||||
|
"combatant": null,
|
||||||
|
"initiative": null,
|
||||||
|
"round": null,
|
||||||
|
"turn": null
|
||||||
|
},
|
||||||
|
"showIcon": 1,
|
||||||
|
"folder": null,
|
||||||
"_key": "!items.effects!UFR67BUOhNGLFyg9.3V4FPoyjJUnFP9WS"
|
"_key": "!items.effects!UFR67BUOhNGLFyg9.3V4FPoyjJUnFP9WS"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -29,39 +29,28 @@
|
||||||
"type": "withinRange",
|
"type": "withinRange",
|
||||||
"target": "hostile",
|
"target": "hostile",
|
||||||
"range": "melee"
|
"range": "melee"
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.advantageSources",
|
"key": "system.advantageSources",
|
||||||
"mode": 2,
|
"type": "add",
|
||||||
"value": "In an area with low light or heavy shadow: hide, investigate, or perceive",
|
"value": "Rolls to hide, investigate, or perceive details in low light",
|
||||||
"priority": null
|
"priority": null,
|
||||||
},
|
"phase": "initial"
|
||||||
{
|
|
||||||
"key": "system.advantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "",
|
|
||||||
"priority": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "",
|
|
||||||
"priority": null
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"duration": {
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"value": null,
|
||||||
"combat": null,
|
"units": "seconds",
|
||||||
"seconds": null,
|
"expiry": null,
|
||||||
"rounds": null,
|
"expired": false
|
||||||
"turns": null,
|
|
||||||
"startRound": null,
|
|
||||||
"startTurn": null
|
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "<p>When you’re in an area with low light or heavy shadow, you have advantage on rolls to hide, investigate, or perceive details within that area.</p>",
|
||||||
"origin": null,
|
"origin": null,
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
"transfer": true,
|
"transfer": true,
|
||||||
|
|
@ -71,6 +60,16 @@
|
||||||
"_stats": {
|
"_stats": {
|
||||||
"compendiumSource": null
|
"compendiumSource": null
|
||||||
},
|
},
|
||||||
|
"start": {
|
||||||
|
"time": 0,
|
||||||
|
"combat": null,
|
||||||
|
"combatant": null,
|
||||||
|
"initiative": null,
|
||||||
|
"round": null,
|
||||||
|
"turn": null
|
||||||
|
},
|
||||||
|
"showIcon": 1,
|
||||||
|
"folder": null,
|
||||||
"_key": "!items.effects!aMla3xQuCHEwORGD.pCp32u7UwqxCI4WW"
|
"_key": "!items.effects!aMla3xQuCHEwORGD.pCp32u7UwqxCI4WW"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -132,27 +132,29 @@
|
||||||
"type": "withinRange",
|
"type": "withinRange",
|
||||||
"target": "hostile",
|
"target": "hostile",
|
||||||
"range": "melee"
|
"range": "melee"
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.advantageSources",
|
"key": "system.advantageSources",
|
||||||
"mode": 2,
|
"type": "add",
|
||||||
"value": "1",
|
"value": "On Attacks",
|
||||||
"priority": null
|
"priority": null,
|
||||||
|
"phase": "initial"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"duration": {
|
||||||
|
"type": "temporary",
|
||||||
|
"description": "<p>Until you or an ally rolls a failure with Fear.</p>"
|
||||||
|
}
|
||||||
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"value": null,
|
||||||
"combat": null,
|
"units": "seconds",
|
||||||
"seconds": null,
|
"expiry": null,
|
||||||
"rounds": null,
|
"expired": false
|
||||||
"turns": null,
|
|
||||||
"startRound": null,
|
|
||||||
"startTurn": null
|
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "<p>You gain advantage on attack rolls until you or an ally rolls a failure with Fear.</p>",
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
"statuses": [],
|
"statuses": [],
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
|
|
@ -160,6 +162,16 @@
|
||||||
"_stats": {
|
"_stats": {
|
||||||
"compendiumSource": null
|
"compendiumSource": null
|
||||||
},
|
},
|
||||||
|
"start": {
|
||||||
|
"time": 0,
|
||||||
|
"combat": null,
|
||||||
|
"combatant": null,
|
||||||
|
"initiative": null,
|
||||||
|
"round": null,
|
||||||
|
"turn": null
|
||||||
|
},
|
||||||
|
"showIcon": 1,
|
||||||
|
"folder": null,
|
||||||
"_key": "!items.effects!Ef1JsUG50LIoKx2F.s7ma4TNgAvt0ZgEW"
|
"_key": "!items.effects!Ef1JsUG50LIoKx2F.s7ma4TNgAvt0ZgEW"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,11 @@
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.no-horizontal-padding {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
legend {
|
legend {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
|
|
@ -250,6 +255,11 @@
|
||||||
height: 65px;
|
height: 65px;
|
||||||
background: url(../assets/svg/trait-shield.svg) no-repeat;
|
background: url(../assets/svg/trait-shield.svg) no-repeat;
|
||||||
background-size: 100%;
|
background-size: 100%;
|
||||||
|
padding-top: 3px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
row-gap: 3px;
|
||||||
|
|
||||||
div {
|
div {
|
||||||
filter: drop-shadow(0 0 3px black);
|
filter: drop-shadow(0 0 3px black);
|
||||||
|
|
@ -278,6 +288,15 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 5px;
|
gap: 5px;
|
||||||
|
|
||||||
|
&.separated {
|
||||||
|
border-bottom: 2px solid;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group {
|
||||||
|
padding: 0 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
.experience-inner-container {
|
.experience-inner-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,11 @@
|
||||||
height: 65px;
|
height: 65px;
|
||||||
background: url(../assets/svg/trait-shield.svg) no-repeat;
|
background: url(../assets/svg/trait-shield.svg) no-repeat;
|
||||||
background-size: 100%;
|
background-size: 100%;
|
||||||
padding-top: 4px;
|
padding-top: 3px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
row-gap: 3px;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-size: var(--font-size-10);
|
font-size: var(--font-size-10);
|
||||||
|
|
|
||||||
|
|
@ -4,18 +4,26 @@
|
||||||
data-group='{{tabs.experience.group}}'
|
data-group='{{tabs.experience.group}}'
|
||||||
>
|
>
|
||||||
<div class="main-selections-container">
|
<div class="main-selections-container">
|
||||||
<fieldset class="section-container">
|
<fieldset class="section-container no-horizontal-padding">
|
||||||
<legend>{{localize "DAGGERHEART.APPLICATIONS.CharacterCreation.initialExperiences"}} {{experience.nrSelected}}/{{experience.nrTotal}}</legend>
|
<legend>{{localize "DAGGERHEART.APPLICATIONS.CharacterCreation.initialExperiences"}} {{experience.nrSelected}}/{{experience.nrTotal}}</legend>
|
||||||
<div class="experiences-inner-container">
|
<div class="experiences-inner-container">
|
||||||
{{#each experience.values as |experience id|}}
|
{{#each experience.values as |experience id|}}
|
||||||
<div class="experience-container">
|
<div class="experience-container {{#unless @last}}separated{{/unless}}">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>{{localize "DAGGERHEART.GENERAL.label"}}</label>
|
||||||
<div class="experience-inner-container">
|
<div class="experience-inner-container">
|
||||||
<input class="experience-description" type="text" name="{{concat "experiences." id ".name" }}" value="{{experience.name}}" placeholder="{{localize "DAGGERHEART.APPLICATIONS.CharacterCreation.newExperience"}}" />
|
<input class="experience-description" type="text" name="{{concat "experiences." id ".name" }}" value="{{experience.name}}" placeholder="{{localize "DAGGERHEART.APPLICATIONS.CharacterCreation.newExperience"}}" />
|
||||||
<span class="experience-value">{{numberFormat this.value sign=true}}</span>
|
<span class="experience-value">{{numberFormat this.value sign=true}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>{{localize "DAGGERHEART.GENERAL.optionalThing" thing=(localize "DAGGERHEART.GENERAL.description")}}</label>
|
||||||
|
<div class="form-fields">
|
||||||
<textarea name="{{concat "experiences." id ".description"}}">{{experience.description}}</textarea>
|
<textarea name="{{concat "experiences." id ".description"}}">{{experience.description}}</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
<footer>
|
<footer>
|
||||||
<button data-action="finish">{{localize "Save Settings"}}</button>
|
<button data-action="finish">{{localize "DAGGERHEART.GENERAL.saveSettings"}}</button>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
{{formGroup systemFields.duration.fields.type value=source.system.duration.type localize=true }}
|
{{formGroup systemFields.duration.fields.type value=source.system.duration.type localize=true }}
|
||||||
|
|
||||||
<div class="form-group slim duration-description">
|
<div class="form-group slim duration-description {{#if (eq source.system.duration.type 'temporary')}}visible{{/if}}">
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
{{formInput systemFields.duration.fields.description value=source.system.duration.description localize=true }}
|
{{formInput systemFields.duration.fields.description value=source.system.duration.description localize=true }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
<h1 class='item-name'><input type='text' name='name' value='{{source.name}}' /></h1>
|
<h1 class='item-name'><input type='text' name='name' value='{{source.name}}' /></h1>
|
||||||
<div class='item-description'>
|
<div class='item-description'>
|
||||||
{{#if source.system.secondary}}
|
{{#if source.system.secondary}}
|
||||||
<h3>{{localize "DAGGERHEART.ITEMS.Weapon.secondaryWeapon"}}</h3>
|
<h3>{{localize "DAGGERHEART.ITEMS.Weapon.secondaryWeapon.full"}}</h3>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h3>{{localize "DAGGERHEART.ITEMS.Weapon.primaryWeapon"}}</h3>
|
<h3>{{localize "DAGGERHEART.ITEMS.Weapon.primaryWeapon.full"}}</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<h3>
|
<h3>
|
||||||
{{localize (concat 'DAGGERHEART.CONFIG.Traits.' source.system.attack.roll.trait '.short')}}
|
{{localize (concat 'DAGGERHEART.CONFIG.Traits.' source.system.attack.roll.trait '.short')}}
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@
|
||||||
{{#each category as |grouping index|}}
|
{{#each category as |grouping index|}}
|
||||||
<div class="battlepoint-grouping-container">
|
<div class="battlepoint-grouping-container">
|
||||||
{{#if grouping.nr}}
|
{{#if grouping.nr}}
|
||||||
<label>{{key}} BP: {{concat (localize grouping.description) ' ' '('grouping.nr 'x)'}}</label>
|
<label>{{key}} {{localize "DAGGERHEART.GENERAL.Battlepoints.short"}} - {{concat (localize grouping.description) ' ' '('grouping.nr 'x)'}}</label>
|
||||||
{{else}}
|
{{else}}
|
||||||
<label class="unselected-grouping">{{key}} BP - {{localize grouping.description}}</label>
|
<label class="unselected-grouping">{{key}} {{localize "DAGGERHEART.GENERAL.Battlepoints.short"}} - {{localize grouping.description}}</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
{{else}}
|
{{else}}
|
||||||
<input type="checkbox" data-combat-id="{{@root.combatId}}" data-category="{{toggle.categoryKey}}" data-grouping="{{toggle.toggleKey}}" {{checked toggle.checked}} />
|
<input type="checkbox" data-combat-id="{{@root.combatId}}" data-category="{{toggle.categoryKey}}" data-grouping="{{toggle.toggleKey}}" {{checked toggle.checked}} />
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<label class="unselected-grouping">{{toggle.categoryKey}} BP: {{localize toggle.description}}</label>
|
<label class="unselected-grouping">{{toggle.categoryKey}} {{localize "DAGGERHEART.GENERAL.Battlepoints.short"}}: {{localize toggle.description}}</label>
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<h2 class="tooltip-title">{{item.name}}</h2>
|
<h2 class="tooltip-title">{{item.name}}</h2>
|
||||||
<div class="tags">
|
<div class="tags">
|
||||||
<div class="tag">
|
<div class="tag">
|
||||||
<span>{{#if item.system.secondary}}{{localize "DAGGERHEART.ITEMS.Weapon.secondaryWeapon"}}{{else}}{{localize "DAGGERHEART.ITEMS.Weapon.primaryWeapon"}}{{/if}}</span>
|
<span>{{#if item.system.secondary}}{{localize "DAGGERHEART.ITEMS.Weapon.secondaryWeapon.full"}}{{else}}{{localize "DAGGERHEART.ITEMS.Weapon.primaryWeapon.full"}}{{/if}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="tag">
|
<div class="tag">
|
||||||
{{#with (lookup config.GENERAL.burden item.system.burden) as | burden |}}
|
{{#with (lookup config.GENERAL.burden item.system.burden) as | burden |}}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue