feat: luck bonus, inventory slots bonus, multi-enhancements, magic skill modifier
Release Creation / build (release) Successful in 1m25s

- Add luck.bonus field to character DataModel; included in prepareDerivedData
   (luck.max = fate.rank + bonus); shown as editable +bonus field next to
   luck max in edit mode (same UX as grit bonus)

 - Add inventory.slotsBonus field to character DataModel; Equipment tab now
   shows an editable "Bonus Slots" input that adds to the calculated max slots
   (10 + Might×2 + bonus)

 - Replace single Enhancement <select> in spell cast dialog with a checkbox
   list; multiple enhancements can now be selected simultaneously — stress
   costs, pool penalties, and boolean flags (redDice, noStress) are aggregated
   across all active enhancements

 - Include skills.magic.modifier in basePool for both spell and miracle dialogs
   and in baseDice in rollSpellCast / rollMiracleCast; modifier is shown in
   the dialog pool-info line and in the chat card when non-zero

 - Fix: pool-reduction indicator in rollSpellCast now compares against
   intRank + magicRank + magicMod (was missing magicMod)
This commit is contained in:
2026-05-12 08:16:57 +02:00
parent f67d9079dd
commit 0381e8e024
21 changed files with 192 additions and 39 deletions
+57 -3
View File
@@ -565,16 +565,19 @@
opacity: 0.7;
font-size: calc(0.86rem * 0.9);
}
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group {
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group,
.oathhammer .character-main .character-stats-band .character-resources .character-resource .luck-max-group {
display: flex;
align-items: center;
gap: 2px;
}
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group .res-bonus-label {
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group .res-bonus-label,
.oathhammer .character-main .character-stats-band .character-resources .character-resource .luck-max-group .res-bonus-label {
opacity: 0.6;
font-size: calc(0.86rem * 0.9);
}
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group .res-bonus-input {
.oathhammer .character-main .character-stats-band .character-resources .character-resource .grit-max-group .res-bonus-input,
.oathhammer .character-main .character-stats-band .character-resources .character-resource .luck-max-group .res-bonus-input {
width: 2.2rem;
opacity: 0.85;
border-left: 1px dashed #535128;
@@ -1327,6 +1330,7 @@
}
.slots-counter {
display: flex;
align-items: center;
gap: 6px;
padding: 2px 6px 4px;
}
@@ -1353,6 +1357,20 @@
background: rgba(192, 57, 43, 0.1);
border-color: rgba(192, 57, 43, 0.4);
}
.slots-counter .slots-bonus-label {
font-size: calc(0.86rem * 0.9);
color: rgba(42, 26, 10, 0.6);
margin-left: 6px;
}
.slots-counter .slots-bonus-input {
width: 3rem;
font-size: calc(0.86rem * 0.9);
text-align: center;
padding: 1px 4px;
border: 1px solid rgba(200, 168, 75, 0.4);
border-radius: 4px;
background: rgba(200, 168, 75, 0.08);
}
.oathhammer .item-list--regiment .item-list-header,
.oathhammer .item-list--regiment .item-entry {
grid-template-columns: 24px 1fr 4rem 5rem 4rem 4.5rem;
@@ -2360,6 +2378,42 @@
.oh-miracle-dialog select.enhancement-select {
min-width: 220px;
}
.oh-spell-dialog .roll-option-enhancements,
.oh-miracle-dialog .roll-option-enhancements {
align-items: flex-start;
}
.oh-spell-dialog .roll-option-enhancements .enhancements-header,
.oh-miracle-dialog .roll-option-enhancements .enhancements-header {
padding-top: 3px;
flex-shrink: 0;
}
.oh-spell-dialog .roll-option-enhancements .enhancements-list,
.oh-miracle-dialog .roll-option-enhancements .enhancements-list {
display: flex;
flex-direction: column;
gap: 4px;
}
.oh-spell-dialog .roll-option-enhancements .enhancement-item,
.oh-miracle-dialog .roll-option-enhancements .enhancement-item {
display: flex;
align-items: center;
gap: 6px;
}
.oh-spell-dialog .roll-option-enhancements .enhancement-item input[type="checkbox"],
.oh-miracle-dialog .roll-option-enhancements .enhancement-item input[type="checkbox"] {
flex-shrink: 0;
width: 14px;
height: 14px;
cursor: pointer;
}
.oh-spell-dialog .roll-option-enhancements .enhancement-item .enh-name,
.oh-miracle-dialog .roll-option-enhancements .enhancement-item .enh-name {
font-size: calc(0.86rem * 0.85);
color: #2a1a0a;
cursor: pointer;
margin: 0;
font-weight: normal;
}
.oh-spell-card .oh-stress-line,
.oh-miracle-card .oh-stress-line {
margin-top: 6px;