WIP: Settings and revamp
parent
647727f1ae
commit
d55ec24342
|
@ -28,15 +28,15 @@
|
|||
"OSE.scores.cha.short": "CHA",
|
||||
|
||||
"OSE.saves.death.short": "D",
|
||||
"OSE.saves.death.long": "Death",
|
||||
"OSE.saves.death.long": "Death, Poison",
|
||||
"OSE.saves.wands.short": "W",
|
||||
"OSE.saves.wands.long": "Wands",
|
||||
"OSE.saves.wands.long": "Wand",
|
||||
"OSE.saves.paralysis.short": "P",
|
||||
"OSE.saves.paralysis.long": "Paralysis",
|
||||
"OSE.saves.paralysis.long": "Paralysis, Petrify",
|
||||
"OSE.saves.breath.short": "B",
|
||||
"OSE.saves.breath.long": "Breath",
|
||||
"OSE.saves.breath.long": "Dragon Breath",
|
||||
"OSE.saves.spells.short": "S",
|
||||
"OSE.saves.spells.long": "Spells",
|
||||
"OSE.saves.spells.long": "Rod, Staff, Spell",
|
||||
|
||||
"OSE.Health": "Hit Points",
|
||||
"OSE.HealthShort": "HP",
|
||||
|
@ -49,6 +49,10 @@
|
|||
"OSE.ArmorClassShort": "AC",
|
||||
"OSE.SpellDC": "DC",
|
||||
"OSE.Thac0": "THAC0",
|
||||
"OSE.MeleeShort": "MEL",
|
||||
"OSE.Melee": "Melee",
|
||||
"OSE.MissileShort": "MIS",
|
||||
"OSE.Missile": "Missile",
|
||||
"OSE.Initiative": "Initiative",
|
||||
"OSE.InitiativeShort": "INIT",
|
||||
"OSE.Attacks": "Attacks Usable per Round",
|
||||
|
@ -61,5 +65,14 @@
|
|||
"OSE.category.notes": "Notes",
|
||||
|
||||
"OSE.panel.abilities": "Abilities",
|
||||
"OSE.panel.equipment": "Equipment"
|
||||
"OSE.panel.equipment": "Equipment",
|
||||
|
||||
"OSE.Setting.IndividualInit": "Individual Initiative",
|
||||
"OSE.Setting.IndividualInitHint": "Initiative is rolled for each actor and modified by its DEX score",
|
||||
"OSE.Setting.AscendingAC": "Ascending Armor Class",
|
||||
"OSE.Setting.AscendingACHint": "The more the better",
|
||||
"OSE.Setting.Morale": "Enable Monster Morale checks",
|
||||
"OSE.Setting.MoraleHint": "Morale Rating is shown on monster sheets",
|
||||
"OSE.Setting.THAC0Attacks": "Attacks with THAC0",
|
||||
"OSE.Setting.THAC0AttacksHint": "Attacks are resolved using the THAC0 value"
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
import { OseActor } from "./entity.js";
|
||||
|
||||
export class OseActorSheet extends ActorSheet {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
|
||||
// Override to set resizable initial size
|
||||
async _renderInner(...args) {
|
||||
const html = await super._renderInner(...args);
|
||||
this.form = html[0];
|
||||
|
||||
// Resize resizable classes
|
||||
let resizable = html.find('.resizable');
|
||||
if (resizable.length == 0) {
|
||||
return;
|
||||
}
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
return html;
|
||||
}
|
||||
|
||||
async _onResize(event) {
|
||||
super._onResize(event);
|
||||
let html = $(event.path);
|
||||
let resizable = html.find('.resizable');
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
import { OseActor } from "./entity.js";
|
||||
import { OseActorSheet } from "./actor-sheet.js";
|
||||
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
*/
|
||||
export class OseActorSheetCharacter extends ActorSheet {
|
||||
export class OseActorSheetCharacter extends OseActorSheet {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
}
|
||||
|
@ -31,22 +32,6 @@ export class OseActorSheetCharacter extends ActorSheet {
|
|||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
// Override to set resizable initial size
|
||||
async _renderInner(...args) {
|
||||
const html = await super._renderInner(...args);
|
||||
this.form = html[0];
|
||||
|
||||
// Resize resizable classes
|
||||
let resizable = html.find('.resizable');
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare data for rendering the Actor sheet
|
||||
* The prepared data object contains both the actor data as well as additional sheet options
|
||||
|
@ -62,7 +47,9 @@ export class OseActorSheetCharacter extends ActorSheet {
|
|||
// Prepare owned items
|
||||
this._prepareItems(data);
|
||||
|
||||
// DEBUG
|
||||
// Settings
|
||||
data.config.individualInit = game.settings.get('ose', 'individualInit');
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
@ -149,14 +136,4 @@ export class OseActorSheetCharacter extends ActorSheet {
|
|||
// Handle default listeners last so system listeners are triggered first
|
||||
super.activateListeners(html);
|
||||
}
|
||||
|
||||
async _onResize(event) {
|
||||
super._onResize(event);
|
||||
let html = $(event.path);
|
||||
let resizable = html.find('.resizable');
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import { OseActor } from "./entity.js";
|
||||
import { OseActorSheet } from "./actor-sheet.js";
|
||||
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
*/
|
||||
export class OseActorSheetMonster extends ActorSheet {
|
||||
export class OseActorSheetMonster extends OseActorSheet {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
}
|
||||
|
@ -31,25 +32,6 @@ export class OseActorSheetMonster extends ActorSheet {
|
|||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
// Override to set resizable initial size
|
||||
async _renderInner(...args) {
|
||||
const html = await super._renderInner(...args);
|
||||
this.form = html[0];
|
||||
|
||||
// Resize resizable classes
|
||||
let resizable = html.find('.resizable');
|
||||
if (resizable.length == 0) {
|
||||
return;
|
||||
}
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare data for rendering the Actor sheet
|
||||
* The prepared data object contains both the actor data as well as additional sheet options
|
||||
|
@ -62,7 +44,9 @@ export class OseActorSheetMonster extends ActorSheet {
|
|||
// Prepare owned items
|
||||
this._prepareItems(data);
|
||||
|
||||
// DEBUG
|
||||
// Settings
|
||||
data.config.morale = game.settings.get('ose', 'morale');
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
@ -151,14 +135,4 @@ export class OseActorSheetMonster extends ActorSheet {
|
|||
// Handle default listeners last so system listeners are triggered first
|
||||
super.activateListeners(html);
|
||||
}
|
||||
|
||||
async _onResize(event) {
|
||||
super._onResize(event);
|
||||
let html = $(event.path);
|
||||
let resizable = html.find('.resizable');
|
||||
resizable.each((_, el) => {
|
||||
let heightDelta = this.position.height - (this.options.height);
|
||||
el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
export const registerSettings = function () {
|
||||
game.settings.register('ose', 'individualInit', {
|
||||
name: game.i18n.localize('OSE.Setting.IndividualInit'),
|
||||
hint: game.i18n.localize('OSE.Setting.IndividualInitHint'),
|
||||
default: false,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
config: true
|
||||
});
|
||||
|
||||
game.settings.register('ose', 'ascendingAC', {
|
||||
name: game.i18n.localize('OSE.Setting.AscendingAC'),
|
||||
hint: game.i18n.localize('OSE.Setting.AscendingACHint'),
|
||||
default: false,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
config: true
|
||||
});
|
||||
|
||||
game.settings.register('ose', 'morale', {
|
||||
name: game.i18n.localize('OSE.Setting.Morale'),
|
||||
hint: game.i18n.localize('OSE.Setting.MoraleHint'),
|
||||
default: false,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
config: true
|
||||
});
|
||||
|
||||
game.settings.register('ose', 'thac0Attacks', {
|
||||
name: game.i18n.localize('OSE.Setting.THAC0Attacks'),
|
||||
hint: game.i18n.localize('OSE.Setting.THAC0AttacksHint'),
|
||||
default: false,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
config: true
|
||||
});
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import { preloadHandlebarsTemplates } from "./module/preloadTemplates.js";
|
|||
import { OseActor } from "./module/actor/entity.js";
|
||||
import { OseItem } from "./module/item/entity.js";
|
||||
import { OSE } from "./module/config.js";
|
||||
import { registerSettings } from './module/settings.js';
|
||||
|
||||
// Handlebars template helpers
|
||||
Handlebars.registerHelper("eq", function (a, b) {
|
||||
|
@ -35,6 +36,10 @@ Hooks.once("init", async function () {
|
|||
};
|
||||
|
||||
CONFIG.OSE = OSE;
|
||||
|
||||
// Register custom system settings
|
||||
registerSettings();
|
||||
|
||||
CONFIG.Actor.entityClass = OseActor;
|
||||
CONFIG.Item.entityClass = OseItem;
|
||||
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
|
||||
.panel {
|
||||
border: 1px solid $colorDark;
|
||||
&.spells {
|
||||
border: 0;
|
||||
}
|
||||
.panel-title {
|
||||
color: whitesmoke;
|
||||
background: $colorDark;
|
||||
|
@ -95,7 +98,7 @@
|
|||
margin: 0;
|
||||
padding: 0;
|
||||
.attribute {
|
||||
margin: 10px;
|
||||
margin: 10px 2px;
|
||||
border: 1px solid $colorTan;
|
||||
.attribute-name {
|
||||
color: whitesmoke;
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
"alignment": "",
|
||||
"literate": false,
|
||||
"level": 1,
|
||||
"xp": 0
|
||||
"xp": 0,
|
||||
"xpmod": 0
|
||||
},
|
||||
"scores": {
|
||||
"str": {
|
||||
|
@ -63,6 +64,10 @@
|
|||
"lvl5": {
|
||||
"value": 0,
|
||||
"max": 0
|
||||
},
|
||||
"lvl6": {
|
||||
"value": 0,
|
||||
"max": 0
|
||||
}
|
||||
},
|
||||
"hp": {
|
||||
|
@ -76,7 +81,9 @@
|
|||
},
|
||||
"thac0": {
|
||||
"value": 19,
|
||||
"mod": 0
|
||||
"mod": 0,
|
||||
"missile": 0,
|
||||
"melee": 0
|
||||
},
|
||||
"saves": {
|
||||
"D": 10,
|
||||
|
@ -153,6 +160,10 @@
|
|||
"lvl5": {
|
||||
"value": 0,
|
||||
"max": 0
|
||||
},
|
||||
"lvl6": {
|
||||
"value": 0,
|
||||
"max": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<section class="flexrow">
|
||||
<ul class="attributes flexrow">
|
||||
<li class="attribute health">
|
||||
<h4 class="attribute-name box-title">{{ localize "OSE.HealthShort" }}</h4>
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Health' }}">{{ localize "OSE.HealthShort" }}</h4>
|
||||
<div class="attribute-value multiple">
|
||||
<input name="data.hp.value" type="text" value="{{data.hp.value}}" data-dtype="Number"
|
||||
placeholder="10" />
|
||||
|
@ -10,26 +10,42 @@
|
|||
</div>
|
||||
</li>
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title">{{ localize "OSE.ArmorClassShort" }}</h4>
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.ArmorClass' }}">{{ localize "OSE.ArmorClassShort" }}</h4>
|
||||
<div class="attribute-value">
|
||||
<input name="data.ac.value" type="text" value="{{data.ac.value}}" data-dtype="Number"
|
||||
placeholder="10" data-dtype="Number" />
|
||||
</div>
|
||||
</li>
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title">{{ localize "OSE.Thac0" }}</h4>
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Thac0' }}">{{ localize "OSE.Thac0" }}</h4>
|
||||
<div class="attribute-value">
|
||||
<input name="data.thac0.value" type="text" value="{{data.thac0.value}}" placeholder="0"
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
</li>
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title">{{ localize "OSE.InitiativeShort" }}</h4>
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Melee' }}">{{ localize "OSE.MeleeShort" }}</h4>
|
||||
<div class="attribute-value">
|
||||
<input name="data.thac0.melee" type="text" value="{{data.thac0.melee}}" placeholder="0"
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
</li>
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Missile' }}">{{ localize "OSE.MissileShort" }}</h4>
|
||||
<div class="attribute-value">
|
||||
<input name="data.thac0.missile" type="text" value="{{data.thac0.missile}}" placeholder="0"
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
</li>
|
||||
{{#if config.individualInit}}
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Initiative' }}">{{ localize "OSE.InitiativeShort" }}</h4>
|
||||
<div class="attribute-value">
|
||||
<input name="data.initiative.value" type="text" value="{{data.initiative.value}}"
|
||||
placeholder="0" data-dtype="Number" />
|
||||
</div>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title">{{ localize "OSE.MovementShort" }}</h4>
|
||||
<div class="attribute-value">
|
||||
|
|
|
@ -52,9 +52,18 @@
|
|||
<input name="data.spells.lvl5.max" type="text" value="{{data.spells.lvl5.max}}" data-dtype="Number" placeholder="0" />
|
||||
</div>
|
||||
</li>
|
||||
<li class="attribute">
|
||||
<h4 class="attribute-name box-title">{{localize 'OSE.Level'}} 6</h4>
|
||||
<div class="attribute-value multiple">
|
||||
<input name="data.spells.lvl6.value" type="text" value="{{data.spells.lvl6.value}}"
|
||||
placeholder="0" data-dtype="Number" />
|
||||
<span class="sep"> / </span>
|
||||
<input name="data.spells.lvl6.max" type="text" value="{{data.spells.lvl6.max}}" data-dtype="Number" placeholder="0" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="panel inventory">
|
||||
<section class="panel inventory spells">
|
||||
<div class="panel-title">
|
||||
<h4>{{localize 'OSE.category.spells'}}</h4>
|
||||
<div class="item-controls">
|
||||
|
|
|
@ -31,10 +31,12 @@
|
|||
placeholder="{{ localize 'OSE.Experience' }}" />
|
||||
<label>{{localize 'OSE.Experience'}}</label>
|
||||
</li>
|
||||
{{#if config.morale}}
|
||||
<li>
|
||||
<input type="text" name="data.details.morale" value="{{data.details.morale}}"
|
||||
placeholder="{{ localize 'OSE.Morale' }}" />
|
||||
<label>{{localize 'OSE.Morale'}}</label>
|
||||
</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</section>
|
Loading…
Reference in New Issue