feat: Body Blocker armor + drug credit deduction on use (v1.4.1)

- 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)
This commit is contained in:
2026-06-02 21:42:29 +01:00
parent 304e47f507
commit 76e086ca6c
26 changed files with 260 additions and 210 deletions
+22
View File
@@ -0,0 +1,22 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Body Blocker: slim concealable compression vest, civilian-grade -->
<!-- Main body — sleek, close-fitting silhouette -->
<path d="M20,20 L20,56 Q20,58 32,58 Q44,58 44,56 L44,20 Q40,14 32,12 Q24,14 20,20Z" fill="#1a1a1a"/>
<!-- Shoulder pads — narrow, minimal -->
<rect x="16" y="10" width="10" height="12" rx="3" fill="#1a1a1a"/>
<rect x="38" y="10" width="10" height="12" rx="3" fill="#1a1a1a"/>
<!-- Chest protection panel — single slim panel (concealable) -->
<rect x="24" y="22" width="16" height="14" rx="2" fill="white" opacity="0.2"/>
<rect x="25" y="23" width="14" height="12" rx="1" fill="none" stroke="white" stroke-width="0.8" opacity="0.5"/>
<!-- Horizontal compression lines (soft armor texture) -->
<line x1="21" y1="38" x2="43" y2="38" stroke="white" stroke-width="0.8" opacity="0.2"/>
<line x1="21" y1="43" x2="43" y2="43" stroke="white" stroke-width="0.8" opacity="0.2"/>
<line x1="21" y1="48" x2="43" y2="48" stroke="white" stroke-width="0.8" opacity="0.2"/>
<!-- Centre front zip — subtle -->
<line x1="32" y1="20" x2="32" y2="58" stroke="white" stroke-width="1" opacity="0.3"/>
<!-- Neck opening -->
<path d="M26,20 Q32,14 38,20" stroke="white" stroke-width="1.5" fill="none" opacity="0.6"/>
<!-- Body Blocker logo: small SLA circle mark on chest -->
<circle cx="32" cy="30" r="4" fill="none" stroke="white" stroke-width="1" opacity="0.5"/>
<circle cx="32" cy="30" r="1.5" fill="white" opacity="0.4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+184 -167
View File
@@ -1,10 +1,10 @@
[
{
"name": "Downtown Jacket",
"name": "Body Blocker",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Downtown Jacket.png",
"img": "systems/zero-engine/assets/icons/armor/armor-body-blocker.svg",
"system": {
"description": "Reinforced street jacket with hidden ballistic panels; common among low-level gangers and worried civilians.",
"description": "A slim concealable ballistic vest designed to be worn under civilian clothing. Popular with corporate workers, contract personnel, and anyone who wants protection without advertising it. Lightweight and unobtrusive \u2014 you barely notice it until a round hits.",
"armorRating": 1,
"armorDice": 1,
"armorAuto": 0,
@@ -12,7 +12,7 @@
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 150,
"cost": 120,
"initiativeMod": 0
}
},
@@ -33,125 +33,6 @@
"initiativeMod": 0
}
},
{
"name": "Scout Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Scout Armor.png",
"system": {
"description": "Lightweight composite plates over flexible mesh; built for operatives who need to move and climb.",
"armorRating": 3,
"armorDice": 3,
"armorAuto": 1,
"statMod": 1,
"skillMod": 0,
"statModTarget": "agility",
"skillModTarget": "",
"cost": 700,
"initiativeMod": 0
}
},
{
"name": "HARD Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Hard Armor.png",
"system": {
"description": "Full-body ceramic and metal laminate suit for frontline combat and urban assaults.",
"armorRating": 4,
"armorDice": 4,
"armorAuto": 2,
"statMod": -1,
"skillMod": 1,
"statModTarget": "agility",
"skillModTarget": "force",
"cost": 1200,
"initiativeMod": 0
}
},
{
"name": "Exo-Rig Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Exo Armor.png",
"system": {
"description": "Powered exoskeletal frame with armored plates; massively increases carrying and weapon handling at the cost of finesse.",
"armorRating": 5,
"armorDice": 5,
"armorAuto": 2,
"statMod": 1,
"skillMod": -1,
"statModTarget": "strength",
"skillModTarget": "mobility",
"cost": 3000,
"initiativeMod": 0
}
},
{
"name": "Squad Shielded Power Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Squad Shieled Power Armor.png",
"system": {
"description": "Full sealed power armor with integrated energy shielding; rare, expensive, and terrifying on the street.",
"armorRating": 6,
"armorDice": 6,
"armorAuto": 3,
"statMod": 1,
"skillMod": -2,
"statModTarget": "strength",
"skillModTarget": "stealth",
"cost": 8000,
"initiativeMod": 0
}
},
{
"name": "Street Clothes",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Street Cloths.png",
"system": {
"description": "Civilian clothing. Offers essentially no ballistic protection. The only reason to track it is so the GM knows when an operative has forgotten to put their armour on.",
"armorRating": 0,
"armorDice": 0,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 20,
"initiativeMod": 0
}
},
{
"name": "Shiver Flak Vest",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shiver Flak Vest.png",
"system": {
"description": "Standard-issue soft armour vest worn under uniform by Shivers and patrol officers. Lightweight, concealable under a jacket. Not rated for combat \u2014 rated for surviving a mugging.",
"armorRating": 1,
"armorDice": 1,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 200,
"initiativeMod": 0
}
},
{
"name": "Full Shiver Armour",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shiver.png",
"system": {
"description": "Full plate and vest armour used by Shiver combat units. Rated for street operations and riot suppression. Includes shoulder guards, arm vambraces, and shin protection.",
"armorRating": 2,
"armorDice": 2,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 450,
"initiativeMod": 0
}
},
{
"name": "Crackshot Armour",
"type": "armor",
@@ -170,36 +51,36 @@
}
},
{
"name": "Shock Armour",
"name": "DN Power Armour",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shock Armor.png",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Dark Night Power.png",
"system": {
"description": "Blast-resistant armour with energy-dispersal panels. Designed for operatives who expect to be in the vicinity of explosions, EMP discharges, or Ebb detonations. Reduces Ebb damage by 1 auto.",
"armorRating": 3,
"armorDice": 3,
"armorAuto": 1,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 900,
"description": "Department of Nanotech powered combat armour. Lighter than standard power armour but with advanced nano-repair capability \u2014 the suit recovers 1 armour die between scenes. Rare and expensive.",
"armorRating": 5,
"armorDice": 5,
"armorAuto": 2,
"statMod": 1,
"skillMod": -1,
"statModTarget": "strength",
"skillModTarget": "stealth",
"cost": 7500,
"initiativeMod": 0
}
},
{
"name": "Stealth Suit",
"name": "Downtown Jacket",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Stealth Suit.png",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Downtown Jacket.png",
"system": {
"description": "A full-body suit with integrated light-bending panels and sound-dampening underlayer. Provides moderate ballistic protection while granting +2 dice to Stealth rolls. Panels degrade when the suit takes significant damage.",
"armorRating": 2,
"armorDice": 2,
"description": "Reinforced street jacket with hidden ballistic panels; common among low-level gangers and worried civilians.",
"armorRating": 1,
"armorDice": 1,
"armorAuto": 0,
"statMod": 0,
"skillMod": 2,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "stealth",
"cost": 2500,
"skillModTarget": "",
"cost": 150,
"initiativeMod": 0
}
},
@@ -221,36 +102,53 @@
}
},
{
"name": "PP10 HARD Armour",
"name": "Exo-Rig Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Hard Armor.png",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Exo Armor.png",
"system": {
"description": "An uprated HARD Armour system with PP10 composite plating. Heavier than standard HARD but capable of stopping rounds that would punch through lighter suits.",
"description": "Powered exoskeletal frame with armored plates; massively increases carrying and weapon handling at the cost of finesse.",
"armorRating": 5,
"armorDice": 4,
"armorDice": 5,
"armorAuto": 2,
"statMod": -1,
"skillMod": 0,
"statModTarget": "agility",
"skillModTarget": "",
"cost": 2800,
"initiativeMod": -1
"statMod": 1,
"skillMod": -1,
"statModTarget": "strength",
"skillModTarget": "mobility",
"cost": 3000,
"initiativeMod": 0
}
},
{
"name": "Light Thresher Suit",
"name": "Full Shiver Armour",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Light Thresher.png",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shiver.png",
"system": {
"description": "An industrial hardsuit adapted for combat use. Angular composite plates with mounting points for additional equipment. Designed for hostile environment operations as much as firefights.",
"description": "Full plate and vest armour used by Shiver combat units. Rated for street operations and riot suppression. Includes shoulder guards, arm vambraces, and shin protection.",
"armorRating": 2,
"armorDice": 2,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 450,
"initiativeMod": 0
}
},
{
"name": "HARD Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Hard Armor.png",
"system": {
"description": "Full-body ceramic and metal laminate suit for frontline combat and urban assaults.",
"armorRating": 4,
"armorDice": 4,
"armorAuto": 2,
"statMod": 0,
"skillMod": -1,
"statModTarget": "",
"skillModTarget": "stealth",
"cost": 3500,
"statMod": -1,
"skillMod": 1,
"statModTarget": "agility",
"skillModTarget": "force",
"cost": 1200,
"initiativeMod": 0
}
},
@@ -272,19 +170,138 @@
}
},
{
"name": "DN Power Armour",
"name": "Light Thresher Suit",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Dark Night Power.png",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Light Thresher.png",
"system": {
"description": "Department of Nanotech powered combat armour. Lighter than standard power armour but with advanced nano-repair capability \u2014 the suit recovers 1 armour die between scenes. Rare and expensive.",
"armorRating": 5,
"armorDice": 5,
"description": "An industrial hardsuit adapted for combat use. Angular composite plates with mounting points for additional equipment. Designed for hostile environment operations as much as firefights.",
"armorRating": 4,
"armorDice": 4,
"armorAuto": 2,
"statMod": 1,
"statMod": 0,
"skillMod": -1,
"statModTarget": "",
"skillModTarget": "stealth",
"cost": 3500,
"initiativeMod": 0
}
},
{
"name": "PP10 HARD Armour",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Hard Armor.png",
"system": {
"description": "An uprated HARD Armour system with PP10 composite plating. Heavier than standard HARD but capable of stopping rounds that would punch through lighter suits.",
"armorRating": 5,
"armorDice": 4,
"armorAuto": 2,
"statMod": -1,
"skillMod": 0,
"statModTarget": "agility",
"skillModTarget": "",
"cost": 2800,
"initiativeMod": -1
}
},
{
"name": "Scout Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Scout Armor.png",
"system": {
"description": "Lightweight composite plates over flexible mesh; built for operatives who need to move and climb.",
"armorRating": 3,
"armorDice": 3,
"armorAuto": 1,
"statMod": 1,
"skillMod": 0,
"statModTarget": "agility",
"skillModTarget": "",
"cost": 700,
"initiativeMod": 0
}
},
{
"name": "Shiver Flak Vest",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shiver Flak Vest.png",
"system": {
"description": "Standard-issue soft armour vest worn under uniform by Shivers and patrol officers. Lightweight, concealable under a jacket. Not rated for combat \u2014 rated for surviving a mugging.",
"armorRating": 1,
"armorDice": 1,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 200,
"initiativeMod": 0
}
},
{
"name": "Shock Armour",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Shock Armor.png",
"system": {
"description": "Blast-resistant armour with energy-dispersal panels. Designed for operatives who expect to be in the vicinity of explosions, EMP discharges, or Ebb detonations. Reduces Ebb damage by 1 auto.",
"armorRating": 3,
"armorDice": 3,
"armorAuto": 1,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 900,
"initiativeMod": 0
}
},
{
"name": "Squad Shielded Power Armor",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/Squad Shieled Power Armor.png",
"system": {
"description": "Full sealed power armor with integrated energy shielding; rare, expensive, and terrifying on the street.",
"armorRating": 6,
"armorDice": 6,
"armorAuto": 3,
"statMod": 1,
"skillMod": -2,
"statModTarget": "strength",
"skillModTarget": "stealth",
"cost": 7500,
"cost": 8000,
"initiativeMod": 0
}
},
{
"name": "Stealth Suit",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Stealth Suit.png",
"system": {
"description": "A full-body suit with integrated light-bending panels and sound-dampening underlayer. Provides moderate ballistic protection while granting +2 dice to Stealth rolls. Panels degrade when the suit takes significant damage.",
"armorRating": 2,
"armorDice": 2,
"armorAuto": 0,
"statMod": 0,
"skillMod": 2,
"statModTarget": "",
"skillModTarget": "stealth",
"cost": 2500,
"initiativeMod": 0
}
},
{
"name": "Street Clothes",
"type": "armor",
"img": "systems/zero-engine/assets/SLA_Assets/Armor/2nd try/Street Cloths.png",
"system": {
"description": "Civilian clothing. Offers essentially no ballistic protection. The only reason to track it is so the GM knows when an operative has forgotten to put their armour on.",
"armorRating": 0,
"armorDice": 0,
"armorAuto": 0,
"statMod": 0,
"skillMod": 0,
"statModTarget": "",
"skillModTarget": "",
"cost": 20,
"initiativeMod": 0
}
}
+7 -7
View File
@@ -7,7 +7,7 @@
"description": "Prescription-grade painkillers used by Medics to keep operatives moving on broken bones and bullet wounds.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 30,
"active": false,
"activeDuration": "1 shift",
"activeLabel": "",
@@ -70,7 +70,7 @@
"description": "Corporate-grade stimulant chips; keep you awake, sharp, and moving long after your body wants to shut down.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 40,
"active": false,
"activeDuration": "1 shift (2-4 hours)",
"activeLabel": "",
@@ -133,7 +133,7 @@
"description": "Heavy sedative used to shut down panic, control Frothers, or help Ebons come down after bad Ebb feedback.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 35,
"active": false,
"activeDuration": "1 stretch to 1 shift",
"activeLabel": "",
@@ -196,7 +196,7 @@
"description": "Illegal DarkNight derivative of Rush; pushes the body past safe limits into true overdrive.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 110,
"active": false,
"activeDuration": "1 scene/combat (max 1 stretch)",
"activeLabel": "",
@@ -259,7 +259,7 @@
"description": "Corporate anti-anxiety drug; standard issue for some Shiver units and corporate VIPs who still have to go on-site.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 65,
"active": false,
"activeDuration": "1 shift",
"activeLabel": "",
@@ -322,7 +322,7 @@
"description": "Standard Frother combat drug; a violent mix of stimulants, painkillers, and combat enhancers widely available on Mort.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 85,
"active": false,
"activeDuration": "1 scene/combat (up to 1 stretch)",
"activeLabel": "",
@@ -385,7 +385,7 @@
"description": "Restricted UV-grade combat cocktail reserved for black ops and suicidal Frothers; massively amplifies aggression and physical output at severe mental cost.",
"isDrug": true,
"quantity": 1,
"cost": 0,
"cost": 200,
"active": false,
"activeDuration": "1 scene/combat (max 1 stretch)",
"activeLabel": "",
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.869169 1741eb000 Delete type=3 #1
2026/06/02-21:20:33.869541 174277000 Level-0 table #5: started
2026/06/02-21:20:33.869986 174277000 Level-0 table #5: 4187 bytes OK
2026/06/02-21:20:33.870045 174277000 Delete type=0 #3
2026/06/02-21:20:33.870095 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.925873 1706d7000 Delete type=3 #1
2026/06/02-21:42:16.926293 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.926465 171f87000 Level-0 table #5: 4274 bytes OK
2026/06/02-21:42:16.926531 171f87000 Delete type=0 #3
2026/06/02-21:42:16.926584 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.851561 1731d3000 Delete type=3 #1
2026/06/02-21:20:33.852911 174277000 Level-0 table #5: started
2026/06/02-21:20:33.853176 174277000 Level-0 table #5: 5304 bytes OK
2026/06/02-21:20:33.853230 174277000 Delete type=0 #3
2026/06/02-21:20:33.853280 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.905064 170ee3000 Delete type=3 #1
2026/06/02-21:42:16.906911 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.907116 171f87000 Level-0 table #5: 5617 bytes OK
2026/06/02-21:42:16.907187 171f87000 Delete type=0 #3
2026/06/02-21:42:16.907232 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.855211 1739df000 Delete type=3 #1
2026/06/02-21:20:33.855720 174277000 Level-0 table #5: started
2026/06/02-21:20:33.856032 174277000 Level-0 table #5: 10656 bytes OK
2026/06/02-21:20:33.856090 174277000 Delete type=0 #3
2026/06/02-21:20:33.856141 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.909458 171efb000 Delete type=3 #1
2026/06/02-21:42:16.910238 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.910504 171f87000 Level-0 table #5: 10823 bytes OK
2026/06/02-21:42:16.910564 171f87000 Delete type=0 #3
2026/06/02-21:42:16.910610 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.858027 1739df000 Delete type=3 #1
2026/06/02-21:20:33.858852 174277000 Level-0 table #5: started
2026/06/02-21:20:33.859123 174277000 Level-0 table #5: 15540 bytes OK
2026/06/02-21:20:33.859200 174277000 Delete type=0 #3
2026/06/02-21:20:33.859248 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.912795 171efb000 Delete type=3 #1
2026/06/02-21:42:16.913615 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.913914 171f87000 Level-0 table #5: 15281 bytes OK
2026/06/02-21:42:16.913974 171f87000 Delete type=0 #3
2026/06/02-21:42:16.914028 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.867027 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.867579 174277000 Level-0 table #5: started
2026/06/02-21:20:33.867906 174277000 Level-0 table #5: 7061 bytes OK
2026/06/02-21:20:33.867966 174277000 Delete type=0 #3
2026/06/02-21:20:33.868012 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.922896 170ee3000 Delete type=3 #1
2026/06/02-21:42:16.923636 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.923827 171f87000 Level-0 table #5: 7000 bytes OK
2026/06/02-21:42:16.923897 171f87000 Delete type=0 #3
2026/06/02-21:42:16.923961 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.860677 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.861443 174277000 Level-0 table #5: started
2026/06/02-21:20:33.861807 174277000 Level-0 table #5: 7099 bytes OK
2026/06/02-21:20:33.861900 174277000 Delete type=0 #3
2026/06/02-21:20:33.861958 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.915727 170ee3000 Delete type=3 #1
2026/06/02-21:42:16.916419 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.916595 171f87000 Level-0 table #5: 7089 bytes OK
2026/06/02-21:42:16.916671 171f87000 Delete type=0 #3
2026/06/02-21:42:16.916767 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-21:20:33.863857 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.864970 174277000 Level-0 table #5: started
2026/06/02-21:20:33.865381 174277000 Level-0 table #5: 14973 bytes OK
2026/06/02-21:20:33.865434 174277000 Delete type=0 #3
2026/06/02-21:20:33.865475 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:42:16.918944 170ee3000 Delete type=3 #1
2026/06/02-21:42:16.920096 171f87000 Level-0 table #5: started
2026/06/02-21:42:16.920446 171f87000 Level-0 table #5: 14977 bytes OK
2026/06/02-21:42:16.920520 171f87000 Delete type=0 #3
2026/06/02-21:42:16.920578 171f87000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
+1 -1
View File
@@ -2,7 +2,7 @@
"id": "zero-engine",
"title": "Zero Engine (SLA Industries)",
"description": "A basic game system for SLA Industries using the Zero Engine rules.",
"version": "1.4.0",
"version": "1.4.1",
"compatibility": {
"minimum": 13,
"verified": "14.359"
+11
View File
@@ -827,6 +827,17 @@ class ZeroEngineActorSheet extends foundry.appv1.sheets.ActorSheet {
"system.withdrawalActive": false
});
// ── Deduct drug cost from credits ────────────────────────────────────────
const drugCost = Math.max(0, Number(item.system?.cost) || 0);
if (drugCost > 0) {
const currentCredits = Number(this.actor.system?.details?.credits ?? 0);
const newCredits = Math.max(0, currentCredits - drugCost);
await this.actor.update({ "system.details.credits": newCredits });
ui.notifications.info(
`${item.name}: ${drugCost}¢ charged to ${this.actor.name}. Credits: ${currentCredits} → ${newCredits}`
);
}
const stressBonus = Math.max(0, Number(item.system?.stressRecoveryBonus) || 0);
if (stressBonus > 0) {
const currentStress = this._getStressValue(this.actor);