ENH: Score modifiers display
							parent
							
								
									db5facb2cd
								
							
						
					
					
						commit
						9a9c78f717
					
				|  | @ -8,6 +8,7 @@ | |||
| 
 | ||||
|     "OSE.Formula": "Formula", | ||||
|     "OSE.SitMod": "Situational Modifier", | ||||
|     "OSE.Modifier": "Modifier", | ||||
|     "OSE.RollMode": "Roll Mode", | ||||
|     "OSE.RollExample": "Roll Example", | ||||
| 
 | ||||
|  | @ -53,6 +54,7 @@ | |||
|     "OSE.saves.breath.long": "Dragon Breath", | ||||
|     "OSE.saves.spell.short": "S", | ||||
|     "OSE.saves.spell.long": "Rod, Staff, Spell", | ||||
|     "OSE.saves.magic.long": "vs Magic", | ||||
| 
 | ||||
|     "OSE.Health": "Hit Points", | ||||
|     "OSE.HealthMax": "Maximum Hit Points", | ||||
|  | @ -65,6 +67,7 @@ | |||
|     "OSE.MovementOverland": "Overland Movement Rate", | ||||
|     "OSE.MovementOverlandShort": "OVE", | ||||
|     "OSE.MovementShort": "MV", | ||||
|     "OSE.ArmorClassNaked": "Naked Armor Class", | ||||
|     "OSE.ArmorClass": "Armor Class", | ||||
|     "OSE.ArmorClassShort": "AC", | ||||
|     "OSE.AscArmorClassShort": "AAC", | ||||
|  | @ -80,11 +83,16 @@ | |||
|     "OSE.Missile": "Missile", | ||||
|     "OSE.MissileBonus": "Missile Bonus", | ||||
|     "OSE.Initiative": "Initiative", | ||||
|     "OSE.InitiativeBonus": "Initiative Bonus", | ||||
|     "OSE.InitiativeShort": "INIT", | ||||
|     "OSE.Attacks": "Attacks Usable per Round", | ||||
|     "OSE.AttacksShort": "ATT", | ||||
|     "OSE.Spellcaster": "Spellcaster", | ||||
| 
 | ||||
|     "OSE.SpokenLanguages": "Spoken Languages", | ||||
|     "OSE.Literacy": "Literacy", | ||||
|     "OSE.NPCReaction": "NPC Reaction", | ||||
|     "OSE.RetainersMax": "#Retainers", | ||||
|      | ||||
|     "OSE.category.attributes": "Attributes", | ||||
|     "OSE.category.inventory": "Inventory", | ||||
|  | @ -99,7 +107,7 @@ | |||
|     "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.Morale": "Enable monsters Morale Rating", | ||||
|     "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, not compatible with AAC", | ||||
|  | @ -132,5 +140,7 @@ | |||
|     "OSE.spells.Duration": "Duration", | ||||
|     "OSE.spells.Level": "Level", | ||||
| 
 | ||||
|     "OSE.abilities.Requirements": "Requirements" | ||||
|     "OSE.abilities.Requirements": "Requirements", | ||||
| 
 | ||||
|     "OSE.exploration.OpenDoors": "Open Doors" | ||||
| } | ||||
|  | @ -128,6 +128,14 @@ export class OseActorSheetCharacter extends OseActorSheet { | |||
|       let element = event.currentTarget; | ||||
|       let attack = element.parentElement.parentElement.dataset.attack; | ||||
|       actorObject.rollAttack(attack, { event: event }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".ability-score .attribute-mod a").click(ev => { | ||||
|       let box = $(event.currentTarget.parentElement.parentElement.parentElement); | ||||
|       box.children('.attribute-bonuses').slideDown(200); | ||||
|     }) | ||||
|     html.find(".ability-score .attribute-bonuses a").click(ev => { | ||||
|       $(event.currentTarget.parentElement.parentElement).slideUp(200); | ||||
|     }) | ||||
| 
 | ||||
|     // Handle default listeners last so system listeners are triggered first
 | ||||
|  |  | |||
|  | @ -129,13 +129,26 @@ export class OseActor extends Actor { | |||
|           return 0; | ||||
|       } | ||||
|     }; | ||||
|     return { | ||||
|     let mods = { | ||||
|       str: _valueToMod(this.data.data.scores.str.value), | ||||
|       int: _valueToMod(this.data.data.scores.int.value), | ||||
|       dex: _valueToMod(this.data.data.scores.dex.value), | ||||
|       init: _valueToMod(this.data.data.scores.dex.value), | ||||
|       cha: _valueToMod(this.data.data.scores.cha.value), | ||||
|       npc: _valueToMod(this.data.data.scores.cha.value), | ||||
|       wis: _valueToMod(this.data.data.scores.wis.value), | ||||
|       con: _valueToMod(this.data.data.scores.con.value), | ||||
|     }; | ||||
|     if (mods.init > 1) { | ||||
|       mods.init -= 1; | ||||
|     } else if (mods.init < -1) { | ||||
|       mods.init += 1; | ||||
|     } | ||||
|     if (mods.npc > 1) { | ||||
|       mods.npc -= 1; | ||||
|     } else if (mods.npc < -1) { | ||||
|       mods.npc += 1; | ||||
|     } | ||||
|     return mods; | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -26,15 +26,6 @@ export const registerSettings = function () { | |||
|       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 | ||||
|     }); | ||||
| 
 | ||||
