diff --git a/css/fvtt-ftl-nomad.css b/css/fvtt-ftl-nomad.css index cce7be7..2ff9020 100644 --- a/css/fvtt-ftl-nomad.css +++ b/css/fvtt-ftl-nomad.css @@ -24,6 +24,7 @@ body { --color-text-secondary: #160303; --color-text-emphatic: #09610e; + --input-height: 1.6rem; } .d100 { width: 18px; @@ -74,6 +75,11 @@ i.fvtt-ftl-nomad { .application.dialog.fvtt-ftl-nomad .legend { font-family: var(--font-primary); } +.sheet-tabs { + background-color: var(--color-light-1); + font-family: Ethnocentric; + font-size: 0.7rem; +} .chat-message, .chat-message.whisper { font-family: var(--font-primary); @@ -99,8 +105,8 @@ i.fvtt-ftl-nomad { .fvtt-ftl-nomad .vehicle-sheet-common .form-group label { font-weight: bold; margin-right: 8px; - min-width: 4rem; - max-width: 4rem; + min-width: 5rem; + max-width: 5rem; } .fvtt-ftl-nomad .starship-sheet-common label { font-family: var(--font-secondary); @@ -384,7 +390,7 @@ i.fvtt-ftl-nomad { background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; } .fvtt-ftl-nomad .character-main .character-skills .character-skill { @@ -1002,8 +1008,8 @@ i.fvtt-ftl-nomad { .fvtt-ftl-nomad .vehicle-content .form-group label { font-weight: bold; margin-right: 8px; - min-width: 4rem; - max-width: 4rem; + min-width: 5rem; + max-width: 5rem; } .fvtt-ftl-nomad .sheet-tabs { background-color: var(--color-light-1); @@ -1033,6 +1039,12 @@ i.fvtt-ftl-nomad { width: auto; border: none; } +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-left .spec label { + max-width: 4rem; +} +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-left .spec input { + max-width: 4rem; +} .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right { display: flex; flex-direction: column; @@ -1048,8 +1060,7 @@ i.fvtt-ftl-nomad { } .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo label, .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity label { - min-width: 4rem; - max-width: 4rem; + max-width: 7rem; } .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo input, .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity input { @@ -1058,10 +1069,31 @@ i.fvtt-ftl-nomad { } .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo .cargo-content, .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity .cargo-content { + display: flex; + flex-direction: column; + gap: 4px; +} +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo .cargo-content .cargo-line, +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity .cargo-content .cargo-line { display: flex; align-items: center; gap: 4px; } +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo .npc-crew-field, +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity .npc-crew-field { + display: flex; + align-items: center; + gap: 4px; +} +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo .npc-crew-field .npc-crew-roll, +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity .npc-crew-field .npc-crew-roll { + cursor: pointer; + color: var(--color-text-dark-primary); +} +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .cargo .npc-crew-field .npc-crew-roll:hover, +.fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .capacity .npc-crew-field .npc-crew-roll:hover { + color: var(--color-text-hyperlink); +} .fvtt-ftl-nomad .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos { display: flex; flex-direction: column; @@ -1480,7 +1512,7 @@ i.fvtt-ftl-nomad { background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; } .fvtt-ftl-nomad .robot-main .robot-skills .robot-skill { @@ -1722,9 +1754,6 @@ i.fvtt-ftl-nomad { min-width: 5rem; max-width: 5rem; } -.fvtt-ftl-nomad .sheet-tabs { - background-color: var(--color-light-1); -} .fvtt-ftl-nomad .starship-main { background-color: var(--color-light-1); display: flex; @@ -1815,6 +1844,18 @@ i.fvtt-ftl-nomad { .fvtt-ftl-nomad .starship-main .starship-pc .starship-right .cargo select { max-width: 5rem; } +.fvtt-ftl-nomad .starship-main .starship-pc .starship-right .cargo .npc-crew-field { + display: flex; + align-items: center; + gap: 4px; +} +.fvtt-ftl-nomad .starship-main .starship-pc .starship-right .cargo .npc-crew-field .npc-crew-roll { + cursor: pointer; + color: var(--color-text-dark-primary); +} +.fvtt-ftl-nomad .starship-main .starship-pc .starship-right .cargo .npc-crew-field .npc-crew-roll:hover { + color: var(--color-text-hyperlink); +} .fvtt-ftl-nomad .starship-main .starship-pc .starship-right .starship-infos { display: flex; flex-direction: column; @@ -2209,7 +2250,7 @@ i.fvtt-ftl-nomad { background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; } .fvtt-ftl-nomad .creature-main .creature-skills .creature-skill { diff --git a/lang/en.json b/lang/en.json index e6c3fee..ee0524b 100644 --- a/lang/en.json +++ b/lang/en.json @@ -447,6 +447,7 @@ "capacity" : "Capacity", "Agility" : "Agility", "Armor": "Armor", + "ArmorCritical": "Armor Critical", "cargo": "Cargo", "vehicle": "Vehicle", "starship": "Starship", @@ -475,6 +476,7 @@ "Unarmed": "Unarmed", "Vehicle": "Vehicle", "armor": "Armor", + "armorCritical": "Armor (Crit.)", "armors": "Armors", "biodata": "Biodata", "biography": "Biography", @@ -527,7 +529,9 @@ "weapons": "Weapons", "crew": "Crew", "noCrew": "No crew members assigned", - "vehicleBonus": "Vehicle/Starship Agility Bonus" + "vehicleBonus": "Vehicle/Starship Agility Bonus", + "selectSkill": "Select Skill", + "npcCrewSkill": "NPC Crew" }, "Language": { "FIELDS": { @@ -613,7 +617,10 @@ "label": "Hull Type" }, "armor": { - "label": "Armor" + "label": "Armor (Reg.)" + }, + "armorCritical": { + "label": "Armor (Crit.)" }, "guns" : { "label": "Guns" @@ -639,6 +646,9 @@ "crewCapacity": { "label": "Crew Capacity" }, + "npcCrew": { + "label": "NPC Skill" + }, "description": { "label": "Description" }, @@ -713,7 +723,10 @@ "label": "Speed" }, "armor": { - "label": "Armor" + "label": "Armor (Reg.)" + }, + "armorCritical": { + "label": "Armor (Crit.)" }, "crew": { "label": "Crew" @@ -721,6 +734,9 @@ "crewCapacity": { "label": "Crew Capacity" }, + "npcCrew": { + "label": "NPC Skill" + }, "description": { "label": "Description" }, @@ -736,6 +752,8 @@ "alreadyInCrew": "This actor is already a crew member", "notACharacter": "Only characters can pilot vehicles", "noVehiclesSkill": "This character does not have the vehicles skill", + "noSkills": "This character does not have any skills", + "noNpcCrew": "NPC Crew level is below 0", "onlyCharactersAllowed": "Only characters can be added as crew members", "noLinkedPrototype": "This character must be linked to his token to be added as crew member" }, @@ -744,6 +762,7 @@ "RemoveCrewContent": "Are you sure you want to remove {name} from the crew?", "PilotVehicle": "Pilot vehicle (with vehicle agility bonus)", "PilotStarship": "Pilot starship (with starship agility bonus)", + "RollNpcCrew": "Roll for NPC Crew", "Weapon": { "FIELDS": { "cost": { diff --git a/module/applications/sheets/starship-sheet.mjs b/module/applications/sheets/starship-sheet.mjs index 232785a..7edcae4 100644 --- a/module/applications/sheets/starship-sheet.mjs +++ b/module/applications/sheets/starship-sheet.mjs @@ -17,6 +17,7 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { removeCrew: FTLNomadStarshipSheet.#onRemoveCrew, viewCrew: FTLNomadStarshipSheet.#onViewCrew, pilotCrew: FTLNomadStarshipSheet.#onPilotCrew, + rollNpcCrew: FTLNomadStarshipSheet.#onRollNpcCrew, }, } @@ -81,20 +82,25 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { // Get starship agility bonus const starshipAgility = this.document.system.agility || 0 - // Get the vehicles skill from the actor - const vehiclesSkill = actor.system.skills?.vehicles - if (!vehiclesSkill) { - ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noVehiclesSkill")) + // Get all skills from the actor + const actorSkills = actor.system.skills + if (!actorSkills) { + ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noSkills")) return } + // Default to vehicles skill + const defaultSkill = actorSkills.vehicles || Object.values(actorSkills)[0] + // Import the Roll class const FTLNomadRoll = (await import("../../documents/roll.mjs")).default - // Call the roll prompt with the starship agility as a vehicle bonus + // Call the roll prompt with all skills available and starship agility as a vehicle bonus let roll = await FTLNomadRoll.prompt({ rollType: "skill", - rollItem: vehiclesSkill, + rollItem: defaultSkill, + availableSkills: actorSkills, + selectedSkillId: "vehicles", actorId: actor.id, actorName: actor.name, actorImage: actor.img, @@ -108,6 +114,48 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { await roll.toMessage({}, { rollMode: roll.options.rollMode }) } + /** + * Roll a check for NPC crew with starship agility bonus + * @param {Event} event The initiating click event + * @param {HTMLElement} target The current target of the event listener + */ + static async #onRollNpcCrew(event, target) { + const npcCrewLevel = this.document.system.npcCrew || 0 + + if (npcCrewLevel < 0) { + ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noNpcCrew")) + return + } + + // Get starship agility bonus + const starshipAgility = this.document.system.agility || 0 + + // Create a fake skill object for the NPC crew + const npcSkill = { + value: npcCrewLevel, + label: "FTLNOMAD.Label.npcCrewSkill" + } + + // Import the Roll class + const FTLNomadRoll = (await import("../../documents/roll.mjs")).default + + // Call the roll prompt with NPC crew level as skill + let roll = await FTLNomadRoll.prompt({ + rollType: "skill", + rollItem: npcSkill, + actorId: this.document.id, + actorName: `${this.document.name} (NPC Crew)`, + actorImage: this.document.img, + talents: [], + isEncumbered: false, + hasTarget: false, + vehicleBonus: starshipAgility + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } + /** @override */ static PARTS = { main: { diff --git a/module/applications/sheets/vehicle-sheet.mjs b/module/applications/sheets/vehicle-sheet.mjs index 724abe5..0ce91f9 100644 --- a/module/applications/sheets/vehicle-sheet.mjs +++ b/module/applications/sheets/vehicle-sheet.mjs @@ -5,8 +5,8 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { static DEFAULT_OPTIONS = { classes: ["vehicle"], position: { - width: 680, - height: 540, + width: 720, + height: 640, }, window: { contentClasses: ["vehicle-content"], @@ -17,6 +17,7 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { removeCrew: FTLNomadVehicleSheet.#onRemoveCrew, viewCrew: FTLNomadVehicleSheet.#onViewCrew, pilotCrew: FTLNomadVehicleSheet.#onPilotCrew, + rollNpcCrew: FTLNomadVehicleSheet.#onRollNpcCrew, }, } @@ -81,20 +82,25 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { // Get vehicle agility bonus const vehicleAgility = this.document.system.agility || 0 - // Get the vehicles skill from the actor - const vehiclesSkill = actor.system.skills?.vehicles - if (!vehiclesSkill) { - ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noVehiclesSkill")) + // Get all skills from the actor + const actorSkills = actor.system.skills + if (!actorSkills) { + ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noSkills")) return } + // Default to vehicles skill + const defaultSkill = actorSkills.vehicles || Object.values(actorSkills)[0] + // Import the Roll class const FTLNomadRoll = (await import("../../documents/roll.mjs")).default - // Call the roll prompt with the vehicle agility as a vehicle bonus + // Call the roll prompt with all skills available and vehicle agility as a vehicle bonus let roll = await FTLNomadRoll.prompt({ rollType: "skill", - rollItem: vehiclesSkill, + rollItem: defaultSkill, + availableSkills: actorSkills, + selectedSkillId: "vehicles", actorId: actor.id, actorName: actor.name, actorImage: actor.img, @@ -108,6 +114,48 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { await roll.toMessage({}, { rollMode: roll.options.rollMode }) } + /** + * Roll a check for NPC crew with vehicle agility bonus + * @param {Event} event The initiating click event + * @param {HTMLElement} target The current target of the event listener + */ + static async #onRollNpcCrew(event, target) { + const npcCrewLevel = this.document.system.npcCrew || 0 + + if (npcCrewLevel < 0) { + ui.notifications.warn(game.i18n.localize("FTLNOMAD.Warning.noNpcCrew")) + return + } + + // Get vehicle agility bonus + const vehicleAgility = this.document.system.agility || 0 + + // Create a fake skill object for the NPC crew + const npcSkill = { + value: npcCrewLevel, + label: "FTLNOMAD.Label.npcCrewSkill" + } + + // Import the Roll class + const FTLNomadRoll = (await import("../../documents/roll.mjs")).default + + // Call the roll prompt with NPC crew level as skill + let roll = await FTLNomadRoll.prompt({ + rollType: "skill", + rollItem: npcSkill, + actorId: this.document.id, + actorName: `${this.document.name} (NPC Crew)`, + actorImage: this.document.img, + talents: [], + isEncumbered: false, + hasTarget: false, + vehicleBonus: vehicleAgility + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } + /** @override */ static PARTS = { main: { diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index 5ef6f38..6ae8691 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -67,7 +67,7 @@ export default class FTLNomadRoll extends Roll { } else { let mod = options.rollItem?.value || 0 fullFormula = `${options.formula} + ${options.skillModifier}D + ${mod} + ${options.rangeModifier}D + ${options.numericModifier}D + ${options.numericModifierSelect}` - if (options.vehicleBonus) { + if (options.vehicleBonus && options.useVehicleBonus) { fullFormula += ` + ${options.vehicleBonus}` } } @@ -140,16 +140,28 @@ export default class FTLNomadRoll extends Roll { options.rangeModifier = rangeModifier options.damageModifier = damageModifier options.vehicleBonus = options.vehicleBonus || 0 + options.useVehicleBonus = true // Par défaut, le bonus est activé let fullFormula = `${formula} + ${options.rollItem.value}` if (options.isEncumbered) { fullFormula += ` - 1D` } - if (options.vehicleBonus) { + if (options.vehicleBonus && options.useVehicleBonus) { fullFormula += ` + ${options.vehicleBonus}` } options.fullFormula = fullFormula options.formula = formula + // Prepare available skills if provided (for vehicle/starship piloting) + let availableSkills = null + if (options.availableSkills) { + availableSkills = Object.entries(options.availableSkills).map(([id, skill]) => ({ + id: id, + label: skill.label, + value: skill.value, + selected: id === options.selectedSkillId + })) + } + let dialogContext = { actorId: options.actorId, actorName: options.actorName, @@ -172,6 +184,7 @@ export default class FTLNomadRoll extends Roll { modifier, numericModifierSelect, vehicleBonus: options.vehicleBonus, + availableSkills: availableSkills, } const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-ftl-nomad/templates/roll-dialog.hbs", dialogContext) @@ -198,6 +211,14 @@ export default class FTLNomadRoll extends Roll { rejectClose: false, // Click on Close button will not launch an error render: (event, dialog) => { FTLNomadRoll.updateFullFormula(options) + $(".roll-skill-selector").change(event => { + const skillId = event.target.value + if (options.availableSkills && options.availableSkills[skillId]) { + options.rollItem = foundry.utils.duplicate(options.availableSkills[skillId]) + options.selectedSkillId = skillId + FTLNomadRoll.updateFullFormula(options) + } + }) $(".roll-skill-modifier").change(event => { options.skillModifier = Number(event.target.value) FTLNomadRoll.updateFullFormula(options) @@ -224,6 +245,10 @@ export default class FTLNomadRoll extends Roll { } FTLNomadRoll.updateFullFormula(options) }) + $(".use-vehicle-bonus").change(event => { + options.useVehicleBonus = event.target.checked + FTLNomadRoll.updateFullFormula(options) + }) } }) @@ -237,14 +262,22 @@ export default class FTLNomadRoll extends Roll { if (Hooks.call("fvtt-ftl-nomad.preRoll", options, rollData) === false) return + // Update rollItem if a skill was selected from the dropdown + if (rollData.selectedSkill && options.availableSkills) { + options.rollItem = foundry.utils.duplicate(options.availableSkills[rollData.selectedSkill]) + } + options.numericModifier = Number(rollData.numericModifier) || 0 options.skillModifier = Number(rollData.skillModifier) || 0 options.rangeModifier = Number(rollData.rangeModifier) || 0 options.numericModifierSelect = Number(rollData.numericModifierSelect) || 0 + options.useVehicleBonus = rollData.useVehicleBonus !== "off" && rollData.useVehicleBonus !== false options.finalModifier = options.numericModifier + options.skillModifier + options.rangeModifier let mod = options.rollItem?.value || 0 mod += options.numericModifierSelect - mod += options.vehicleBonus || 0 + if (options.useVehicleBonus) { + mod += options.vehicleBonus || 0 + } // Build the dice formula let diceFormula = "2d6" diff --git a/module/models/starship.mjs b/module/models/starship.mjs index 4c5be4b..aef17b9 100644 --- a/module/models/starship.mjs +++ b/module/models/starship.mjs @@ -11,8 +11,10 @@ export default class FTLNomadStarship extends foundry.abstract.TypeDataModel { schema.hullType = new fields.StringField({ required: true, initial: "small", choices: SYSTEM.STARSHIP_HULL }) schema.endurance = new fields.StringField({ required: true, initial: "" }) schema.armor = new fields.StringField({ required: true, initial: "" }) + schema.armorCritical = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.crewList = new fields.ArrayField(new fields.StringField({ required: true }), { initial: [] }) schema.crewCapacity = new fields.StringField({ required: true, initial: "" }) + schema.npcCrew = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.cargo = new fields.StringField({ required: true, initial: "" }) schema.guns = new fields.StringField({ required: true, initial: "1d6" }) schema.travelMultiplier = new fields.StringField({ required: true, initial: "" }) diff --git a/module/models/vehicle.mjs b/module/models/vehicle.mjs index f25b3bd..dfed98f 100644 --- a/module/models/vehicle.mjs +++ b/module/models/vehicle.mjs @@ -9,9 +9,11 @@ export default class FTLNomadVehicle extends foundry.abstract.TypeDataModel { schema.agility = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.armor = new fields.StringField({ required: true, initial: "" }) + schema.armorCritical = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.cargo = new fields.StringField({ required: true, initial: "" }) schema.crewList = new fields.ArrayField(new fields.StringField({ required: true }), { initial: [] }) schema.crewCapacity = new fields.StringField({ required: true, initial: "" }) + schema.npcCrew = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) 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" }) diff --git a/packs/ftl-nomad-items/000122.log b/packs/ftl-nomad-items/000134.log similarity index 100% rename from packs/ftl-nomad-items/000122.log rename to packs/ftl-nomad-items/000134.log diff --git a/packs/ftl-nomad-items/CURRENT b/packs/ftl-nomad-items/CURRENT index 30eb131..c39c670 100644 --- a/packs/ftl-nomad-items/CURRENT +++ b/packs/ftl-nomad-items/CURRENT @@ -1 +1 @@ -MANIFEST-000120 +MANIFEST-000132 diff --git a/packs/ftl-nomad-items/LOG b/packs/ftl-nomad-items/LOG index f231dbb..d8b2da3 100644 --- a/packs/ftl-nomad-items/LOG +++ b/packs/ftl-nomad-items/LOG @@ -1,7 +1,7 @@ -2025/11/09-22:04:33.775487 7f0921ffb6c0 Recovering log #117 -2025/11/09-22:04:33.868329 7f0921ffb6c0 Delete type=3 #115 -2025/11/09-22:04:33.868406 7f0921ffb6c0 Delete type=0 #117 -2025/11/09-22:11:34.495817 7f0920bff6c0 Level-0 table #123: started -2025/11/09-22:11:34.495875 7f0920bff6c0 Level-0 table #123: 0 bytes OK -2025/11/09-22:11:34.530303 7f0920bff6c0 Delete type=0 #121 -2025/11/09-22:11:34.530590 7f0920bff6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end) +2025/11/11-09:55:29.500472 7f0922ffd6c0 Recovering log #130 +2025/11/11-09:55:29.510925 7f0922ffd6c0 Delete type=3 #128 +2025/11/11-09:55:29.511008 7f0922ffd6c0 Delete type=0 #130 +2025/11/11-12:13:09.876661 7f0920bff6c0 Level-0 table #135: started +2025/11/11-12:13:09.876709 7f0920bff6c0 Level-0 table #135: 0 bytes OK +2025/11/11-12:13:09.882679 7f0920bff6c0 Delete type=0 #133 +2025/11/11-12:13:09.882804 7f0920bff6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end) diff --git a/packs/ftl-nomad-items/LOG.old b/packs/ftl-nomad-items/LOG.old index 26ebee8..5a43db2 100644 --- a/packs/ftl-nomad-items/LOG.old +++ b/packs/ftl-nomad-items/LOG.old @@ -1,11 +1,7 @@ -2025/11/09-19:53:34.147030 7f09217fa6c0 Delete type=3 #1 -2025/11/09-22:04:27.202802 7f0920bff6c0 Level-0 table #118: started -2025/11/09-22:04:27.202844 7f0920bff6c0 Level-0 table #118: 0 bytes OK -2025/11/09-22:04:27.240256 7f0920bff6c0 Delete type=0 #116 -2025/11/09-22:04:27.339388 7f0920bff6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at '!items!zv9dwgL3p7ThQn7j' @ 385 : 1 -2025/11/09-22:04:27.339402 7f0920bff6c0 Compacting 1@0 + 0@1 files -2025/11/09-22:04:27.363062 7f0920bff6c0 Generated table #119@0: 316 keys, 126470 bytes -2025/11/09-22:04:27.363092 7f0920bff6c0 Compacted 1@0 + 0@1 files => 126470 bytes -2025/11/09-22:04:27.437323 7f0920bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2025/11/09-22:04:27.437448 7f0920bff6c0 Delete type=2 #90 -2025/11/09-22:04:27.535013 7f0920bff6c0 Manual compaction at level-0 from '!items!zv9dwgL3p7ThQn7j' @ 385 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end) +2025/11/11-09:17:46.334216 7f0921ffb6c0 Recovering log #126 +2025/11/11-09:17:46.344001 7f0921ffb6c0 Delete type=3 #124 +2025/11/11-09:17:46.344052 7f0921ffb6c0 Delete type=0 #126 +2025/11/11-09:53:31.537774 7f0920bff6c0 Level-0 table #131: started +2025/11/11-09:53:31.537826 7f0920bff6c0 Level-0 table #131: 0 bytes OK +2025/11/11-09:53:31.544859 7f0920bff6c0 Delete type=0 #129 +2025/11/11-09:53:31.558512 7f0920bff6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end) diff --git a/packs/ftl-nomad-items/MANIFEST-000120 b/packs/ftl-nomad-items/MANIFEST-000132 similarity index 72% rename from packs/ftl-nomad-items/MANIFEST-000120 rename to packs/ftl-nomad-items/MANIFEST-000132 index 690fcaf..876f46d 100644 Binary files a/packs/ftl-nomad-items/MANIFEST-000120 and b/packs/ftl-nomad-items/MANIFEST-000132 differ diff --git a/packs/ftl-nomad-vehicles/000100.log b/packs/ftl-nomad-vehicles/000112.log similarity index 100% rename from packs/ftl-nomad-vehicles/000100.log rename to packs/ftl-nomad-vehicles/000112.log diff --git a/packs/ftl-nomad-vehicles/CURRENT b/packs/ftl-nomad-vehicles/CURRENT index 95395b2..a451d53 100644 --- a/packs/ftl-nomad-vehicles/CURRENT +++ b/packs/ftl-nomad-vehicles/CURRENT @@ -1 +1 @@ -MANIFEST-000098 +MANIFEST-000110 diff --git a/packs/ftl-nomad-vehicles/LOG b/packs/ftl-nomad-vehicles/LOG index 6de69e8..0e01826 100644 --- a/packs/ftl-nomad-vehicles/LOG +++ b/packs/ftl-nomad-vehicles/LOG @@ -1,7 +1,7 @@ -2025/11/09-22:04:33.872006 7f09217fa6c0 Recovering log #95 -2025/11/09-22:04:33.928521 7f09217fa6c0 Delete type=3 #93 -2025/11/09-22:04:33.928601 7f09217fa6c0 Delete type=0 #95 -2025/11/09-22:11:34.382951 7f0920bff6c0 Level-0 table #101: started -2025/11/09-22:11:34.383012 7f0920bff6c0 Level-0 table #101: 0 bytes OK -2025/11/09-22:11:34.414745 7f0920bff6c0 Delete type=0 #99 -2025/11/09-22:11:34.530532 7f0920bff6c0 Manual compaction at level-0 from '!actors!0FQ6XaRi24OorI21' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end) +2025/11/11-09:55:29.516089 7f0921ffb6c0 Recovering log #108 +2025/11/11-09:55:29.525977 7f0921ffb6c0 Delete type=3 #106 +2025/11/11-09:55:29.526050 7f0921ffb6c0 Delete type=0 #108 +2025/11/11-12:13:09.863976 7f0920bff6c0 Level-0 table #113: started +2025/11/11-12:13:09.864017 7f0920bff6c0 Level-0 table #113: 0 bytes OK +2025/11/11-12:13:09.870509 7f0920bff6c0 Delete type=0 #111 +2025/11/11-12:13:09.882783 7f0920bff6c0 Manual compaction at level-0 from '!actors!0FQ6XaRi24OorI21' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end) diff --git a/packs/ftl-nomad-vehicles/LOG.old b/packs/ftl-nomad-vehicles/LOG.old index 8930f54..75c406a 100644 --- a/packs/ftl-nomad-vehicles/LOG.old +++ b/packs/ftl-nomad-vehicles/LOG.old @@ -1,11 +1,7 @@ -2025/11/09-19:53:34.224884 7f09217fa6c0 Delete type=3 #1 -2025/11/09-22:04:27.111245 7f0920bff6c0 Level-0 table #96: started -2025/11/09-22:04:27.111285 7f0920bff6c0 Level-0 table #96: 0 bytes OK -2025/11/09-22:04:27.145066 7f0920bff6c0 Delete type=0 #94 -2025/11/09-22:04:27.287309 7f0920bff6c0 Manual compaction at level-0 from '!actors!0FQ6XaRi24OorI21' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at '!folders!vRnrOJqSMlxbSgyX' @ 92 : 1 -2025/11/09-22:04:27.287329 7f0920bff6c0 Compacting 1@0 + 0@1 files -2025/11/09-22:04:27.306281 7f0920bff6c0 Generated table #97@0: 78 keys, 62826 bytes -2025/11/09-22:04:27.306318 7f0920bff6c0 Compacted 1@0 + 0@1 files => 62826 bytes -2025/11/09-22:04:27.339052 7f0920bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2025/11/09-22:04:27.339182 7f0920bff6c0 Delete type=2 #68 -2025/11/09-22:04:27.437605 7f0920bff6c0 Manual compaction at level-0 from '!folders!vRnrOJqSMlxbSgyX' @ 92 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end) +2025/11/11-09:17:46.347112 7f09217fa6c0 Recovering log #104 +2025/11/11-09:17:46.357554 7f09217fa6c0 Delete type=3 #102 +2025/11/11-09:17:46.357636 7f09217fa6c0 Delete type=0 #104 +2025/11/11-09:53:31.551245 7f0920bff6c0 Level-0 table #109: started +2025/11/11-09:53:31.551306 7f0920bff6c0 Level-0 table #109: 0 bytes OK +2025/11/11-09:53:31.558404 7f0920bff6c0 Delete type=0 #107 +2025/11/11-09:53:31.558535 7f0920bff6c0 Manual compaction at level-0 from '!actors!0FQ6XaRi24OorI21' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end) diff --git a/packs/ftl-nomad-vehicles/MANIFEST-000098 b/packs/ftl-nomad-vehicles/MANIFEST-000110 similarity index 73% rename from packs/ftl-nomad-vehicles/MANIFEST-000098 rename to packs/ftl-nomad-vehicles/MANIFEST-000110 index fb5b02e..adedd3b 100644 Binary files a/packs/ftl-nomad-vehicles/MANIFEST-000098 and b/packs/ftl-nomad-vehicles/MANIFEST-000110 differ diff --git a/styles/character.less b/styles/character.less index d16c973..e23eeb2 100644 --- a/styles/character.less +++ b/styles/character.less @@ -172,7 +172,7 @@ background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; .character-skill { diff --git a/styles/creature.less b/styles/creature.less index c096848..66614e2 100644 --- a/styles/creature.less +++ b/styles/creature.less @@ -129,7 +129,7 @@ background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; .creature-skill { diff --git a/styles/global.less b/styles/global.less index f3e7e22..dca5cfa 100644 --- a/styles/global.less +++ b/styles/global.less @@ -1,8 +1,11 @@ :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: linear-gradient( + rgba(255, 255, 255, 0.8), + rgba(255, 255, 255, 0.8) + ), + url("../assets/ui/ftl_nomad_background_01.webp"); --font-primary: "Atkinson"; --font-secondary: "Atkinson"; --font-title: "Ethnocentric"; @@ -12,12 +15,14 @@ --color-warning: darkorange; --color-critical-success: rgb(21, 39, 204); --color-critical-failure: rgb(141, 32, 231); + /*--img-icon-color-filter: invert(60%) sepia(12%) saturate(6853%) hue-rotate(81deg) brightness(113%) contrast(104%);*/ } body { --color-text-secondary: rgb(22, 3, 3); --color-text-emphatic: rgb(9, 97, 14); + --input-height: 1.6rem; } .d100 { @@ -65,7 +70,7 @@ i.fvtt-ftl-nomad { .application.dialog.fvtt-ftl-nomad { font-family: var(--font-primary); - font-size: calc(var(--font-size-standard) * 1.0); + font-size: calc(var(--font-size-standard) * 1); background-image: var(--background-image-base); button:hover { background: var(--color-dark-6); @@ -75,11 +80,17 @@ i.fvtt-ftl-nomad { } } +.sheet-tabs { + background-color: var(--color-light-1); + font-family: Ethnocentric; + font-size: 0.7rem; +} + .chat-message, .chat-message.whisper { font-family: var(--font-primary); background-image: var(--background-image-base); - background-repeat:repeat-y; + background-repeat: repeat-y; background-position: 0%; background-size: 100% 100%; } diff --git a/styles/mixins.less b/styles/mixins.less index 44dba52..d49d523 100644 --- a/styles/mixins.less +++ b/styles/mixins.less @@ -77,8 +77,8 @@ label { font-weight: bold; margin-right: 8px; - min-width: 4rem; - max-width: 4rem; + min-width: 5rem; + max-width: 5rem; } } } diff --git a/styles/robot.less b/styles/robot.less index a958dd9..95dd2b4 100644 --- a/styles/robot.less +++ b/styles/robot.less @@ -146,7 +146,7 @@ background-color: var(--color-light-1); display: flex; flex-direction: column; - gap: 5px; + justify-content: space-evenly; flex: 1; .robot-skill { diff --git a/styles/starship.less b/styles/starship.less index 3f46893..1005bf8 100644 --- a/styles/starship.less +++ b/styles/starship.less @@ -4,10 +4,6 @@ overflow: scroll; } -.sheet-tabs { - background-color: var(--color-light-1); -} - .starship-main { background-color: var(--color-light-1); display: flex; @@ -109,6 +105,18 @@ select { max-width: 5rem; } + .npc-crew-field { + display: flex; + align-items: center; + gap: 4px; + .npc-crew-roll { + cursor: pointer; + color: var(--color-text-dark-primary); + &:hover { + color: var(--color-text-hyperlink); + } + } + } } .starship-infos { diff --git a/styles/vehicle.less b/styles/vehicle.less index c40a904..16f975b 100644 --- a/styles/vehicle.less +++ b/styles/vehicle.less @@ -33,6 +33,15 @@ border: none; } } + + .spec { + label { + max-width: 4rem; + } + input { + max-width: 4rem; + } + } } .vehicle-right { @@ -52,17 +61,33 @@ .cargo, .capacity { label { - min-width: 4rem; - max-width: 4rem; + max-width: 7rem; } input { max-width: 6rem; margin-right: 0.5rem; } .cargo-content { + display: flex; + flex-direction: column; + gap: 4px; + .cargo-line { + display: flex; + align-items: center; + gap: 4px; + } + } + .npc-crew-field { display: flex; align-items: center; gap: 4px; + .npc-crew-roll { + cursor: pointer; + color: var(--color-text-dark-primary); + &:hover { + color: var(--color-text-hyperlink); + } + } } } diff --git a/templates/roll-dialog.hbs b/templates/roll-dialog.hbs index 17a5e4e..36ed878 100644 --- a/templates/roll-dialog.hbs +++ b/templates/roll-dialog.hbs @@ -10,8 +10,20 @@