3 Commits

Author SHA1 Message Date
2578ea4dc1 Fix bio + initiative
All checks were successful
Release Creation / build (release) Successful in 1m2s
2025-10-05 18:09:02 +02:00
d80e3e4658 Fix roll options
All checks were successful
Release Creation / build (release) Successful in 1m8s
2025-08-26 22:14:45 +02:00
188501423a Add new roll options
All checks were successful
Release Creation / build (release) Successful in 1m24s
2025-08-25 22:41:42 +02:00
20 changed files with 94 additions and 58 deletions

View File

@@ -413,10 +413,10 @@ i.fvtt-ftl-nomad {
background-color: var(--color-light-1);
}
.fvtt-ftl-nomad .character-biography prose-mirror.inactive {
min-height: 40px;
min-height: 16rem;
}
.fvtt-ftl-nomad .character-biography prose-mirror.active {
min-height: 150px;
min-height: 16rem;
}
.fvtt-ftl-nomad .character-biography .field-label {
margin-left: 8px;

View File

@@ -31,6 +31,13 @@ Hooks.once("init", function () {
utils: FTLNomadUtils,
}
/* -------------------------------------------- */
// Set an initiative formula for the system
CONFIG.Combat.initiative = {
formula: "2d6 + @skills.combat.value",
decimals: 1
};
CONFIG.Actor.documentClass = documents.FTLNomadActor
CONFIG.Actor.dataModels = {
character: models.FTLNomadCharacter,

View File

@@ -363,11 +363,17 @@
"cargo": "Cargo",
"vehicle": "Vehicle",
"starship": "Starship",
"Easy4": "Easy (+4D)",
"Easy3": "Easy (+3D)",
"Easy2": "Easy (+2D)",
"Easy": "Easy (+1D)",
"Moderate": "Moderate (+0D)",
"Difficult": "Difficult (-1D)",
"Formidable": "Formidable (-2D)",
"Formidable3": "Formidable (-3D)",
"Impossible": "Impossible (-4D)",
"Impossible5": "Impossible (-5D)",
"Impossible6": "Impossible (-6D)",
"combat": "Combat",
"physical": "Physical",
"social": "Social",

View File

@@ -114,11 +114,17 @@ export const CREATURE_SIZES = {
}
export const MODIFIER_CHOICES = {
"easy4": { id: "easy4", label: "FTLNOMAD.Label.Easy4", value: "4" },
"easy3": { id: "easy3", label: "FTLNOMAD.Label.Easy3", value: "3" },
"easy2": { id: "easy2", label: "FTLNOMAD.Label.Easy2", value: "2" },
"easy": { id: "easy", label: "FTLNOMAD.Label.Easy", value: "1" },
"moderate": { id: "moderate", label: "FTLNOMAD.Label.Moderate", value: "0" },
"difficult": { id: "difficult", label: "FTLNOMAD.Label.Difficult", value: "-1" },
"formidable": { id: "formidable", label: "FTLNOMAD.Label.Formidable", value: "-2" },
"impossible": { id: "impossible", label: "FTLNOMAD.Label.Impossible", value: "-4" }
"formidable3": { id: "formidable3", label: "FTLNOMAD.Label.Formidable3", value: "-3" },
"impossible": { id: "impossible", label: "FTLNOMAD.Label.Impossible", value: "-4" },
"impossible5": { id: "impossible5", label: "FTLNOMAD.Label.Impossible5", value: "-5" },
"impossible6": { id: "impossible6", label: "FTLNOMAD.Label.Impossible6", value: "-6" }
}
export const STARSHIP_HULL = {

View File

@@ -93,6 +93,7 @@ export default class FTLNomadRoll extends Roll {
break
case "damage":
options.weapon = foundry.utils.duplicate(options.rollItem)
formula = options.weapon.system.damage
break
case "weapon":
options.weapon = foundry.utils.duplicate(options.rollItem)
@@ -212,11 +213,30 @@ export default class FTLNomadRoll extends Roll {
options.numericModifier = Number(rollData.numericModifier) || 0
options.skillModifier = Number(rollData.skillModifier) || 0
options.rangeModifier = Number(rollData.rangeModifier) || 0
options.finalModifier = options.numericModifier + options.skillModifier + options.rangeModifier
let mod = options.rollItem?.value || 0
// Build the dice formula
let diceFormula = `${2 + Math.abs(options.skillModifier)}D6`
if (options.skillModifier > 0) {
let diceFormula = "2d6"
if (options.rollType === "damage") {
let damageFormula = options.weapon.system.damage.toUpperCase().replace(/D/g, "d")
// Extract the mod (if present), like in 3d6+1
let match = damageFormula.match(/([+-]\d+)$/)
if (match) {
mod += Number(match[1])
damageFormula = damageFormula.replace(match[1], "")
}
// Replace the D6 by the correct number of D6
damageFormula = damageFormula.replace(/(\d*)d6/gi, (match, p1) => {
let numDice = Number(p1) || 1
numDice += Math.abs(options.skillModifier)
return `${numDice}d6`
})
diceFormula = damageFormula
} else {
diceFormula = `${2 + Math.abs(options.finalModifier)}D6`
}
if (options.finalModifier > 0) {
diceFormula += `kh2 + ${mod}`
} else {
diceFormula += `kl2 + ${mod}`

View File

@@ -35,8 +35,8 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel
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 })
wounds: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
triageResults: new fields.StringField({ required: true, nullable: false, initial: "none", choices: SYSTEM.TRIAGE_RESULTS })
})
schema.enc = new fields.SchemaField({
@@ -76,18 +76,18 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel
prepareDerivedData() {
super.prepareDerivedData();
let encMax = 10 + (2*this.skills.physical.value)
let encMax = 10 + (2 * this.skills.physical.value)
if (encMax !== this.enc.max) {
this.enc.max = encMax
}
let enc = 0
let armor = 0
for (let i of this.parent.items) {
for (let i of this.parent.items) {
if (i.system?.enc) {
enc += i.system.enc
}
if ( i.system?.protection) {
if (i.system?.protection) {
armor += i.system.protection
}
}
@@ -97,12 +97,12 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel
if (armor !== this.armor.value) {
this.armor.value = armor
}
let staminaMax = 14 + (3*this.skills.physical.value)
let staminaMax = 14 + (3 * this.skills.physical.value)
if (staminaMax !== this.health.staminaMax) {
this.health.staminaMax = staminaMax
}
}
isEncumbered() {
return this.enc.value > this.enc.max
}

View File

@@ -1 +1 @@
MANIFEST-000035
MANIFEST-000051

View File

@@ -1,15 +1,7 @@
2025/07/13-19:19:55.407043 7f3fa77fe6c0 Recovering log #33
2025/07/13-19:19:55.417622 7f3fa77fe6c0 Delete type=3 #31
2025/07/13-19:19:55.417740 7f3fa77fe6c0 Delete type=0 #33
2025/07/13-19:30:09.138052 7f3fa57fa6c0 Level-0 table #38: started
2025/07/13-19:30:09.142514 7f3fa57fa6c0 Level-0 table #38: 69052 bytes OK
2025/07/13-19:30:09.149276 7f3fa57fa6c0 Delete type=0 #36
2025/07/13-19:30:09.149522 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)
2025/07/13-19:30:09.149572 7f3fa57fa6c0 Manual compaction at level-1 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at '!items!zv9dwgL3p7ThQn7j' @ 347 : 0
2025/07/13-19:30:09.149581 7f3fa57fa6c0 Compacting 1@1 + 1@2 files
2025/07/13-19:30:09.155375 7f3fa57fa6c0 Generated table #39@1: 273 keys, 107280 bytes
2025/07/13-19:30:09.155393 7f3fa57fa6c0 Compacted 1@1 + 1@2 files => 107280 bytes
2025/07/13-19:30:09.161181 7f3fa57fa6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2025/07/13-19:30:09.161294 7f3fa57fa6c0 Delete type=2 #14
2025/07/13-19:30:09.161440 7f3fa57fa6c0 Delete type=2 #38
2025/07/13-19:30:09.181330 7f3fa57fa6c0 Manual compaction at level-1 from '!items!zv9dwgL3p7ThQn7j' @ 347 : 0 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)
2025/08/26-08:04:22.211637 7f99c9ffb6c0 Recovering log #48
2025/08/26-08:04:22.223370 7f99c9ffb6c0 Delete type=3 #46
2025/08/26-08:04:22.223498 7f99c9ffb6c0 Delete type=0 #48
2025/08/26-08:13:33.915174 7f99c8ff96c0 Level-0 table #54: started
2025/08/26-08:13:33.915296 7f99c8ff96c0 Level-0 table #54: 0 bytes OK
2025/08/26-08:13:33.948896 7f99c8ff96c0 Delete type=0 #52
2025/08/26-08:13:33.949217 7f99c8ff96c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,11 @@
2025/07/13-10:30:52.384204 7f3fa77fe6c0 Recovering log #29
2025/07/13-10:30:52.394989 7f3fa77fe6c0 Delete type=3 #27
2025/07/13-10:30:52.395058 7f3fa77fe6c0 Delete type=0 #29
2025/07/13-10:33:26.219686 7f3fa57fa6c0 Level-0 table #34: started
2025/07/13-10:33:26.219728 7f3fa57fa6c0 Level-0 table #34: 0 bytes OK
2025/07/13-10:33:26.225987 7f3fa57fa6c0 Delete type=0 #32
2025/07/13-10:33:26.233983 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)
2025/07/13-10:33:26.244796 7f3fa57fa6c0 Manual compaction at level-1 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)
2025/08/25-21:48:36.909732 7f99c9ffb6c0 Delete type=3 #1
2025/08/25-21:56:45.440471 7f99c8ff96c0 Level-0 table #49: started
2025/08/25-21:56:45.440527 7f99c8ff96c0 Level-0 table #49: 0 bytes OK
2025/08/25-21:56:45.504826 7f99c8ff96c0 Delete type=0 #47
2025/08/25-21:56:45.558056 7f99c8ff96c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at '!items!zv9dwgL3p7ThQn7j' @ 385 : 1
2025/08/25-21:56:45.558080 7f99c8ff96c0 Compacting 1@0 + 0@1 files
2025/08/25-21:56:45.590210 7f99c8ff96c0 Generated table #50@0: 285 keys, 111653 bytes
2025/08/25-21:56:45.590298 7f99c8ff96c0 Compacted 1@0 + 0@1 files => 111653 bytes
2025/08/25-21:56:45.648076 7f99c8ff96c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/08/25-21:56:45.648259 7f99c8ff96c0 Delete type=2 #44
2025/08/25-21:56:45.801444 7f99c8ff96c0 Manual compaction at level-0 from '!items!zv9dwgL3p7ThQn7j' @ 385 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)

View File

View File

@@ -1 +1 @@
MANIFEST-000014
MANIFEST-000029

View File

@@ -1,8 +1,7 @@
2025/07/13-19:19:55.423004 7f3fa5ffb6c0 Recovering log #12
2025/07/13-19:19:55.432450 7f3fa5ffb6c0 Delete type=3 #10
2025/07/13-19:19:55.432507 7f3fa5ffb6c0 Delete type=0 #12
2025/07/13-19:30:09.131809 7f3fa57fa6c0 Level-0 table #17: started
2025/07/13-19:30:09.131855 7f3fa57fa6c0 Level-0 table #17: 0 bytes OK
2025/07/13-19:30:09.137925 7f3fa57fa6c0 Delete type=0 #15
2025/07/13-19:30:09.149491 7f3fa57fa6c0 Manual compaction at level-0 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)
2025/07/13-19:30:09.149534 7f3fa57fa6c0 Manual compaction at level-1 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)
2025/08/26-08:04:22.229470 7f99caffd6c0 Recovering log #26
2025/08/26-08:04:22.240597 7f99caffd6c0 Delete type=3 #24
2025/08/26-08:04:22.240743 7f99caffd6c0 Delete type=0 #26
2025/08/26-08:13:33.840012 7f99c8ff96c0 Level-0 table #32: started
2025/08/26-08:13:33.840112 7f99c8ff96c0 Level-0 table #32: 0 bytes OK
2025/08/26-08:13:33.862575 7f99c8ff96c0 Delete type=0 #30
2025/08/26-08:13:33.949166 7f99c8ff96c0 Manual compaction at level-0 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,11 @@
2025/07/13-10:30:52.399161 7f3fa5ffb6c0 Recovering log #8
2025/07/13-10:30:52.409521 7f3fa5ffb6c0 Delete type=3 #6
2025/07/13-10:30:52.409646 7f3fa5ffb6c0 Delete type=0 #8
2025/07/13-10:33:26.202414 7f3fa57fa6c0 Level-0 table #13: started
2025/07/13-10:33:26.202485 7f3fa57fa6c0 Level-0 table #13: 0 bytes OK
2025/07/13-10:33:26.208789 7f3fa57fa6c0 Delete type=0 #11
2025/07/13-10:33:26.233915 7f3fa57fa6c0 Manual compaction at level-0 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)
2025/07/13-10:33:26.234020 7f3fa57fa6c0 Manual compaction at level-1 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)
2025/08/25-21:48:36.994202 7f99ca7fc6c0 Delete type=3 #1
2025/08/25-21:56:45.505125 7f99c8ff96c0 Level-0 table #27: started
2025/08/25-21:56:45.505238 7f99c8ff96c0 Level-0 table #27: 0 bytes OK
2025/08/25-21:56:45.557727 7f99c8ff96c0 Delete type=0 #25
2025/08/25-21:56:45.648499 7f99c8ff96c0 Manual compaction at level-0 from '!actors!3pydTJsM73Z4o0V6' @ 72057594037927935 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at '!folders!vRnrOJqSMlxbSgyX' @ 92 : 1
2025/08/25-21:56:45.648514 7f99c8ff96c0 Compacting 1@0 + 0@1 files
2025/08/25-21:56:45.676577 7f99c8ff96c0 Generated table #28@0: 51 keys, 49087 bytes
2025/08/25-21:56:45.676616 7f99c8ff96c0 Compacted 1@0 + 0@1 files => 49087 bytes
2025/08/25-21:56:45.736809 7f99c8ff96c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/08/25-21:56:45.736931 7f99c8ff96c0 Delete type=2 #22
2025/08/25-21:56:45.801488 7f99c8ff96c0 Manual compaction at level-0 from '!folders!vRnrOJqSMlxbSgyX' @ 92 : 1 .. '!folders!vRnrOJqSMlxbSgyX' @ 0 : 0; will stop at (end)

View File

View File

@@ -219,10 +219,10 @@
.character-biography {
background-color: var(--color-light-1);
prose-mirror.inactive {
min-height: 40px;
min-height: 16rem;
}
prose-mirror.active {
min-height: 150px;
min-height: 16rem;
}
.field-label {
margin-left: 8px;

View File

@@ -23,12 +23,12 @@
<fieldset>
<legend>{{localize "FTLNOMAD.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true class="character-description"}}
</fieldset>
<fieldset>
<legend>{{localize "FTLNOMAD.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true class="character-notes"}}
</fieldset>
</div>
</section>