|     game.settings.register('ose', 'variableWeaponDamage', { | ||||
|       name: game.i18n.localize('OSE.Setting.VariableWeaponDamage'), | ||||
|       hint: game.i18n.localize('OSE.Setting.VariableWeaponDamageHint'), | ||||
|  |  | |||
|  | @ -138,9 +138,20 @@ | |||
|         .attribute-mod { | ||||
|           position: absolute; | ||||
|           color: $colorTan; | ||||
|           right: 5px; | ||||
|           top: -5px; | ||||
|           font-size: 13px; | ||||
|           right: 1px; | ||||
|           top: 1px; | ||||
|           line-height: 10px; | ||||
|           font-size: 10px; | ||||
|         } | ||||
|         .attribute-bonuses { | ||||
|           display: none; | ||||
|           position: absolute; | ||||
|           background: #222; | ||||
|           padding: 2px; | ||||
|           font-size: 10px; | ||||
|           color: whitesmoke; | ||||
|           width: 100%; | ||||
|           height: 100%; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | @ -159,9 +170,14 @@ | |||
|               margin: auto; | ||||
|             } | ||||
|           } | ||||
|           &.saving-throw .attribute-name { | ||||
|             line-height: 16px; | ||||
|             width: 80px; | ||||
|           &.saving-throw { | ||||
|             .attribute-name { | ||||
|               line-height: 16px; | ||||
|               width: 80px; | ||||
|             } | ||||
|             .attribute-value { | ||||
|               line-height: 29px; | ||||
|             } | ||||
|           } | ||||
|           .attribute-value { | ||||
|             width: 45px; | ||||
|  |  | |||
|  | @ -64,6 +64,11 @@ | |||
|           background-position: bottom; | ||||
|         } | ||||
|     } | ||||
|     .saving-throw { | ||||
|       .attribute-value.flat { | ||||
|         line-height: 30px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   /* ----------------------------------------- */ | ||||
|   /*  Item Controls                            */ | ||||
|  |  | |||
|  | @ -59,6 +59,18 @@ | |||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="form-group"> | ||||
|       <label>{{localize "OSE.InitiativeBonus"}}</label> | ||||
|       <div class="form-fields"> | ||||
|         <input | ||||
|           type="text" | ||||
|           name="data.initiative.mod" | ||||
|           id="initiative" | ||||
|           value="{{data.initiative.mod}}" | ||||
|           data-dtype="Number" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|     {{/if}} | ||||
|     <footer class="sheet-footer"> | ||||
|       <button type="submit"> | ||||
|  |  | |||
|  | @ -8,7 +8,13 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.str.value" type="text" value="{{data.scores.str.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.str}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.Melee'}} ({{mods.str}})<br/> | ||||
|                     {{localize 'OSE.exploration.OpenDoors'}} | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             <li class="attribute ability-score" data-score="int"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.scores.int.long' }}"> | ||||
|  | @ -16,7 +22,13 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.int.value" type="text" value="{{data.scores.int.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.int}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.SpokenLanguages'}}<br/> | ||||
|                     {{localize 'OSE.Literacy'}} | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             <li class="attribute ability-score" data-score="wis"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.scores.wis.long' }}"> | ||||
|  | @ -24,7 +36,12 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.wis.value" type="text" value="{{data.scores.wis.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.wis}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.saves.magic.long'}}({{mods.wis}}) | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             <li class="attribute ability-score" data-score="dex"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.scores.dex.long' }}"> | ||||
|  | @ -32,7 +49,14 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.dex.value" type="text" value="{{data.scores.dex.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.dex}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.Missile'}} ({{mods.dex}})<br/> | ||||
|                     {{localize 'OSE.Initiative'}} ({{mods.init}})<br/> | ||||
|                     {{localize 'OSE.ArmorClass'}} ({{mods.dex}}) | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             <li class="attribute ability-score" data-score="con"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.scores.con.long' }}"> | ||||
|  | @ -40,7 +64,12 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.con.value" type="text" value="{{data.scores.con.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.con}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.Health'}} ({{mods.con}}) | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             <li class="attribute ability-score" data-score="cha"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.scores.cha.long' }}"> | ||||
|  | @ -48,7 +77,14 @@ | |||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.scores.cha.value" type="text" value="{{data.scores.cha.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|                     <span class="attribute-mod">{{mods.cha}}</span> | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-plus"></i></a></span> | ||||
|                 </div> | ||||
|                 <div class="attribute-bonuses"> | ||||
|                     {{localize 'OSE.NPCReaction'}} ({{mods.npc}})<br/> | ||||
|                     {{localize 'OSE.RetainersMax'}} ({{add mods.cha 4}})<br/> | ||||
|                     {{localize 'OSE.Loyalty'}} ({{add mods.cha 7}}) | ||||
|                 <span class="attribute-mod"><a><i class="fas fa-minus"></i></a></span> | ||||
|                 </div> | ||||
|             </li> | ||||
|             {{#if data.retainer.enabled}} | ||||
|             <li class="attribute"> | ||||
|  | @ -79,7 +115,7 @@ | |||
|                 <input class="health-top" name="data.aac.value" type="text" value="{{data.aac.value}}" | ||||
|                     data-dtype="Number" placeholder="0" title="{{localize 'OSE.ArmorClass'}}" /> | ||||
|                 <input class="health-bottom" type="text" value="{{add 10 mods.dex}}" | ||||
|                     title="{{localize 'OSE.ArmorClass'}}" disabled /> | ||||
|                     title="{{localize 'OSE.ArmorClassNaked'}}" disabled /> | ||||
|                 {{else}} | ||||
|                 <input class="health-top" name="data.ac.value" type="text" value="{{data.ac.value}}" data-dtype="Number" | ||||
|                     placeholder="0" title="{{localize 'OSE.ArmorClass'}}" /> | ||||
|  | @ -103,9 +139,9 @@ | |||
|                 <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 class="attribute-value" | ||||
|                         title="{{localize 'OSE.scores.dex.long'}}({{mods.init}}) + {{localize 'OSE.Modifier'}}({{data.initiative.mod}})"> | ||||
|                         {{add mods.init data.initiative.mod}} | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 {{/if}} | ||||
|  | @ -117,13 +153,17 @@ | |||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Melee'}}"> | ||||
|                         <a>{{localize 'OSE.MeleeShort'}}</a></h4> | ||||
|                     <div class="flexrow"> | ||||
|                         <div class="attribute-value"> | ||||
|                             {{#if config.ascendingAC}} | ||||
|                         {{#if config.ascendingAC}} | ||||
|                         <div class="attribute-value" | ||||
|                             title="{{localize 'OSE.AB'}}({{data.thac0.bba}}) + {{localize 'OSE.scores.str.long'}}({{mods.str}}) + {{localize 'OSE.Modifier'}}({{data.thac0.mod.melee}})"> | ||||
|                             {{add data.thac0.mod.melee (add mods.str data.thac0.bba)}} | ||||
|                             {{else}} | ||||
|                             {{subtract data.thac0.mod.melee (subtract mods.str data.thac0.value)}} | ||||
|                             {{/if}} | ||||
|                         </div> | ||||
|                         {{else}} | ||||
|                         <div class="attribute-value" | ||||
|                             title="{{localize 'OSE.Thac0'}}({{data.thac0.value}}) - {{localize 'OSE.scores.str.long'}}({{mods.str}}) - {{localize 'OSE.Modifier'}}({{data.thac0.mod.melee}})"> | ||||
|                             {{subtract data.thac0.mod.melee (subtract mods.str data.thac0.value)}} | ||||
|                         </div> | ||||
|                         {{/if}} | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 {{#if config.ascendingAC}} | ||||
|  | @ -153,13 +193,17 @@ | |||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Missile'}}"> | ||||
|                         <a>{{localize 'OSE.MissileShort'}}</a></h4> | ||||
|                     <div class="flexrow"> | ||||
|                         <div class="attribute-value"> | ||||
|                             {{#if config.ascendingAC}} | ||||
|                         {{#if config.ascendingAC}} | ||||
|                         <div class="attribute-value" | ||||
|                             title="{{localize 'OSE.AB'}}({{data.thac0.bba}}) + {{localize 'OSE.scores.dex.long'}}({{mods.dex}}) + {{localize 'OSE.Modifier'}}({{data.thac0.mod.missile}})"> | ||||
|                             {{add data.thac0.mod.missile (add mods.dex data.thac0.bba)}} | ||||
|                             {{else}} | ||||
|                             {{subtract data.thac0.mod.missile (subtract mods.dex data.thac0.value)}} | ||||
|                             {{/if}} | ||||
|                         </div> | ||||
|                         {{else}} | ||||
|                         <div class="attribute-value" | ||||
|                             title="{{localize 'OSE.Thac0'}}({{data.thac0.value}}) - {{localize 'OSE.scores.dex.long'}}({{mods.dex}}) - {{localize 'OSE.Modifier'}}({{data.thac0.mod.missile}})"> | ||||
|                             {{subtract data.thac0.mod.missile (subtract mods.dex data.thac0.value)}} | ||||
|                         </div> | ||||
|                         {{/if}} | ||||
|                     </div> | ||||
|                 </li> | ||||
|             </ul> | ||||
|  | @ -199,40 +243,47 @@ | |||
|     <div class="attribute-group"> | ||||
|         <ul class="attributes"> | ||||
|             <li class="attribute saving-throw" data-save="death"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.death.long' }}"> | ||||
|                 <h4 class="attribute-name box-title"> | ||||
|                     <a>{{ localize "OSE.saves.death.long" }}</a></h4> | ||||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.saves.death.value" type="text" value="{{data.saves.death.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|             </li> | ||||
|             <li class="attribute saving-throw" data-save="wand"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.wand.long' }}"> | ||||
|                 <h4 class="attribute-name box-title"> | ||||
|                     <a>{{ localize "OSE.saves.wand.long" }}</a></h4> | ||||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.saves.wand.value" type="text" value="{{data.saves.wand.value}}" placeholder="0" | ||||
|                         data-dtype="Number" /> | ||||
|             </li> | ||||
|             <li class="attribute saving-throw" data-save="paralysis"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.paralysis.long' }}"> | ||||
|                 <h4 class="attribute-name box-title"> | ||||
|                     <a>{{ localize "OSE.saves.paralysis.long" }}</a></h4> | ||||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.saves.paralysis.value" type="text" value="{{data.saves.paralysis.value}}" | ||||
|                         placeholder="0" data-dtype="Number" /> | ||||
|             </li> | ||||
|             <li class="attribute saving-throw" data-save="breath"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.breath.long' }}"> | ||||
|                 <h4 class="attribute-name box-title"> | ||||
|                     <a>{{ localize "OSE.saves.breath.long" }}</a></h4> | ||||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.saves.breath.value" type="text" value="{{data.saves.breath.value}}" | ||||
|                         placeholder="0" data-dtype="Number" /> | ||||
|             </li> | ||||
|             <li class="attribute saving-throw" data-save="spell"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.spell.long' }}"> | ||||
|                 <h4 class="attribute-name box-title"> | ||||
|                     <a>{{ localize "OSE.saves.spell.long" }}</a></h4> | ||||
|                 <div class="attribute-value"> | ||||
|                     <input name="data.saves.spell.value" type="text" value="{{data.saves.spell.value}}" | ||||
|                         placeholder="0" /> | ||||
|             </li> | ||||
|             <li class="attribute saving-throw"> | ||||
|                 <h4 class="attribute-name box-title" title="{{ localize 'OSE.saves.magic.long' }}"> | ||||
|                     {{ localize "OSE.saves.magic.long"}}</h4> | ||||
|                 <div class="attribute-value flat" title="{{localize 'OSE.scores.wis.long'}}({{mods.wis}})"> | ||||
|                     {{mods.wis}} | ||||
|                 </div> | ||||
|             </li> | ||||
|         </ul> | ||||
|     </div> | ||||
| </section> | ||||
|  | @ -2,9 +2,6 @@ | |||
|   <div> | ||||
|     <li class="item-titles flexrow"> | ||||
|       <div class="item-name">{{localize "OSE.items.Weapons"}}</div> | ||||
|       {{#if config.variableWeaponDamage}} | ||||
|       <div class="field-short">{{localize "OSE.items.Damage"}}</div> | ||||
|       {{/if}} | ||||
|       <div class="field-longer">{{localize "OSE.items.Qualities"}}</div> | ||||
|       <div class="field-short">{{localize "OSE.items.Weight"}}</div> | ||||
|       <div class="item-controls"> | ||||
|  | @ -23,11 +20,6 @@ | |||
|               </h4> | ||||
|             </a> | ||||
|           </div> | ||||
|           {{#if config.variableWeaponDamage}} | ||||
|           <div class="field-short"> | ||||
|             {{item.data.damage}} | ||||
|           </div> | ||||
|           {{/if}} | ||||
|           <div class="field-longer" title="{{item.data.qualities}}"> | ||||
|             {{item.data.qualities}} | ||||
|           </div> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue