Add additional physical item types
This commit is contained in:
parent
e51376dc02
commit
abeb9d8b24
12 changed files with 248 additions and 29 deletions
|
@ -26,6 +26,11 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-1col {
|
||||||
|
grid-column: span 1 / span 1;
|
||||||
|
grid-template-columns: repeat(1, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
.grid-3col {
|
.grid-3col {
|
||||||
grid-column: span 3 / span 3;
|
grid-column: span 3 / span 3;
|
||||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
|
18
lang/en.json
18
lang/en.json
|
@ -18,6 +18,22 @@
|
||||||
"DS4.ItemAvailabilityCity": "City",
|
"DS4.ItemAvailabilityCity": "City",
|
||||||
"DS4.ItemAvailabilityElves": "Elves",
|
"DS4.ItemAvailabilityElves": "Elves",
|
||||||
"DS4.ItemAvailabilityDwarves": "Dwarves",
|
"DS4.ItemAvailabilityDwarves": "Dwarves",
|
||||||
|
"DS4.ItemAvailabilityNone": "None",
|
||||||
"DS4.ItemTypeWeapon": "Weapon",
|
"DS4.ItemTypeWeapon": "Weapon",
|
||||||
"DS4.ItemTypeEquipment": "Equipment"
|
"DS4.ItemTypeArmor": "Armor",
|
||||||
|
"DS4.ItemTypeShield": "Shield",
|
||||||
|
"DS4.ItemTypeTrinket": "Trinket",
|
||||||
|
"DS4.ItemTypeEquipment": "Equipment",
|
||||||
|
"DS4.ArmorType": "Armor Type",
|
||||||
|
"DS4.ArmorMaterialType": "Material Type",
|
||||||
|
"DS4.ArmorValue": "Armor Value",
|
||||||
|
"DS4.ArmorTypeBody": "Body",
|
||||||
|
"DS4.ArmorTypeHelmet": "Helmet",
|
||||||
|
"DS4.ArmorTypeVambrace": "Vambrace",
|
||||||
|
"DS4.ArmorTypeGreaves": "Greaves",
|
||||||
|
"DS4.ArmorTypeVambraceGreaves": "Vambrace + Greaves",
|
||||||
|
"DS4.ArmorMaterialTypeCloth": "Cloth",
|
||||||
|
"DS4.ArmorMaterialTypeLeather": "Leather",
|
||||||
|
"DS4.ArmorMaterialTypeChain": "Chain",
|
||||||
|
"DS4.ArmorMaterialTypePlate": "Plate"
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ DS4.itemAvailabilities = {
|
||||||
city: "DS4.ItemAvailabilityCity",
|
city: "DS4.ItemAvailabilityCity",
|
||||||
elves: "DS4.ItemAvailabilityElves",
|
elves: "DS4.ItemAvailabilityElves",
|
||||||
dwarves: "DS4.ItemAvailabilityDwarves",
|
dwarves: "DS4.ItemAvailabilityDwarves",
|
||||||
|
none: "DS4.ItemAvailabilityNone",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,5 +38,31 @@ DS4.itemAvailabilities = {
|
||||||
*/
|
*/
|
||||||
DS4.itemTypes = {
|
DS4.itemTypes = {
|
||||||
weapon: "DS4.ItemTypeWeapon",
|
weapon: "DS4.ItemTypeWeapon",
|
||||||
|
armor: "DS4.ItemTypeArmor",
|
||||||
|
shield: "DS4.ItemTypeShield",
|
||||||
|
trinket: "DS4.ItemTypeTrinket",
|
||||||
equipment: "DS4.ItemTypeEquipment",
|
equipment: "DS4.ItemTypeEquipment",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * Define the set of armor types, a character may only wear one item of each at any given time
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
DS4.armorTypes = {
|
||||||
|
body: "DS4.ArmorTypeBody",
|
||||||
|
helment: "DS4.ArmorTypeHelmet",
|
||||||
|
vambrace: "DS4.ArmorTypeVambrace",
|
||||||
|
greaves: "DS4.ArmorTypeGreaves",
|
||||||
|
vambraceGreaves: "DS4.ArmorTypeVambraceGreaves",
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * Define the set of armor materials, used to determine if a characer may wear the armor without additional penalties
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
DS4.armorMaterialTypes = {
|
||||||
|
cloth: "DS4.ArmorMaterialTypeCloth",
|
||||||
|
leather: "DS4.ArmorMaterialTypeLeather",
|
||||||
|
chain: "DS4.ArmorMaterialTypeChain",
|
||||||
|
plate: "DS4.ArmorMaterialTypePlate",
|
||||||
|
};
|
||||||
|
|
|
@ -26,8 +26,15 @@ Hooks.once("init", async function () {
|
||||||
Actors.registerSheet("ds4", DS4ActorSheet, { makeDefault: true });
|
Actors.registerSheet("ds4", DS4ActorSheet, { makeDefault: true });
|
||||||
Items.unregisterSheet("core", ItemSheet);
|
Items.unregisterSheet("core", ItemSheet);
|
||||||
Items.registerSheet("ds4", DS4ItemSheet, { makeDefault: true });
|
Items.registerSheet("ds4", DS4ItemSheet, { makeDefault: true });
|
||||||
|
|
||||||
|
registerHandlebarsPartials();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function registerHandlebarsPartials() {
|
||||||
|
const templatePaths = ["systems/ds4/templates/item/partials/description.hbs"];
|
||||||
|
return loadTemplates(templatePaths);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Foundry VTT Setup */
|
/* Foundry VTT Setup */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -37,7 +44,7 @@ Hooks.once("init", async function () {
|
||||||
*/
|
*/
|
||||||
Hooks.once("setup", function () {
|
Hooks.once("setup", function () {
|
||||||
// Localize CONFIG objects once up-front
|
// Localize CONFIG objects once up-front
|
||||||
const toLocalize = ["attackTypes", "itemAvailabilities", "itemTypes"];
|
const toLocalize = ["attackTypes", "itemAvailabilities", "itemTypes", "armorTypes", "armorMaterialTypes"];
|
||||||
|
|
||||||
// Exclude some from sorting where the default order matters
|
// Exclude some from sorting where the default order matters
|
||||||
const noSort = [];
|
const noSort = [];
|
||||||
|
|
|
@ -7,6 +7,11 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-1col {
|
||||||
|
grid-column: span 1 / span 1;
|
||||||
|
grid-template-columns: repeat(1, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
.grid-3col {
|
.grid-3col {
|
||||||
grid-column: span 3 / span 3;
|
grid-column: span 3 / span 3;
|
||||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Item": {
|
"Item": {
|
||||||
"types": ["weapon", "equipment"],
|
"types": ["weapon", "armor", "shield", "trinket", "equipment"],
|
||||||
"templates": {
|
"templates": {
|
||||||
"base": {
|
"base": {
|
||||||
"description": ""
|
"description": ""
|
||||||
|
@ -54,16 +54,32 @@
|
||||||
"physical": {
|
"physical": {
|
||||||
"quantity": 1,
|
"quantity": 1,
|
||||||
"price": 0,
|
"price": 0,
|
||||||
"availability": "Hamlet"
|
"availability": "none"
|
||||||
|
},
|
||||||
|
"equipable": {
|
||||||
|
"equipped": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"weapon": {
|
"weapon": {
|
||||||
"templates": ["base", "physical"],
|
"templates": ["base", "physical", "equipable"],
|
||||||
"attackType": "melee",
|
"attackType": "melee",
|
||||||
"weaponBonus": 0,
|
"weaponBonus": 0,
|
||||||
"opponentDefense": 0,
|
"opponentDefense": 0,
|
||||||
"properties": {}
|
"properties": {}
|
||||||
},
|
},
|
||||||
|
"armor": {
|
||||||
|
"templates": ["base", "physical", "equipable"],
|
||||||
|
"armorMaterialType": "cloth",
|
||||||
|
"armorType": "body",
|
||||||
|
"armorValue": 0
|
||||||
|
},
|
||||||
|
"shield": {
|
||||||
|
"templates": ["base", "physical", "equipable"],
|
||||||
|
"armorValue": 0
|
||||||
|
},
|
||||||
|
"trinket": {
|
||||||
|
"templates": ["base", "physical", "equipable"]
|
||||||
|
},
|
||||||
"equipment": {
|
"equipment": {
|
||||||
"templates": ["base", "physical"]
|
"templates": ["base", "physical"]
|
||||||
}
|
}
|
||||||
|
|
54
templates/item/armor-sheet.hbs
Normal file
54
templates/item/armor-sheet.hbs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<header class="sheet-header">
|
||||||
|
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||||
|
<div class="header-fields flexrow">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
|
||||||
|
<h2 class="item-type">{{localize (lookup config.itemTypes item.type)}}</h2>
|
||||||
|
<div class="grid grid-3col basic-properties">
|
||||||
|
<div class="basic-property">
|
||||||
|
<label class="basic-property-label">{{localize "DS4.ArmorType"}}</label>
|
||||||
|
<select class="basic-property-select" name="data.armorType" data-type="String">
|
||||||
|
{{#select data.armorType}}
|
||||||
|
{{#each config.armorTypes as |value key|}}
|
||||||
|
<option value="{{key}}">{{value}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="basic-property">
|
||||||
|
<label class="basic-property-label">{{localize "DS4.ArmorMaterialType"}}</label>
|
||||||
|
<select class="basic-property-select" name="data.armorMaterialType" data-type="String">
|
||||||
|
{{#select data.armorMaterialType}}
|
||||||
|
{{#each config.armorMaterialTypes as |value key|}}
|
||||||
|
<option value="{{key}}">{{value}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="basic-property">
|
||||||
|
<label class="basic-property-label">{{localize "DS4.ArmorValue"}}</label>
|
||||||
|
<input class="basic-property-input" type="text" name="data.armorValue" value="{{data.armorValue}}"
|
||||||
|
placeholder="0" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{!-- Sheet Tab Navigation --}}
|
||||||
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
|
<a class="item" data-tab="description">{{localize "DS4.Description"}}</a>
|
||||||
|
<a class="item" data-tab="details">{{localize "DS4.Details"}}</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
|
||||||
|
{{!-- Description Tab --}}
|
||||||
|
{{> systems/ds4/templates/item/partials/description.hbs}}
|
||||||
|
|
||||||
|
{{!-- Attributes Tab --}}
|
||||||
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
{{!-- As you add new fields, add them in here! --}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</form>
|
27
templates/item/equipment-sheet.hbs
Normal file
27
templates/item/equipment-sheet.hbs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<header class="sheet-header">
|
||||||
|
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||||
|
<div class="header-fields flexrow">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
|
||||||
|
<h2 class="item-type">{{localize (lookup config.itemTypes item.type)}}</h2>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{!-- Sheet Tab Navigation --}}
|
||||||
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
|
<a class="item" data-tab="description">{{localize "DS4.Description"}}</a>
|
||||||
|
<a class="item" data-tab="details">{{localize "DS4.Details"}}</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
|
||||||
|
{{!-- Description Tab --}}
|
||||||
|
{{> systems/ds4/templates/item/partials/description.hbs}}
|
||||||
|
|
||||||
|
{{!-- Attributes Tab --}}
|
||||||
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
{{!-- As you add new fields, add them in here! --}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</form>
|
24
templates/item/partials/description.hbs
Normal file
24
templates/item/partials/description.hbs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<div class="tab flexrow" data-group="primary" data-tab="description">
|
||||||
|
<div class="side-properties">
|
||||||
|
<div class="side-property">
|
||||||
|
<label for="data.quantity">{{localize "DS4.Quantity"}}</label>
|
||||||
|
<input type="number" data-dtype="Number" name="data.quantity" value="{{data.quantity}}" />
|
||||||
|
</div>
|
||||||
|
<div class="side-property">
|
||||||
|
<label for="data.price">{{localize "DS4.PriceGold"}}</label>
|
||||||
|
<input type="number" data-dtype="Number" name="data.price" value="{{data.price}}" />
|
||||||
|
</div>
|
||||||
|
<div class="side-property">
|
||||||
|
<label for="data.price">{{localize "DS4.ItemAvailability"}}</label>
|
||||||
|
<select name="data.availability" data-type="String">
|
||||||
|
{{#select data.availability}}
|
||||||
|
{{#each config.itemAvailabilities as |value key|}}
|
||||||
|
<option value="{{key}}">{{value}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
|
||||||
|
</div>
|
34
templates/item/shield-sheet.hbs
Normal file
34
templates/item/shield-sheet.hbs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<header class="sheet-header">
|
||||||
|
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||||
|
<div class="header-fields flexrow">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
|
||||||
|
<h2 class="item-type">{{localize (lookup config.itemTypes item.type)}}</h2>
|
||||||
|
<div class="grid grid-1col basic-properties">
|
||||||
|
<div class="basic-property">
|
||||||
|
<label class="basic-property-label">{{localize "DS4.ArmorValue"}}</label>
|
||||||
|
<input class="basic-property-input" type="text" name="data.armorValue" value="{{data.armorValue}}"
|
||||||
|
placeholder="0" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{!-- Sheet Tab Navigation --}}
|
||||||
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
|
<a class="item" data-tab="description">{{localize "DS4.Description"}}</a>
|
||||||
|
<a class="item" data-tab="details">{{localize "DS4.Details"}}</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
|
||||||
|
{{!-- Description Tab --}}
|
||||||
|
{{> systems/ds4/templates/item/partials/description.hbs}}
|
||||||
|
|
||||||
|
{{!-- Attributes Tab --}}
|
||||||
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
{{!-- As you add new fields, add them in here! --}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</form>
|
27
templates/item/trinket-sheet.hbs
Normal file
27
templates/item/trinket-sheet.hbs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<header class="sheet-header">
|
||||||
|
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||||
|
<div class="header-fields flexrow">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
|
||||||
|
<h2 class="item-type">{{localize (lookup config.itemTypes item.type)}}</h2>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{!-- Sheet Tab Navigation --}}
|
||||||
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
|
<a class="item" data-tab="description">{{localize "DS4.Description"}}</a>
|
||||||
|
<a class="item" data-tab="details">{{localize "DS4.Details"}}</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
|
||||||
|
{{!-- Description Tab --}}
|
||||||
|
{{> systems/ds4/templates/item/partials/description.hbs}}
|
||||||
|
|
||||||
|
{{!-- Attributes Tab --}}
|
||||||
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
{{!-- As you add new fields, add them in here! --}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</form>
|
|
@ -39,30 +39,7 @@
|
||||||
<section class="sheet-body">
|
<section class="sheet-body">
|
||||||
|
|
||||||
{{!-- Description Tab --}}
|
{{!-- Description Tab --}}
|
||||||
<div class="tab flexrow" data-group="primary" data-tab="description">
|
{{> systems/ds4/templates/item/partials/description.hbs}}
|
||||||
<div class="side-properties">
|
|
||||||
<div class="side-property">
|
|
||||||
<label for="data.quantity">{{localize "DS4.Quantity"}}</label>
|
|
||||||
<input type="number" data-dtype="Number" name="data.quantity" value="{{data.quantity}}" />
|
|
||||||
</div>
|
|
||||||
<div class="side-property">
|
|
||||||
<label for="data.price">{{localize "DS4.PriceGold"}}</label>
|
|
||||||
<input type="number" data-dtype="Number" name="data.price" value="{{data.price}}" />
|
|
||||||
</div>
|
|
||||||
<div class="side-property">
|
|
||||||
<label for="data.price">{{localize "DS4.ItemAvailability"}}</label>
|
|
||||||
<select name="data.availability" data-type="String">
|
|
||||||
{{#select data.availability}}
|
|
||||||
{{#each config.itemAvailabilities as |value key|}}
|
|
||||||
<option value="{{key}}">{{value}}</option>
|
|
||||||
{{/each}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{!-- Attributes Tab --}}
|
{{!-- Attributes Tab --}}
|
||||||
<div class="tab details" data-group="primary" data-tab="details">
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
|
Loading…
Reference in a new issue