Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
8d9cc1045c | |||
4af277d8a2 | |||
bc9f397755 | |||
264a5c7a4c | |||
4edbc9b618 |
6
LICENSE
6
LICENSE
@@ -0,0 +1,6 @@
|
||||
Code license :
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
This license requires that reusers give credit to the creator. It allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, for noncommercial purposes only. If others modify or adapt the material, they must license the modified material under identical terms.
|
||||
|
||||
|
389
compendiums/fr/fvtt-cthulhu-eternal.weapons.json
Normal file
389
compendiums/fr/fvtt-cthulhu-eternal.weapons.json
Normal file
@@ -0,0 +1,389 @@
|
||||
{
|
||||
"label": "Armes",
|
||||
"folders": {
|
||||
"Automatic and Heavy Weapons": "Automatiques et armes lourdes",
|
||||
"Firearms": "Armes à feu",
|
||||
"Melee Weapons": "Armes de mêlée",
|
||||
"Ranged Weapons": "Armes à distance",
|
||||
"Ranged weapons": "Armes à distance",
|
||||
"Thermal Weapons": "Armes thermiques",
|
||||
"Weapons - Age Of Revolutions": "Armes - Âge des Révolutions",
|
||||
"Weapons - Age Of Sails": "Armes - Âge de la Voile",
|
||||
"Weapons - Classical Era": "Armes - Époque Classique",
|
||||
"Weapons - Cold War": "Armes - Guerre Froide",
|
||||
"Weapons - Future": "Armes - Futur",
|
||||
"Weapons - Jazz": "Armes - Jazz/Années folles",
|
||||
"Weapons - Medieval": "Armes - Médiévales",
|
||||
"Weapons - Modern": "Armes - Modernes",
|
||||
"Weapons - Post Apocalyptic": "Armes - Post-apocalyptiques",
|
||||
"Weapons - Victorian": "Armes - Victoriennes",
|
||||
"Weapons - World War I": "Armes - Première Guerre mondiale",
|
||||
"Weapons - World War II": "Armes - Seconde Guerre mondiale"
|
||||
},
|
||||
"mapping": {
|
||||
"rangeUnit": {
|
||||
"path": "system.rangeUnit",
|
||||
"converter": "translateRangeUnit"
|
||||
},
|
||||
"baseRange": {
|
||||
"path": "system.baseRange",
|
||||
"converter": "translateRange"
|
||||
}
|
||||
},
|
||||
"entries": {
|
||||
"Anti-tank rifle": {
|
||||
"name": "Arme antichar"
|
||||
},
|
||||
"Assault rifle": {
|
||||
"name": "Fusil d'assaut"
|
||||
},
|
||||
"Axe": {
|
||||
"name": "Hache"
|
||||
},
|
||||
"Bare hands and feet": {
|
||||
"name": "Mains et pieds nus"
|
||||
},
|
||||
"Baseball Bat": {
|
||||
"name": "Batte de baseball"
|
||||
},
|
||||
"Baseball bat": {
|
||||
"name": "Batte de baseball"
|
||||
},
|
||||
"Battle laser": {
|
||||
"name": "Laser de combat"
|
||||
},
|
||||
"Battle rifle": {
|
||||
"name": "Fusil de combat"
|
||||
},
|
||||
"Bayonet": {
|
||||
"name": "Baïonnette"
|
||||
},
|
||||
"Blackjack": {
|
||||
"name": "Blackjack"
|
||||
},
|
||||
"Blunderbuss Pistol": {
|
||||
"name": "Pistolet tromblon"
|
||||
},
|
||||
"Bow": {
|
||||
"name": "Arc"
|
||||
},
|
||||
"Brass knuckles": {
|
||||
"name": "Poings américains"
|
||||
},
|
||||
"Broad sword": {
|
||||
"name": "Épée large"
|
||||
},
|
||||
"Buffalo Rifle": {
|
||||
"name": "Fusil Buffalo"
|
||||
},
|
||||
"Cane Gun": {
|
||||
"name": "Pistolet canne"
|
||||
},
|
||||
"Cannon Barrel Pistol": {
|
||||
"name": "Pistolet canon"
|
||||
},
|
||||
"Carbine": {
|
||||
"name": "Carabine"
|
||||
},
|
||||
"Cavalry lance": {
|
||||
"name": "Lance de cavalerie"
|
||||
},
|
||||
"Cavalry sabre": {
|
||||
"name": "Sabre de cavalerie"
|
||||
},
|
||||
"Ceramic Grenade": {
|
||||
"name": "Grenade en céramique"
|
||||
},
|
||||
"Chainsaw": {
|
||||
"name": "Tronçonneuse"
|
||||
},
|
||||
"Claymore": {
|
||||
"name": "Claymore"
|
||||
},
|
||||
"Club": {
|
||||
"name": "Gourdin"
|
||||
},
|
||||
"Combat knife": {
|
||||
"name": "Couteau de combat"
|
||||
},
|
||||
"Cosh": {
|
||||
"name": "Matraque"
|
||||
},
|
||||
"Cricket bat": {
|
||||
"name": "Batte de cricket"
|
||||
},
|
||||
"Crossbow": {
|
||||
"name": "Arbalète"
|
||||
},
|
||||
"Cutlass": {
|
||||
"name": "Coutelas"
|
||||
},
|
||||
"Dagger": {
|
||||
"name": "Dague"
|
||||
},
|
||||
"Derringer": {
|
||||
"name": "Derringer"
|
||||
},
|
||||
"Dueling Pistol": {
|
||||
"name": "Pistolet de duel"
|
||||
},
|
||||
"Dutch (long) Pistol": {
|
||||
"name": "Pistolet néerlandais (long)"
|
||||
},
|
||||
"Elephant Gun": {
|
||||
"name": "Fusil à éléphant"
|
||||
},
|
||||
"Flintlock Pistol": {
|
||||
"name": "Pistolet à silex"
|
||||
},
|
||||
"Fowling Piece": {
|
||||
"name": "Fusil de chasse"
|
||||
},
|
||||
"Garotte": {
|
||||
"name": "Garrot"
|
||||
},
|
||||
"Gatling Gun": {
|
||||
"name": "Gatling Gun"
|
||||
},
|
||||
"Guntō": {
|
||||
"name": "Guntō"
|
||||
},
|
||||
"Hand Grenade": {
|
||||
"name": "Grenade à main"
|
||||
},
|
||||
"Hand grenade": {
|
||||
"name": "Grenade à main"
|
||||
},
|
||||
"Hatchet": {
|
||||
"name": "Hachette"
|
||||
},
|
||||
"Heavy Pistol": {
|
||||
"name": "Pistolet lourd"
|
||||
},
|
||||
"Heavy Spear": {
|
||||
"name": "Lance lourde"
|
||||
},
|
||||
"Heavy axe": {
|
||||
"name": "Hache lourde"
|
||||
},
|
||||
"Heavy hammer": {
|
||||
"name": "Marteau lourd"
|
||||
},
|
||||
"Heavy pistol": {
|
||||
"name": "Pistolet gros calibre"
|
||||
},
|
||||
"Heavy spear": {
|
||||
"name": "Lance lourde"
|
||||
},
|
||||
"Incendiary Grenade": {
|
||||
"name": "Grenade incendiaire"
|
||||
},
|
||||
"Javelin": {
|
||||
"name": "Javelot"
|
||||
},
|
||||
"Katana": {
|
||||
"name": "Katana"
|
||||
},
|
||||
"Knife": {
|
||||
"name": "Couteau"
|
||||
},
|
||||
"Large Caliber Pistol": {
|
||||
"name": "Pistolet gros calibre"
|
||||
},
|
||||
"Large sword": {
|
||||
"name": "Grande épée"
|
||||
},
|
||||
"Laser carbine": {
|
||||
"name": "Carabine laser"
|
||||
},
|
||||
"Life preserver": {
|
||||
"name": "Gilet de sauvetage"
|
||||
},
|
||||
"Light Spear": {
|
||||
"name": "Lance légère"
|
||||
},
|
||||
"Light axe": {
|
||||
"name": "Hache légère"
|
||||
},
|
||||
"Light spear": {
|
||||
"name": "Lance légère"
|
||||
},
|
||||
"Long spear": {
|
||||
"name": "Lance longue"
|
||||
},
|
||||
"Long sword": {
|
||||
"name": "Epée longue"
|
||||
},
|
||||
"Longrifle": {
|
||||
"name": "Fusil long"
|
||||
},
|
||||
"Mace": {
|
||||
"name": "Masse"
|
||||
},
|
||||
"Machete": {
|
||||
"name": "Machette"
|
||||
},
|
||||
"Maxim": {
|
||||
"name": "Maxime"
|
||||
},
|
||||
"Medium Pistol": {
|
||||
"name": "Pistolet moyen"
|
||||
},
|
||||
"Musket": {
|
||||
"name": "Mousquet"
|
||||
},
|
||||
"Nightstick": {
|
||||
"name": "Matraque"
|
||||
},
|
||||
"Oil": {
|
||||
"name": "Huile"
|
||||
},
|
||||
"Ordinary knife": {
|
||||
"name": "Couteau ordinaire"
|
||||
},
|
||||
"Plasma rifle": {
|
||||
"name": "Fusil à plasma"
|
||||
},
|
||||
"Polearm": {
|
||||
"name": "Arme d'hast"
|
||||
},
|
||||
"Power sword": {
|
||||
"name": "Epée énergétique"
|
||||
},
|
||||
"Rapier": {
|
||||
"name": "Rapière"
|
||||
},
|
||||
"Rifle": {
|
||||
"name": "Fusil"
|
||||
},
|
||||
"Sabre": {
|
||||
"name": "Sabre"
|
||||
},
|
||||
"Scimitar": {
|
||||
"name": "Cimeterre"
|
||||
},
|
||||
"Seax": {
|
||||
"name": "Seax"
|
||||
},
|
||||
"Shield bash": {
|
||||
"name": "Coup de bouclier"
|
||||
},
|
||||
"Shiv": {
|
||||
"name": "Shiv"
|
||||
},
|
||||
"Short spear": {
|
||||
"name": "Lance courte"
|
||||
},
|
||||
"Short sword": {
|
||||
"name": "Epée courte"
|
||||
},
|
||||
"Shotgun": {
|
||||
"name": "Shotgun"
|
||||
},
|
||||
"Shuriken": {
|
||||
"name": "Shuriken"
|
||||
},
|
||||
"Sickle": {
|
||||
"name": "Faucille"
|
||||
},
|
||||
"Sling": {
|
||||
"name": "Fronde"
|
||||
},
|
||||
"Small-caliber pistol": {
|
||||
"name": "Pistolet de petit calibre"
|
||||
},
|
||||
"Small‐caliber pistol": {
|
||||
"name": "Pistolet de petit calibre"
|
||||
},
|
||||
"Staff": {
|
||||
"name": "Bâton"
|
||||
},
|
||||
"Steel-toe boot": {
|
||||
"name": "Botte à embout en acier"
|
||||
},
|
||||
"Steel‐toe boot": {
|
||||
"name": "Botte à embout en acier"
|
||||
},
|
||||
"Submachine gun": {
|
||||
"name": "Pistolet-mitrailleur"
|
||||
},
|
||||
"Sulphur soaked cloth": {
|
||||
"name": "Tissu imbibé de soufre"
|
||||
},
|
||||
"Switchblade": {
|
||||
"name": "Couteau à cran d'arrêt"
|
||||
},
|
||||
"Sword cane": {
|
||||
"name": "Canne épée"
|
||||
},
|
||||
"Taser": {
|
||||
"name": "Taser"
|
||||
},
|
||||
"Thompson": {
|
||||
"name": "Thompson"
|
||||
},
|
||||
"Thrown Axe": {
|
||||
"name": "Hache de lancer"
|
||||
},
|
||||
"Thrown Hand Grenade": {
|
||||
"name": "Grenade à main de lancer"
|
||||
},
|
||||
"Thrown Heavy Spear": {
|
||||
"name": "Lance lourde lancée"
|
||||
},
|
||||
"Thrown Knife": {
|
||||
"name": "Couteau de lancer"
|
||||
},
|
||||
"Thrown Light Spear": {
|
||||
"name": "Lance légère lancée"
|
||||
},
|
||||
"Thrown Long Spear": {
|
||||
"name": "Lance longue lancée"
|
||||
},
|
||||
"Thrown Net": {
|
||||
"name": "Filet"
|
||||
},
|
||||
"Thrown Rock": {
|
||||
"name": "Pierre lancée"
|
||||
},
|
||||
"Thrown Short Spear": {
|
||||
"name": "Lance courte lancée"
|
||||
},
|
||||
"Thrown Spear": {
|
||||
"name": "Lance lancée"
|
||||
},
|
||||
"Thrown Spear, Heavy": {
|
||||
"name": "Lance lancée, lourde"
|
||||
},
|
||||
"Thrown Spear, Light": {
|
||||
"name": "Lance lancée, légère"
|
||||
},
|
||||
"Tomahawk": {
|
||||
"name": "Tomahawk"
|
||||
},
|
||||
"Trident": {
|
||||
"name": "Trident"
|
||||
},
|
||||
"Two-Handed sword": {
|
||||
"name": "Epée à deux mains"
|
||||
},
|
||||
"Two-handed sword": {
|
||||
"name": "Epée à deux mains"
|
||||
},
|
||||
"Very heavy sniper laser": {
|
||||
"name": "Laser lourd de sniper"
|
||||
},
|
||||
"Very heavy sniper rifle": {
|
||||
"name": "Fusil lourd de sniper"
|
||||
},
|
||||
"Very large pistol": {
|
||||
"name": "Pistolet très gros calibre"
|
||||
},
|
||||
"WW1 Machinegun": {
|
||||
"name": "Mitrailleuse de la Première Guerre mondiale"
|
||||
},
|
||||
"War club": {
|
||||
"name": "Massue de guerre"
|
||||
}
|
||||
}
|
||||
}
|
@@ -3041,6 +3041,9 @@ i.fvtt-cthulhu-eternal {
|
||||
font-size: calc(var(--font-size-standard) * 2);
|
||||
color: var(--color-dark-1);
|
||||
}
|
||||
.li-apply-wounds {
|
||||
display: none;
|
||||
}
|
||||
.dice-roll {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
@@ -29,6 +29,12 @@ Hooks.once("init", function () {
|
||||
models,
|
||||
documents,
|
||||
}
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "@characteristics.dex.value",
|
||||
decimals: 1
|
||||
};
|
||||
|
||||
|
||||
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
|
||||
CONFIG.Actor.dataModels = {
|
||||
@@ -93,13 +99,14 @@ Hooks.once("init", function () {
|
||||
CthulhuEternalUtils.registerSettings()
|
||||
CthulhuEternalUtils.registerHandlebarsHelpers()
|
||||
CthulhuEternalUtils.setupCSSRootVariables()
|
||||
|
||||
CONFIG.debug.hooks = false;
|
||||
|
||||
console.info("CTHULHU ETERNAL | System Initialized")
|
||||
})
|
||||
|
||||
Hooks.once('babele.init', (babele) => {
|
||||
babele.setSystemTranslationsDir("compendiums");
|
||||
CthulhuEternalUtils.registerBabeleTranslations(babele);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -164,6 +171,15 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
|
||||
CthulhuEternalUtils.applySANType(message, event)
|
||||
})
|
||||
}
|
||||
if (game.user.isGM) {
|
||||
$(html).find(".li-apply-wounds").each((i, btn) => {
|
||||
btn.style.display = "inline"
|
||||
})
|
||||
$(html).find(".li-apply-wounds-select").click((event) => {
|
||||
CthulhuEternalUtils.applyWounds(message, event)
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
|
@@ -730,7 +730,8 @@
|
||||
"visibility": "Visibility",
|
||||
"rangedRange": "Range",
|
||||
"aimingLastRound": "Aiming Last Round (+20)",
|
||||
"aimingWithSight": "Aiming with Sight (+20)"
|
||||
"aimingWithSight": "Aiming with Sight (+20)",
|
||||
"applyWounds": "Apply To"
|
||||
},
|
||||
"ChatMessage": {
|
||||
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
||||
@@ -755,6 +756,9 @@
|
||||
"rollDamage": "Roll Damage"
|
||||
},
|
||||
"Chat": {
|
||||
"noArmor": "No armor absorbed damage.",
|
||||
"armorAbsorbed": "Armor absorbed {armor} damage.",
|
||||
"woundsApplied": "Wounds applied to {name}: {effectiveWounds} (armor absorbed : {armorText})"
|
||||
},
|
||||
"Notifications": {
|
||||
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",
|
||||
|
13
lang/fr.json
13
lang/fr.json
@@ -564,6 +564,13 @@
|
||||
}
|
||||
},
|
||||
"Label": {
|
||||
"feet": "pieds (ie 30cm)",
|
||||
"feets": "pieds (ie 30cm)",
|
||||
"yard": "mètres",
|
||||
"Yard": "mètres",
|
||||
"yards": "mètres",
|
||||
"Feet": "Pieds",
|
||||
"Yards": "Mètres",
|
||||
"sanLoss5": "Perte de SAN de 5+ ({value}) : vous souffrez d'une folie temporaire (Fuite, Soumission, Lutte ou compréhension de l'Inconcevable).",
|
||||
"sanViolenceReset": "Le décompte des pertes de SAN de violence a été réinitialisé.",
|
||||
"sanHelplessnessReset": "Le décompte des pertes de SAN d'impuissance a été réinitialisé.",
|
||||
@@ -744,7 +751,8 @@
|
||||
"visibility": "Visibilité",
|
||||
"rangedRange": "Portée",
|
||||
"aimingLastRound": "Visée lors du dernier round (+20)",
|
||||
"aimingWithSight": "Visée avec lunette (+20)"
|
||||
"aimingWithSight": "Visée avec lunette (+20)",
|
||||
"applyWounds": "Appliquer à"
|
||||
},
|
||||
"ChatMessage": {
|
||||
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
||||
@@ -769,6 +777,9 @@
|
||||
"rollDamage": "Lancer les dégâts"
|
||||
},
|
||||
"Chat": {
|
||||
"armorAbsorbed": "L'armure a absorbé {armor} points de dégâts.",
|
||||
"noArmor": "Pas d'armure.",
|
||||
"woundsApplied": "Blessures appliquées à {name} : {effectiveWounds} (armure absorbée : {armorText})"
|
||||
},
|
||||
"Notifications": {
|
||||
"NoWeaponSkill": "Aucune compétence associée n'a été trouvé pour cette arme. Vérifier la définition de l'arme ainsi que l'époque configurée.",
|
||||
|
@@ -98,10 +98,20 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
|
||||
switch (partId) {
|
||||
case "main":
|
||||
break
|
||||
case "skills":
|
||||
case "skills": {
|
||||
context.tab = context.tabs.skills
|
||||
context.skills = doc.itemTypes.skill
|
||||
context.skills.sort((a, b) => a.name.localeCompare(b.name))
|
||||
let tmpSkills = doc.itemTypes.skill
|
||||
tmpSkills.sort((a, b) => a.name.localeCompare(b.name))
|
||||
const nbCols = 3;
|
||||
const nbRows = Math.ceil(tmpSkills.length / nbCols);
|
||||
let skillsColumns = Array.from({ length: nbRows }, (_, rowIdx) =>
|
||||
Array.from({ length: nbCols }, (_, colIdx) => tmpSkills[rowIdx + colIdx * nbRows]).filter(Boolean)
|
||||
);
|
||||
// Merge skillsColumns in a single flat array
|
||||
skillsColumns = skillsColumns.flat().filter(Boolean);
|
||||
//DEBUG : console.log("Skills columns:", skillsColumns);
|
||||
context.skills = skillsColumns
|
||||
}
|
||||
break
|
||||
case "equipment":
|
||||
context.tab = context.tabs.equipment
|
||||
|
@@ -77,6 +77,96 @@ export const RESOURCE_RATING = {
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichModern"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichModern"}
|
||||
},
|
||||
future: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorModern"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageModern"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageModern"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffModern"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 20000, assets: "CTHULHUETERNAL.Resource.RichModern"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichModern"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichModern"}
|
||||
},
|
||||
coldwar: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
ww1: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
ww2: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
medieval: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
revolution: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
ageofsail: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
classical: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
postapo: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorColdWar"},
|
||||
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageColdWar"},
|
||||
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageColdWar"},
|
||||
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffColdWar"},
|
||||
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 200000, assets: "CTHULHUETERNAL.Resource.RichColdWar"},
|
||||
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichColdWar"},
|
||||
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichColdWar"}
|
||||
},
|
||||
victorian: {
|
||||
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
|
||||
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 30, assets: "CTHULHUETERNAL.Resource.PoorVictorian"},
|
||||
|
@@ -23,8 +23,10 @@ export default class CthulhuEternalActor extends Actor {
|
||||
data.items.push(skill.toObject())
|
||||
}
|
||||
}
|
||||
data.items.push({ type:"weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg",
|
||||
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" } })
|
||||
data.items.push({
|
||||
type: "weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg",
|
||||
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" }
|
||||
})
|
||||
}
|
||||
|
||||
return super.create(data, options);
|
||||
@@ -43,6 +45,39 @@ export default class CthulhuEternalActor extends Actor {
|
||||
return super._onUpdate(changed, options, userId)
|
||||
}
|
||||
|
||||
applyWounds(woundData) {
|
||||
let updates = {}
|
||||
// Get available armor
|
||||
let armors = this.items.filter(i => i.type === "armor" && i.system.equipped)
|
||||
let totalArmor = 0
|
||||
for (let armor of armors) {
|
||||
totalArmor += armor.system.protection
|
||||
}
|
||||
let effectiveWounds = Math.max(woundData.rollResult - totalArmor, 0)
|
||||
if (woundData.isLethal) {
|
||||
effectiveWounds = this.system.hp.value // Killed!
|
||||
}
|
||||
// Apply armor reduction
|
||||
let hp = Math.max(this.system.hp.value - effectiveWounds, 0)
|
||||
if (this.system.hp.value !== hp) {
|
||||
updates[`system.hp.value`] = hp
|
||||
}
|
||||
if (Object.keys(updates).length > 0) {
|
||||
this.update(updates)
|
||||
}
|
||||
// Chat message for GM only
|
||||
if (game.user.isGM) {
|
||||
let armorText = totalArmor > 0 ? game.i18n.format("CTHULHUETERNAL.Chat.armorAbsorbed", { armor: totalArmor }) : game.i18n.localize("CTHULHUETERNAL.Chat.noArmor")
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
speaker: { alias: this.name },
|
||||
rollMode: "gmroll",
|
||||
content: game.i18n.format("CTHULHUETERNAL.Chat.woundsApplied", { name: this.name, effectiveWounds, armorText }),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async createEmbeddedDocuments(embeddedName, data, operation) {
|
||||
let newData = []
|
||||
if (embeddedName === "Item") {
|
||||
@@ -83,6 +118,6 @@ export default class CthulhuEternalActor extends Actor {
|
||||
})
|
||||
this.updateSource({ prototypeToken })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -146,6 +146,15 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
|
||||
ammoUsed = Number(ammoUsed)
|
||||
|
||||
let combatants = []
|
||||
if (game?.combat?.combatants) {
|
||||
for (let c of game.combat.combatants) {
|
||||
if (c.actor.id !== actor.id) {
|
||||
combatants.push({ id: c.actor.id, name: c.name })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (weapon.system.lethality > 0) {
|
||||
let lethalityRoll = new Roll("1d100")
|
||||
await lethalityRoll.evaluate()
|
||||
@@ -159,20 +168,22 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
}
|
||||
let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10)
|
||||
let msgData = {
|
||||
actorId: actor.id,
|
||||
weapon,
|
||||
wounds,
|
||||
lethalScore,
|
||||
isLethal,
|
||||
ammoUsed,
|
||||
rollResult: lethalityRoll.total,
|
||||
combatants: combatants
|
||||
}
|
||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-lethal-damage.hbs", msgData)
|
||||
ChatMessage.create({
|
||||
let msg = await ChatMessage.create({
|
||||
user: game.user.id,
|
||||
content: flavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
}, { rollMode: options.rollMode, create: true })
|
||||
|
||||
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -190,21 +201,24 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
"system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed)
|
||||
}])
|
||||
}
|
||||
console.log("Weapon damage formula", formula, weapon, ammoUsed)
|
||||
|
||||
let damageRoll = new Roll(formula)
|
||||
await damageRoll.evaluate()
|
||||
let msgData = {
|
||||
actorId: actor.id,
|
||||
weapon,
|
||||
formula,
|
||||
ammoUsed,
|
||||
rollResult: damageRoll.total,
|
||||
combatants: combatants
|
||||
}
|
||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
|
||||
ChatMessage.create({
|
||||
let msg = await ChatMessage.create({
|
||||
user: game.user.id,
|
||||
content: flavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
}, { rollMode: options.rollMode, create: true })
|
||||
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||
}
|
||||
|
||||
|
||||
|
@@ -90,7 +90,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
prepareDerivedData() {
|
||||
super.prepareDerivedData();
|
||||
|
||||
if (!game.user.isGM ) {
|
||||
if (!game.user.isGM) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -140,13 +140,16 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
if (!this.san.breakingPointReached && this.san.value <= this.san.breakingPoint) {
|
||||
updates[`system.san.breakingPointReached`] = true
|
||||
this.san.breakingPointReached = true // Force local update to true
|
||||
let w = game.users.find(u => u.character?.name === this.parent?.name)
|
||||
if (w) {
|
||||
ChatMessage.create({
|
||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.breakingPointReached", { bp: this.san.breakingPoint, san: this.san.value })}</p>`,
|
||||
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
||||
// Get the user id of the actor owner
|
||||
whisper: [game.users.find(u => u.character?.name === this.parent?.name).id ]
|
||||
whisper: [w.id]
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Unconsciousness management
|
||||
if (!this.hp.unconscious && this.hp.value <= 2) {
|
||||
@@ -207,7 +210,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
actorName: this.parent.name,
|
||||
adaptedToHelplessness: this.biodata.adaptedToHelplessness,
|
||||
adaptedToViolence: this.biodata.adaptedToViolence,
|
||||
... rollData
|
||||
...rollData
|
||||
}
|
||||
let updates = {}
|
||||
let template = ""
|
||||
@@ -236,7 +239,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
}
|
||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-0.hbs"
|
||||
|
||||
} else if (rollData.sanType === "violence" ) {
|
||||
} else if (rollData.sanType === "violence") {
|
||||
// Set the first false element of the violence array to true
|
||||
let violence = this.san.violence.slice()
|
||||
let index = violence.findIndex(v => !v)
|
||||
@@ -251,7 +254,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
updates[`system.san.violence`] = [false, false, false]
|
||||
msgData.adaptedToViolence = true
|
||||
}
|
||||
} else if (rollData.sanType === "helplessness" ) {
|
||||
} else if (rollData.sanType === "helplessness") {
|
||||
// If sanType is "helplessness" and adapted to helplessness, set the first false element of the helplessness array to true
|
||||
let helplessness = this.san.helplessness.slice()
|
||||
let index = helplessness.findIndex(h => !h)
|
||||
@@ -266,7 +269,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
updates[`system.san.helplessness`] = [false, false, false]
|
||||
msgData.adaptedToHelplessness = true
|
||||
}
|
||||
} else if (rollData.sanType === "unnatural" ) {
|
||||
} else if (rollData.sanType === "unnatural") {
|
||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-unnatural.hbs"
|
||||
} else {
|
||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-none.hbs"
|
||||
@@ -354,15 +357,15 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
||||
*/
|
||||
async roll(rollType, rollItem) {
|
||||
|
||||
if (this.hp.dead ) {
|
||||
if (this.hp.dead) {
|
||||
// Warn with chat message
|
||||
ChatMessage.create({
|
||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.deadWarning", {con: this.characteristics.con.value} )}</p>`,
|
||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.deadWarning", { con: this.characteristics.con.value })}</p>`,
|
||||
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
||||
})
|
||||
return null
|
||||
}
|
||||
if (this.hp.unconscious ) {
|
||||
if (this.hp.unconscious) {
|
||||
// Warn with chat message
|
||||
ChatMessage.create({
|
||||
content: `<p>${game.i18n.localize("CTHULHUETERNAL.Label.unconsciousWarning")}</p>`,
|
||||
|
@@ -248,6 +248,36 @@ export default class CthulhuEternalUtils {
|
||||
})
|
||||
}
|
||||
|
||||
static translateRangeUnit(range) {
|
||||
if (typeof range === 'string') {
|
||||
return game.i18n.localize(`CTHULHUETERNAL.Label.${range}`)
|
||||
} else if (typeof range === 'number') {
|
||||
return range
|
||||
} else {
|
||||
console.warn("CTHULHU ETERNAL | translateRange called with an unknown type", range)
|
||||
return range
|
||||
}
|
||||
}
|
||||
|
||||
static translateRange(range) {
|
||||
// If the range is a string, replace STR with FOR
|
||||
if (typeof range === 'string') {
|
||||
return range.replace(/STR/g, "FOR").replace(/str/g, "for")
|
||||
}
|
||||
return range
|
||||
}
|
||||
|
||||
static async registerBabeleTranslations(babele) {
|
||||
babele.registerConverters({
|
||||
'translateRangeUnit': (originalValue) => {
|
||||
return CthulhuEternalUtils.translateRangeUnit(originalValue)
|
||||
},
|
||||
'translateRange': (originalValue) => {
|
||||
return CthulhuEternalUtils.translateRange(originalValue)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
static async damageRoll(rollMessage, formula = null) {
|
||||
let rollData = rollMessage.rolls[0]?.options?.rollData
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
@@ -306,7 +336,7 @@ export default class CthulhuEternalUtils {
|
||||
rejectClose: false, // Click on Close button will not launch an error
|
||||
render: (event, dialog) => {
|
||||
$(".nudged-score-select").change(event => {
|
||||
dialogContext.nudgedValue = Number(event.target.value)+1
|
||||
dialogContext.nudgedValue = Number(event.target.value) + 1
|
||||
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
||||
$("#nudged-wp-cost").val(dialogContext.wpCost)
|
||||
})
|
||||
@@ -345,4 +375,24 @@ export default class CthulhuEternalUtils {
|
||||
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")`);
|
||||
}
|
||||
|
||||
static applyWounds(message, event) {
|
||||
let woundData = message.getFlag("fvtt-cthulhu-eternal", "woundData")
|
||||
if (!woundData) {
|
||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noRollDataFound"))
|
||||
return
|
||||
}
|
||||
let actor = game.actors.get(woundData.actorId)
|
||||
if (!actor) {
|
||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noActorFound"))
|
||||
return
|
||||
}
|
||||
// Get the targetted actorId from the HTML select event
|
||||
let targetActorId = event.target.value
|
||||
let targetActor = game.actors.get(targetActorId)
|
||||
if (!targetActor) {
|
||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noTargetActorFound") + targetActorId)
|
||||
return
|
||||
}
|
||||
targetActor.applyWounds(woundData)
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000217
|
||||
MANIFEST-000249
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/07/14-21:08:15.948300 7f3fa67fc6c0 Recovering log #215
|
||||
2025/07/14-21:08:15.959041 7f3fa67fc6c0 Delete type=3 #213
|
||||
2025/07/14-21:08:15.959103 7f3fa67fc6c0 Delete type=0 #215
|
||||
2025/07/14-21:36:01.776546 7f3fa57fa6c0 Level-0 table #220: started
|
||||
2025/07/14-21:36:01.776599 7f3fa57fa6c0 Level-0 table #220: 0 bytes OK
|
||||
2025/07/14-21:36:01.836135 7f3fa57fa6c0 Delete type=0 #218
|
||||
2025/07/14-21:36:02.071353 7f3fa57fa6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-10:24:47.689741 7fc4987f86c0 Recovering log #246
|
||||
2025/10/01-10:24:47.787870 7fc4987f86c0 Delete type=3 #244
|
||||
2025/10/01-10:24:47.787986 7fc4987f86c0 Delete type=0 #246
|
||||
2025/10/01-11:24:12.555415 7fc497ff76c0 Level-0 table #252: started
|
||||
2025/10/01-11:24:12.555461 7fc497ff76c0 Level-0 table #252: 0 bytes OK
|
||||
2025/10/01-11:24:12.565317 7fc497ff76c0 Delete type=0 #250
|
||||
2025/10/01-11:24:12.577205 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,11 @@
|
||||
2025/07/14-10:18:19.443254 7f3fa77fe6c0 Recovering log #211
|
||||
2025/07/14-10:18:19.474975 7f3fa77fe6c0 Delete type=3 #209
|
||||
2025/07/14-10:18:19.475128 7f3fa77fe6c0 Delete type=0 #211
|
||||
2025/07/14-20:48:52.882063 7f3fa57fa6c0 Level-0 table #216: started
|
||||
2025/07/14-20:48:52.882164 7f3fa57fa6c0 Level-0 table #216: 0 bytes OK
|
||||
2025/07/14-20:48:52.889652 7f3fa57fa6c0 Delete type=0 #214
|
||||
2025/07/14-20:48:52.915102 7f3fa57fa6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-09:23:25.493413 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.037985 7fc497ff76c0 Level-0 table #247: started
|
||||
2025/10/01-09:24:30.038031 7fc497ff76c0 Level-0 table #247: 0 bytes OK
|
||||
2025/10/01-09:24:30.044462 7fc497ff76c0 Delete type=0 #245
|
||||
2025/10/01-09:24:30.069660 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1
|
||||
2025/10/01-09:24:30.069672 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.073695 7fc497ff76c0 Generated table #248@0: 26 keys, 60964 bytes
|
||||
2025/10/01-09:24:30.073722 7fc497ff76c0 Compacted 1@0 + 0@1 files => 60964 bytes
|
||||
2025/10/01-09:24:30.080151 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.080234 7fc497ff76c0 Delete type=2 #242
|
||||
2025/10/01-09:24:30.086925 7fc497ff76c0 Manual compaction at level-0 from '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000386
|
||||
MANIFEST-000418
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/07/14-21:08:15.916959 7f3fa5ffb6c0 Recovering log #384
|
||||
2025/07/14-21:08:15.927715 7f3fa5ffb6c0 Delete type=3 #382
|
||||
2025/07/14-21:08:15.927846 7f3fa5ffb6c0 Delete type=0 #384
|
||||
2025/07/14-21:36:01.925671 7f3fa57fa6c0 Level-0 table #389: started
|
||||
2025/07/14-21:36:01.925708 7f3fa57fa6c0 Level-0 table #389: 0 bytes OK
|
||||
2025/07/14-21:36:01.980506 7f3fa57fa6c0 Delete type=0 #387
|
||||
2025/07/14-21:36:02.071389 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-10:24:47.499257 7fc4997fa6c0 Recovering log #415
|
||||
2025/10/01-10:24:47.596647 7fc4997fa6c0 Delete type=3 #413
|
||||
2025/10/01-10:24:47.596724 7fc4997fa6c0 Delete type=0 #415
|
||||
2025/10/01-11:24:12.545465 7fc497ff76c0 Level-0 table #421: started
|
||||
2025/10/01-11:24:12.545499 7fc497ff76c0 Level-0 table #421: 0 bytes OK
|
||||
2025/10/01-11:24:12.555310 7fc497ff76c0 Delete type=0 #419
|
||||
2025/10/01-11:24:12.577192 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,11 @@
|
||||
2025/07/14-10:18:19.359761 7f3fa67fc6c0 Recovering log #380
|
||||
2025/07/14-10:18:19.394536 7f3fa67fc6c0 Delete type=3 #378
|
||||
2025/07/14-10:18:19.394680 7f3fa67fc6c0 Delete type=0 #380
|
||||
2025/07/14-20:48:52.889840 7f3fa57fa6c0 Level-0 table #385: started
|
||||
2025/07/14-20:48:52.889882 7f3fa57fa6c0 Level-0 table #385: 0 bytes OK
|
||||
2025/07/14-20:48:52.896159 7f3fa57fa6c0 Delete type=0 #383
|
||||
2025/07/14-20:48:52.915114 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-09:23:25.444068 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.024822 7fc497ff76c0 Level-0 table #416: started
|
||||
2025/10/01-09:24:30.024870 7fc497ff76c0 Level-0 table #416: 0 bytes OK
|
||||
2025/10/01-09:24:30.030665 7fc497ff76c0 Delete type=0 #414
|
||||
2025/10/01-09:24:30.044587 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at '!items!zvoUByzWSWZ87fxA' @ 1281 : 1
|
||||
2025/10/01-09:24:30.044598 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.051264 7fc497ff76c0 Generated table #417@0: 556 keys, 320457 bytes
|
||||
2025/10/01-09:24:30.051285 7fc497ff76c0 Compacted 1@0 + 0@1 files => 320457 bytes
|
||||
2025/10/01-09:24:30.058278 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.058439 7fc497ff76c0 Delete type=2 #411
|
||||
2025/10/01-09:24:30.086897 7fc497ff76c0 Manual compaction at level-0 from '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000031
|
||||
MANIFEST-000064
|
||||
|
@@ -1,15 +1,7 @@
|
||||
2025/07/14-21:08:15.933872 7f3fa6ffd6c0 Recovering log #29
|
||||
2025/07/14-21:08:15.943722 7f3fa6ffd6c0 Delete type=3 #27
|
||||
2025/07/14-21:08:15.943845 7f3fa6ffd6c0 Delete type=0 #29
|
||||
2025/07/14-21:36:01.980637 7f3fa57fa6c0 Level-0 table #34: started
|
||||
2025/07/14-21:36:02.012185 7f3fa57fa6c0 Level-0 table #34: 24252 bytes OK
|
||||
2025/07/14-21:36:02.071125 7f3fa57fa6c0 Delete type=0 #32
|
||||
2025/07/14-21:36:02.071403 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
2025/07/14-21:36:02.071441 7f3fa57fa6c0 Manual compaction at level-1 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!qb4c1wfPZFcGiEuV' @ 472 : 1
|
||||
2025/07/14-21:36:02.071451 7f3fa57fa6c0 Compacting 1@1 + 1@2 files
|
||||
2025/07/14-21:36:02.101879 7f3fa57fa6c0 Generated table #35@1: 362 keys, 93592 bytes
|
||||
2025/07/14-21:36:02.101908 7f3fa57fa6c0 Compacted 1@1 + 1@2 files => 93592 bytes
|
||||
2025/07/14-21:36:02.154064 7f3fa57fa6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/07/14-21:36:02.154296 7f3fa57fa6c0 Delete type=2 #14
|
||||
2025/07/14-21:36:02.154743 7f3fa57fa6c0 Delete type=2 #34
|
||||
2025/07/14-21:36:02.372014 7f3fa57fa6c0 Manual compaction at level-1 from '!items!qb4c1wfPZFcGiEuV' @ 472 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-10:24:47.601344 7fc499ffb6c0 Recovering log #61
|
||||
2025/10/01-10:24:47.686801 7fc499ffb6c0 Delete type=3 #59
|
||||
2025/10/01-10:24:47.686869 7fc499ffb6c0 Delete type=0 #61
|
||||
2025/10/01-11:24:12.535658 7fc497ff76c0 Level-0 table #67: started
|
||||
2025/10/01-11:24:12.535725 7fc497ff76c0 Level-0 table #67: 0 bytes OK
|
||||
2025/10/01-11:24:12.545352 7fc497ff76c0 Delete type=0 #65
|
||||
2025/10/01-11:24:12.577171 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,8 +1,11 @@
|
||||
2025/07/14-10:18:19.404246 7f3fa5ffb6c0 Recovering log #25
|
||||
2025/07/14-10:18:19.435628 7f3fa5ffb6c0 Delete type=3 #23
|
||||
2025/07/14-10:18:19.435765 7f3fa5ffb6c0 Delete type=0 #25
|
||||
2025/07/14-20:48:52.908846 7f3fa57fa6c0 Level-0 table #30: started
|
||||
2025/07/14-20:48:52.908888 7f3fa57fa6c0 Level-0 table #30: 0 bytes OK
|
||||
2025/07/14-20:48:52.915004 7f3fa57fa6c0 Delete type=0 #28
|
||||
2025/07/14-20:48:52.915133 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
2025/07/14-20:48:52.928670 7f3fa57fa6c0 Manual compaction at level-1 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
2025/10/01-09:23:25.469063 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.030754 7fc497ff76c0 Level-0 table #62: started
|
||||
2025/10/01-09:24:30.030783 7fc497ff76c0 Level-0 table #62: 0 bytes OK
|
||||
2025/10/01-09:24:30.037809 7fc497ff76c0 Delete type=0 #60
|
||||
2025/10/01-09:24:30.058634 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!zyxA9DhO36t5OBDv' @ 55 : 1
|
||||
2025/10/01-09:24:30.058646 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.063565 7fc497ff76c0 Generated table #63@0: 362 keys, 93592 bytes
|
||||
2025/10/01-09:24:30.063591 7fc497ff76c0 Compacted 1@0 + 0@1 files => 93592 bytes
|
||||
2025/10/01-09:24:30.069446 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.069529 7fc497ff76c0 Delete type=2 #57
|
||||
2025/10/01-09:24:30.086915 7fc497ff76c0 Manual compaction at level-0 from '!items!zyxA9DhO36t5OBDv' @ 55 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@@ -53,6 +53,10 @@
|
||||
color: var(--color-dark-1);
|
||||
}
|
||||
|
||||
.li-apply-wounds {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.dice-roll {
|
||||
flex-direction: column;
|
||||
|
||||
@@ -70,7 +74,7 @@
|
||||
border: 0px;
|
||||
}
|
||||
.intro-chat {
|
||||
color:var(--color-dark-1);
|
||||
color: var(--color-dark-1);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -91,20 +95,20 @@
|
||||
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);
|
||||
}
|
||||
.nudge-roll {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
.healing-roll {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
.roll-damage {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
|
@@ -21,12 +21,20 @@
|
||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="li-apply-wounds">
|
||||
<button type="button" class="apply-wounds">{{localize "CTHULHUETERNAL.Label.applyWounds"}}</button>
|
||||
<select name="combatant" class="roll-skill-modifier">
|
||||
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
{{#if isLethal}}
|
||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li>
|
||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li>
|
||||
{{else}}
|
||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotLethal"}}</li>
|
||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong></li>
|
||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
|
@@ -12,11 +12,23 @@
|
||||
{{#if (gt weapon.system.armorPiercing 0)}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
||||
{{/if}}
|
||||
{{#if (gt weapon.system.penetration 0)}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.penetration"}} : {{weapon.system.penetration}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if ammoUsed}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||
{{/if}}
|
||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong></li>
|
||||
|
||||
<li class="li-apply-wounds">
|
||||
{{localize "CTHULHUETERNAL.Label.applyWounds"}}
|
||||
<select name="combatant" class="li-apply-wounds-select">
|
||||
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
Reference in New Issue
Block a user