Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1ccc9d2c34 | |||
| 9653672372 | |||
| c8a0dc7168 | |||
| 0de6a7e051 | |||
| eb0ab56794 | |||
| 4d96c15066 | |||
| fb5c408bbd | |||
| eea83aa10e | |||
| d03c5f2c1e | |||
| 1f2d82bd0b | |||
| 151312b994 | |||
| 10e668bc71 | |||
| 0ee42aef99 | |||
| ee3a5764f0 | |||
| 28ec390020 | |||
| 86ee9a44ec | |||
| abfc4e8443 | |||
| 707a318bb7 | |||
| 368e087e0d | |||
| f2e6415f33 | |||
| 4aa22195a3 | |||
| 7e517bfb12 | |||
| 57706629e1 | |||
| 29cb687bbb | |||
| 973daae15a | |||
| ff180ddd2e | |||
| 585b9a1ab5 | |||
| 4bed84358b | |||
| 666fb4c00a | |||
| ef9c011186 |
15
README.md
@@ -1,5 +1,14 @@
|
||||
# Hellborn Descended RPG
|
||||
# Hellborn Descended for Foundry VTT
|
||||
|
||||
## Description
|
||||
Enjoy Hellborn and all it's infernal glory on Foundry with this fully operational and detailed system for the greatest VTT in the world!
|
||||
|
||||
Hellborn Descended RPG for Foundry VTT is system.
|
||||
This system & product are used with permission granted as part of the partnership agreement between Foundry Gaming LLC and Studio Hex. It uses the following trademarks and/or copyrights:
|
||||
|
||||
© 2025 Studio Hex. Content copyright Alkis "Fern" Nteli-Stavrianeas, Eduard Gabriel Schuler. All rights reserved.
|
||||
Hellborn, Hellborn Descended is a trademark of Studio Hex.
|
||||
|
||||
No part of this publication may be reproduced, distributed, or transmitted in any form or by any means without the prior written permission of the copyright holder, except in the case of brief quotations used in reviews or educational purposes.
|
||||
|
||||
For inquiries on developing content for this ruleset please contact Studiohexgame@gmail, or either one of the copyright holders on Discord. Feel free to join our Discord server for further inquiries: https://discord.gg/qaWRhdEgBE
|
||||
|
||||
Foundry system by Uberwald ( https://www.uberwald.me )
|
||||
BIN
assets/icons/deal.webp
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/icons/tarot.webp
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
assets/tarots/0_The_Fool.webp
Normal file
|
After Width: | Height: | Size: 648 KiB |
BIN
assets/tarots/11_Justice.webp
Normal file
|
After Width: | Height: | Size: 357 KiB |
BIN
assets/tarots/13_Death.webp
Normal file
|
After Width: | Height: | Size: 417 KiB |
BIN
assets/tarots/15_The_Devil.webp
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
assets/tarots/1_The_Magician.webp
Normal file
|
After Width: | Height: | Size: 406 KiB |
BIN
assets/tarots/21_The_World.webp
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
assets/tarots/2_The_High_Priestess.webp
Normal file
|
After Width: | Height: | Size: 545 KiB |
BIN
assets/tarots/6_The_Lovers.webp
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
assets/tarots/8_Strength.webp
Normal file
|
After Width: | Height: | Size: 338 KiB |
BIN
assets/tarots/9_The_Hermit.webp
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
assets/ui/banner_compendium.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/ui/sheet_background_01.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -30,11 +30,15 @@ Hooks.once("init", function () {
|
||||
documents,
|
||||
}
|
||||
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: '3d6 + @stats.mind.value',
|
||||
decimals: 0
|
||||
};
|
||||
|
||||
CONFIG.Actor.documentClass = documents.HellbornActor
|
||||
CONFIG.Actor.dataModels = {
|
||||
character: models.HellbornCharacter,
|
||||
vehicle: models.HellbornVehicle,
|
||||
creature: models.HellbornCreature
|
||||
enemy: models.HellbornEnemy,
|
||||
}
|
||||
|
||||
CONFIG.Item.documentClass = documents.HellbornItem
|
||||
@@ -45,14 +49,15 @@ Hooks.once("init", function () {
|
||||
malefica: models.HellbornMalefica,
|
||||
equipment: models.HellbornEquipment,
|
||||
armor: models.HellbornArmor,
|
||||
deal: models.HellbornDeal,
|
||||
tarot: models.HellbornTarot,
|
||||
"species-trait": models.HellbornSpeciesTrait
|
||||
}
|
||||
|
||||
// Register sheet application classes
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornCharacterSheet , { types: ["character"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornVehicleSheet, { types: ["vehicle"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornEnemySheet, { types: ["enemy"], makeDefault: true })
|
||||
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet)
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornWeaponSheet, { types: ["weapon"], makeDefault: true })
|
||||
@@ -62,6 +67,8 @@ Hooks.once("init", function () {
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornMaleficaSheet, { types: ["malefica"], makeDefault: true })
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornSpeciesTraitSheet, { types: ["species-trait"], makeDefault: true })
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornArmorSheet, { types: ["armor"], makeDefault: true })
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornTarotSheet, { types: ["tarot"], makeDefault: true })
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornDealSheet, { types: ["deal"], makeDefault: true })
|
||||
|
||||
// Other Document Configuration
|
||||
CONFIG.ChatMessage.documentClass = documents.HellbornChatMessage
|
||||
|
||||
768
lang/en.json
@@ -1,114 +1,167 @@
|
||||
{
|
||||
"HELLBORN": {
|
||||
"Armor": {
|
||||
"FIELDS": {
|
||||
"bonus": {
|
||||
"label": "Bonus"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"reduction": {
|
||||
"label": "Reduction"
|
||||
},
|
||||
"resilience": {
|
||||
"label": "Resilience"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Enemy": {
|
||||
"FIELDS": {
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"notes": {
|
||||
"label": "Notes"
|
||||
},
|
||||
"flavorText": {
|
||||
"label": "Flavor Text"
|
||||
},
|
||||
"enemyType" : {
|
||||
"label": "Enemy Type"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Character": {
|
||||
"FIELDS": {
|
||||
"mortality": {
|
||||
"label": "Mortality",
|
||||
"current": {
|
||||
"label": "Mortality"
|
||||
}
|
||||
},
|
||||
"limboes": {
|
||||
"label": "Limboes"
|
||||
},
|
||||
"ammo": {
|
||||
"label": "Ammo"
|
||||
},
|
||||
"age": {
|
||||
"label": "Age"
|
||||
},
|
||||
"archetype": {
|
||||
"label": "Archetype"
|
||||
},
|
||||
"armor": {
|
||||
"value": {
|
||||
"label": "Protection"
|
||||
}
|
||||
},
|
||||
"heroPoints": {
|
||||
"label": "Hero Points"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Credits"
|
||||
},
|
||||
"enc": {
|
||||
"label": "Enc",
|
||||
"value": {
|
||||
"label": "Enc Curr."
|
||||
},
|
||||
"max": {
|
||||
"label": "Enc Max"
|
||||
}
|
||||
},
|
||||
"biodata": {
|
||||
"age": {
|
||||
"label": "Age"
|
||||
},
|
||||
"aliases": {
|
||||
"label": "Aliases"
|
||||
},
|
||||
"birthplace": {
|
||||
"label": "Birthplace"
|
||||
},
|
||||
"eyes": {
|
||||
"label": "Eyes"
|
||||
},
|
||||
"gender": {
|
||||
"label": "Gender"
|
||||
},
|
||||
"hair": {
|
||||
"label": "Hair"
|
||||
},
|
||||
"dod": {
|
||||
"label": "Date of Death"
|
||||
},
|
||||
"height": {
|
||||
"label": "Height"
|
||||
},
|
||||
"home": {
|
||||
"label": "Home"
|
||||
},
|
||||
"label": "Biodata",
|
||||
"weight": {
|
||||
"label": "Weight"
|
||||
}
|
||||
},
|
||||
"birthplace": {
|
||||
"label": "Birthplace"
|
||||
},
|
||||
"concept": {
|
||||
"label": "Concept"
|
||||
},
|
||||
"species": {
|
||||
"label": "Species"
|
||||
"credits": {
|
||||
"label": "Credits"
|
||||
},
|
||||
"archetype": {
|
||||
"label": "Archetype"
|
||||
"experience": {
|
||||
"current": {
|
||||
"label": "Current"
|
||||
},
|
||||
"eyes": {
|
||||
"label": "Eyes"
|
||||
"training": {
|
||||
"label": "Training"
|
||||
},
|
||||
"gender": {
|
||||
"label": "Gender"
|
||||
},
|
||||
"hair": {
|
||||
"label": "Hair"
|
||||
},
|
||||
"height": {
|
||||
"label": "Height"
|
||||
},
|
||||
"home": {
|
||||
"label": "Home"
|
||||
},
|
||||
"biodata": {
|
||||
"label": "Biodata",
|
||||
"gender": {
|
||||
"label": "Gender"
|
||||
},
|
||||
"height": {
|
||||
"label": "Height"
|
||||
},
|
||||
"weight": {
|
||||
"label": "Weight"
|
||||
},
|
||||
"age": {
|
||||
"label": "Age"
|
||||
},
|
||||
"hair": {
|
||||
"label": "Hair"
|
||||
},
|
||||
"eyes": {
|
||||
"label": "Eyes"
|
||||
},
|
||||
"home": {
|
||||
"label": "Home"
|
||||
},
|
||||
"birthplace": {
|
||||
"label": "Birthplace"
|
||||
"label": "Experience",
|
||||
"total": {
|
||||
"label": "Total"
|
||||
}
|
||||
},
|
||||
"eyes": {
|
||||
"label": "Eyes"
|
||||
},
|
||||
"gender": {
|
||||
"label": "Gender"
|
||||
},
|
||||
"hair": {
|
||||
"label": "Hair"
|
||||
},
|
||||
"health": {
|
||||
"label": "Stamina",
|
||||
"staminaMax": {
|
||||
"label": "Max"
|
||||
},
|
||||
"staminaValue": {
|
||||
"label": "Cur."
|
||||
},
|
||||
"wounds": {
|
||||
"label": "Wounds"
|
||||
}
|
||||
},
|
||||
"height": {
|
||||
"label": "Height"
|
||||
},
|
||||
"home": {
|
||||
"label": "Home"
|
||||
},
|
||||
"pronouns": {
|
||||
"label": "Pronouns"
|
||||
},
|
||||
"rank": {
|
||||
"label": "Rank",
|
||||
"elite": {
|
||||
"label": "Elite"
|
||||
},
|
||||
"experienced": {
|
||||
"label": "Experienced"
|
||||
},
|
||||
"expert": {
|
||||
"label": "Expert"
|
||||
},
|
||||
"veteran": {
|
||||
"label": "Veteran"
|
||||
},
|
||||
"elite": {
|
||||
"label": "Elite"
|
||||
},
|
||||
"label": "Rank",
|
||||
"legend": {
|
||||
"label": "Legend"
|
||||
},
|
||||
"veteran": {
|
||||
"label": "Veteran"
|
||||
}
|
||||
},
|
||||
"health": {
|
||||
"staminaValue": {
|
||||
"label": "Cur."
|
||||
},
|
||||
"staminaMax": {
|
||||
"label": "Max"
|
||||
},
|
||||
"wounds": {
|
||||
"label": "Wounds"
|
||||
},
|
||||
"label": "Stamina"
|
||||
},
|
||||
"skills:": {
|
||||
"combat": {
|
||||
"label": "Combat"
|
||||
@@ -131,60 +184,17 @@
|
||||
"vehicles": {
|
||||
"label": "Vehicles"
|
||||
}
|
||||
},
|
||||
"species": {
|
||||
"label": "Species"
|
||||
},
|
||||
"trait": {
|
||||
"label": "Trait"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Creature": {
|
||||
"Niche": {
|
||||
"Prey": "Prey",
|
||||
"Opportunist": "Opportunist",
|
||||
"Herbivore": "Herbivore",
|
||||
"Predator": "Predator"
|
||||
},
|
||||
"Size": {
|
||||
"Tiny": "Tiny",
|
||||
"Small": "Small",
|
||||
"Medium": "Medium",
|
||||
"Large": "Large",
|
||||
"Huge": "Huge",
|
||||
"Giant": "Giant",
|
||||
"Titanic": "Titanic",
|
||||
"Gargantuan": "Gargantuan"
|
||||
},
|
||||
"Terrain": {
|
||||
"Cave": "Cave",
|
||||
"Coast": "Coast",
|
||||
"Desert": "Desert",
|
||||
"Forest": "Forest",
|
||||
"Jungle": "Jungle",
|
||||
"Mountain": "Mountain",
|
||||
"Plains": "Plains",
|
||||
"Swamp": "Swamp",
|
||||
"Urban": "Urban",
|
||||
"Ocean": "Ocean",
|
||||
"Coastal": "Coast",
|
||||
"Mixed": "Mixed",
|
||||
"River": "River",
|
||||
"Ruins": "Ruins",
|
||||
"Savannah": "Savannah",
|
||||
"Shallows" : "Shallows"
|
||||
},
|
||||
"FIELDS": {
|
||||
"damage": {
|
||||
"label": "Damage"
|
||||
},
|
||||
"size": {
|
||||
"label": "Size"
|
||||
},
|
||||
"numberAppearing": {
|
||||
"label": "Number Appearing"
|
||||
},
|
||||
"terrain": {
|
||||
"label": "Terrain"
|
||||
},
|
||||
"niche": {
|
||||
"label": "Niche"
|
||||
},
|
||||
"biodata": {
|
||||
"adaptedToHelplessness": {
|
||||
"label": "Adapted to helplessness"
|
||||
@@ -241,9 +251,18 @@
|
||||
"label": "Strength"
|
||||
}
|
||||
},
|
||||
"damage": {
|
||||
"label": "Damage"
|
||||
},
|
||||
"damageBonus": {
|
||||
"label": "Dmg.Bonus"
|
||||
},
|
||||
"niche": {
|
||||
"label": "Niche"
|
||||
},
|
||||
"numberAppearing": {
|
||||
"label": "Number Appearing"
|
||||
},
|
||||
"resources": {
|
||||
"hand": {
|
||||
"label": "Hand"
|
||||
@@ -257,16 +276,56 @@
|
||||
"stowed": {
|
||||
"label": "Stowed"
|
||||
}
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Size"
|
||||
},
|
||||
"terrain": {
|
||||
"label": "Terrain"
|
||||
}
|
||||
},
|
||||
"SpeciesTrait": {
|
||||
"Niche": {
|
||||
"Herbivore": "Herbivore",
|
||||
"Opportunist": "Opportunist",
|
||||
"Predator": "Predator",
|
||||
"Prey": "Prey"
|
||||
},
|
||||
"Size": {
|
||||
"Gargantuan": "Gargantuan",
|
||||
"Giant": "Giant",
|
||||
"Huge": "Huge",
|
||||
"Large": "Large",
|
||||
"Medium": "Medium",
|
||||
"Small": "Small",
|
||||
"Tiny": "Tiny",
|
||||
"Titanic": "Titanic"
|
||||
},
|
||||
"Terrain": {
|
||||
"Cave": "Cave",
|
||||
"Coast": "Coast",
|
||||
"Coastal": "Coast",
|
||||
"Desert": "Desert",
|
||||
"Forest": "Forest",
|
||||
"Jungle": "Jungle",
|
||||
"Mixed": "Mixed",
|
||||
"Mountain": "Mountain",
|
||||
"Ocean": "Ocean",
|
||||
"Plains": "Plains",
|
||||
"River": "River",
|
||||
"Ruins": "Ruins",
|
||||
"Savannah": "Savannah",
|
||||
"Shallows": "Shallows",
|
||||
"Swamp": "Swamp",
|
||||
"Urban": "Urban"
|
||||
}
|
||||
},
|
||||
"Deal": {
|
||||
"FIELDS": {
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"isAdvantage": {
|
||||
"label": "Provide advantage"
|
||||
"promisor": {
|
||||
"label": "Promisor"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -281,11 +340,200 @@
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"enc": {
|
||||
"label": "Enc"
|
||||
"quantity": {
|
||||
"label": "Quantity"
|
||||
}
|
||||
}
|
||||
},
|
||||
"techAge": {
|
||||
"label": "Tech Age"
|
||||
"Label": {
|
||||
"addArmor": "Add Armor",
|
||||
"addPerk": "Add Perk",
|
||||
"addRitual": "Add Ritual",
|
||||
"addSpeciesTrait": "Add Trait",
|
||||
"addTarot": "Add Tarot",
|
||||
"addMalefica": "Add Malefica",
|
||||
"addTrait": "Add Trait",
|
||||
"newMalefica": "New Malefica",
|
||||
"newPerk": "New Perk",
|
||||
"newRitual": "New Ritual",
|
||||
"newSpeciesTrait": "New Trait",
|
||||
"newTarot": "New Tarot",
|
||||
"titleStat": "Stat Roll Dialog",
|
||||
"difficulty": "Difficulty",
|
||||
"unknown": "Unknown",
|
||||
"statRoll": "Stat Roll",
|
||||
"stat": "Stat",
|
||||
"formula": "Formula",
|
||||
"characteristics": "Characteristics",
|
||||
"deals": "Deals",
|
||||
"tarot": "Tarot",
|
||||
"backstory": "Backstory",
|
||||
"scars": "Scars",
|
||||
"likes": "Likes",
|
||||
"dislikes": "Dislikes",
|
||||
"fears": "Fears",
|
||||
"vices": "Vices",
|
||||
"goals": "Goals",
|
||||
"ambitions": "Ambitions",
|
||||
"values": "Values",
|
||||
"bonds": "Bonds",
|
||||
"abilities": "Abilities",
|
||||
"Agility": "Agility",
|
||||
"ailments": "Ailments",
|
||||
"appearance": "Appearance",
|
||||
"armor": "Armor",
|
||||
"Armor": "Armor",
|
||||
"armors": "Armors",
|
||||
"biodata": "Biodata",
|
||||
"biography": "Biography",
|
||||
"capacity": "Capacity",
|
||||
"cargo": "Cargo",
|
||||
"character": "Character",
|
||||
"combat": "Combat",
|
||||
"Counters": "Counters",
|
||||
"creature": "Creature",
|
||||
"fiendishFailure": "Fiendish Failure",
|
||||
"satanicSuccess": "Satanic Success",
|
||||
"bonus": "Upright XP Trigger",
|
||||
"penalty": "Reversed XP Trigger",
|
||||
"quote": "Quote",
|
||||
"current": "Curr.",
|
||||
"damage": "Damage",
|
||||
"damages": "Damages",
|
||||
"damageShort": "Dmg",
|
||||
"description": "Description",
|
||||
"Details": "Details",
|
||||
"Difficult": "Difficult (-1D)",
|
||||
"Easy": "Easy (+1D)",
|
||||
"equipment": "Equipment",
|
||||
"equipments": "Equipment",
|
||||
"experience": "Experience",
|
||||
"failure": "Failure",
|
||||
"finalScore": "Final Score",
|
||||
"flesh": "Flesh",
|
||||
"Formidable": "Formidable (-2D)",
|
||||
"heart": "Heart",
|
||||
"HP": "HP",
|
||||
"implants": "Implants",
|
||||
"Impossible": "Impossible (-4D)",
|
||||
"knowledge": "Knowledge",
|
||||
"languages": "Languages",
|
||||
"maleficas": "Maleficas",
|
||||
"malus": "Malus",
|
||||
"max": "Max",
|
||||
"maximum": "Maximum",
|
||||
"mind": "Mind",
|
||||
"Moderate": "Moderate (+0D)",
|
||||
"modifications": "Modifications",
|
||||
"modifier": "Modifier",
|
||||
"multiplier": "Multiplier",
|
||||
"negativeEffect": "Negative Effect",
|
||||
"newAbility": "New Ability",
|
||||
"newArmor": "New Armor",
|
||||
"newCreatureAbility": "New Creature Ability",
|
||||
"newCreatureTrait": "New Creature Trait",
|
||||
"newEquipment": "New Equipment",
|
||||
"newImplant": "New Implant",
|
||||
"newLanguage": "New Language",
|
||||
"newPsionic": "New Psionic",
|
||||
"newSkill": "New Skill",
|
||||
"newTalent": "New Talent",
|
||||
"newTrait": "New Trait",
|
||||
"newWeapon": "New Weapon",
|
||||
"notes": "Notes",
|
||||
"perks": "Perks",
|
||||
"physical": "Physical",
|
||||
"positiveEffect": "Positive Effect",
|
||||
"psionics": "Psionics",
|
||||
"Rank": "Rank",
|
||||
"rituals": "Rituals",
|
||||
"rollView": "Roll View",
|
||||
"skill": "Skill",
|
||||
"skillRoll": "Skill Roll",
|
||||
"skills": "Skills",
|
||||
"skin": "Skin",
|
||||
"social": "Social",
|
||||
"soul": "Soul",
|
||||
"species": "Species",
|
||||
"speciesTraits": "Species Traits",
|
||||
"Stamina": "Stamina",
|
||||
"starship": "Starship",
|
||||
"stats": "Stats",
|
||||
"status": "Status",
|
||||
"stealth": "Stealth",
|
||||
"success": "Success",
|
||||
"talents": "Talents",
|
||||
"targetScore": "Target Score",
|
||||
"technology": "Technology",
|
||||
"titleSkill": "Skill Roll",
|
||||
"titleWeapon": "Weapon Roll",
|
||||
"total": "Total",
|
||||
"totalScore": "Total Score",
|
||||
"traits": "Traits",
|
||||
"trauma": "Trauma",
|
||||
"Unarmed": "Unarmed",
|
||||
"vehicle": "Vehicle",
|
||||
"Vehicle": "Vehicle",
|
||||
"vehicles": "Vehicles",
|
||||
"weapons": "Weapons"
|
||||
},
|
||||
"Malefica": {
|
||||
"FIELDS": {
|
||||
"duration": {
|
||||
"label": "Duration"
|
||||
},
|
||||
"maintain": {
|
||||
"label": "Passive"
|
||||
},
|
||||
"choiceMaintainDuration": {
|
||||
"label": "Passive/Duration"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"hasDamage": {
|
||||
"label": "Has Damage"
|
||||
},
|
||||
"damage": {
|
||||
"label": "Damage"
|
||||
},
|
||||
"damageType": {
|
||||
"label": "Damage Type"
|
||||
},
|
||||
"domain": {
|
||||
"label": "Domain"
|
||||
},
|
||||
"level": {
|
||||
"label": "Level"
|
||||
},
|
||||
"range": {
|
||||
"label": "Range"
|
||||
},
|
||||
"target": {
|
||||
"label": "Target"
|
||||
},
|
||||
"time": {
|
||||
"label": "Time"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Notifications": {
|
||||
"tarotDeleted": "Previous Tarot card deleted : ",
|
||||
"speciesTraitDeleted": "Previous Species Trait deleted : "
|
||||
},
|
||||
"Perk": {
|
||||
"FIELDS": {
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"flavorText": {
|
||||
"label": "Flavor Text"
|
||||
},
|
||||
"level": {
|
||||
"label": "Level"
|
||||
},
|
||||
"role": {
|
||||
"label": "Role"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -300,8 +548,8 @@
|
||||
"difficulty": {
|
||||
"label": "Difficulty"
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Threshold"
|
||||
"ingredients": {
|
||||
"label": "Ingredients"
|
||||
},
|
||||
"limit": {
|
||||
"label": "Limit"
|
||||
@@ -309,131 +557,8 @@
|
||||
"nbAttempts": {
|
||||
"label": "Nb Attempts"
|
||||
},
|
||||
"ingredients": {
|
||||
"label": "Ingredients"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label": {
|
||||
"damages": "Damages",
|
||||
"modifications": "Modifications",
|
||||
"abilities": "Abilities",
|
||||
"Details": "Details",
|
||||
"traits": "Traits",
|
||||
"capacity" : "Capacity",
|
||||
"Agility" : "Agility",
|
||||
"Armor": "Armor",
|
||||
"cargo": "Cargo",
|
||||
"vehicle": "Vehicle",
|
||||
"starship": "Starship",
|
||||
"Easy": "Easy (+1D)",
|
||||
"Moderate": "Moderate (+0D)",
|
||||
"Difficult": "Difficult (-1D)",
|
||||
"Formidable": "Formidable (-2D)",
|
||||
"Impossible": "Impossible (-4D)",
|
||||
"combat": "Combat",
|
||||
"physical": "Physical",
|
||||
"social": "Social",
|
||||
"stealth": "Stealth",
|
||||
"technology": "Technology",
|
||||
"vehicles": "Vehicles",
|
||||
"knowledge": "Knowledge",
|
||||
"Stamina": "Stamina",
|
||||
"equipments": "Equipment",
|
||||
"Rank": "Rank",
|
||||
"HP": "HP",
|
||||
"Unarmed": "Unarmed",
|
||||
"Vehicle": "Vehicle",
|
||||
"armor": "Armor",
|
||||
"armors": "Armors",
|
||||
"biodata": "Biodata",
|
||||
"biography": "Biography",
|
||||
"character": "Character",
|
||||
"creature": "Creature",
|
||||
"criticalFailure": "Critical Failure",
|
||||
"criticalSuccess": "Critical Success",
|
||||
"current": "Curr.",
|
||||
"damage": "Damage",
|
||||
"damageShort": "Dmg",
|
||||
"description": "Description",
|
||||
"equipment": "Equipment",
|
||||
"experience": "Experience",
|
||||
"failure": "Failure",
|
||||
"finalScore": "Final Score",
|
||||
"languages": "Languages",
|
||||
"malus": "Malus",
|
||||
"max": "Max",
|
||||
"maximum": "Maximum",
|
||||
"modifier": "Modifier",
|
||||
"multiplier": "Multiplier",
|
||||
"newArmor": "New Armor",
|
||||
"newWeapon": "New Weapon",
|
||||
"newTalent": "New Talent",
|
||||
"newTrait": "New Trait",
|
||||
"newAbility": "New Ability",
|
||||
"newSkill": "New Skill",
|
||||
"newImplant": "New Implant",
|
||||
"newEquipment": "New Equipment",
|
||||
"newLanguage": "New Language",
|
||||
"newPsionic": "New Psionic",
|
||||
"newCreatureAbility": "New Creature Ability",
|
||||
"newCreatureTrait": "New Creature Trait",
|
||||
"notes": "Notes",
|
||||
"psionics": "Psionics",
|
||||
"rollView": "Roll View",
|
||||
"skill": "Skill",
|
||||
"skillRoll": "Skill Roll",
|
||||
"skills": "Skills",
|
||||
"status": "Status",
|
||||
"success": "Success",
|
||||
"talents": "Talents",
|
||||
"implants": "Implants",
|
||||
"targetScore": "Target Score",
|
||||
"titleSkill": "Skill Roll",
|
||||
"titleWeapon": "Weapon Roll",
|
||||
"total": "Total",
|
||||
"totalScore": "Total Score",
|
||||
"weapons": "Weapons"
|
||||
},
|
||||
"Notifications": {},
|
||||
"Armor": {
|
||||
"FIELDS": {
|
||||
"bonus": {
|
||||
"label": "Bonus"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"resilience": {
|
||||
"label": "Resilience"
|
||||
},
|
||||
"reduction": {
|
||||
"label": "Reduction"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Malefica": {
|
||||
"FIELDS": {
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"time": {
|
||||
"label": "Time"
|
||||
},
|
||||
"range":{
|
||||
"label": "Range"
|
||||
},
|
||||
"target": {
|
||||
"label": "Target"
|
||||
},
|
||||
"level":{
|
||||
"label": "Level"
|
||||
},
|
||||
"domain": {
|
||||
"label": "Domain"
|
||||
"threshold": {
|
||||
"label": "Threshold"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -442,46 +567,53 @@
|
||||
"roll": "Roll",
|
||||
"skill": "Skill"
|
||||
},
|
||||
"Perk": {
|
||||
"SpeciesTrait": {
|
||||
"FIELDS": {
|
||||
"level": {
|
||||
"label": "Level"
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"role": {
|
||||
"label": "Role"
|
||||
"isAdvantage": {
|
||||
"label": "Provide advantage"
|
||||
}
|
||||
}
|
||||
},
|
||||
"flavorText": {
|
||||
"label": "Flavor Text"
|
||||
"Tarot": {
|
||||
"FIELDS": {
|
||||
"bonus": {
|
||||
"label": "Upright XP Trigger"
|
||||
},
|
||||
"penalty": {
|
||||
"label": "Reversed XP Trigger"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"orientation": {
|
||||
"label": "Orientation"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ToggleSheet": "Toggle Sheet",
|
||||
"Tooltip": {
|
||||
"addTalent" : "Add Talent",
|
||||
"addSkill" : "Add Skill",
|
||||
"addWeapon" : "Add Weapon",
|
||||
"addArmor" : "Add Armor",
|
||||
"addEquipment" : "Add Equipment",
|
||||
"addImplant" : "Add Implant",
|
||||
"addLanguage" : "Add Language",
|
||||
"addPsionic" : "Add Psionic",
|
||||
"addCreatureAbility" : "Add Creature Ability",
|
||||
"addCreatureTrait" : "Add Creature Trait",
|
||||
"addArmor": "Add Armor",
|
||||
"addCreatureAbility": "Add Creature Ability",
|
||||
"addCreatureTrait": "Add Creature Trait",
|
||||
"addEquipment": "Add Equipment",
|
||||
"addImplant": "Add Implant",
|
||||
"addLanguage": "Add Language",
|
||||
"addPsionic": "Add Psionic",
|
||||
"addSkill": "Add Skill",
|
||||
"addTalent": "Add Talent",
|
||||
"addWeapon": "Add Weapon",
|
||||
"damages": "Enter current damages suffered"
|
||||
},
|
||||
"Vehicle": {
|
||||
"FIELDS": {
|
||||
"tonnage": {
|
||||
"label": "Tonnage"
|
||||
},
|
||||
"agility": {
|
||||
"label": "Agility"
|
||||
},
|
||||
"force": {
|
||||
"label": "Force"
|
||||
"armor": {
|
||||
"label": "Armor"
|
||||
},
|
||||
"cargo": {
|
||||
"label": "Cargo"
|
||||
@@ -489,60 +621,75 @@
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"range": {
|
||||
"label": "Range"
|
||||
},
|
||||
"speed": {
|
||||
"label": "Speed"
|
||||
},
|
||||
"armor": {
|
||||
"label": "Armor"
|
||||
},
|
||||
"crew": {
|
||||
"label": "Crew"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"force": {
|
||||
"label": "Force"
|
||||
},
|
||||
"notes": {
|
||||
"label": "Notes"
|
||||
},
|
||||
"range": {
|
||||
"label": "Range"
|
||||
},
|
||||
"speed": {
|
||||
"label": "Speed"
|
||||
},
|
||||
"tonnage": {
|
||||
"label": "Tonnage"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Weapon": {
|
||||
"FIELDS": {
|
||||
"stat": {
|
||||
"label": "Stat"
|
||||
},
|
||||
"damageStat": {
|
||||
"label": "Damage Stat"
|
||||
},
|
||||
"ammo": {
|
||||
"label": "Ammo"
|
||||
},
|
||||
"ammoQuantity": {
|
||||
"label": "Ammo Quantity"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"damage": {
|
||||
"label": "Damage"
|
||||
},
|
||||
"damageType": {
|
||||
"label": "Damage Type"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"subType": {
|
||||
"label": "Sub-Type"
|
||||
},
|
||||
"range": {
|
||||
"label": "Range"
|
||||
},
|
||||
"properties": {
|
||||
"label": "Properties"
|
||||
},
|
||||
"ammo": {
|
||||
"label": "Ammo"
|
||||
"range": {
|
||||
"label": "Range"
|
||||
},
|
||||
"subType": {
|
||||
"label": "Sub-Type"
|
||||
},
|
||||
"weaponType": {
|
||||
"label": "Type"
|
||||
}
|
||||
},
|
||||
"Range": {
|
||||
"Handgun": "Handgun",
|
||||
"Assault": "Assault",
|
||||
"Handgun": "Handgun",
|
||||
"HeavyWeapon": "Heavy Weapon",
|
||||
"LongRange": "Long Range",
|
||||
"Melee": "Melee",
|
||||
"Rifle": "Rifle",
|
||||
"HeavyWeapon": "Heavy Weapon",
|
||||
"ThrownWeapon": "Thrown Weapon"
|
||||
},
|
||||
"Types": {
|
||||
@@ -558,21 +705,18 @@
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"character": "Character",
|
||||
"creature": "Creature",
|
||||
"vehicle": "Vehicle"
|
||||
"enemy": "Enemy"
|
||||
},
|
||||
"Item": {
|
||||
"species-trait": "Species Trait",
|
||||
"armor": "Armor",
|
||||
"deal": "Deal",
|
||||
"equipment": "Equipment",
|
||||
"ritual": "Ritual",
|
||||
"malefica": "Malefica",
|
||||
"perk": "Perk",
|
||||
"weapon": "Weapon",
|
||||
"armor": "Armor"
|
||||
|
||||
|
||||
|
||||
|
||||
"ritual": "Ritual",
|
||||
"species-trait": "Trait",
|
||||
"tarot": "Tarot",
|
||||
"weapon": "Weapon"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
export { default as HellbornWeaponSheet } from "./sheets/weapon-sheet.mjs"
|
||||
export { default as HellbornVehicleSheet } from "./sheets/vehicle-sheet.mjs"
|
||||
export { default as HellbornCharacterSheet } from "./sheets/character-sheet.mjs"
|
||||
export { default as HellbornEquipmentSheet } from "./sheets/equipment-sheet.mjs"
|
||||
export { default as HellbornCreatureSheet } from "./sheets/creature-sheet.mjs"
|
||||
export { default as HellbornEnemySheet } from "./sheets/enemy-sheet.mjs"
|
||||
export { default as HellbornRitualSheet } from "./sheets/ritual-sheet.mjs"
|
||||
export { default as HellbornItemSheet } from "./sheets/base-item-sheet.mjs"
|
||||
export { default as HellbornSpeciesTraitSheet } from "./sheets/species-trait-sheet.mjs"
|
||||
export { default as HellbornPerkSheet } from "./sheets/perk-sheet.mjs"
|
||||
export { default as HellbornMaleficaSheet } from "./sheets/malefica-sheet.mjs"
|
||||
export { default as HellbornArmorSheet } from "./sheets/armor-sheet.mjs"
|
||||
export { default as HellbornTarotSheet } from "./sheets/tarot-sheet.mjs"
|
||||
export { default as HellbornDealSheet } from "./sheets/deal-sheet.mjs"
|
||||
|
||||
@@ -32,7 +32,10 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
|
||||
editImage: HellbornActorSheet.#onEditImage,
|
||||
toggleSheet: HellbornActorSheet.#onToggleSheet,
|
||||
edit: HellbornActorSheet.#onItemEdit,
|
||||
delete: HellbornActorSheet.#onItemDelete
|
||||
delete: HellbornActorSheet.#onItemDelete,
|
||||
updateCheckboxArray: HellbornActorSheet.#onUpdateCheckboxArray,
|
||||
toChat: HellbornActorSheet.#toChat,
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
@@ -66,8 +69,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
|
||||
actor: this.document,
|
||||
system: this.document.system,
|
||||
source: this.document.toObject(),
|
||||
isEncumbered: this.document.system.isEncumbered(),
|
||||
enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }),
|
||||
enrichedBackstory: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.backstory, { async: true }),
|
||||
isEditMode: this.isEditMode,
|
||||
isPlayMode: this.isPlayMode,
|
||||
isEditable: this.isEditable,
|
||||
@@ -99,7 +101,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
|
||||
dragover: this._onDragOver.bind(this),
|
||||
drop: this._onDrop.bind(this),
|
||||
}
|
||||
return new DragDrop(d)
|
||||
return new foundry.applications.ux.DragDrop.implementation(d)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -137,7 +139,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
|
||||
* @param {DragEvent} event The originating DragEvent
|
||||
* @protected
|
||||
*/
|
||||
_onDragOver(event) {}
|
||||
_onDragOver(event) { }
|
||||
|
||||
async _onDropItem(item) {
|
||||
console.log("Dropped item", item)
|
||||
@@ -185,6 +187,46 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
|
||||
return fp.browse()
|
||||
}
|
||||
|
||||
static #onUpdateCheckboxArray(event, target) {
|
||||
console.log("Update checkbox array", event, target)
|
||||
let arrayName = target.dataset.name
|
||||
let arrayIdx = Number(target.dataset.index)
|
||||
let dataPath = `system.mortality.${arrayName}`
|
||||
let tab = foundry.utils.duplicate(this.document.system.mortality[arrayName])
|
||||
tab[arrayIdx] = target.checked
|
||||
this.actor.update({ [dataPath]: tab })
|
||||
}
|
||||
|
||||
static async #toChat(event, target) {
|
||||
const itemUuid = target.getAttribute("data-item-uuid")
|
||||
const item = fromUuidSync(itemUuid)
|
||||
if (!item) return
|
||||
let content = ""
|
||||
if (item.type === "perk") {
|
||||
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-perk.hbs", item.toObject())
|
||||
}
|
||||
if (item.type === "malefica") {
|
||||
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-malefica.hbs", item.toObject())
|
||||
}
|
||||
if (item.type === "ritual") {
|
||||
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-ritual.hbs", item.toObject())
|
||||
}
|
||||
if (item.type === "species-trait") {
|
||||
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-trait.hbs", item.toObject())
|
||||
}
|
||||
if (item.type === "tarot") {
|
||||
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-tarot.hbs", item.toObject())
|
||||
}
|
||||
const chatData = {
|
||||
user: game.user.id,
|
||||
speaker: ChatMessage.getSpeaker({ actor: this.actor }),
|
||||
content: content,
|
||||
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
|
||||
}
|
||||
ChatMessage.create(chatData, { renderSheet: false })
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an existing item within the Actor
|
||||
* Start with the uuid, if it's not found, fallback to the id (as Embedded item in the actor)
|
||||
|
||||
@@ -15,11 +15,11 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
createEquipment: HellbornCharacterSheet.#onCreateEquipment,
|
||||
createArmor: HellbornCharacterSheet.#onCreateArmor,
|
||||
createWeapon: HellbornCharacterSheet.#onCreateWeapon,
|
||||
createTalent: HellbornCharacterSheet.#onCreateTalent,
|
||||
createImplant: HellbornCharacterSheet.#onCreateImplant,
|
||||
createPsionic: HellbornCharacterSheet.#onCreatePsionic,
|
||||
createLanguage: HellbornCharacterSheet.#onCreateLanguage
|
||||
|
||||
createDeal: HellbornCharacterSheet.#onCreateDeal,
|
||||
createMalefica: HellbornCharacterSheet.#onCreateMalefica,
|
||||
createRitual: HellbornCharacterSheet.#onCreateRitual,
|
||||
createPerk: HellbornCharacterSheet.#onCreatePerk,
|
||||
modifyAmmo: HellbornCharacterSheet.#onModifyAmmo,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -31,8 +31,11 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
tabs: {
|
||||
template: "templates/generic/tab-navigation.hbs",
|
||||
},
|
||||
talents: {
|
||||
template: "systems/fvtt-hellborn/templates/character-talents.hbs",
|
||||
status: {
|
||||
template: "systems/fvtt-hellborn/templates/character-status.hbs",
|
||||
},
|
||||
maleficas: {
|
||||
template: "systems/fvtt-hellborn/templates/character-maleficas.hbs",
|
||||
},
|
||||
equipment: {
|
||||
template: "systems/fvtt-hellborn/templates/character-equipment.hbs",
|
||||
@@ -44,7 +47,7 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
|
||||
/** @override */
|
||||
tabGroups = {
|
||||
sheet: "talents",
|
||||
sheet: "status",
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,7 +56,8 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
*/
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
talents: { id: "talents", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.talents" },
|
||||
status: { id: "status", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.status" },
|
||||
maleficas: { id: "maleficas", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.maleficas" },
|
||||
equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "HELLBORN.Label.equipment" },
|
||||
biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "HELLBORN.Label.biography" },
|
||||
}
|
||||
@@ -69,8 +73,10 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
|
||||
const doc = this.document
|
||||
context.trait = doc.itemTypes['species-trait']?.[0]
|
||||
context.upright = doc.itemTypes.tarot.find(t => t.system.orientation === "Upright")
|
||||
context.downright = doc.itemTypes.tarot.find(t => t.system.orientation === "Downright")
|
||||
|
||||
return context
|
||||
}
|
||||
@@ -78,19 +84,33 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
/** @override */
|
||||
async _preparePartContext(partId, context) {
|
||||
const doc = this.document
|
||||
context.systemFields = this.document.system.schema.fields
|
||||
switch (partId) {
|
||||
case "main":
|
||||
break
|
||||
case "talents":
|
||||
context.tab = context.tabs.talents
|
||||
context.talents = doc.itemTypes.talent
|
||||
context.talents.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.implants = doc.itemTypes.implant
|
||||
context.implants.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.psionics = doc.itemTypes.psionic
|
||||
context.psionics.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.languages = doc.itemTypes.language
|
||||
context.languages.sort((a, b) => a.name.localeCompare(b.name))
|
||||
case "status":
|
||||
context.tab = context.tabs.status
|
||||
context.perks = doc.itemTypes.perk
|
||||
// Sort the perks by system.role and then by the system.level
|
||||
context.perks.sort((a, b) => {
|
||||
if (a.system.role === b.system.role) {
|
||||
return a.system.level.localeCompare(b.system.level)
|
||||
}
|
||||
return a.system.role.localeCompare(b.system.role)
|
||||
})
|
||||
break;
|
||||
case "maleficas":
|
||||
context.tab = context.tabs.maleficas
|
||||
context.maleficas = doc.itemTypes.malefica
|
||||
// Sort the maleficas by system.domain and then by the system.level
|
||||
context.maleficas.sort((a, b) => {
|
||||
if (a.system.domain === b.system.domain) {
|
||||
return a.system.level.localeCompare(b.system.level)
|
||||
}
|
||||
return a.system.domain.localeCompare(b.system.domain)
|
||||
})
|
||||
context.rituals = doc.itemTypes.ritual
|
||||
context.rituals.sort((a, b) => a.name.localeCompare(b.name))
|
||||
break
|
||||
case "equipment":
|
||||
context.tab = context.tabs.equipment
|
||||
@@ -103,8 +123,19 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
break
|
||||
case "biography":
|
||||
context.tab = context.tabs.biography
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
|
||||
context.deals = doc.itemTypes.deal
|
||||
context.enrichedBackstory = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.backstory, { async: true })
|
||||
context.enrichedAppearance = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.appearance, { async: true })
|
||||
context.enrichedScars = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.scars, { async: true })
|
||||
context.enrichedLikes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.likes, { async: true })
|
||||
context.enrichedDislikes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.dislikes, { async: true })
|
||||
context.enrichedFears = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.fears, { async: true })
|
||||
context.enrichedVices = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.vices, { async: true })
|
||||
context.enrichedGoals = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.goals, { async: true })
|
||||
context.enrichedAmbitions = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.ambitions, { async: true })
|
||||
context.enrichedValues = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.values, { async: true })
|
||||
context.enrichedBonds = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.bonds, { async: true })
|
||||
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
|
||||
break
|
||||
}
|
||||
return context
|
||||
@@ -115,6 +146,18 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newEquipment"), type: "equipment" }])
|
||||
}
|
||||
|
||||
static #onCreateDeal(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newDeal"), type: "deal" }])
|
||||
}
|
||||
|
||||
static #onCreateMalefica(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newMalefica"), type: "malefica" }])
|
||||
}
|
||||
|
||||
static #onCreateRitual(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newRitual"), type: "ritual" }])
|
||||
}
|
||||
|
||||
static #onCreateWeapon(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newWeapon"), type: "weapon" }])
|
||||
}
|
||||
@@ -123,23 +166,23 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newArmor"), type: "armor" }])
|
||||
}
|
||||
|
||||
static #onCreateTalent(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTalent"), type: "talent" }])
|
||||
static #onCreatePerk(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newPerk"), type: "perk" }])
|
||||
}
|
||||
|
||||
static #onCreateImplant(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newImplant"), type: "implant" }])
|
||||
static async #onModifyAmmo(event, target) {
|
||||
const quantity = parseInt($(event.target).data("quantity"))
|
||||
const itemId = $(event.target).data("item-id")
|
||||
const item = this.document.items.get(itemId)
|
||||
if (!item) {
|
||||
console.warn(`HellbornCharacterSheet: Item with ID ${itemId} not found`)
|
||||
return
|
||||
}
|
||||
|
||||
static #onCreatePsionic(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newPsionic"), type: "psionic" }])
|
||||
const currentAmmo = item.system.ammoQuantity || 0
|
||||
const newAmmo = Math.max(0, currentAmmo + quantity) // Ensure ammo doesn't go below 0
|
||||
await item.update({ "system.ammoQuantity": newAmmo })
|
||||
}
|
||||
|
||||
static #onCreateLanguage(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newLanguage"), type: "language" }])
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles the roll action triggered by user interaction.
|
||||
*
|
||||
@@ -158,10 +201,11 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
const rollType = $(event.currentTarget).data("roll-type")
|
||||
let item
|
||||
let li
|
||||
let statKey
|
||||
switch (rollType) {
|
||||
case "skill":
|
||||
let skillId = $(event.currentTarget).data("skill-id");
|
||||
item = this.actor.system.skills[skillId];
|
||||
case "stat":
|
||||
statKey = $(event.currentTarget).data("stat-id");
|
||||
item = this.actor.system.stats[statKey];
|
||||
break
|
||||
case "weapon":
|
||||
case "damage":
|
||||
@@ -176,14 +220,32 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
|
||||
|
||||
async _onDrop(event) {
|
||||
if (!this.isEditable || !this.isEditMode) return
|
||||
const data = TextEditor.getDragEventData(event)
|
||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||
|
||||
// Handle different data types
|
||||
switch (data.type) {
|
||||
case "Item":
|
||||
if (data.type === "Item") {
|
||||
const item = await fromUuid(data.uuid)
|
||||
if (item.type === "tarot") {
|
||||
// Delete the existing tarot item
|
||||
const existingTarot = this.document.items.find(i => i.type === "tarot" && i.system.orientation === item.system.orientation)
|
||||
if (existingTarot) {
|
||||
await existingTarot.delete()
|
||||
// Display info message
|
||||
ui.notifications.info(game.i18n.localize("HELLBORN.Notifications.tarotDeleted") + existingTarot.name)
|
||||
}
|
||||
}
|
||||
if (item.type === "species-trait") {
|
||||
// Check if the item is already in the actor
|
||||
const existingTrait = this.document.items.find(i => i.type === "species-trait" && i.name === item.name)
|
||||
if (existingTrait) {
|
||||
await existingTrait.delete()
|
||||
// Display info message
|
||||
ui.notifications.info(game.i18n.localize("HELLBORN.Notifications.speciesTraitDeleted")+ existingTrait.name)
|
||||
}
|
||||
}
|
||||
return super._onDropItem(item)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
28
module/applications/sheets/deal-sheet.mjs
Normal file
@@ -0,0 +1,28 @@
|
||||
import HellbornItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class HellbornDealSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["deal"],
|
||||
position: {
|
||||
width: 600,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["deal-content"],
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-hellborn/templates/deal.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,38 @@
|
||||
import HellbornActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
export default class HellbornEnemySheet extends HellbornActorSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["creature"],
|
||||
classes: ["enemy"],
|
||||
position: {
|
||||
width: 860,
|
||||
height: 620,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["creature-content"],
|
||||
contentClasses: ["enemy-content"],
|
||||
},
|
||||
actions: {
|
||||
createTrait: HellbornCreatureSheet.#onCreateTrait,
|
||||
createAbility: HellbornCreatureSheet.#onCreateAbility
|
||||
},
|
||||
createTrait: HellbornEnemySheet.#onCreateTrait,
|
||||
createEquipment: HellbornEnemySheet.#onCreateEquipment,
|
||||
createWeapon: HellbornEnemySheet.#onCreateWeapon,
|
||||
createMalefica: HellbornEnemySheet.#onCreateMalefica,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-hellborn/templates/creature-main.hbs",
|
||||
template: "systems/fvtt-hellborn/templates/enemy-main.hbs",
|
||||
},
|
||||
tabs: {
|
||||
template: "templates/generic/tab-navigation.hbs",
|
||||
},
|
||||
traits: {
|
||||
template: "systems/fvtt-hellborn/templates/creature-sheet-trait.hbs",
|
||||
template: "systems/fvtt-hellborn/templates/enemy-trait.hbs",
|
||||
},
|
||||
biography: {
|
||||
template: "systems/fvtt-hellborn/templates/creature-biography.hbs",
|
||||
template: "systems/fvtt-hellborn/templates/enemy-biography.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -38,6 +41,7 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
sheet: "traits",
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepare an array of form header tabs.
|
||||
* @returns {Record<string, Partial<ApplicationTab>>}
|
||||
@@ -59,9 +63,6 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
|
||||
|
||||
return context
|
||||
}
|
||||
|
||||
@@ -73,15 +74,19 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
break
|
||||
case "traits":
|
||||
context.tab = context.tabs.traits
|
||||
context.abilities = doc.itemTypes["creature-ability"]
|
||||
context.abilities.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.traits = doc.itemTypes["creature-trait"]
|
||||
context.traits = doc.itemTypes["species-trait"]
|
||||
context.traits.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.weapons = doc.itemTypes.weapon
|
||||
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.maleficas = doc.itemTypes.malefica
|
||||
context.maleficas.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.equipments = doc.itemTypes.equipment
|
||||
context.equipments.sort((a, b) => a.name.localeCompare(b.name))
|
||||
break
|
||||
case "biography":
|
||||
context.tab = context.tabs.biography
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
|
||||
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
|
||||
break
|
||||
}
|
||||
return context
|
||||
@@ -93,13 +98,22 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
* @param {HTMLElement} target The current target of the event listener.
|
||||
*/
|
||||
static #onCreateTrait(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTrait"), type: "creature-trait" }])
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTrait"), type: "species-trait" }])
|
||||
}
|
||||
|
||||
static #onCreateAbility(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newAbility"), type: "creature-ability" }])
|
||||
static #onCreateEquipment(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newEquipment"), type: "equipment" }])
|
||||
}
|
||||
|
||||
static #onCreateMalefica(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newMalefica"), type: "malefica" }])
|
||||
}
|
||||
|
||||
static #onCreateWeapon(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newWeapon"), type: "weapon" }])
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles the roll action triggered by user interaction.
|
||||
*
|
||||
@@ -117,27 +131,21 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
|
||||
async _onRoll(event, target) {
|
||||
const rollType = $(event.currentTarget).data("roll-type")
|
||||
let item
|
||||
let formula
|
||||
let roll
|
||||
switch (rollType) {
|
||||
case "skill":
|
||||
let skillId = $(event.currentTarget).data("skill-id");
|
||||
item = this.actor.system.skills[skillId];
|
||||
case "stat":
|
||||
{
|
||||
let statId = $(event.currentTarget).data("stat-id");
|
||||
item = this.actor.system.stats[statId];
|
||||
await this.document.system.roll(rollType, item)
|
||||
}
|
||||
break
|
||||
case "creature-damage":
|
||||
formula = this.actor.system.damage
|
||||
// Rolll the damage
|
||||
roll = new Roll(formula)
|
||||
await roll.evaluate()
|
||||
roll.toMessage( { flavor: `${this.actor.name} : Damage roll` })
|
||||
break
|
||||
case "creature-number":
|
||||
formula = this.actor.system.numberAppearing
|
||||
// Rolll the damage
|
||||
roll = new Roll(formula)
|
||||
await roll.evaluate()
|
||||
roll.toMessage({flavor: `${this.actor.name} : Number Appearing roll`})
|
||||
case "weapon":
|
||||
case "damage":
|
||||
{
|
||||
let li = $(event.currentTarget).parents(".item");
|
||||
item = this.actor.items.get(li.data("item-id"));
|
||||
await this.document.system.roll(rollType, item)
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unknown roll type ${rollType}`)
|
||||
@@ -22,7 +22,7 @@ export default class HellbornEquipmentSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export default class HellbornMaleficaSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export default class HellbornPerkSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ export default class HellbornRitualSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export default class HellbornSpeciesTraitSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
31
module/applications/sheets/tarot-sheet.mjs
Normal file
@@ -0,0 +1,31 @@
|
||||
import HellbornItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class HellbornTarotSheet extends HellbornItemSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["tarot"],
|
||||
position: {
|
||||
width: 800,
|
||||
height: 800
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["tarot-content"],
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-hellborn/templates/tarot.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedPositiveEffect = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.positiveEffect, { async: true })
|
||||
context.enrichedNegativeEffect = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.negativeEffect, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -1,134 +0,0 @@
|
||||
import HellbornActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
export default class HellbornVehicleSheet extends HellbornActorSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["vehicle"],
|
||||
position: {
|
||||
width: 680,
|
||||
height: 540,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["vehicle-content"],
|
||||
},
|
||||
actions: {
|
||||
createEquipment: HellbornVehicleSheet.#onCreateEquipment,
|
||||
createWeapon: HellbornVehicleSheet.#onCreateWeapon,
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-hellborn/templates/vehicle-main.hbs",
|
||||
},
|
||||
tabs: {
|
||||
template: "templates/generic/tab-navigation.hbs",
|
||||
},
|
||||
equipment: {
|
||||
template: "systems/fvtt-hellborn/templates/vehicle-equipment.hbs",
|
||||
},
|
||||
description: {
|
||||
template: "systems/fvtt-hellborn/templates/vehicle-description.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
tabGroups = {
|
||||
sheet: "equipment",
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare an array of form header tabs.
|
||||
* @returns {Record<string, Partial<ApplicationTab>>}
|
||||
*/
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "HELLBORN.Label.equipment" },
|
||||
description: { id: "description", group: "sheet", icon: "fa-solid fa-book", label: "HELLBORN.Label.description" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id
|
||||
v.cssClass = v.active ? "active" : ""
|
||||
}
|
||||
return tabs
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
|
||||
|
||||
return context
|
||||
}
|
||||
|
||||
_generateTooltip(type, target) {
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _preparePartContext(partId, context) {
|
||||
const doc = this.document
|
||||
switch (partId) {
|
||||
case "main":
|
||||
break
|
||||
case "equipment":
|
||||
context.tab = context.tabs.equipment
|
||||
context.weapons = doc.itemTypes.weapon
|
||||
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
|
||||
context.equipments = doc.itemTypes.equipment
|
||||
context.equipments.sort((a, b) => a.name.localeCompare(b.name))
|
||||
break
|
||||
case "description":
|
||||
context.tab = context.tabs.description
|
||||
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
|
||||
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
|
||||
break
|
||||
}
|
||||
return context
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new attack item directly from the sheet and embeds it into the document.
|
||||
* @param {Event} event The initiating click event.
|
||||
* @param {HTMLElement} target The current target of the event listener.
|
||||
*/
|
||||
static #onCreateEquipment(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newEquipment"), type: "equipment" }])
|
||||
}
|
||||
|
||||
static #onCreateWeapon(event, target) {
|
||||
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newWeapon"), type: "weapon" }])
|
||||
}
|
||||
|
||||
async _onRoll(event, target) {
|
||||
const rollType = $(event.currentTarget).data("roll-type")
|
||||
let item
|
||||
let li
|
||||
switch (rollType) {
|
||||
case "damage":
|
||||
li = $(event.currentTarget).parents(".item");
|
||||
item = this.actor.items.get(li.data("item-id"));
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unknown roll type ${rollType}`)
|
||||
}
|
||||
await this.document.system.roll(rollType, item)
|
||||
}
|
||||
|
||||
|
||||
async _onDrop(event) {
|
||||
if (!this.isEditable || !this.isEditMode) return
|
||||
const data = TextEditor.getDragEventData(event)
|
||||
|
||||
// Handle different data types
|
||||
switch (data.type) {
|
||||
case "Item":
|
||||
const item = await fromUuid(data.uuid)
|
||||
return super._onDropItem(item)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,4 +18,10 @@ export default class HellbornWeaponSheet extends HellbornItemSheet {
|
||||
template: "systems/fvtt-hellborn/templates/weapon.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
|
||||
return context
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,49 @@ export const ASCII = `
|
||||
|
||||
`
|
||||
|
||||
export const AILMENTS = {
|
||||
"bleeding": { id: "bleeding", label: "Bleeding" },
|
||||
"blinded": { id: "blinded", label: "Blinded" },
|
||||
"burning": { id: "burning", label: "Burning" },
|
||||
"dazed": { id: "dazed", label: "Dazed" },
|
||||
"deafened": { id: "deafened", label: "Deafened" },
|
||||
"exposes": { id: "exposed", label: "Exposed" },
|
||||
"mortally": { id: "mortal", label: "Mortal" },
|
||||
"muted": { id: "muted", label: "Muted" },
|
||||
"prone": { id: "prone", label: "Prone" },
|
||||
"immobilized": { id: "immobilized", label: "Immobile" },
|
||||
"shaken": { id: "shaken", label: "Shaken" },
|
||||
"stunned": { id: "stunned", label: "Stunned" },
|
||||
"winded": { id: "winded", label: "Winded" }
|
||||
}
|
||||
|
||||
export const STATS = {
|
||||
"flesh": { id: "flesh", label: "Flesh" },
|
||||
"skin": { id: "skin", label: "Skin" },
|
||||
"heart": { id: "heart", label: "Heart" },
|
||||
"mind": { id: "mind", label: "Mind" },
|
||||
"soul": { id: "soul", label: "Soul" }
|
||||
}
|
||||
|
||||
export const DIFFICULTY_CHOICES = {
|
||||
"unknown": { id: "unknown", label: "Unknown", value: "0" },
|
||||
"trivial": { id: "trivial", label: "Trivial", value: "7" },
|
||||
"easy": { id: "easy", label: "Easy", value: "9" },
|
||||
"normal": { id: "normal", label: "Normal", value: "11" },
|
||||
"hard": { id: "hard", label: "Hard", value: "15" },
|
||||
"very-hard": { id: "very-hard", label: "Very Hard", value: "18" },
|
||||
"impossible": { id: "impossible", label: "Impossible", value: "20" }
|
||||
}
|
||||
|
||||
export const CHOICE_ADVANTAGES_DISADVANTAGES ={
|
||||
"0": { id: "0", label: "None", value: "0" },
|
||||
"1": { id: "1", label: "One", value: "1" },
|
||||
"2": { id: "2", label: "Two", value: "2" },
|
||||
"3": { id: "3", label: "Three", value: "3" },
|
||||
"4": { id: "4", label: "Four", value: "4" },
|
||||
"5": { id: "5", label: "Five", value: "5" },
|
||||
}
|
||||
|
||||
export const PERK_ROLES = {
|
||||
"abbetor": { id: "abbetor", label: "Abbetor" },
|
||||
"blade": { id: "blade", label: "Blade" },
|
||||
@@ -16,6 +59,7 @@ export const PERK_ROLES = {
|
||||
"sentinel": { id: "sentinel", label: "Sentinel" },
|
||||
"slayer": { id: "slayer", label: "Slayer" },
|
||||
"wretch": { id: "wretch", label: "Wretch" },
|
||||
"other": { id: "other", label: "Other" },
|
||||
}
|
||||
|
||||
export const MALEFICA_DOMAINS = {
|
||||
@@ -26,6 +70,7 @@ export const MALEFICA_DOMAINS = {
|
||||
"speculo": { id: "speculo", label: "Speculo" },
|
||||
"vinculum": { id: "vinculum", label: "Vinculum" },
|
||||
"vita": { id: "vita", label: "Vita" },
|
||||
"other": { id: "other", label: "Other" },
|
||||
}
|
||||
|
||||
export const PERK_LEVELS = {
|
||||
@@ -47,86 +92,19 @@ export const WEAPON_TYPES = {
|
||||
"ranged": { id: "ranged", label: "Ranged" },
|
||||
}
|
||||
|
||||
export const RANGED_SUBTYPES = {
|
||||
"pistols": { id: "pistols", label: "Pistols" },
|
||||
"rifles": { id: "rifles", label: "Rifles" },
|
||||
"shotguns": { id: "shotguns", label: "Shotguns" },
|
||||
"submachineguns": { id: "submachineguns ", label: "Sub machine guns" },
|
||||
"grenades": { id: "grenades", label: "Grenades" },
|
||||
"heavy": { id: "heavy", label: "Heavy Weapons" },
|
||||
export const AMMO_TYPES = {
|
||||
"blessed": { id: "blessed", label: "Blessed" },
|
||||
"hollow-points": { id: "hollow-points", label: "Hollow" },
|
||||
"incendiary": { id: "incendiary", label: "Incendiary" },
|
||||
"poisoned": { id: "poisoned", label: "Poisoned" },
|
||||
"rubber": { id: "rubber", label: "Rubber" },
|
||||
"tesla": { id: "tesla", label: "Tesla" },
|
||||
}
|
||||
|
||||
export const ATTACK_MODIFIERS = {
|
||||
"two-attacks": -1,
|
||||
"aiming": 1,
|
||||
"dim": -1,
|
||||
"darkness": -2,
|
||||
"prone": -1,
|
||||
"cover": -2,
|
||||
"recoil-first": -1,
|
||||
"recoil-third": -2,
|
||||
"aware": -1
|
||||
}
|
||||
|
||||
export const TRIAGE_RESULTS = {
|
||||
"none": { id: "none", dice:0, label: "HELLBORN.TriageResults.None" },
|
||||
"death": { id: "death", dice:3, label: "HELLBORN.TriageResults.Death" },
|
||||
"critical": { id: "critical", dice:4, label: "HELLBORN.TriageResults.Critical" },
|
||||
"severe": { id: "severe", dice:7, label: "HELLBORN.TriageResults.Severe" },
|
||||
"moderate": { id: "moderate", dice:10, label: "HELLBORN.TriageResults.Moderate" },
|
||||
"fleshwound": { id: "fleshwound", dice:12, label: "HELLBORN.TriageResults.FleshWound" }
|
||||
}
|
||||
|
||||
export const CREATURE_TERRAIN_TYPES = {
|
||||
"cave": { id: "cave", label: "HELLBORN.Creature.Terrain.Cave", niche:0, size: 0 },
|
||||
"coast": { id: "coast", label: "HELLBORN.Creature.Terrain.Coast", niche:1, size: 0 },
|
||||
"desert": { id: "desert", label: "HELLBORN.Creature.Terrain.Desert", niche:-1, size: -1 },
|
||||
"forest": { id: "forest", label: "HELLBORN.Creature.Terrain.Forest", niche:1, size: 1 },
|
||||
"jungle": { id: "jungle", label: "HELLBORN.Creature.Terrain.Jungle", niche:1, size: 1 },
|
||||
"mixed": { id: "mixed", label: "HELLBORN.Creature.Terrain.Mixed", niche:0, size: 0 },
|
||||
"mountain": { id: "mountain", label: "HELLBORN.Creature.Terrain.Mountain", niche:-1, size: -1 },
|
||||
"ocean": { id: "ocean", label: "HELLBORN.Creature.Terrain.Ocean", niche:-1, size: 1 },
|
||||
"river": { id: "river", label: "HELLBORN.Creature.Terrain.River", niche:1, size: 0 },
|
||||
"ruins": { id: "ruins", label: "HELLBORN.Creature.Terrain.Ruins", niche:0, size: 1 },
|
||||
"savannah": { id: "savannah", label: "HELLBORN.Creature.Terrain.Savannah", niche:0, size: 1 },
|
||||
"shallows": { id: "shallows", label: "HELLBORN.Creature.Terrain.Shallows", niche:1, size: 0 },
|
||||
"swamp": { id: "swamp", label: "HELLBORN.Creature.Terrain.Swamp", niche:1, size: 1 }
|
||||
}
|
||||
|
||||
export const CREATURE_NICHES = {
|
||||
"prey": { id: "prey", label: "HELLBORN.Creature.Niche.Prey" },
|
||||
"opportunist": { id: "opportunist", label: "HELLBORN.Creature.Niche.Opportunist" },
|
||||
"herbivore": { id: "herbivore", label: "HELLBORN.Creature.Niche.Herbivore" },
|
||||
"predator": { id: "predator", label: "HELLBORN.Creature.Niche.Predator" }
|
||||
}
|
||||
|
||||
export const CREATURE_SIZES = {
|
||||
"tiny": { id: "tiny", label: "HELLBORN.Creature.Size.Tiny" },
|
||||
"small": { id: "small", label: "HELLBORN.Creature.Size.Small" },
|
||||
"medium": { id: "medium", label: "HELLBORN.Creature.Size.Medium" },
|
||||
"large": { id: "large", label: "HELLBORN.Creature.Size.Large" },
|
||||
"giant": { id: "giant", label: "HELLBORN.Creature.Size.Giant" },
|
||||
"titanic": { id: "titanic", label: "HELLBORN.Creature.Size.Titanic" }
|
||||
}
|
||||
|
||||
export const MODIFIER_CHOICES = {
|
||||
"easy": { id: "easy", label: "HELLBORN.Label.Easy", value :"1" },
|
||||
"moderate": { id: "moderate", label: "HELLBORN.Label.Moderate", value: "0" },
|
||||
"difficult": { id: "difficult", label: "HELLBORN.Label.Difficult", value: "-1" },
|
||||
"formidable": { id: "formidable", label: "HELLBORN.Label.Formidable", value: "-2" },
|
||||
"impossible": { id: "impossible", label: "HELLBORN.Label.Impossible", value: "-4" }
|
||||
}
|
||||
|
||||
export const STARSHIP_HULL = {
|
||||
"pod": { id: "pod", label: "HELLBORN.Starship.Hull.Pod" },
|
||||
"micro": { id: "micro", label: "HELLBORN.Starship.Hull.Micro" },
|
||||
"small": { id: "small", label: "HELLBORN.Starship.Hull.Small" },
|
||||
"scout": { id: "scout", label: "HELLBORN.Starship.Hull.Scout" },
|
||||
"picket": { id: "picket", label: "HELLBORN.Starship.Hull.Picket" },
|
||||
"destroyer": { id: "destroyer", label: "HELLBORN.Starship.Hull.Destroyer" },
|
||||
"cruiser": { id: "cruiser", label: "HELLBORN.Starship.Hull.Cruiser" },
|
||||
"battleship": { id: "battleship", label: "HELLBORN.Starship.Hull.Battleship" },
|
||||
"carrier": { id: "carrier", label: "HELLBORN.Starship.Hull.Carrier" }
|
||||
export const ENEMY_TYPES = {
|
||||
"mook": { id: "mook", label: "Mook" },
|
||||
"elite": { id: "elite", label: "Elite" },
|
||||
"legendary": { id: "legendary", label: "Legendary" }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -135,18 +113,16 @@ export const STARSHIP_HULL = {
|
||||
*/
|
||||
export const SYSTEM = {
|
||||
id: SYSTEM_ID,
|
||||
AILMENTS,
|
||||
ENEMY_TYPES,
|
||||
STATS,
|
||||
PERK_ROLES,
|
||||
PERK_LEVELS,
|
||||
MALEFICA_LEVELS,
|
||||
MALEFICA_DOMAINS,
|
||||
MODIFIER_CHOICES,
|
||||
ATTACK_MODIFIERS,
|
||||
WEAPON_TYPES,
|
||||
RANGED_SUBTYPES,
|
||||
TRIAGE_RESULTS,
|
||||
CREATURE_TERRAIN_TYPES,
|
||||
CREATURE_SIZES,
|
||||
CREATURE_NICHES,
|
||||
STARSHIP_HULL,
|
||||
AMMO_TYPES,
|
||||
DIFFICULTY_CHOICES,
|
||||
CHOICE_ADVANTAGES_DISADVANTAGES,
|
||||
ASCII
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ export const defaultItemImg = {
|
||||
perk: "systems/fvtt-hellborn/assets/icons/perk.webp",
|
||||
"species-trait": "systems/fvtt-hellborn/assets/icons/species-trait.webp",
|
||||
armor: "systems/fvtt-hellborn/assets/icons/armor.webp",
|
||||
deal: "systems/fvtt-hellborn/assets/icons/deal.webp",
|
||||
tarot: "systems/fvtt-hellborn/assets/icons/tarot.webp",
|
||||
}
|
||||
|
||||
export default class HellbornItem extends Item {
|
||||
|
||||
@@ -62,11 +62,7 @@ export default class HellbornRoll extends Roll {
|
||||
|
||||
static updateFullFormula(options) {
|
||||
let fullFormula
|
||||
if ( options.numericModifier >= 0) {
|
||||
fullFormula = `${options.formula} + ${options.rollItem.value} + ${options.numericModifier}D`
|
||||
} else {
|
||||
fullFormula = `${options.formula} + ${options.rollItem.value} - ${Math.abs(options.numericModifier)}D`
|
||||
}
|
||||
fullFormula = `3D6 + ${options.nbAdvantages}D6kh - ${options.nbDisadvantages}D6kh + ${options.rollItem.value}`
|
||||
$('#roll-dialog-full-formula').text(fullFormula)
|
||||
options.fullFormula = fullFormula
|
||||
}
|
||||
@@ -86,81 +82,68 @@ export default class HellbornRoll extends Roll {
|
||||
* @returns {Promise<Object|null>} The roll result or null if the dialog was cancelled.
|
||||
*/
|
||||
static async prompt(options = {}) {
|
||||
let formula = "2d6"
|
||||
let formula = `3D6 + 0D6KH - 0D6KH + ${options?.rollItem?.value}`
|
||||
|
||||
let actor = game.actors.get(options.actorId)
|
||||
switch (options.rollType) {
|
||||
case "skill":
|
||||
case "stat":
|
||||
break
|
||||
case "damage":
|
||||
{
|
||||
let formula = options.rollItem.system.damage
|
||||
if (options.rollItem?.system?.damageStat && options.rollItem.system.damageStat !== "none" && options.rollItem.system.damageStat !== "") {
|
||||
let statKey = options.rollItem.system?.damageStat.toLowerCase()
|
||||
let statValue = actor.system.stats[statKey].value
|
||||
formula = `${formula} + ${statValue}`
|
||||
}
|
||||
let damageRoll = new Roll(formula)
|
||||
await damageRoll.evaluate()
|
||||
await damageRoll.toMessage({
|
||||
flavor: `${options.rollItem.name} - Damage Roll`
|
||||
flavor: `<div class="flavor-text-damage"><h2>${options.rollItem.name}</h2>
|
||||
<BR><span class="chat-damage-type"><span>${options.rollItem.system.damageType}</span></span></div>`,
|
||||
});
|
||||
return
|
||||
}
|
||||
case "weapon":
|
||||
let actor = game.actors.get(options.actorId)
|
||||
{
|
||||
options.weapon = foundry.utils.duplicate(options.rollItem)
|
||||
options.rollItem = actor.system.skills.combat
|
||||
let statKey = options.weapon.system.stat.toLowerCase()
|
||||
options.rollItem = actor.system.stats[statKey]
|
||||
}
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes)
|
||||
const fieldRollMode = new foundry.data.fields.StringField({
|
||||
choices: rollModes,
|
||||
blank: false,
|
||||
default: "public",
|
||||
})
|
||||
|
||||
const choiceModifier = SYSTEM.MODIFIER_CHOICES
|
||||
let choiceRangeModifier = {}
|
||||
let rangeModifier = 0
|
||||
if ( options.weapon) {
|
||||
// Build the range modifiers
|
||||
let range = SYSTEM.WEAPON_RANGE[options.weapon.system.rangeType]
|
||||
for (let [key, value] of Object.entries(range.range)) {
|
||||
choiceRangeModifier[key] = { label: `${key} (${value}D)`, value: value }
|
||||
if (!rangeModifier && value) {
|
||||
rangeModifier = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let modifier = "0"
|
||||
options.numericModifier = rangeModifier
|
||||
let fullFormula = `${formula} + ${options.rollItem.value}`
|
||||
if (options.isEncumbered) {
|
||||
options.numericModifier += -1
|
||||
fullFormula += ` - ${options.numericModifier}D`
|
||||
} else {
|
||||
options.numericModifier += 0
|
||||
fullFormula += ` + ${options.numericModifier}D`
|
||||
}
|
||||
options.fullFormula = fullFormula
|
||||
options.formula = formula
|
||||
options.nbAdvantages = "0"
|
||||
options.nbDisadvantages = "0"
|
||||
|
||||
let dialogContext = {
|
||||
actorId: options.actorId,
|
||||
actorName: options.actorName,
|
||||
rollType: options.rollType,
|
||||
rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class
|
||||
fullFormula,
|
||||
weapon: options?.weapon,
|
||||
isEncumbered: options.isEncumbered,
|
||||
talents: options.talents,
|
||||
formula: formula,
|
||||
fullFormula: formula,
|
||||
rollModes,
|
||||
fieldRollMode,
|
||||
choiceModifier,
|
||||
choiceRangeModifier,
|
||||
rangeModifier,
|
||||
formula,
|
||||
choiceAdvantages: SYSTEM.CHOICE_ADVANTAGES_DISADVANTAGES,
|
||||
choiceDisadvantages: SYSTEM.CHOICE_ADVANTAGES_DISADVANTAGES,
|
||||
hasTarget: options.hasTarget,
|
||||
modifier,
|
||||
difficulty: "0",
|
||||
nbAdvantages: "0",
|
||||
nbDisadvantages: "0",
|
||||
}
|
||||
const content = await renderTemplate("systems/fvtt-hellborn/templates/roll-dialog.hbs", dialogContext)
|
||||
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/roll-dialog.hbs", dialogContext)
|
||||
|
||||
const title = HellbornRoll.createTitle(options.rollType, options.rollTarget)
|
||||
const label = game.i18n.localize("HELLBORN.Roll.roll")
|
||||
@@ -184,19 +167,19 @@ export default class HellbornRoll extends Roll {
|
||||
},
|
||||
rejectClose: false, // Click on Close button will not launch an error
|
||||
render: (event, dialog) => {
|
||||
$(".roll-skill-modifier").change(event => {
|
||||
options.numericModifier += Number(event.target.value)
|
||||
$(".roll-stat-advantages").change(event => {
|
||||
options.nbAdvantages = Number(event.target.value)
|
||||
HellbornRoll.updateFullFormula(options)
|
||||
})
|
||||
$(".roll-skill-range-modifier").change(event => {
|
||||
options.numericModifier += Number(event.target.value)
|
||||
$(".roll-stat-disadvantages").change(event => {
|
||||
options.nbDisadvantages = Number(event.target.value)
|
||||
HellbornRoll.updateFullFormula(options)
|
||||
})
|
||||
$(".select-combat-option").change(event => {
|
||||
console.log(event)
|
||||
let field = $(event.target).data("field")
|
||||
let modifier = SYSTEM.ATTACK_MODIFIERS[field]
|
||||
if ( event.target.checked) {
|
||||
if (event.target.checked) {
|
||||
options.numericModifier += modifier
|
||||
} else {
|
||||
options.numericModifier -= modifier
|
||||
@@ -211,42 +194,74 @@ export default class HellbornRoll extends Roll {
|
||||
|
||||
let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext)
|
||||
rollData.rollMode = rollContext.visibility
|
||||
// Update target score
|
||||
rollData.targetScore = 8
|
||||
|
||||
if (Hooks.call("fvtt-hellborn.preRoll", options, rollData) === false) return
|
||||
|
||||
let diceFormula = `${2+Math.abs(options.numericModifier)}D6`
|
||||
if ( options.numericModifier > 0 ) {
|
||||
diceFormula += `kh2 + ${options.rollItem.value}`
|
||||
} else {
|
||||
diceFormula += `kl2 + ${options.rollItem.value}`
|
||||
options.nbAdvantages = Number(options.nbAdvantages)
|
||||
options.nbDisadvantages = Number(options.nbDisadvantages)
|
||||
let dice = 3;
|
||||
let keep = ""
|
||||
if ((options.nbAdvantages !== options.nbDisadvantages) && options.nbAdvantages > 0 || options.nbDisadvantages > 0) {
|
||||
dice = 3 + Math.abs(options.nbAdvantages - options.nbDisadvantages)
|
||||
if (options.nbAdvantages > options.nbDisadvantages) {
|
||||
keep = "kh3"
|
||||
} else if (options.nbAdvantages < options.nbDisadvantages) {
|
||||
keep = "kl3"
|
||||
}
|
||||
|
||||
}
|
||||
let diceFormula = `${dice}D6${keep} + ${options.rollItem.value}`
|
||||
const roll = new this(diceFormula, options.data, rollData)
|
||||
await roll.evaluate()
|
||||
console.log("Roll", rollData, roll)
|
||||
options.difficulty = (rollData.difficulty === "unknown") ? 0 : (Number(rollData.difficulty) || 0)
|
||||
|
||||
roll.displayRollResult(roll, options, rollData)
|
||||
roll.displayRollResult(roll, options, rollData, roll)
|
||||
|
||||
if (Hooks.call("fvtt-hellborn.Roll", options, rollData, roll) === false) return
|
||||
|
||||
return roll
|
||||
}
|
||||
|
||||
displayRollResult(formula, options, rollData) {
|
||||
|
||||
// Compute the result quality
|
||||
displayRollResult(formula, options, rollData, roll) {
|
||||
let resultType = "failure"
|
||||
if (this.total >= 8) {
|
||||
if (options.difficulty === 0) {
|
||||
resultType = "unknown"
|
||||
} else if (this.total >= options.difficulty) {
|
||||
resultType = "success"
|
||||
// Detect if decimal == unit in the dire total result
|
||||
}
|
||||
|
||||
// Compute the result quality
|
||||
this.options.satanicSuccess = false
|
||||
this.options.fiendishFailure = false
|
||||
this.options.rollData = foundry.utils.duplicate(rollData)
|
||||
|
||||
// Check if all results are equal
|
||||
let workResults = foundry.utils.duplicate(roll.terms[0].results)
|
||||
// Get the most common result of the roll
|
||||
let commonResult = workResults.reduce((acc, r) => {
|
||||
acc[r.result] = (acc[r.result] || 0) + 1
|
||||
return acc
|
||||
}, {})
|
||||
commonResult = Object.entries(commonResult).reduce((a, b) => (a[1] > b[1]) ? a : b)[0]
|
||||
let nbEqual = workResults.filter(r => Number(r.result) === Number(commonResult)).length
|
||||
|
||||
if (resultType === "success" && commonResult >= 4 && nbEqual >= 3) {
|
||||
this.options.satanicSuccess = true
|
||||
if (this.options.satanicSuccess) {
|
||||
resultType = "success"
|
||||
}
|
||||
}
|
||||
if (resultType === "failure" && commonResult <= 3 && nbEqual >= 3) {
|
||||
this.options.fiendishFailure = true
|
||||
if (this.options.fiendishFailure) {
|
||||
resultType = "failure"
|
||||
}
|
||||
}
|
||||
this.options.resultType = resultType
|
||||
this.options.isSuccess = resultType === "success"
|
||||
this.options.isFailure = resultType === "failure"
|
||||
this.options.isEncumbered = rollData.isEncumbered
|
||||
this.options.rollData = foundry.utils.duplicate(rollData)
|
||||
this.options.results = roll.terms[0].results
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -258,8 +273,8 @@ export default class HellbornRoll extends Roll {
|
||||
*/
|
||||
static createTitle(type, target) {
|
||||
switch (type) {
|
||||
case "skill":
|
||||
return `${game.i18n.localize("HELLBORN.Label.titleSkill")}`
|
||||
case "stat":
|
||||
return `${game.i18n.localize("HELLBORN.Label.titleStat")}`
|
||||
case "weapon":
|
||||
return `${game.i18n.localize("HELLBORN.Label.titleWeapon")}`
|
||||
default:
|
||||
@@ -270,7 +285,7 @@ export default class HellbornRoll extends Roll {
|
||||
/** @override */
|
||||
async render(chatOptions = {}) {
|
||||
let chatData = await this._getChatCardData(chatOptions.isPrivate)
|
||||
return await renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
|
||||
return await foundry.applications.handlebars.renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -317,7 +332,6 @@ export default class HellbornRoll extends Roll {
|
||||
cardData.realDamage = this.realDamage
|
||||
cardData.isPrivate = isPrivate
|
||||
cardData.weapon = this.weapon
|
||||
cardData.isEncumbered = this.isEncumbered
|
||||
|
||||
cardData.cssClass = cardData.css.join(" ")
|
||||
cardData.tooltip = isPrivate ? "" : await this.getTooltip()
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
export { default as HellbornCreature } from "./creature.mjs"
|
||||
export { default as HellbornVehicle } from "./vehicle.mjs"
|
||||
export { default as HellbornEnemy } from "./enemy.mjs"
|
||||
export { default as HellbornCharacter } from "./character.mjs"
|
||||
export { default as HellbornEquipment } from "./equipment.mjs"
|
||||
export { default as HellbornRitual } from "./ritual.mjs"
|
||||
@@ -8,3 +7,5 @@ export { default as HellbornMalefica } from "./malefica.mjs"
|
||||
export { default as HellbornSpeciesTrait } from "./species-trait.mjs"
|
||||
export { default as HellbornWeapon } from "./weapon.mjs"
|
||||
export { default as HellbornArmor } from "./armor.mjs"
|
||||
export { default as HellbornTarot } from "./tarot.mjs"
|
||||
export { default as HellbornDeal } from "./deal.mjs"
|
||||
|
||||
@@ -7,51 +7,124 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel {
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
const schema = {}
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
// Ailments
|
||||
const ailmentField = (label) => {
|
||||
const schema = {
|
||||
enabled: new fields.BooleanField({ required: true, initial: false }),
|
||||
label: new fields.StringField({ required: true, initial: label })
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
schema.ailments = new fields.SchemaField(
|
||||
Object.values(SYSTEM.AILMENTS).reduce((obj, ailment) => {
|
||||
obj[ailment.id] = ailmentField(ailment.label)
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
|
||||
// Stats
|
||||
const statField = (label) => {
|
||||
const schema = {
|
||||
label: new fields.StringField({ required: true, initial: label }),
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
schema.stats = new fields.SchemaField(
|
||||
Object.values(SYSTEM.STATS).reduce((obj, stat) => {
|
||||
obj[stat.id] = statField(stat.label)
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
|
||||
schema.backstory = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.appearance = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.scars = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.likes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.dislikes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.fears = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.vices = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.goals = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.ambitions = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.values = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.bonds = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.name = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
|
||||
schema.pronouns = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
schema.species = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
schema.trait = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
schema.upright = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
schema.reversed = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
|
||||
schema.heroPoints = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.limboes = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
schema.ammo = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
|
||||
schema.health = new fields.SchemaField({
|
||||
staminaValue: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
staminaMax: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
wounds: new fields.NumberField({ ...requiredInteger, initial:0, min: 0 }),
|
||||
triageResults: new fields.StringField({ required: true, nullable: false, initial: "none", choices: SYSTEM.TRIAGE_RESULTS })
|
||||
const ammoField = (label) => {
|
||||
const schema = {
|
||||
label: new fields.StringField({ required: true, initial: label }),
|
||||
value: new fields.StringField({ required: true, initial: "" }),
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
schema.ammoArray = new fields.SchemaField(
|
||||
Object.values(SYSTEM.AMMO_TYPES).reduce((obj, ammo) => {
|
||||
obj[ammo.id] = ammoField(ammo.label)
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
|
||||
schema.mortality = new fields.SchemaField({
|
||||
/* Enabled: Array of 5 boolean field */
|
||||
enabled: new fields.ArrayField(new fields.BooleanField(),
|
||||
{ required: true, initial: [false, false, false, false, false], min:5, max:5 }),
|
||||
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
})
|
||||
|
||||
schema.enc = new fields.SchemaField({
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.trauma = new fields.SchemaField({
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
})
|
||||
|
||||
schema.armor = new fields.SchemaField({
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.darkness = new fields.SchemaField({
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
})
|
||||
|
||||
schema.credits = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.rank = new fields.SchemaField({
|
||||
experienced: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }),
|
||||
expert: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }),
|
||||
veteran: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }),
|
||||
elite: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }),
|
||||
legend: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 })
|
||||
schema.defense = new fields.SchemaField({
|
||||
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
resistance: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
})
|
||||
|
||||
schema.movement = new fields.SchemaField({
|
||||
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
reduce: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
})
|
||||
|
||||
schema.experience = new fields.SchemaField({
|
||||
training: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
})
|
||||
|
||||
schema.biodata = new fields.SchemaField({
|
||||
age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }),
|
||||
height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }),
|
||||
weight: new fields.NumberField({ ...requiredInteger, initial: 70, min: 1 }),
|
||||
age: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
gender: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
home: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
birthplace: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
height: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
eyes: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
hair: new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
birthplace: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
hair: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
home: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
weight: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
apparentAge: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
chronologicalAge: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
dod: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
soul: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
aliases: new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
})
|
||||
|
||||
return schema
|
||||
@@ -65,10 +138,6 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel {
|
||||
|
||||
}
|
||||
|
||||
isEncumbered() {
|
||||
return this.enc.value > this.enc.max
|
||||
}
|
||||
|
||||
/** */
|
||||
/**
|
||||
* Rolls a dice for a character.
|
||||
@@ -86,7 +155,6 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel {
|
||||
actorId: this.parent.id,
|
||||
actorName: this.parent.name,
|
||||
actorImage: this.parent.img,
|
||||
talents: this.parent.items.filter(i => i.type === "talent" && i.system.isAdvantage),
|
||||
hasTarget,
|
||||
target: opponentTarget
|
||||
})
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
import HellbornRoll from "../documents/roll.mjs"
|
||||
|
||||
export default class HellbornCreature extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
const schema = {}
|
||||
|
||||
|
||||
schema.terrain = new fields.StringField({ required: true, nullable: false, initial: "cave", choices: SYSTEM.CREATURE_TERRAIN_TYPES })
|
||||
schema.niche = new fields.StringField({ required: true, nullable: false, initial: "prey", choices: SYSTEM.CREATURE_NICHES })
|
||||
schema.size = new fields.StringField({ required: true, nullable: false, initial: "small", choices: SYSTEM.CREATURE_SIZES })
|
||||
|
||||
schema.numberAppearing = new fields.StringField({ required: true, initial: "1d6" })
|
||||
schema.health = new fields.SchemaField({
|
||||
staminaValue: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
staminaMax: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }),
|
||||
})
|
||||
schema.damage = new fields.StringField({ required: true, initial: "1d6" })
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Creature"]
|
||||
|
||||
isEncumbered() {
|
||||
return false
|
||||
}
|
||||
|
||||
async roll(rollType, rollItem) {
|
||||
let opponentTarget
|
||||
const hasTarget = opponentTarget !== undefined
|
||||
|
||||
let roll = await HellbornRoll.prompt({
|
||||
rollType,
|
||||
rollItem,
|
||||
actorId: this.parent.id,
|
||||
actorName: this.parent.name,
|
||||
actorImage: this.parent.img,
|
||||
traits: this.parent.items.filter(i => i.type === "creature-trait" && i.system.isAdvantage),
|
||||
abilities: this.parent.items.filter(i => i.type === "creature-ability" && i.system.isAdvantage),
|
||||
isEncumbered: this.isEncumbered(),
|
||||
hasTarget,
|
||||
target: opponentTarget
|
||||
})
|
||||
if (!roll) return null
|
||||
|
||||
await roll.toMessage({}, { rollMode: roll.options.rollMode })
|
||||
}
|
||||
|
||||
}
|
||||
16
module/models/deal.mjs
Normal file
@@ -0,0 +1,16 @@
|
||||
import { SYSTEM } from "../config/system.mjs";
|
||||
|
||||
export default class HellbornDeal extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
const schema = {};
|
||||
|
||||
schema.promisor = new fields.StringField({ required: true, initial: "" });
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Deal"];
|
||||
}
|
||||
103
module/models/enemy.mjs
Normal file
@@ -0,0 +1,103 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
import HellbornRoll from "../documents/roll.mjs"
|
||||
|
||||
export default class HellbornEnemy extends foundry.abstract.TypeDataModel {
|
||||
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
const schema = {}
|
||||
|
||||
schema.enemyType = new fields.StringField({
|
||||
required: true,
|
||||
initial: "mook",
|
||||
choices: SYSTEM.ENEMY_TYPES
|
||||
})
|
||||
|
||||
const statField = (label) => {
|
||||
const schema = {
|
||||
label: new fields.StringField({ required: true, initial: label }),
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
|
||||
schema.stats = new fields.SchemaField(
|
||||
Object.values(SYSTEM.STATS).reduce((obj, stat) => {
|
||||
obj[stat.id] = statField(stat.label)
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
schema.flavorText = new fields.StringField({ required: true, initial: "", textSearch: true })
|
||||
|
||||
schema.trauma = new fields.SchemaField({
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
})
|
||||
|
||||
schema.darkness = new fields.SchemaField({
|
||||
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
|
||||
})
|
||||
|
||||
// Ailments
|
||||
const ailmentField = (label) => {
|
||||
const schema = {
|
||||
enabled: new fields.BooleanField({ required: true, initial: false }),
|
||||
label: new fields.StringField({ required: true, initial: label })
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
schema.ailments = new fields.SchemaField(
|
||||
Object.values(SYSTEM.AILMENTS).reduce((obj, ailment) => {
|
||||
obj[ailment.id] = ailmentField(ailment.label)
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
|
||||
schema.defense = new fields.SchemaField({
|
||||
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
resistance: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
maleficDR: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
resilience: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
})
|
||||
|
||||
schema.movement = new fields.SchemaField({
|
||||
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
reduce: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
})
|
||||
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Enemy"]
|
||||
|
||||
async roll(rollType, rollItem) {
|
||||
let opponentTarget
|
||||
const hasTarget = opponentTarget !== undefined
|
||||
|
||||
let roll = await HellbornRoll.prompt({
|
||||
rollType,
|
||||
rollItem,
|
||||
actorId: this.parent.id,
|
||||
actorName: this.parent.name,
|
||||
actorImage: this.parent.img,
|
||||
traits: this.parent.items.filter(i => i.type === "trait"),
|
||||
hasTarget,
|
||||
target: opponentTarget
|
||||
})
|
||||
if (!roll) return null
|
||||
|
||||
await roll.toMessage({}, { rollMode: roll.options.rollMode })
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,6 +8,7 @@ export default class HellbornEquipment extends foundry.abstract.TypeDataModel {
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
schema.quantity = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true })
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||
|
||||
return schema
|
||||
|
||||
@@ -11,6 +11,14 @@ export default class HellbornMalefica extends foundry.abstract.TypeDataModel {
|
||||
schema.domain = new fields.StringField({ required: true, nullable: false, choices: SYSTEM.MALEFICA_DOMAINS, initial: "adfectus" })
|
||||
schema.level = new fields.StringField({ required: true, nullable: false, choices: SYSTEM.MALEFICA_LEVELS, initial: "1" })
|
||||
schema.time = new fields.StringField({ required: true, initial : "" })
|
||||
|
||||
schema.choiceMaintainDuration = new fields.StringField({ required: true, initial : "maintain", choices: {"maintain": "Passive", "duration": "Duration"} })
|
||||
schema.duration = new fields.StringField({ required: true, initial : "" })
|
||||
schema.maintain = new fields.StringField({ required: true, initial : "" })
|
||||
|
||||
schema.hasDamage = new fields.BooleanField({ required: true, initial: false })
|
||||
schema.damage = new fields.StringField({ required: false, initial : "" })
|
||||
schema.damageType = new fields.StringField({ required: false, initial : "" })
|
||||
schema.range = new fields.StringField({ required: true, initial : "" })
|
||||
schema.target = new fields.StringField({ required: true, initial : "" })
|
||||
|
||||
|
||||
27
module/models/tarot.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { SYSTEM } from "../config/system.mjs";
|
||||
|
||||
export default class HellbornTarot extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
const schema = {};
|
||||
|
||||
schema.quote = new fields.StringField({ required: true, nullable: false, initial: "" });
|
||||
schema.bonus = new fields.StringField({ required: true, nullable: false, initial: "" });
|
||||
schema.penalty = new fields.StringField({ required: true, nullable: false, initial: "" });
|
||||
|
||||
schema.orientation = new fields.StringField({ required: true, initial: "Upright", choices: {"Upright": {label: "Upright"}, "Downright": {label: "Reversed"}} });
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.positiveEffect = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.negativeEffect = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.image = new fields.FilePathField({
|
||||
required: false,
|
||||
categories: ["IMAGE"],
|
||||
default: "icons/svg/treasure.svg",
|
||||
})
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Tarot"];
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
import HellbornRoll from "../documents/roll.mjs"
|
||||
|
||||
export default class HellbornVehicle extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
const schema = {}
|
||||
|
||||
schema.agility = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.armor = new fields.StringField({ required: true, initial: "" })
|
||||
schema.cargo = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.crew = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
|
||||
schema.force = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
|
||||
schema.range = new fields.StringField({ required: true, initial: "1d6" })
|
||||
schema.speed = new fields.StringField({ required: true, initial: "1d6" })
|
||||
schema.techAge = new fields.StringField({ required: true, initial: "1d6" })
|
||||
schema.tonnage = new fields.NumberField({ required: true, initial: 1, min: 0 })
|
||||
schema.damages = new fields.StringField({ required: true, initial: "" })
|
||||
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Vehicle"]
|
||||
|
||||
isEncumbered() {
|
||||
return false
|
||||
}
|
||||
|
||||
async roll(rollType, rollItem) {
|
||||
let opponentTarget
|
||||
const hasTarget = opponentTarget !== undefined
|
||||
|
||||
let roll = await HellbornRoll.prompt({
|
||||
rollType,
|
||||
rollItem,
|
||||
actorId: this.parent.id,
|
||||
actorName: this.parent.name,
|
||||
actorImage: this.parent.img,
|
||||
isEncumbered: this.isEncumbered(),
|
||||
hasTarget,
|
||||
target: opponentTarget
|
||||
})
|
||||
if (!roll) return null
|
||||
|
||||
await roll.toMessage({}, { rollMode: roll.options.rollMode })
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,13 +7,18 @@ export default class HellbornWeapon extends foundry.abstract.TypeDataModel {
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.stat = new fields.StringField({ required: true, initial: "skin", choices: {"skin": "Skin", "flesh": "Flesh" }})
|
||||
|
||||
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPES })
|
||||
schema.subType = new fields.StringField({ required: false, initial: "pistols", choices: SYSTEM.RANGED_SUBTYPES })
|
||||
schema.properties = new fields.StringField({required: true, initial: ""})
|
||||
|
||||
schema.damage = new fields.StringField({required: true, initial: "1d6"})
|
||||
schema.damageStat = new fields.StringField({ required: true, initial: "none", choices: {"none": "None", "skin": "Skin", "flesh": "Flesh", "heart": "Heart", "mind": "Mind", "soul": "Soul" }})
|
||||
schema.damageType = new fields.StringField({ required: false, initial : "Physical" })
|
||||
|
||||
schema.ammo = new fields.StringField({ required: false, initial: "" })
|
||||
schema.ammoQuantity = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||
schema.range = new fields.StringField({ required: false, initial: "" })
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||
|
||||
@@ -23,4 +28,14 @@ export default class HellbornWeapon extends foundry.abstract.TypeDataModel {
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HELLBORN.Weapon"]
|
||||
|
||||
prepareDerivedData() {
|
||||
super.prepareDerivedData();
|
||||
let actor = this.parent?.actor;
|
||||
if (actor) {
|
||||
this.damageFormula = this.damage + (this.damageStat !== "none" ? `+${actor.system.stats[this.damageStat].value}` : "");
|
||||
} else {
|
||||
this.damageFormula = this.damage;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -168,7 +168,22 @@ export default class HellbornUtils {
|
||||
Handlebars.registerHelper('isCreature', function (key) {
|
||||
return key === "creature" || key === "daemon";
|
||||
})
|
||||
|
||||
Handlebars.registerHelper('getRomanLevel', function (level) {
|
||||
if (level=== "highpowers") return "High";
|
||||
if (level === "mastery") return "Mastery";
|
||||
level = parseInt(level);
|
||||
if (level === 0) return "0";
|
||||
if (level === 1) return "I";
|
||||
if (level === 2) return "II";
|
||||
if (level === 3) return "III";
|
||||
if (level === 4) return "IV";
|
||||
if (level === 5) return "V";
|
||||
if (level === 6) return "VI";
|
||||
if (level === 7) return "VII";
|
||||
if (level === 8) return "VIII";
|
||||
if (level === 9) return "IX";
|
||||
return level;
|
||||
})
|
||||
// Handle v12 removal of this helper
|
||||
Handlebars.registerHelper('select', function (selected, options) {
|
||||
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
|
||||
@@ -178,21 +193,4 @@ export default class HellbornUtils {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static setupCSSRootVariables() {
|
||||
const era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
|
||||
|
||||
let eraCSS = SYSTEM.ERA_CSS[era];
|
||||
if (!eraCSS) eraCSS = SYSTEM.ERA_CSS["jazz"];
|
||||
|
||||
document.documentElement.style.setProperty('--font-size-standard', eraCSS.baseFontSize);
|
||||
document.documentElement.style.setProperty('--font-size-title', eraCSS.titleFontSize);
|
||||
document.documentElement.style.setProperty('--font-size-result', eraCSS.titleFontSize);
|
||||
document.documentElement.style.setProperty('--font-primary', eraCSS.primaryFont);
|
||||
document.documentElement.style.setProperty('--font-secondary', eraCSS.secondaryFont);
|
||||
document.documentElement.style.setProperty('--font-title', eraCSS.titleFont);
|
||||
document.documentElement.style.setProperty('--img-icon-color-filter', eraCSS.imgFilter);
|
||||
document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BIN
packs-system/hellborn-quickstart/000014.ldb
Normal file
0
packs-system/hellborn-quickstart/000021.log
Normal file
1
packs-system/hellborn-quickstart/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000019
|
||||
0
packs-system/hellborn-quickstart/LOCK
Normal file
8
packs-system/hellborn-quickstart/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/01-14:30:17.386227 7f0793fff6c0 Recovering log #17
|
||||
2025/07/01-14:30:17.395654 7f0793fff6c0 Delete type=3 #15
|
||||
2025/07/01-14:30:17.395704 7f0793fff6c0 Delete type=0 #17
|
||||
2025/07/01-14:30:49.376073 7f07923ff6c0 Level-0 table #22: started
|
||||
2025/07/01-14:30:49.376135 7f07923ff6c0 Level-0 table #22: 0 bytes OK
|
||||
2025/07/01-14:30:49.383661 7f07923ff6c0 Delete type=0 #20
|
||||
2025/07/01-14:30:49.406833 7f07923ff6c0 Manual compaction at level-0 from '!folders!0d8PWsAGxiRfOlkP' @ 72057594037927935 : 1 .. '!items!zCOHBP3SYlGAY6zI' @ 0 : 0; will stop at (end)
|
||||
2025/07/01-14:30:49.417059 7f07923ff6c0 Manual compaction at level-1 from '!folders!0d8PWsAGxiRfOlkP' @ 72057594037927935 : 1 .. '!items!zCOHBP3SYlGAY6zI' @ 0 : 0; will stop at (end)
|
||||
8
packs-system/hellborn-quickstart/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/06/30-22:25:13.089120 7f07937fe6c0 Recovering log #12
|
||||
2025/06/30-22:25:13.141380 7f07937fe6c0 Delete type=3 #10
|
||||
2025/06/30-22:25:13.141434 7f07937fe6c0 Delete type=0 #12
|
||||
2025/06/30-22:34:15.665682 7f07923ff6c0 Level-0 table #18: started
|
||||
2025/06/30-22:34:15.665712 7f07923ff6c0 Level-0 table #18: 0 bytes OK
|
||||
2025/06/30-22:34:15.671514 7f07923ff6c0 Delete type=0 #16
|
||||
2025/06/30-22:34:15.696997 7f07923ff6c0 Manual compaction at level-0 from '!folders!0d8PWsAGxiRfOlkP' @ 72057594037927935 : 1 .. '!items!zCOHBP3SYlGAY6zI' @ 0 : 0; will stop at (end)
|
||||
2025/06/30-22:34:15.707753 7f07923ff6c0 Manual compaction at level-1 from '!folders!0d8PWsAGxiRfOlkP' @ 72057594037927935 : 1 .. '!items!zCOHBP3SYlGAY6zI' @ 0 : 0; will stop at (end)
|
||||
BIN
packs-system/hellborn-quickstart/MANIFEST-000019
Normal file
@@ -13,7 +13,6 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
}
|
||||
|
||||
.character-main {
|
||||
background-color: var(--color-light-1);
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: flex;
|
||||
|
||||
.character-pc {
|
||||
@@ -57,17 +57,6 @@
|
||||
flex: none;
|
||||
}
|
||||
}
|
||||
/*.character-dmax-edit {
|
||||
input {
|
||||
display: flex;
|
||||
width: 60px;
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 5px 0 5px;
|
||||
text-align: center;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
.character-right {
|
||||
@@ -75,18 +64,39 @@
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
|
||||
.character-spec {
|
||||
label {
|
||||
max-width: 6rem;
|
||||
}
|
||||
.hero-armor {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.character-definition {
|
||||
.character-definition-pronouns {
|
||||
input {
|
||||
max-width: 3rem;
|
||||
min-width: 21.2rem;
|
||||
max-width: 21.2rem;
|
||||
}
|
||||
}
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.splitted {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
}
|
||||
label {
|
||||
max-width: 5rem;
|
||||
min-width: 5rem;
|
||||
}
|
||||
input {
|
||||
text-align: left;
|
||||
min-width: 9rem;
|
||||
max-width: 9rem;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
.trait {
|
||||
min-width: 7rem;
|
||||
max-width: 7rem;
|
||||
margin-right: 1rem;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
}
|
||||
.character-name {
|
||||
display: flex;
|
||||
@@ -110,17 +120,17 @@
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.character-skills {
|
||||
background-color: var(--color-light-1);
|
||||
.character-stats {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
flex: 1;
|
||||
|
||||
.character-skill {
|
||||
.character-stat {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.icon-skill {
|
||||
.icon-stat {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 4px;
|
||||
@@ -131,99 +141,27 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
.rollable {
|
||||
min-width: 4.5rem;
|
||||
max-width: 4.5rem;
|
||||
}
|
||||
.char-text {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
.d100 {
|
||||
flex: 0;
|
||||
max-width: 0.6rem;
|
||||
}
|
||||
.form-group {
|
||||
flex: 0;
|
||||
padding-left: 5px;
|
||||
.form-fields {
|
||||
font-size: 1.1rem;
|
||||
flex: none;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.character-skill-play {
|
||||
min-width: 225px;
|
||||
}
|
||||
|
||||
.character-skill-edit {
|
||||
min-width: 225px;
|
||||
}
|
||||
}
|
||||
|
||||
.character-biography {
|
||||
background-color: var(--color-light-1);
|
||||
prose-mirror.inactive {
|
||||
min-height: 40px;
|
||||
}
|
||||
prose-mirror.active {
|
||||
min-height: 150px;
|
||||
}
|
||||
.field-label {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.rank {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 6rem;
|
||||
min-width: 3.5rem;
|
||||
max-width: 3.5rem;
|
||||
}
|
||||
input {
|
||||
max-width: 4rem;
|
||||
min-width: 2.5rem;
|
||||
max-width: 2.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 12rem;
|
||||
}
|
||||
.character-stats-play {
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.resources {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.features,
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 3rem;
|
||||
}
|
||||
.feature {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
}
|
||||
.character-stats-edit {
|
||||
min-width: 120px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab.character-skills {
|
||||
background-color: var(--color-light-1);
|
||||
.tab.character-status .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
@@ -232,17 +170,74 @@
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.skills {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.skill {
|
||||
.mortality {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12.3rem;
|
||||
max-width: 12.3rem;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
label {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.counters {
|
||||
display: flex;
|
||||
direction: column;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
.characteristics-label {
|
||||
color: grey;
|
||||
font-size: small;
|
||||
}
|
||||
label {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.spaced-left {
|
||||
margin-left: 0.8rem;
|
||||
}
|
||||
input {
|
||||
min-width: 2.5rem;
|
||||
max-width: 2.5rem;
|
||||
}
|
||||
}
|
||||
.ailments {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 4px;
|
||||
.ailment {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
label {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.perks {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.perk {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 20rem;
|
||||
max-width: 20rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
@@ -253,9 +248,17 @@
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.score {
|
||||
min-width: 1.2rem;
|
||||
max-width: 1.2rem;
|
||||
.flavor {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
}
|
||||
.role {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
.level {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
@@ -270,8 +273,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
.tab.character-status {
|
||||
background-color: var(--color-light-1);
|
||||
.tab.character-maleficas .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
@@ -281,28 +284,32 @@
|
||||
}
|
||||
}
|
||||
|
||||
.bonds {
|
||||
.maleficas {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.bond {
|
||||
.malefica {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
min-width: 20rem;
|
||||
max-width: 20rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.type {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
.damage {
|
||||
min-width: 3.2rem;
|
||||
max-width: 3.2rem;
|
||||
}
|
||||
.domain {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.level {
|
||||
min-width: 2rem;
|
||||
@@ -316,11 +323,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
.motivations {
|
||||
.rituals {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.motivation {
|
||||
.ritual {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
@@ -331,67 +338,25 @@
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.ingredients {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
.difficulty {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.threshold {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.mentaldisorders {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.mentaldisorder {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
}
|
||||
.cured {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.injuries {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.injury {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 16rem;
|
||||
max-width: 16rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
.limit {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
@@ -402,8 +367,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
.tab.character-talents {
|
||||
background-color: var(--color-light-1);
|
||||
.tab.character-equipment .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
@@ -413,179 +378,37 @@
|
||||
}
|
||||
}
|
||||
|
||||
.talents {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.talent {
|
||||
.limboes {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
.limboes-line {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
.form-group {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
margin-left: 4px;
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
.ammo-quantity {
|
||||
text-align: left;
|
||||
max-width: 3rem;
|
||||
min-width: 3rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.languages {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.language {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.psionics {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.psionic {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.tab.character-equipment {
|
||||
background-color: var(--color-light-1);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.encumbrance {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 4px;
|
||||
input {
|
||||
max-width: 4rem;
|
||||
}
|
||||
.encumbered {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.implants {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.implant {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.weapons {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.weapon {
|
||||
display: flex;
|
||||
@@ -603,9 +426,29 @@
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.properties {
|
||||
min-width: 16.3rem;
|
||||
max-width: 16.3rem;
|
||||
}
|
||||
.range {
|
||||
min-width: 4.5rem;
|
||||
max-width: 4.5rem;
|
||||
}
|
||||
.ammo {
|
||||
min-width: 4.5rem;
|
||||
max-width: 4.5rem;
|
||||
}
|
||||
.ammoQuantity {
|
||||
min-width: 4.2rem;
|
||||
max-width: 4.2rem;
|
||||
}
|
||||
.type {
|
||||
min-width: 3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
@@ -634,13 +477,21 @@
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.protection {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
.bonus {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.resilience {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.reduction {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
min-width: 13.5rem;
|
||||
max-width: 13.5rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
@@ -674,6 +525,10 @@
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.quantity {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
@@ -689,3 +544,115 @@
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab.character-biography .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.splitted-text {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
fieldset {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.deals {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.deal {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.aliases {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 4px;
|
||||
.form-group {
|
||||
label {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
input {
|
||||
text-align: left;
|
||||
min-width: 41rem;
|
||||
max-width: 41rem;
|
||||
}
|
||||
}
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.experience {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.form-group {
|
||||
label {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
}
|
||||
input {
|
||||
text-align: left;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
}
|
||||
}
|
||||
|
||||
prose-mirror.inactive {
|
||||
min-height: 40px;
|
||||
}
|
||||
prose-mirror.active {
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,700 +0,0 @@
|
||||
.creature-content {
|
||||
.sheet-common();
|
||||
.creature-sheet-common();
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.sheet-tabs {
|
||||
background-color: var(--color-light-1);
|
||||
}
|
||||
|
||||
.creature-main {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
|
||||
.creature-pc {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
flex: 1;
|
||||
|
||||
.creature-left {
|
||||
min-width: 180px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.creature-left-image {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding-bottom: 8px;
|
||||
.creature-img {
|
||||
height: 140px;
|
||||
width: auto;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.creature-hp {
|
||||
gap: 2px;
|
||||
align-items: center;
|
||||
input {
|
||||
flex: none;
|
||||
width: 2.5rem;
|
||||
margin-left: 2px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.hp-separator {
|
||||
font-size: calc(var(--font-size-standard) * 1.2);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
.creature-dv,
|
||||
.creature-dmax {
|
||||
.form-fields {
|
||||
flex: none;
|
||||
}
|
||||
}
|
||||
.creature-dmax-edit {
|
||||
input {
|
||||
display: flex;
|
||||
width: 60px;
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 5px 0 5px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.creature-right {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
|
||||
.creature-spec {
|
||||
label {
|
||||
max-width: 8rem;
|
||||
}
|
||||
select {
|
||||
max-width: 10rem;
|
||||
}
|
||||
input {
|
||||
max-width: 6rem;
|
||||
}
|
||||
.dice-2d6 {
|
||||
max-width: 1.5rem;
|
||||
}
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.rollable {
|
||||
}
|
||||
}
|
||||
|
||||
.creature-name {
|
||||
display: flex;
|
||||
input {
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-title);
|
||||
width: 400px;
|
||||
}
|
||||
}
|
||||
label {
|
||||
min-width: 120px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.creature-pc-play {
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.creature-pc-edit {
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.creature-skills {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
flex: 1;
|
||||
|
||||
.creature-skill {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.icon-skill {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.rollable {
|
||||
min-width: 4.5rem;
|
||||
max-width: 4.5rem;
|
||||
}
|
||||
.char-text {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
.d100 {
|
||||
flex: 0;
|
||||
max-width: 0.6rem;
|
||||
}
|
||||
.form-group {
|
||||
flex: 0;
|
||||
padding-left: 5px;
|
||||
.form-fields {
|
||||
font-size: 1.1rem;
|
||||
flex: none;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.creature-skill-play {
|
||||
min-width: 225px;
|
||||
}
|
||||
|
||||
.creature-skill-edit {
|
||||
min-width: 225px;
|
||||
}
|
||||
}
|
||||
|
||||
.creature-biography {
|
||||
background-color: var(--color-light-1);
|
||||
prose-mirror.inactive {
|
||||
min-height: 40px;
|
||||
}
|
||||
prose-mirror.active {
|
||||
min-height: 150px;
|
||||
}
|
||||
.field-label {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.rank {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 6rem;
|
||||
}
|
||||
input {
|
||||
max-width: 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 12rem;
|
||||
}
|
||||
}
|
||||
|
||||
.resources {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.features,
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
label {
|
||||
min-width: 3rem;
|
||||
}
|
||||
.feature {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab.creature-skills {
|
||||
background-color: var(--color-light-1);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.skills {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.skill {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12.3rem;
|
||||
max-width: 12.3rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.score {
|
||||
min-width: 1.2rem;
|
||||
max-width: 1.2rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab.creature-status {
|
||||
background-color: var(--color-light-1);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.bonds {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.bond {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.type {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.level {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.motivations {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.motivation {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mentaldisorders {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.mentaldisorder {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
}
|
||||
.cured {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.injuries {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.injury {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 16rem;
|
||||
max-width: 16rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab.creature-traits {
|
||||
background-color: var(--color-light-1);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.traits {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.trait {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.abilities {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.ability {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.psionics {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.psionic {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.tab.creature-equipment {
|
||||
background-color: var(--color-light-1);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.encumbrance {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 4px;
|
||||
input {
|
||||
max-width: 4rem;
|
||||
}
|
||||
.encumbered {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.implants {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.implant {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.weapons {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.weapon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.armors {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px;
|
||||
.armor {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.protection {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.equipments {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.equipment {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
prose-mirror.inactive {
|
||||
min-height: 40px;
|
||||
}
|
||||
prose-mirror.active {
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
37
styles/deal.less
Normal file
@@ -0,0 +1,37 @@
|
||||
.deal-content {
|
||||
.sheet-common();
|
||||
.item-sheet-common();
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.form-group.long-input input {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
text-align: left;
|
||||
}
|
||||
.form-group input {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.form-group select {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
flex: 10%;
|
||||
}
|
||||
}
|
||||
489
styles/enemy.less
Normal file
@@ -0,0 +1,489 @@
|
||||
.enemy-content {
|
||||
.sheet-common();
|
||||
.enemy-sheet-common();
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.sheet-tabs {
|
||||
background-color: var(--color-light-1);
|
||||
}
|
||||
|
||||
.enemy-main {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: flex;
|
||||
|
||||
.enemy-pc {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
flex: 1;
|
||||
|
||||
.enemy-left {
|
||||
min-width: 180px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.enemy-left-image {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding-bottom: 8px;
|
||||
.enemy-img {
|
||||
height: 140px;
|
||||
width: auto;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.enemy-hp {
|
||||
gap: 2px;
|
||||
align-items: center;
|
||||
input {
|
||||
flex: none;
|
||||
width: 2.5rem;
|
||||
margin-left: 2px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.hp-separator {
|
||||
font-size: calc(var(--font-size-standard) * 1.2);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
.enemy-dv,
|
||||
.enemy-dmax {
|
||||
.form-fields {
|
||||
flex: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.enemy-right {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
|
||||
.enemy-definition {
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.splitted {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
}
|
||||
label {
|
||||
max-width: 5rem;
|
||||
min-width: 5rem;
|
||||
}
|
||||
input {
|
||||
text-align: left;
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
.trait {
|
||||
min-width: 7rem;
|
||||
max-width: 7rem;
|
||||
margin-right: 1rem;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
}
|
||||
.enemy-name {
|
||||
display: flex;
|
||||
input {
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-title);
|
||||
width: 400px;
|
||||
}
|
||||
}
|
||||
label {
|
||||
min-width: 120px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.enemy-pc-play {
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.enemy-pc-edit {
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.enemy-stats {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
flex: 1;
|
||||
|
||||
.enemy-stat {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.icon-stat {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.rollable {
|
||||
min-width: 3.5rem;
|
||||
max-width: 3.5rem;
|
||||
}
|
||||
input {
|
||||
min-width: 2.5rem;
|
||||
max-width: 2.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.enemy-stats-play {
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.enemy-stats-edit {
|
||||
min-width: 120px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab.enemy-traits .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.enemy-column {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
fieldset {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.mortality {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
label {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.counters {
|
||||
display: flex;
|
||||
direction: column;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
.characteristics-label {
|
||||
color: grey;
|
||||
font-size: small;
|
||||
label {
|
||||
min-width: 3.5rem;
|
||||
max-width: 3.5rem;
|
||||
}
|
||||
span {
|
||||
min-width: 3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
}
|
||||
label {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.spaced-left {
|
||||
margin-left: 0.8rem;
|
||||
}
|
||||
input {
|
||||
min-width: 2.5rem;
|
||||
max-width: 2.5rem;
|
||||
}
|
||||
}
|
||||
.traits {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.trait {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.equipments {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.equipment {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ailments {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 4px;
|
||||
.ailment {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
label {
|
||||
min-width: 5rem;
|
||||
max-width: 5rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.maleficas {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.malefica {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.domain {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 3.2rem;
|
||||
max-width: 3.2rem;
|
||||
}
|
||||
.level {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10em;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.weapons {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
gap: 4px;
|
||||
.weapon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 13rem;
|
||||
max-width: 13rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.properties {
|
||||
min-width: 18rem;
|
||||
max-width: 18rem;
|
||||
}
|
||||
.range {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.ammo {
|
||||
min-width: 3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
.type {
|
||||
min-width: 3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
.damage {
|
||||
min-width: 4rem;
|
||||
max-width: 4rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab.enemy-biography .main-div {
|
||||
/*background-color: var(--color-light-1);*/
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
legend {
|
||||
a {
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.splitted-text {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
fieldset {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.deals {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.deal {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
.rollable:hover,
|
||||
.rollable:focus {
|
||||
text-shadow: 0 0 8px var(--color-shadow-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
.controls {
|
||||
font-size: 0.7rem;
|
||||
min-width: 1.8rem;
|
||||
max-width: 1.8rem;
|
||||
}
|
||||
.name {
|
||||
min-width: 10rem;
|
||||
max-width: 10rem;
|
||||
}
|
||||
.item-img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 4px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.biodata {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 4px;
|
||||
.experience {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.form-group {
|
||||
label {
|
||||
min-width: 6rem;
|
||||
max-width: 6rem;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
margin-left: 4px;
|
||||
min-width: 14rem;
|
||||
max-width: 14rem;
|
||||
}
|
||||
input {
|
||||
text-align: left;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
}
|
||||
}
|
||||
|
||||
prose-mirror.inactive {
|
||||
min-height: 40px;
|
||||
}
|
||||
prose-mirror.active {
|
||||
min-height: 150px;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -22,7 +21,6 @@
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
@import "mixins.less";
|
||||
@import "character.less";
|
||||
@import "vehicle.less";
|
||||
@import "creature.less";
|
||||
@import "enemy.less";
|
||||
@import "weapon.less";
|
||||
@import "equipment.less";
|
||||
@import "armor.less";
|
||||
@import "deal.less";
|
||||
@import "tarot.less";
|
||||
@import "ritual.less";
|
||||
@import "perk.less";
|
||||
@import "malefica.less";
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
:root {
|
||||
--font-size-standard: 0.9rem;
|
||||
--font-size-result: 1.4rem;
|
||||
--background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
|
||||
url("../assets/ui/ftl_nomad_background_01.webp");
|
||||
--background-image-base: url("../assets/ui/sheet_background_01.webp");
|
||||
--font-primary: "MinionProRegular";
|
||||
--font-secondary: "MinionProRegular";
|
||||
--font-title: "SupernaturalKnight";
|
||||
--logo-standard: url("../assets/ui/pentagram_logo.webp");
|
||||
--title-color: #f0443c;
|
||||
--background-box: ##e0dcdc;
|
||||
--background-box: #e0dcdc;
|
||||
--color-success: rgb(15, 122, 15);
|
||||
--color-failure: darkred;
|
||||
--color-warning: darkorange;
|
||||
@@ -16,15 +15,9 @@
|
||||
--color-critical-failure: rgb(141, 32, 231);
|
||||
}
|
||||
|
||||
.d100 {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
color: black;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
.item .thumbnail,
|
||||
.item-img {
|
||||
body {
|
||||
--color-light-1: rgba(182, 178, 178, 0.6);
|
||||
--color-warm-1:#f0443c;
|
||||
}
|
||||
|
||||
#logo {
|
||||
@@ -34,15 +27,25 @@
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.scrollable-content {
|
||||
max-height: 600px; // Définissez la hauteur maximale selon vos besoins
|
||||
overflow-y: auto; // Active le défilement vertical quand nécessaire
|
||||
padding-right: 10px; // Espace pour la barre de défilement
|
||||
}
|
||||
|
||||
nav.tabs [data-tab] {
|
||||
color: var(--title-color);
|
||||
}
|
||||
|
||||
#pause > img {
|
||||
content: var(--logo-standard);
|
||||
height: 192px;
|
||||
height: 256px;
|
||||
width: 256px;
|
||||
top: -45px;
|
||||
left: calc(50% - 96px);
|
||||
}
|
||||
|
||||
i.fvtt-ftl-nomad {
|
||||
i.fvtt-hellborn {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
background-image: var(--logo-standard);
|
||||
@@ -55,7 +58,7 @@ i.fvtt-ftl-nomad {
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.application.dialog.fvtt-ftl-nomad {
|
||||
.application.dialog.fvtt-hellborn {
|
||||
font-family: var(--font-primary);
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
background-image: var(--background-image-base);
|
||||
|
||||
@@ -4,12 +4,14 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.form-group label {
|
||||
.form-fields input[type="checkbox"] {
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
.form-group input {
|
||||
min-width: 12rem;
|
||||
@@ -26,7 +28,6 @@
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
.creature-sheet-common {
|
||||
.enemy-sheet-common {
|
||||
label {
|
||||
font-family: var(--font-secondary);
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -27,7 +26,6 @@
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
|
||||
@@ -4,13 +4,10 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.form-group label {
|
||||
}
|
||||
.form-group.long-input input {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
@@ -27,7 +24,6 @@
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
|
||||
100
styles/roll.less
@@ -1,4 +1,4 @@
|
||||
.application.dialog.fvtt-cthulhu-eternal {
|
||||
.application.dialog.fvtt-hellborn {
|
||||
color: var(--color-dark-1);
|
||||
background-color: var(--color-light-1);
|
||||
|
||||
@@ -10,13 +10,14 @@
|
||||
|
||||
input,
|
||||
select {
|
||||
text-align: left;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
border-color: var(--color-dark-6);
|
||||
color: var(--color-dark-2);
|
||||
}
|
||||
}
|
||||
|
||||
.fvtt-cthulhu-eternal-roll-dialog {
|
||||
.fvtt-hellborn-roll-dialog {
|
||||
fieldset {
|
||||
padding: 10px;
|
||||
background-color: var(--color-light-1);
|
||||
@@ -53,6 +54,62 @@
|
||||
color: var(--color-dark-1);
|
||||
}
|
||||
|
||||
.item-to-chat {
|
||||
h2 {
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
margin-bottom: 4px;
|
||||
font-family: var(--font-title);
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
color: var(--title-color);
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
.tarot-spacing {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
li {
|
||||
margin: 0 10px;
|
||||
font-family: var(--font-primary);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.tarot-item-img {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.flavor-text-damage {
|
||||
font-family: var(--font-secondary);
|
||||
font-size: calc(var(--font-size-standard) * 1.2);
|
||||
color: var(--color-dark-2);
|
||||
margin-top: 0px;
|
||||
align-items: center;
|
||||
.chat-damage-type {
|
||||
font-weight: bold;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
h2 {
|
||||
text-align: center;
|
||||
margin-top: 4px;
|
||||
margin-left: 4px;
|
||||
margin-bottom: 0px;
|
||||
font-family: var(--font-title);
|
||||
font-size: calc(var(--font-size-standard) * 1.1);
|
||||
color: var(--title-color);
|
||||
}
|
||||
}
|
||||
|
||||
&.dice-roll {
|
||||
flex-direction: column;
|
||||
|
||||
@@ -70,14 +127,25 @@
|
||||
border: 0px;
|
||||
}
|
||||
.intro-chat {
|
||||
color:var(--color-dark-1);
|
||||
color: var(--color-dark-1);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
h2 {
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
margin-bottom: 4px;
|
||||
font-family: var(--font-title);
|
||||
font-size: calc(var(--font-size-standard) * 1.4);
|
||||
color: var(--title-color);
|
||||
}
|
||||
|
||||
.intro-img {
|
||||
padding: 5px;
|
||||
width: 80px;
|
||||
align-self: center;
|
||||
padding: 4px;
|
||||
max-width: 80px;
|
||||
min-width: 80px;
|
||||
align-self: top;
|
||||
text-align: center;
|
||||
}
|
||||
.intro-right {
|
||||
display: flex;
|
||||
@@ -91,19 +159,30 @@
|
||||
li {
|
||||
margin: 0 10px;
|
||||
font-family: var(--font-primary);
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
}
|
||||
.chat-roll-label {
|
||||
margin-right: 2rem;
|
||||
}
|
||||
.chat-results-spacing {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.nudge-roll {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 4rem;
|
||||
display: none;
|
||||
}
|
||||
.result-unknown {
|
||||
color: var(--color-dark-2);
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-result);
|
||||
}
|
||||
.result-success {
|
||||
color: var(--color-success);
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-result);
|
||||
}
|
||||
.result-critical-success {
|
||||
.result-satanic-success {
|
||||
color: var(--color-critical-success);
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-result);
|
||||
@@ -113,7 +192,7 @@
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-result);
|
||||
}
|
||||
.result-critical-failure {
|
||||
.result-fiendish-failure {
|
||||
color: var(--color-critical-failure);
|
||||
font-family: var(--font-title);
|
||||
font-size: var(--font-size-result);
|
||||
@@ -127,6 +206,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.result {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -4,11 +4,26 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.form-group.long-input input {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
text-align: left;
|
||||
}
|
||||
.form-group input {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.form-group select {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
|
||||
50
styles/tarot.less
Normal file
@@ -0,0 +1,50 @@
|
||||
.tarot-content {
|
||||
.sheet-common();
|
||||
.item-sheet-common();
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
legend {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.form-group.long-input input {
|
||||
min-width: 24rem;
|
||||
max-width: 24rem;
|
||||
text-align: left;
|
||||
}
|
||||
.form-group input {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.form-group select {
|
||||
min-width: 12rem;
|
||||
max-width: 12rem;
|
||||
}
|
||||
.flexrow,
|
||||
.scrollable-content {
|
||||
align-items: flex-start;
|
||||
}
|
||||
.tarot-pic {
|
||||
margin-left: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start; // aligne le contenu en haut
|
||||
align-items: center; // ce }
|
||||
}
|
||||
}
|
||||
.header {
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
flex: 10%;
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
.item-sheet-common();
|
||||
|
||||
.header {
|
||||
background-color: var(--color-light-1);
|
||||
display: flex;
|
||||
img {
|
||||
width: 50px;
|
||||
@@ -13,7 +12,6 @@
|
||||
|
||||
fieldset {
|
||||
margin-top: 8px;
|
||||
background-color: var(--color-light-1);
|
||||
.form-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
19
system.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"id": "fvtt-hellborn",
|
||||
"title": "Hellborn -Descended RPG",
|
||||
"title": "Hellborn - Descended RPG",
|
||||
"description": "Hellborn - Descended RPG",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hellborn/raw/branch/main/system.json",
|
||||
"download": "#{DOWNLOAD}#",
|
||||
@@ -33,9 +33,8 @@
|
||||
],
|
||||
"documentTypes": {
|
||||
"Actor": {
|
||||
"character": { "htmlFields": ["description", "notes"] },
|
||||
"monster": { "htmlFields": ["description", "notes"] },
|
||||
"vehicle": { "htmlFields": ["description", "notes"] }
|
||||
"character": { "htmlFields": ["backstory", "notes", "appearance", "scars", "likes", "dislikes", "fears", "vices", "goals", "ammbitions", "values", "bonds"] },
|
||||
"enemy": { "htmlFields": ["description", "notes"] }
|
||||
},
|
||||
"Item": {
|
||||
"perk": { "htmlFields": ["description"] },
|
||||
@@ -44,10 +43,20 @@
|
||||
"equipment": { "htmlFields": ["description"] },
|
||||
"malefica": { "htmlFields": ["description"] },
|
||||
"species-trait": { "htmlFields": ["description"] },
|
||||
"ritual": { "htmlFields": ["description"] }
|
||||
"ritual": { "htmlFields": ["description"] },
|
||||
"tarot": { "htmlFields": ["description", "positiveEffect", "negativeEFfect"] },
|
||||
"deal": { "htmlFields": ["description"] }
|
||||
}
|
||||
},
|
||||
"packs": [
|
||||
{
|
||||
"name": "hellborn-quickstart",
|
||||
"banner": "systems/fvtt-hellborn/assets/ui/banner_compendium.png",
|
||||
"label": "Hellborn - Quickstart",
|
||||
"system": "fvtt-hellborn",
|
||||
"path": "packs-system/hellborn-quickstart",
|
||||
"type": "Item"
|
||||
}
|
||||
],
|
||||
"grid": {
|
||||
"distance": 10,
|
||||
|
||||
@@ -1,34 +1,154 @@
|
||||
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset class="rank">
|
||||
<legend>Rank</legend>
|
||||
{{formField systemFields.rank.fields.experienced value=system.rank.experienced type="number" rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.rank.fields.expert value=system.rank.expert type="number" rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.rank.fields.veteran value=system.rank.veteran type="number" rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.rank.fields.elite value=system.rank.elite type="number" rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.rank.fields.legend value=system.rank.legend type="number" rootId=partId disabled=isPlayMode}}
|
||||
</fieldset>
|
||||
<div class="main-div">
|
||||
|
||||
<fieldset class="biodata">
|
||||
<legend>{{localize "HELLBORN.Label.experience"}}</legend>
|
||||
<div class="experience">
|
||||
{{formField systemFields.experience.fields.current value=system.experience.current type="number" rootId=partId
|
||||
disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.experience.fields.total value=system.experience.total type="number" rootId=partId
|
||||
disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.experience.fields.training value=system.experience.training type="number" rootId=partId
|
||||
disabled=isPlayMode}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset >
|
||||
<legend>{{localize "HELLBORN.Label.biodata"}}</legend>
|
||||
{{formField systemFields.biodata.fields.gender value=system.biodata.gender rootId=partId disabled=isPlayMode classes="short"}}
|
||||
{{formField systemFields.biodata.fields.age value=system.biodata.age rootId=partId disabled=isPlayMode classes="short"}}
|
||||
{{formField systemFields.biodata.fields.height value=system.biodata.height rootId=partId disabled=isPlayMode classes="short"}}
|
||||
{{formField systemFields.biodata.fields.weight value=system.biodata.weight rootId=partId disabled=isPlayMode classes="short"}}
|
||||
{{formField systemFields.biodata.fields.eyes value=system.biodata.eyes rootId=partId disabled=isPlayMode classes="short"}}
|
||||
{{formField systemFields.biodata.fields.hair value=system.biodata.hair rootId=partId disabled=isPlayMode classes="short"}}
|
||||
<div class="aliases">
|
||||
{{formField systemFields.biodata.fields.aliases value=system.biodata.aliases rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="biodata">
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.gender value=system.biodata.gender rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.age value=system.biodata.age rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.height value=system.biodata.height rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.weight value=system.biodata.weight rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.eyes value=system.biodata.eyes rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.hair value=system.biodata.hair rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.home value=system.biodata.home rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace rootId=partId
|
||||
disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="experience">
|
||||
{{formField systemFields.biodata.fields.dod value=system.biodata.dod rootId=partId
|
||||
disabled=isPlayMode}}
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.description"}}</legend>
|
||||
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.deals"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addDeals"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createDeal"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="deals">
|
||||
{{#each deals as |item|}}
|
||||
<div class="deal" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.notes"}}</legend>
|
||||
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.backstory"}}</legend>
|
||||
{{formInput systemFields.backstory enriched=enrichedBackstory value=system.backstory name="system.backstory" toggled=true}}
|
||||
</fieldset>
|
||||
|
||||
<div class="splitted-text">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.appearance"}}</legend>
|
||||
{{formInput systemFields.appearance enriched=enrichedAppearance value=system.appearance name="system.appearance"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.scars"}}</legend>
|
||||
{{formInput systemFields.scars enriched=scars value=system.scars name="system.scars"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="splitted-text">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.likes"}}</legend>
|
||||
{{formInput systemFields.likes enriched=enrichedLikes value=system.likes name="system.likes"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.dislikes"}}</legend>
|
||||
{{formInput systemFields.dislikes enriched=enrichedDislikes value=system.dislikes name="system.dislikes"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="splitted-text">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.fears"}}</legend>
|
||||
{{formInput systemFields.fears enriched=enrichedFears value=system.fears name="system.fears"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.vices"}}</legend>
|
||||
{{formInput systemFields.vices enriched=enrichedVices value=system.vices name="system.vices"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="splitted-text">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.goals"}}</legend>
|
||||
{{formInput systemFields.goals enriched=enrichedGoals value=system.goals name="system.goals"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.ambitions"}}</legend>
|
||||
{{formInput systemFields.ambitions enriched=enrichedAmbitions value=system.ambitions name="system.ambitions"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="splitted-text">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.values"}}</legend>
|
||||
{{formInput systemFields.values enriched=enrichedValues value=system.values name="system.values"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.bonds"}}</legend>
|
||||
{{formInput systemFields.bonds enriched=enrichedBonds value=system.bonds name="system.bonds"
|
||||
toggled=true}}
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,14 +1,5 @@
|
||||
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset class="encumbrance">
|
||||
{{#if isEncumbered}}
|
||||
{{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true classes="encumbered"}}
|
||||
{{else }}
|
||||
{{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true}}
|
||||
{{/if}}
|
||||
{{formField systemFields.enc.fields.max value=system.enc.max rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.credits value=system.credits rootId=partId }}
|
||||
</fieldset>
|
||||
<div class="main-div">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
|
||||
@@ -19,17 +10,33 @@
|
||||
{{#each weapons as |item|}}
|
||||
<div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}} - {{upperFirst item.system.weaponType}}" />
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<!-- <span class="type" data-tooltip="Type">{{upperFirst item.system.weaponType}}</span> -->
|
||||
<span class="properties" data-tooltip="Properties">{{upperFirst item.system.properties}}</span>
|
||||
<span class="range" data-tooltip="Range">{{upperFirst item.system.range}}</span>
|
||||
|
||||
{{#if (eq item.system.weaponType "melee")}}
|
||||
<span class="ammoQuantity" > </span>
|
||||
<span class="ammo" ></span>
|
||||
|
||||
{{else}}
|
||||
<span class="ammoQuantity" data-tooltip="ammoQuantity">
|
||||
<i class="fa-solid fa-octagon-plus" data-action="modifyAmmo" data-quantity="1" data-item-id="{{item.id}}"></i>
|
||||
{{item.system.ammoQuantity}}
|
||||
<i class="fa-solid fa-octagon-minus" data-action="modifyAmmo" data-quantity="-1" data-item-id="{{item.id}}"></i>
|
||||
</span>
|
||||
<span class="ammo" data-tooltip="Ammo">{{upperFirst item.system.ammo}}</span>
|
||||
{{/if}}
|
||||
|
||||
<a class="damage rollable" data-tooltip="Damage" data-item-id="{{item.id}}" data-action="roll"
|
||||
data-roll-type="damage" data-roll-value="{{item.system.damageFormula}}">
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">
|
||||
{{localize "HELLBORN.Label.damageShort"}} :
|
||||
{{item.system.damage}}</a>
|
||||
{{item.system.damageFormula}}</a>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
@@ -53,41 +60,10 @@
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<span class="protection">{{localize "HELLBORN.Label.armor"}} : {{item.system.protection}}</span>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
<span class="bonus" data-tooltip="Bonus">{{item.system.bonus}}</span>
|
||||
<span class="resilience" data-tooltip="Resilience">{{item.system.resilience}}</span>
|
||||
<span class="reduction" data-tooltip="Reduction">{{item.system.reduction}}</span>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.implants"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addTalent"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createImplant"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="implants">
|
||||
{{#each implants as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="implant item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">
|
||||
{{#if item.system.isAdvantage}}
|
||||
<i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i>
|
||||
{{else}}
|
||||
{{/if}}
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
@@ -112,6 +88,8 @@
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<span class="quantity" data-tooltip="Quantity">{{item.system.quantity}}</span>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
@@ -123,4 +101,27 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="limboes">
|
||||
<legend>Limboes and Ammo</legend>
|
||||
<div class="limboes-line">
|
||||
<div class="ammo-item">
|
||||
<input type="text" class="limboes-name" value="{{system.limboes}}" name="system.limboes"/>
|
||||
<span class="limboes-quantity">Limboes</span>
|
||||
</div>
|
||||
|
||||
<div class="ammo-item">
|
||||
<input type="text" class="ammo" value="{{system.ammo}}" name="system.ammo"/>
|
||||
<span class="limboes-quantity">Ammo</span>
|
||||
</div>
|
||||
|
||||
{{#each system.ammoArray as |ammo key|}}
|
||||
<div class="ammo-item">
|
||||
<input type="text" class="ammo-quantity" value="{{ammo.value}}" min="0" name="system.ammoArray.{{key}}.value" />
|
||||
<span class="ammo-name">{{upperFirst ammo.label}}</span>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -8,16 +8,6 @@
|
||||
<img class="character-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
|
||||
data-tooltip="{{actor.name}}" />
|
||||
</div>
|
||||
<fieldset class="character-hp">
|
||||
<legend>{{localize "HELLBORN.Label.Stamina"}}</legend>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.health.fields.staminaValue value=system.health.staminaValue}}
|
||||
{{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId disabled=true}}
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.health.fields.wounds value=system.health.wounds }}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
<div class="character-right">
|
||||
@@ -28,13 +18,55 @@
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<fieldset class="character-spec">
|
||||
{{formField systemFields.concept value=system.concept rootId=partId disabled=isPlayMode}}
|
||||
<fieldset class="character-definition">
|
||||
<div class="flexcol character-definition-pronouns">
|
||||
{{formField systemFields.pronouns value=system.pronouns rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="splitted">
|
||||
<div>
|
||||
<div class="flexcol">
|
||||
{{formField systemFields.species value=system.species rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.archetype value=system.archetype rootId=partId disabled=isPlayMode}}
|
||||
<div class="hero-armor">
|
||||
{{formField systemFields.heroPoints value=system.heroPoints rootId=partId }}
|
||||
{{formField systemFields.armor.fields.value value=system.armor.value rootId=partId disabled=isPlayMode}}
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<div class="form-group">
|
||||
<label>Trait</label>
|
||||
<input class="trait" type="text" value="{{trait.name}}" disabled >
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{trait.id}}"
|
||||
data-item-uuid="{{trait.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{trait.id}}"
|
||||
data-item-uuid="{{trait.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flexrow">
|
||||
<div class="form-group">
|
||||
<label><a data-action="toChat" data-item-uuid="{{upright.uuid}}">Upright</a></label>
|
||||
<input class="trait" type="text" value="{{upright.name}}" disabled >
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{upright.id}}"
|
||||
data-item-uuid="{{upright.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{upright.id}}"
|
||||
data-item-uuid="{{upright.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<div class="form-group">
|
||||
<label><a data-action="toChat" data-item-uuid="{{downright.uuid}}">Reversed</a></label>
|
||||
<input class="trait" type="text" value="{{downright.name}}" disabled >
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{downright.id}}"
|
||||
data-item-uuid="{{downright.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{downright.id}}"
|
||||
data-item-uuid="{{downright.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
@@ -42,58 +74,33 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="character-skills character-skills-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<legend>{{localize "HELLBORN.Label.skills"}}</legend>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_combat.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="combat">{{localize
|
||||
"HELLBORN.Label.combat"}}</label>
|
||||
{{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
<fieldset class="character-stats character-stats-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<legend>{{localize "HELLBORN.Label.stats"}}</legend>
|
||||
<div class="character-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="flesh"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.flesh"}}</label>
|
||||
{{formInput systemFields.stats.fields.flesh.fields.value value=system.stats.flesh.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_knowledge.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="knowledge">{{localize
|
||||
"HELLBORN.Label.knowledge"}}</label>
|
||||
{{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
<div class="character-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="skin"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.skin"}}</label>
|
||||
{{formInput systemFields.stats.fields.skin.fields.value value=system.stats.skin.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_social.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="social">{{localize
|
||||
"HELLBORN.Label.social"}}</label>
|
||||
{{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
<div class="character-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="heart"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.heart"}}</label>
|
||||
{{formInput systemFields.stats.fields.heart.fields.value value=system.stats.heart.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_physical.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="physical">{{localize
|
||||
"HELLBORN.Label.physical"}}</label>
|
||||
{{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
<div class="character-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="mind"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.mind"}}</label>
|
||||
{{formInput systemFields.stats.fields.mind.fields.value value=system.stats.mind.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_stealth.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="stealth">{{localize
|
||||
"HELLBORN.Label.stealth"}}</label>
|
||||
{{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_vehicles.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="vehicles">{{localize
|
||||
"HELLBORN.Label.vehicles"}}</label>
|
||||
{{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="character-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_technology.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="technology">{{localize
|
||||
"HELLBORN.Label.technology"}}</label>
|
||||
{{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
<div class="character-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="soul"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.soul"}}</label>
|
||||
{{formInput systemFields.stats.fields.soul.fields.value value=system.stats.soul.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
70
templates/character-maleficas.hbs
Normal file
@@ -0,0 +1,70 @@
|
||||
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
<div class="main-div">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.maleficas"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addMalefica"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createMalefica"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="maleficas">
|
||||
{{#each maleficas as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="malefica item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
|
||||
<div class="name" data-action="toChat" data-item-uuid="{{item.uuid}}" data-roll-type="malefica" data-tooltip="{{{item.system.description}}}<br>Time:{{item.system.time}}<br>Duration:{{item.system.duration}}<br>Range:{{item.system.range}}<br>Target:{{item.system.target}}">
|
||||
<a>{{item.name}}</a>
|
||||
</div>
|
||||
<span class="domain" data-tooltip="Domain">{{upperFirst item.system.domain}}</span>
|
||||
<span class="level" data-tooltip="Level">{{getRomanLevel item.system.level}}</span>
|
||||
{{#if item.system.hasDamage}}
|
||||
<a class="damage rollable" data-tooltip="Damage" data-item-id="{{item.id}}" data-action="roll"
|
||||
data-roll-type="damage" data-roll-value="{{item.system.damage}}">
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
{{item.system.damage}}</a>
|
||||
{{else}}
|
||||
<span class="damage" data-tooltip="Damage">-</span>
|
||||
{{/if}}
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.rituals"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addRitual"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createRitual"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="rituals">
|
||||
{{#each rituals as |item|}}
|
||||
<div class="ritual item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
|
||||
<div class="name" data-action="toChat" data-item-uuid="{{item.uuid}}" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
<a>{{item.name}}</a>
|
||||
</div>
|
||||
<span class="ingredients" data-tooltip="Ingredients">{{upperFirst item.system.ingredients}}</span>
|
||||
<span class="difficulty" data-tooltip="Difficulty">{{upperFirst item.system.difficulty}}</span>
|
||||
<span class="threshold" data-tooltip="Threshold">{{upperFirst item.system.threshold}}</span>
|
||||
<span class="limit" data-tooltip="Limit">{{upperFirst item.system.limit}}</span>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</section>
|
||||
84
templates/character-status.hbs
Normal file
@@ -0,0 +1,84 @@
|
||||
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
<div class="main-div">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.characteristics"}}</legend>
|
||||
<div class="counters">
|
||||
<div class="flexcol">
|
||||
<div>
|
||||
<label>Trauma </label>{{formInput systemFields.trauma.fields.current value=system.trauma.current}} /
|
||||
{{formInput systemFields.trauma.fields.max value=system.trauma.max}}
|
||||
|
||||
<label class="spaced-left"> Darkness </label>{{formInput systemFields.darkness.fields.current value=system.darkness.current}} /
|
||||
{{formInput systemFields.darkness.fields.max value=system.darkness.max}}
|
||||
{{formInput systemFields.darkness.fields.value value=system.darkness.value}}
|
||||
<label class="spaced-left"> Defense </label>{{formInput systemFields.defense.fields.base value=system.defense.base}}
|
||||
{{formInput systemFields.defense.fields.bonus value=system.defense.bonus }}
|
||||
{{formInput systemFields.defense.fields.total value=system.defense.total}}
|
||||
{{formInput systemFields.defense.fields.resistance value=system.defense.resistance}}
|
||||
<label class="spaced-left"> Movement </label>{{formInput systemFields.movement.fields.base value=system.movement.base}}
|
||||
{{formInput systemFields.movement.fields.reduce value=system.defense.reduce }}
|
||||
</div>
|
||||
|
||||
<div class="flexrow characteristics-label">
|
||||
<label> </label><span>Curr.</span><span>Max</span>
|
||||
<label> </label><span>Curr.</span><span>Max</span><span>Mal.DR</span>
|
||||
<label> </label><span>Base</span><span>Armor</span><span>Total</span><span>Resi.</span>
|
||||
<label> </label><span>Base</span><span>Redu.</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.perks"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addPerk"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createPerk"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="perks">
|
||||
{{#each perks as |item|}}
|
||||
<div class="perk item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
|
||||
<div class="name" data-roll-type="perk" data-action="toChat" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.system.description}}}">
|
||||
<a>{{item.name}}</a>
|
||||
</div>
|
||||
<span class="flavor" data-tooltip="Flavor text">{{upperFirst item.system.flavorText}}</span>
|
||||
<span class="role" data-tooltip="Role">{{upperFirst item.system.role}}</span>
|
||||
<span class="level" data-tooltip="Level">{{getRomanLevel item.system.level}}</span>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.ailments"}}</legend>
|
||||
<div class="mortality">
|
||||
<label>Mortality :</label>
|
||||
{{#each system.mortality.enabled as |mortality idx|}}
|
||||
<input class="mortality-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}"
|
||||
data-name="enabled" {{#if mortality}} checked {{/if}}>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
<div class="ailments">
|
||||
{{#each system.ailments as |item id|}}
|
||||
<div class="ailment " data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="false">
|
||||
<label>{{item.label}}</label> <input type="checkbox" class="checkbox" name="system.ailments.{{id}}.enabled"
|
||||
{{#if item.enabled}} checked {{/if}}>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,106 +0,0 @@
|
||||
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.talents"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addTalent"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createTalent"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="talents">
|
||||
{{#each talents as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="talent item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">
|
||||
{{#if item.system.isAdvantage}}
|
||||
<i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i>
|
||||
{{else}}
|
||||
{{/if}}
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.psionics"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addImplant"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createPsionic"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="psionics">
|
||||
{{#each psionics as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="psionic item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">
|
||||
{{#if item.system.isAdvantage}}
|
||||
<i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i>
|
||||
{{else}}
|
||||
{{/if}}
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.languages"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addLanguage"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createLanguage"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="languages">
|
||||
{{#each languages as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="language item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
|
||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">
|
||||
{{#if item.system.isAdvantage}}
|
||||
<i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i>
|
||||
{{else}}
|
||||
{{/if}}
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
</section>
|
||||
20
templates/chat-malefica.hbs
Normal file
@@ -0,0 +1,20 @@
|
||||
<div class="item-to-chat">
|
||||
<div class="intro-chat">
|
||||
<h2>{{name}}</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Domain : </strong>{{upperFirst system.domain}}</li>
|
||||
<li><strong>Level : </strong>{{getRomanLevel system.level}}</li>
|
||||
<li><strong>Time : </strong>{{system.time}}</li>
|
||||
{{#if (eq system.choiceMaintainDuration "duration")}}
|
||||
<li><strong>Duration : </strong>{{system.duration}}</li>
|
||||
{{else}}
|
||||
<li><strong>Maintain : </strong>{{system.maintain}}</li>
|
||||
{{/if}}
|
||||
<li><strong>Range : </strong>{{system.range}}</li>
|
||||
<li><strong>Target : </strong>{{system.target}}</li>
|
||||
<li>{{{system.description}}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,40 +1,72 @@
|
||||
{{!log 'chat-message' this}}
|
||||
<div class="{{cssClass}}">
|
||||
<div class="intro-chat">
|
||||
<div class="intro-img">
|
||||
<img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" />
|
||||
{{actorName}}
|
||||
</div>
|
||||
<div class="intro-right">
|
||||
|
||||
{{#if (eq rollType "stat")}}
|
||||
<h2>{{localize "HELLBORN.Label.statRoll"}}</h2>
|
||||
{{/if}}
|
||||
{{#if weapon}}
|
||||
<h2>{{weapon.name}}</strong></h2>
|
||||
{{/if}}
|
||||
|
||||
<ul>
|
||||
|
||||
{{#if (eq rollType "skill")}}
|
||||
<li><strong>{{localize "HELLBORN.Label.skillRoll"}}</strong></li>
|
||||
<li><strong>Properties :</strong> {{weapon.system.properties}}</li>
|
||||
<li>
|
||||
<span>
|
||||
<span class="chat-roll-label"><strong>{{localize rollItem.label}} : {{rollItem.value}}</strong></span>
|
||||
<span>{{localize "HELLBORN.Label.difficulty"}} : {{difficulty}}</span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
{{#if (gt nbAdvantages 0)}}
|
||||
<li>With Advantage !</li>
|
||||
{{/if}}
|
||||
{{#if (gt nbDisadvantages 0)}}
|
||||
<li>With Disadvantages ! </li>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if weapon}}
|
||||
<li><strong>Weapon : {{weapon.name}}</strong></li>
|
||||
{{/if}}
|
||||
|
||||
<li><strong>{{localize rollItem.label}} : {{fullFormula}}</strong></li>
|
||||
|
||||
{{#if isEncumbered}}
|
||||
<li class="red-warning">Encumbered : -1D</li>
|
||||
{{/if}}
|
||||
|
||||
<li>{{localize "HELLBORN.Label.modifier"}} : {{numericModifier}}D</li>
|
||||
<li class="chat-results-spacing">Results :
|
||||
{{#each results as |result|}}
|
||||
{{result.result}}
|
||||
{{/each}}
|
||||
</li>
|
||||
|
||||
{{#if isSuccess}}
|
||||
<li class="result-success">
|
||||
{{#if satanicSuccess}}
|
||||
<li class="chat-results-spacing result-satanic-success">
|
||||
{{localize "HELLBORN.Label.satanicSuccess"}}
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="chat-results-spacing result-success">
|
||||
{{localize "HELLBORN.Label.success"}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if isFailure}}
|
||||
<li class="result-failure">
|
||||
{{#if fiendishFailure}}
|
||||
<li class="chat-results-spacing result-fiendish-failure">
|
||||
{{localize "HELLBORN.Label.fiendishFailure"}}
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="chat-results-spacing result-failure">
|
||||
{{localize "HELLBORN.Label.failure"}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq resultType "unknown")}}
|
||||
<li class="chat-results-spacing result-unknown">
|
||||
{{localize "HELLBORN.Label.unknown"}}
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
12
templates/chat-perk.hbs
Normal file
@@ -0,0 +1,12 @@
|
||||
<div class="item-to-chat">
|
||||
<div class="intro-chat">
|
||||
<h2>{{name}}</h2>
|
||||
<ul>
|
||||
<li><strong><i>{{system.flavorText}}</i></strong></li>
|
||||
<li><strong>Role : </strong>{{upperFirst system.role}}</li>
|
||||
<li><strong>Level : </strong>{{getRomanLevel system.level}}</li>
|
||||
<li>{{{system.description}}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
14
templates/chat-ritual.hbs
Normal file
@@ -0,0 +1,14 @@
|
||||
<div class="item-to-chat">
|
||||
<div class="intro-chat">
|
||||
<h2>{{name}}</h2>
|
||||
<ul>
|
||||
<li><strong>Difficulty : </strong>{{system.difficulty}}</li>
|
||||
<li><strong>Threshold : </strong>{{system.threshold}}</li>
|
||||
<li><strong>Limit : </strong>{{system.limit}}</li>
|
||||
<li><strong>Ingredients : </strong>{{system.ingredients}}</li>
|
||||
<li><strong>N. Attempts : </strong>{{system.nbAttempts}}</li>
|
||||
<li>{{{system.description}}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
30
templates/chat-tarot.hbs
Normal file
@@ -0,0 +1,30 @@
|
||||
<div class="item-to-chat">
|
||||
<div class="intro-chat">
|
||||
<h2>{{name}}</h2>
|
||||
<ul>
|
||||
{{#if (eq system.orientation "Upright")}}
|
||||
<li><strong>Orientation : </strong>Upright</li>
|
||||
{{else}}
|
||||
<li><strong>Orientation : </strong>Reversed</li>
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Quote : </strong>{{system.quote}}</li>
|
||||
|
||||
{{#if (eq system.orientation "Upright")}}
|
||||
<li><strong>Upright XP Trigger : </strong>{{system.bonus}}</li>
|
||||
{{else}}
|
||||
<li><strong>Reversed XP Trigger : </strong>{{system.penalty}}</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="tarot-spacing"><strong>Description : </strong>{{{system.description}}}</li>
|
||||
|
||||
{{#if (eq system.orientation "Upright")}}
|
||||
<li class="tarot-spacing"><strong>Positive Effect : </strong>{{{system.positiveEffect}}}</li>
|
||||
{{else}}
|
||||
<li class="tarot-spacing"><strong>Negative Effect : </strong>{{{system.negativeEffect}}}</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
<img class="tarot-item-img" src="{{system.image}}" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
9
templates/chat-trait.hbs
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="item-to-chat">
|
||||
<div class="intro-chat">
|
||||
<h2>{{name}}</h2>
|
||||
<ul>
|
||||
<li>{{{system.description}}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,103 +0,0 @@
|
||||
<section class="creature-main creature-main-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
{{!log "creature-main" this}}
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.creature"}}</legend>
|
||||
<div class="creature-pc creature-pc-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<div class="creature-left">
|
||||
<div class="creature-left-image">
|
||||
<img class="creature-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
|
||||
data-tooltip="{{actor.name}}" />
|
||||
</div>
|
||||
<fieldset class="creature-hp">
|
||||
<legend>{{localize "HELLBORN.Label.Stamina"}}</legend>
|
||||
<div class="flexrow">
|
||||
Curr. {{formField systemFields.health.fields.staminaValue value=system.health.staminaValue}}
|
||||
Max {{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
<div class="creature-right">
|
||||
<div class="creature-name">
|
||||
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
|
||||
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet" data-tooltip-direction="UP">
|
||||
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<fieldset class="creature-spec">
|
||||
<legend>{{localize "HELLBORN.Label.Details"}}</legend>
|
||||
{{formField systemFields.terrain value=system.terrain rootId=partId disabled=isPlayMode localize=true}}
|
||||
{{formField systemFields.niche value=system.niche rootId=partId disabled=isPlayMode localize=true}}
|
||||
{{formField systemFields.size value=system.size rootId=partId disabled=isPlayMode localize=true}}
|
||||
<div class="flexrow rollable" data-roll-type="creature-number">
|
||||
<i class="fa-regular fa-dice dice-2d6"></i>
|
||||
{{formField systemFields.numberAppearing value=system.numberAppearing rootId=partId disabled=isPlayMode
|
||||
localize=true}}
|
||||
</div>
|
||||
<div class="flexrow rollable" data-roll-type="creature-damage">
|
||||
<i class="fa-regular fa-dice dice-2d6"></i>
|
||||
{{formField systemFields.damage value=system.damage rootId=partId disabled=isPlayMode localize=true}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="creature-skills creature-skills-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<legend>{{localize "HELLBORN.Label.skills"}}</legend>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_combat.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="combat">{{localize
|
||||
"HELLBORN.Label.combat"}}</label>
|
||||
{{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId
|
||||
disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_knowledge.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="knowledge">{{localize
|
||||
"HELLBORN.Label.knowledge"}}</label>
|
||||
{{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_social.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="social">{{localize
|
||||
"HELLBORN.Label.social"}}</label>
|
||||
{{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_physical.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="physical">{{localize
|
||||
"HELLBORN.Label.physical"}}</label>
|
||||
{{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_stealth.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="stealth">{{localize
|
||||
"HELLBORN.Label.stealth"}}</label>
|
||||
{{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_vehicles.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="vehicles">{{localize
|
||||
"HELLBORN.Label.vehicles"}}</label>
|
||||
{{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
<div class="creature-skill">
|
||||
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_technology.svg" class="icon-skill" />
|
||||
<label class="rollable" data-roll-type="skill" data-skill-id="technology">{{localize
|
||||
"HELLBORN.Label.technology"}}</label>
|
||||
{{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value
|
||||
rootId=partId disabled=isPlayMode type="number"}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
@@ -1,50 +0,0 @@
|
||||
<section class="tab creature-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.traits"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addTrait"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createTrait"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="traits">
|
||||
{{#each traits as |item|}}
|
||||
<div class="trait item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.abilities"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addAbility"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createAbility"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="abilities">
|
||||
{{#each abilities as |item|}}
|
||||
{{!log 'armor' this}}
|
||||
<div class="ability" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
@@ -5,7 +5,7 @@
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
{{formField systemFields.isAdvantage value=system.isAdvantage}}
|
||||
{{formField systemFields.promisor value=system.promisor localize=true }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
58
templates/enemy-main.hbs
Normal file
@@ -0,0 +1,58 @@
|
||||
<section class="enemy-main enemy-main-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.character"}}</legend>
|
||||
<div class="enemy-pc enemy-pc-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<div class="enemy-left">
|
||||
<div class="enemy-left-image">
|
||||
<img class="enemy-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
|
||||
data-tooltip="{{actor.name}}" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="enemy-right">
|
||||
<div class="enemy-name">
|
||||
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
|
||||
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet" data-tooltip-direction="UP">
|
||||
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<fieldset class="enemy-definition">
|
||||
{{formField systemFields.enemyType value=system.enemyType rootId=partId disabled=isPlayMode}}
|
||||
{{formField systemFields.flavorText value=system.flavorText rootId=partId disabled=isPlayMode}}
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="enemy-stats enemy-stats-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<legend>{{localize "HELLBORN.Label.stats"}}</legend>
|
||||
<div class="enemy-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="flesh"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.flesh"}}</label>
|
||||
{{formInput systemFields.stats.fields.flesh.fields.value value=system.stats.flesh.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="enemy-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="skin"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.skin"}}</label>
|
||||
{{formInput systemFields.stats.fields.skin.fields.value value=system.stats.skin.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="enemy-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="heart"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.heart"}}</label>
|
||||
{{formInput systemFields.stats.fields.heart.fields.value value=system.stats.heart.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="enemy-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="mind"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.mind"}}</label>
|
||||
{{formInput systemFields.stats.fields.mind.fields.value value=system.stats.mind.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
<div class="enemy-stat">
|
||||
<label class="rollable" data-roll-type="stat" data-stat-id="soul"><i class="fa-regular fa-dice"></i>{{localize
|
||||
"HELLBORN.Label.soul"}}</label>
|
||||
{{formInput systemFields.stats.fields.soul.fields.value value=system.stats.soul.value rootId=partId disabled=isPlayMode type="number" }}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
175
templates/enemy-trait.hbs
Normal file
@@ -0,0 +1,175 @@
|
||||
<section class="tab enemy-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
<div class="main-div">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.characteristics"}}</legend>
|
||||
<div class="counters">
|
||||
<div class="flexcol">
|
||||
<div>
|
||||
<label>Trauma : </label>{{formInput systemFields.trauma.fields.current value=system.trauma.current}} /
|
||||
{{formInput systemFields.trauma.fields.max value=system.trauma.max}}
|
||||
|
||||
<label class="spaced-left"> Darkness </label>
|
||||
{{formInput systemFields.darkness.fields.current value=system.darkness.current}} /
|
||||
{{formInput systemFields.darkness.fields.max value=system.darkness.max}}
|
||||
{{formInput systemFields.darkness.fields.value value=system.darkness.value}}
|
||||
<label class="spaced-left"> Defense </label>
|
||||
{{formInput systemFields.defense.fields.base value=system.defense.base}}
|
||||
{{formInput systemFields.defense.fields.resilience value=system.defense.resilience}}
|
||||
<label class="spaced-left"> Movement </label>{{formInput systemFields.movement.fields.base value=system.movement.base}}
|
||||
</div>
|
||||
|
||||
<div class="flexrow characteristics-label">
|
||||
<label></label><span>Curr.</span><span>Max</span>
|
||||
<label></label><span> Curr.</span><span> Max</span><span> Mal.DR</span>
|
||||
<label></label><span> Total</span><span> Resi.</span>
|
||||
<label></label>
|
||||
<label></label>
|
||||
<label></label>
|
||||
<label></label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.ailments"}}</legend>
|
||||
|
||||
<div class="ailments">
|
||||
{{#each system.ailments as |item id|}}
|
||||
<div class="ailment " data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="false">
|
||||
<label>{{item.label}}</label> <input type="checkbox" class="checkbox" name="system.ailments.{{id}}.enabled"
|
||||
{{#if item.enabled}} checked {{/if}}>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="enemy-column">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.traits"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addTrait"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createTrait"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="traits">
|
||||
{{#each traits as |item|}}
|
||||
<div class="trait item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
|
||||
<div class="name" data-roll-type="trait" data-action="toChat" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.system.description}}}">
|
||||
<a>{{item.name}}</a>
|
||||
</div>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.maleficas"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addMalefica"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createMalefica"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="maleficas">
|
||||
{{#each maleficas as |item|}}
|
||||
<div class="malefica item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
|
||||
<div class="name" data-roll-type="malefica" data-action="toChat" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.system.description}}}">
|
||||
<a>{{item.name}}</a>
|
||||
</div>
|
||||
<span class="domain" data-tooltip="Domain">{{upperFirst item.system.domain}}</span>
|
||||
<span class="level" data-tooltip="Level">{{getRomanLevel item.system.level}}</span>
|
||||
{{#if item.system.hasDamage}}
|
||||
<a class="damage rollable" data-tooltip="Damage" data-item-id="{{item.id}}" data-action="roll"
|
||||
data-roll-type="damage" data-roll-value="{{item.system.damage}}">
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
{{item.system.damage}}</a>
|
||||
{{else}}
|
||||
<span class="damage" data-tooltip="Damage">-</span>
|
||||
{{/if}}
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="weapons">
|
||||
{{#each weapons as |item|}}
|
||||
<div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<span class="type" data-tooltip="Type">{{upperFirst item.system.weaponType}}</span>
|
||||
<span class="properties" data-tooltip="Properties">{{upperFirst item.system.properties}}</span>
|
||||
<span class="range" data-tooltip="Range">{{upperFirst item.system.range}}</span>
|
||||
<span class="ammo" data-tooltip="Ammo">{{upperFirst item.system.ammo}}</span>
|
||||
|
||||
<a class="damage rollable" data-tooltip="Damage" data-item-id="{{item.id}}" data-action="roll"
|
||||
data-roll-type="damage" data-roll-value="{{item.system.damage}}">
|
||||
<i class="fa-regular fa-dice"></i>
|
||||
{{item.system.damage}}</a>
|
||||
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.equipments"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createEquipment"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="equipments">
|
||||
{{#each equipments as |item|}}
|
||||
{{!log 'armor' this}}
|
||||
<div class="equipment" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -5,6 +5,7 @@
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
{{formField systemFields.quantity value=system.quantity}}
|
||||
{{formField systemFields.cost value=system.cost}}
|
||||
</fieldset>
|
||||
|
||||
|
||||
@@ -8,8 +8,21 @@
|
||||
{{formField systemFields.domain value=system.domain localize=true}}
|
||||
{{formField systemFields.level value=system.level localize=true}}
|
||||
{{formField systemFields.time value=system.time localize=true }}
|
||||
|
||||
{{formField systemFields.choiceMaintainDuration value=system.choiceMaintainDuration localize=true }}
|
||||
{{#if (eq system.choiceMaintainDuration "duration")}}
|
||||
{{formField systemFields.duration value=system.duration localize=true}}
|
||||
{{else}}
|
||||
{{formField systemFields.maintain value=system.maintain localize=true}}
|
||||
{{/if}}
|
||||
|
||||
{{formField systemFields.range value=system.range localize=true}}
|
||||
{{formField systemFields.target value=system.target localize=true}}
|
||||
{{formField systemFields.hasDamage value=system.hasDamage localize=true}}
|
||||
{{#if system.hasDamage}}
|
||||
{{formField systemFields.damage value=system.damage}}
|
||||
{{formField systemFields.damageType value=system.damageType}}
|
||||
{{/if}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
|
||||
@@ -2,46 +2,33 @@
|
||||
|
||||
<fieldSet>
|
||||
|
||||
{{#if (eq rollType "skill")}}
|
||||
<legend>{{localize "HELLBORN.Label.skill"}}</legend>
|
||||
{{#if (eq rollType "stat")}}
|
||||
<legend>{{localize "HELLBORN.Label.stat"}}</legend>
|
||||
{{/if}}
|
||||
|
||||
<div class="dialog-skill">{{localize rollItem.label}} : 2d6+{{rollItem.value}}</div>
|
||||
<div class="dialog-stat">{{localize rollItem.label}} : 3d6+{{rollItem.value}}</div>
|
||||
|
||||
{{#if weapon}}
|
||||
<div class="dialog-skill">Weapon : {{weapon.name}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if isEncumbered}}
|
||||
<div class="dialog-skill red-warning">Encumbered : -1D</div>
|
||||
<div class="dialog-stat">Weapon : {{weapon.name}}</div>
|
||||
{{/if}}
|
||||
|
||||
</fieldSet>
|
||||
|
||||
<fieldSet class="dialog-modifier">
|
||||
<legend>{{localize "HELLBORN.Label.modifier"}}</legend>
|
||||
<legend>Advantages & Disadvantages</legend>
|
||||
|
||||
<select name="modifier" class="roll-skill-modifier">
|
||||
{{selectOptions choiceModifier selected=modifier localize=true}}
|
||||
<select name="nbadvantages" class="roll-stat-advantages">
|
||||
{{selectOptions choiceAdvantages selected=nbAdvantages localize=true}}
|
||||
</select>
|
||||
<select name="nbdisadvantages" class="roll-stat-disadvantages">
|
||||
{{selectOptions choiceDisadvantages selected=nbDisadvantages localize=true}}
|
||||
</select>
|
||||
|
||||
{{#if weapon}}
|
||||
<select name="range-modifier" class="roll-skill-range-modifier">
|
||||
{{selectOptions choiceRangeModifier selected=rangeModifier}}
|
||||
</select>
|
||||
<ul>
|
||||
<li>Two Attacks : <input type="checkbox" name="isAiming" data-field="two-attacks" class="select-combat-option"></li>
|
||||
<li>Aiming : <input type="checkbox" data-field="aiming" class="select-combat-option"></li>
|
||||
<li>Dim Lightning : <input type="checkbox" data-field="dim" class="select-combat-option"></li>
|
||||
<li>Darkness : <input type="checkbox" data-field="darkness" class="select-combat-option"></li>
|
||||
<li>Target Prone/Obscured : <input type="checkbox" data-field="prone" class="select-combat-option"></li>
|
||||
<li>Target Cover : <input type="checkbox" data-field="cover" class="select-combat-option"></li>
|
||||
<li>1/2 Auto Fire Recoil : <input type="checkbox" data-field="recoil-first" class="select-combat-option"></li>
|
||||
<li>2+ Auto Fire Recoil : <input type="checkbox" data-field="recoil-third" class="select-combat-option"></li>
|
||||
<li>Target Aware : <input type="checkbox" data-field="aware" class="select-combat-option"></li>
|
||||
</ul>
|
||||
{{/if}}
|
||||
</fieldSet>
|
||||
|
||||
<fieldSet class="dialog-formula">
|
||||
<legend>Difficulty</legend>
|
||||
<input name="difficulty" class="roll-difficulty" type="number" value="{{difficulty}}">
|
||||
</fieldSet>
|
||||
|
||||
<fieldSet class="dialog-formula">
|
||||
@@ -52,7 +39,7 @@
|
||||
<fieldSet>
|
||||
<legend>{{localize "HELLBORN.Label.rollView"}}</legend>
|
||||
<select name="visibility">
|
||||
{{selectOptions rollModes selected=visibility}}
|
||||
{{selectOptions rollModes selected=visibility localize=true}}
|
||||
</select>
|
||||
</fieldSet>
|
||||
|
||||
|
||||
37
templates/tarot.hbs
Normal file
@@ -0,0 +1,37 @@
|
||||
<section>
|
||||
<div class="header">
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
|
||||
{{formInput fields.name value=source.name}}
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
{{formField systemFields.orientation value=system.orientation localize=true }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="flexrow scrollable-content">
|
||||
<div class="flexcol">
|
||||
<legend>{{localize "HELLBORN.Label.quote"}}</legend>
|
||||
{{formInput systemFields.quote value=system.quote toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.bonus"}}</legend>
|
||||
{{formInput systemFields.bonus value=system.bonus toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.penalty"}}</legend>
|
||||
{{formInput systemFields.penalty value=system.penalty toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.description"}}</legend>
|
||||
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description"
|
||||
toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.positiveEffect"}}</legend>
|
||||
{{formInput systemFields.positiveEffect enriched=enrichedPositiveEffect value=system.positiveEffect name="system.positiveEffect"
|
||||
toggled=true}}
|
||||
<legend>{{localize "HELLBORN.Label.negativeEffect"}}</legend>
|
||||
{{formInput systemFields.negativeEffect enriched=enrichedNegativeEffect value=system.negativeEffect name="system.negativeEffect"
|
||||
toggled=true}}
|
||||
</div>
|
||||
<div class="tarot-pic">
|
||||
<img src="{{system.image}}" class="item-img" data-edit="image" data-action="editImage" data-tooltip="{{localize "HELLBORN.Label.imageTooltip"}}"/>
|
||||
{{formField systemFields.image value=system.image localize=true }}
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
@@ -1,19 +0,0 @@
|
||||
<section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.damages"}}</legend>
|
||||
<textarea class="form-control" rows="5" name="system.damages"
|
||||
data-tooltip="{{localize "HELLBORN.Tooltip.damages"}}">{{system.damages}}</textarea>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.description"}}</legend>
|
||||
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.notes"}}</legend>
|
||||
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
@@ -1,54 +0,0 @@
|
||||
<section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="weapons">
|
||||
{{#each weapons as |item|}}
|
||||
{{!log 'weapon' this}}
|
||||
<div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||
data-roll-value="{{item.system.damage}}">{{localize "HELLBORN.Label.damageShort"}} :
|
||||
{{item.system.damage}}</a>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.equipment"}}{{#if isEditMode}}
|
||||
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i
|
||||
class="fas fa-plus" data-action="createEquipment"></i></a>{{/if}}
|
||||
</legend>
|
||||
<div class="equipments">
|
||||
{{#each equipments as |item|}}
|
||||
{{!log 'armor' this}}
|
||||
<div class="equipment" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
|
||||
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
|
||||
<div class="name" data-tooltip="{{{item.system.description}}}">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
<a data-tooltip="{{localize 'HELLBORN.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
<a data-tooltip="{{localize 'HELLBORN.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
|
||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
@@ -1,54 +0,0 @@
|
||||
<section class="vehicle-main vehicle-main-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.vehicle"}}</legend>
|
||||
<div class="vehicle-pc vehicle-pc-{{ifThen isPlayMode 'play' 'edit'}}">
|
||||
<div class="vehicle-left">
|
||||
<div class="vehicle-left-image">
|
||||
<img class="vehicle-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
|
||||
data-tooltip="{{actor.name}}" />
|
||||
</div>
|
||||
<fieldset>
|
||||
<legend>{{localize "HELLBORN.Label.Agility"}}</legend>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.agility value=system.agility localize=true}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="vehicle-right">
|
||||
<div class="vehicle-name">
|
||||
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
|
||||
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet"
|
||||
data-tooltip-direction="UP">
|
||||
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<fieldset class="capacity ">
|
||||
<legend>{{localize "HELLBORN.Label.capacity"}}</legend>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.armor value=system.armor localize=true}}
|
||||
{{formField systemFields.force value=system.force localize=true}}
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.range value=system.range localize=true}}
|
||||
{{formField systemFields.speed value=system.speed localize=true}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="cargo">
|
||||
<legend>{{localize "HELLBORN.Label.cargo"}}</legend>
|
||||
<div class="flexrow">
|
||||
{{formField systemFields.crew value=system.crew localize=true}}
|
||||
{{formField systemFields.cargo value=system.cargo localize=true}}
|
||||
{{formField systemFields.tonnage value=system.tonnage localize=true}}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</section>
|
||||
@@ -5,15 +5,20 @@
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
{{formField systemFields.stat value=system.stat localize=true}}
|
||||
{{formField systemFields.weaponType value=system.weaponType localize=true}}
|
||||
{{#if (eq system.weaponType "ranged")}}
|
||||
{{formField systemFields.subType value=system.subType localize=true}}
|
||||
{{formField systemFields.range value=system.range localize=true}}
|
||||
{{formField systemFields.ammoQuantity value=system.ammoQuantity localize=true}}
|
||||
{{formField systemFields.ammo value=system.ammo localize=true}}
|
||||
{{/if}}
|
||||
|
||||
{{formField systemFields.properties value=system.properties classes="long-input"}}
|
||||
{{formField systemFields.damage value=system.damage}}
|
||||
{{formField systemFields.damageStat value=system.damageStat localize=true}}
|
||||
|
||||
{{formField systemFields.damageType value=system.damageType}}
|
||||
|
||||
{{formField systemFields.cost value=system.cost}}
|
||||
</fieldset>
|
||||
|
||||