Every roll dialog now has a gold SHOWING OFF button:
- Each click posts a big gold fanfare chat message + plays a WebAudio arpeggio
- Reduces the dice pool by 1 per click (floor: 1d6)
- Total dice display turns gold and shows the penalty
- Immediately increments actor system.details.showingOff tally
- At exactly 20 pts: public milestone broadcast with GM alert
- Finance tab: gold SHOWING OFF hero panel shows career total (editable)
- Hourly PC Status Report now includes Showing Off tally (yellow at >0, orange at 10+, red at 20+)
- template.json: showingOff: 0 added to character.details
- _playShowingOffFanfare(): ascending C-major arpeggio via WebAudio API
Every dice roll now checks active conditions before building its pool:
- _onRoll (legacy .rollable attribute + skill paths)
- _onRollEbbFormula (Empathy + Ebb pool)
- _rollInitiative (bonus-successes roll pool + chat card label)
- _onVitalSave (Health/Resolve saves, with auto-fail at 0 dice)
Condition penalty is shown in the formula string on every chat card.
Panicking (-2 all) and Shaken (-1 all) now silently reduce every roll
until the GM clears the condition.
- LAD Account checkbox (bio tab) adds locked 50c/week to Finances
- Active conditions now show dice penalty text inline on the sheet
- _applyStatusCondition() helper: toggleStatusEffect with ActiveEffect fallback
so panic/crit/instability conditions always land reliably
- Condition-clear button also falls back to direct ActiveEffect delete
- _broadcastPCConditions(): whispered GM report of all PC HP/Resolve/Stress/conditions
- STATUS button (GM-only) on vitals row triggers report on demand
- Hourly setInterval fires the report automatically while Foundry is running
- Version bump 1.5.9
Click the Health or Resolve label to roll a save using the current
value as the dice pool (plain d6, no stress, no dialog). Zero successes
adds +1 Stress. Chat card uses standard yze-die styling.
NPC actors have flat attribute numbers (e.g. strength: 3) not objects
({value: 3}) and no system.skills object at all. Both _onWeaponRoll
and _onRoll were crashing when Group NPC-generated actors used their
attack buttons.
Fix:
- Read attributes via typeof check — flat number used directly,
object uses .value — so NPC stat values are used correctly
- skills accessed via system.skills?.[skill] optional chaining so
missing skills object returns 0 rather than throwing TypeError
- Weapon items created as embedded weapon Items with proper schema
(melee vs ranged category, damage, AP, range, ROF from note field)
- Armor items created for NPCs with armour description (skips
Built-in for machines — they use the armor stat directly)
- Ability items created as specialty Items showing in Stats tab
- Biography formatted with armour, weapons, abilities sections
- Card backgrounds now tinted by type colour (very subtle 7% opacity)
so Carrion/Gang/Monstaret/Machine are visually distinct at a glance
- Count selector replaced with number input (1–10) instead of dropdown
New type:
- Street Gang: varied melee + 40% chance ranged, 7 ability pool,
8 name parts, scavenged armour pool
Weapons & armour on all types:
- Each generated NPC now carries randomised weapons (conventional
or integrated) and an armour description displayed on the card
- Natural weapons shown in green with paw icon
- Integrated/conventional weapons shown in blue with crosshairs
Monstaret — 6 distinct subtypes with unique profiles:
Fang Beast, Rend Beast, Pit-Thing, Lurker, Howler, Crawler
Each has its own stat range, natural weapons, and 4 specific abilities
Machine — 4 distinct subtypes with integrated weapon loadouts:
Combat Unit, Scout Drone, Heavy Assault Unit, Maintenance Unit
Each has 2-3 integrated weapons with damage/AP/range/notes
Carrion — natural weapons (Bite AP 1, Claws) + contagion/death rattle
Serial Killer — signature melee + 30% secondary ranged, body armour pool
Four NPC types: Carrion, Serial Killer, Monstaret, Machine
Each with SLA-appropriate stat ranges, name generators, ability pools.
Features:
- Type selector tabs (colour-coded per type)
- Count 1-10, Generate / Add More / Clear All
- Compact 2-column grid of NPC cards
- Inline editable: name, STR/AGI/WIT/EMP, HP (current/max), ARM, DMG, notes
- +/- HP buttons with live colour bar (green > yellow > red)
- Defeat toggle (grey out) and Reset HP to max
- Reroll individual NPC (preserves notes)
- Create as World Actors button
- Green "Group NPCs" button in Actor Directory (GM only)
v1.5.2
When actor.update() fires, Foundry auto-submits any open character
sheet form before re-rendering. If the sheet still showed the old
credits value (e.g. 500), that stale value raced the new one (852)
and got merged server-side into the corrupt string "852,500".
Fix: pass {render: false} to actor.update() so Foundry skips the
auto-submit entirely, then manually call app.render() on all open
sheets for that actor — they read fresh data and render cleanly.
The non-Mk2 sheet had two inputs named system.details.credits (header
+ finances tab). Foundry concatenates duplicate names as "500,500"
which is not a valid number, causing the field to show blank/grey
after saving.
Fix: finances tab input made readonly with no name attribute — header
is now the sole authoritative credits field.
Also: on-boot sanitization now covers credits, fixing any actors
already storing the corrupted comma-string value.
- Read credits via actor._source (raw DB) to bypass DataModel
- Read all finance fields via _readFinance() using same approach
- Calculate now zeros ALL income + expense fields after applying
(salary, bpnReward, other income, accommodation, drugs, subs,
other expense, bulletTax, ammoSpentSession, debt)
- Auto-refresh ledger via updateActor hook whenever any actor updates
- Ledger now reflects live sheet values immediately
- Add isPlayerCharacter field to template.json (character.details)
- Bio tab: checkbox 'Player Character' bound to system.details.isPlayerCharacter
- SLAGMFinanceTool Application: GM-only window listing all PC-flagged
actors with current balance, weekly income, weekly expenses, net
weekly income, and a Calculate button per character
- Calculate button: applies netWeekly to credits (credits += net)
- Calculate All button: applies week to every listed PC at once
- Actor Directory: GM-only 'Finance Ledger' button opens the tool
- CSS: styled PC flag row and full GM Finance Ledger table
- Version bump: 1.4.5 → 1.4.6
Three bugs:
1. weeklyExpenses total omitted bulletTax from the sum (both getData paths)
Fix: add (_exp.bulletTax||0) to the calculation
2. _applyBulletTax read undefined credits as 0 (actors created before the
credits field existed have null/undefined, not zero)
Fix: fallback to 500 (template default) only when value is null/undefined
3. Finances tab CURRENT BALANCE showed just C because input had no placeholder
Fix: add placeholder=500 min=0 to the credits input in character-sheet.hbs
Foundry v14 rejects actor.update() silently when one field in the payload
has a schema conflict. The combined update (credits + finances nested paths)
was being dropped entirely, so credits never changed.
Fix: two separate actor.update() calls
1. Credit deduction: update("system.details.credits") alone — critical
2. Finances tracking: update(finances paths) — non-critical, caught silently
Added console.log so GMs can confirm credit deductions in browser console:
Zero Engine | Bullet Tax: Joe credits 500c -> 440c (-60c)
- Add Body Blocker armor (AR 1, Dice 1, 120c) with custom SVG icon
Concealable civilian vest, sits between Street Clothes and Downtown Jacket
- _activateDrug now automatically deducts drug cost from actor credits
Shows notification: drug name, cost charged, old and new credit total
Credits cannot go below 0
- Set costs on 7 drugs that were missing them (cost was 0):
Painkillers 30c, Stimulant 40c, Sedative 35c, Redline 110c,
Calm-Line 65c, Rush 85c, UV 200c
- Rebuild: sla-armors (18), sla-drugs (16)
- DSN: register ze-stress-dice system separately so normal/stress d6 presets dont overwrite each other
- DSN: use term.options.appearance.system to force correct preset on every roll - bypasses user saved DSN system preference
- Remove v1.3.8 flag-patching ready hook (no longer needed)
- UI: dice icon on attribute header enlarged (13px to 20px) with glow
- UI: attr-btn smaller (24px to 16px), skill +/- smaller (20px to 14px)
- UI: clicking attribute name, skill name, or weapon name now triggers roll