Merge pull request #1 from SobranDM/feat/foundry-v14-updates

Feat/foundry v14 updates
This commit is contained in:
Aaron Lutomski
2026-05-16 20:30:34 -07:00
committed by GitHub
12 changed files with 174 additions and 94 deletions
+3
View File
@@ -15,3 +15,6 @@ deltagreen.lock
# Ignore npm modules
node_modules
# Ignore Foundry VTT Reference Files
reference/
+14
View File
@@ -0,0 +1,14 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { NumberField, StringField, BooleanField } = foundry.data.fields;
export default class ArmorItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
protection: new NumberField({ initial: 3, integer: true }),
equipped: new BooleanField({ initial: true }),
expense: new StringField({ initial: "Standard" }),
};
}
}
+11
View File
@@ -0,0 +1,11 @@
const { StringField } = foundry.data.fields;
/**
* Shared system fields for all Delta Green item types (from legacy template base).
* Item display name lives on the document (`Item#name`), not in system.
*/
export default function defineBaseItemSystemFields() {
return {
description: new StringField({ initial: "" }),
};
}
+14
View File
@@ -0,0 +1,14 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { NumberField, StringField, BooleanField } = foundry.data.fields;
export default class BondItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
score: new NumberField({ initial: 10, integer: true }),
relationship: new StringField({ initial: "?" }),
hasBeenDamagedSinceLastHomeScene: new BooleanField({ initial: false }),
};
}
}
+13
View File
@@ -0,0 +1,13 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { StringField, BooleanField } = foundry.data.fields;
export default class GearItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
equipped: new BooleanField({ initial: true }),
expense: new StringField({ initial: "Standard" }),
};
}
}
+14
View File
@@ -0,0 +1,14 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { StringField, BooleanField } = foundry.data.fields;
export default class MotivationItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
disorder: new StringField({ initial: "" }),
crossedOut: new BooleanField({ initial: false }),
disorderCured: new BooleanField({ initial: false }),
};
}
}
+29
View File
@@ -0,0 +1,29 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { NumberField, StringField, BooleanField, SchemaField } =
foundry.data.fields;
export default class RitualItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
studyTime: new StringField({ initial: "" }),
sanity: new SchemaField({
notes: new StringField({ initial: "" }),
failedLoss: new StringField({ initial: "1D10" }),
successLoss: new StringField({ initial: "0" }),
}),
learnedSanity: new SchemaField({
notes: new StringField({ initial: "" }),
failedLoss: new StringField({ initial: "1D10" }),
successLoss: new StringField({ initial: "0" }),
}),
unnaturalSkillIncrease: new NumberField({ initial: 1, integer: true }),
activationCosts: new StringField({ initial: "" }),
activationTime: new StringField({ initial: "" }),
complexity: new StringField({ initial: "Simple" }),
handlerNotes: new StringField({ initial: "" }),
revealed: new BooleanField({ initial: false }),
};
}
}
+23
View File
@@ -0,0 +1,23 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { NumberField, StringField, BooleanField, SchemaField } =
foundry.data.fields;
export default class TomeItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
language: new StringField({ initial: "" }),
studyTime: new StringField({ initial: "" }),
unnaturalSkillIncrease: new NumberField({ initial: 5, integer: true }),
occultSkillIncrease: new NumberField({ initial: 3, integer: true }),
sanity: new SchemaField({
notes: new StringField({ initial: "" }),
failedLoss: new StringField({ initial: "1D6" }),
successLoss: new StringField({ initial: "1D4" }),
}),
handlerNotes: new StringField({ initial: "" }),
revealed: new BooleanField({ initial: false }),
};
}
}
+23
View File
@@ -0,0 +1,23 @@
import defineBaseItemSystemFields from "./base-fields.js";
const { NumberField, StringField, BooleanField } = foundry.data.fields;
export default class WeaponItemData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
...defineBaseItemSystemFields(),
skill: new StringField({ initial: "" }),
skillModifier: new NumberField({ initial: 0, integer: true }),
customSkillTarget: new NumberField({ initial: 50, integer: true }),
range: new StringField({ initial: "10M" }),
damage: new StringField({ initial: "1D8" }),
armorPiercing: new NumberField({ initial: 0, integer: true }),
lethality: new NumberField({ initial: 0, integer: true }),
isLethal: new BooleanField({ initial: false }),
killRadius: new StringField({ initial: "N/A" }),
ammo: new StringField({ initial: "" }),
expense: new StringField({ initial: "Standard" }),
equipped: new BooleanField({ initial: true }),
};
}
}
+18 -1
View File
@@ -25,18 +25,35 @@ import AgentData from "./data/actor/agent.js";
import UnnaturalData from "./data/actor/unnatural.js";
import NPCData from "./data/actor/npc.js";
import VehicleData from "./data/actor/vehicle.js";
import WeaponItemData from "./data/item/weapon.js";
import ArmorItemData from "./data/item/armor.js";
import MotivationItemData from "./data/item/motivation.js";
import BondItemData from "./data/item/bond.js";
import GearItemData from "./data/item/gear.js";
import TomeItemData from "./data/item/tome.js";
import RitualItemData from "./data/item/ritual.js";
const { Actors, Items } = foundry.documents.collections;
Hooks.once("init", async () => {
Object.assign(CONFIG.Actor.dataModels, {
// The keys are the types defined in our template.json
// The keys are the types defined in system.json documentTypes.Actor
agent: AgentData,
unnatural: UnnaturalData,
npc: NPCData,
vehicle: VehicleData,
});
Object.assign(CONFIG.Item.dataModels, {
weapon: WeaponItemData,
armor: ArmorItemData,
motivation: MotivationItemData,
bond: BondItemData,
gear: GearItemData,
tome: TomeItemData,
ritual: RitualItemData,
});
game.deltagreen = {
DeltaGreenActor,
DeltaGreenItem,
+11 -2
View File
@@ -18,8 +18,8 @@
"version": "dev",
"compatibility": {
"minimum": "13",
"verified": "13",
"maximum": "13"
"verified": "14",
"maximum": "14"
},
"flags": {
"hotReload": {
@@ -207,6 +207,15 @@
"unnatural": {},
"npc": {},
"vehicle": {}
},
"Item": {
"weapon": {},
"armor": {},
"motivation": {},
"bond": {},
"gear": {},
"tome": {},
"ritual": {}
}
}
}
+1 -91
View File
@@ -1,91 +1 @@
{
"Item": {
"types": [
"weapon",
"armor",
"motivation",
"bond",
"gear",
"tome",
"ritual"
],
"templates": {
"base": {
"name": "",
"description": ""
}
},
"weapon": {
"templates": ["base"],
"skill": "",
"skillModifier": 0,
"customSkillTarget": 50,
"range": "10M",
"damage": "1D8",
"armorPiercing": 0,
"lethality": 0,
"isLethal": false,
"killRadius": "N/A",
"ammo": "",
"expense": "Standard",
"equipped": true
},
"armor": {
"templates": ["base"],
"protection": 3,
"equipped": true,
"expense": "Standard"
},
"motivation": {
"templates": ["base"],
"disorder": "",
"crossedOut": false,
"disorderCured": false
},
"bond": {
"templates": ["base"],
"score": 10,
"relationship": "?",
"hasBeenDamagedSinceLastHomeScene": false
},
"gear": {
"templates": ["base"],
"equipped": true,
"expense": "Standard"
},
"tome": {
"templates": ["base"],
"language": "",
"studyTime": "",
"unnaturalSkillIncrease": 5,
"occultSkillIncrease": 3,
"sanity": {
"notes": "",
"failedLoss": "1D6",
"successLoss": "1D4"
},
"handlerNotes": "",
"revealed": false
},
"ritual": {
"templates": ["base"],
"studyTime": "",
"sanity": {
"notes": "",
"failedLoss": "1D10",
"successLoss": "0"
},
"learnedSanity": {
"notes": "",
"failedLoss": "1D10",
"successLoss": "0"
},
"unnaturalSkillIncrease": 1,
"activationCosts": "",
"activationTime": "",
"complexity": "Simple",
"handlerNotes": "",
"revealed": false
}
}
}
{}