feat: Tiefengrenze ueber das Atemgas
Lint / Lint Resource (push) Has been cancelled

Macht ein Tiefenlimit mechanisch statt zur Absprache - und oeffnet die tiefen
Spots fuer den, der die richtige Flasche dabei hat.

Der Grund fuer die realen 40-45 m ist nicht der Druck, sondern der Stickstoff in
der Pressluft: tiefer wirkt er narkotisch, ab ~56 m wird auch der Sauerstoff
giftig. Wer tiefer will, atmet Trimix, wo Helium einen Teil des Stickstoffs
ersetzt. Genau so umgesetzt:

- maxDepth und gas pro Flasche in config/shared.lua; Pressluft 45 m,
  neues diving_tank_trimix 100 m
- Darunter Tiefenrausch in drei Stufen: Bildschirmeffekt, Kamerawackeln,
  hoeherer Luftverbrauch, in der letzten Stufe Schaden. Schwellen, Effekte,
  Staerken und Schaden komplett in config.narcosis
- Vorwarnung 5 m vor der Grenze, Tiefenanzeige im HUD wird rot und pulsiert
- Effekte werden beim Auftauchen, Ablegen, Tod und Resource-Stop aufgeraeumt
- Auswahlmenue zeigt Gas und Tiefengrenze pro Flasche
- Icon fuer die Trimix-Flasche, violett abgesetzt

Keine Dekompression - auf Wunsch bewusst weggelassen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 09:11:12 +02:00
co-authored by Claude Opus 5
parent e8ffe8870d
commit e5f47610a1
20 changed files with 315 additions and 32 deletions
+15 -2
View File
@@ -40,7 +40,8 @@ const BANDS = {
small: '#4ade80',
medium: '#38bdf8',
large: '#fbbf24',
xl: '#f472b6'
xl: '#f472b6',
trimix: '#a78bfa'
};
const defs = `<defs>
@@ -113,6 +114,17 @@ ${tank(82, 38, 38, 118, BANDS.xl)}
font-size="16" font-weight="700" fill="${C.outline}">20</text>`
));
// --- Trimix: Doppelflasche mit eigenem Farbband, deutlich abgesetzt von den
// --- Pressluft-Flaschen, weil die Verwechslung teuer waere.
writeFileSync(join(OUT, 'diving_tank_trimix.svg'), svg(
` <rect x="38" y="26" width="52" height="8" rx="4" fill="${C.valveDark}"/>
${tank(46, 38, 38, 118, BANDS.trimix)}
${tank(82, 38, 38, 118, BANDS.trimix)}
<rect x="20" y="65" width="88" height="23" rx="4" fill="${BANDS.trimix}" stroke="${C.outline}" stroke-width="2"/>
<text x="64" y="82" text-anchor="middle" font-family="sans-serif"
font-size="14" font-weight="700" fill="${C.outline}">TRIMIX</text>`
));
// --- Tauchmaske
writeFileSync(join(OUT, 'diving_gear.svg'), svg(
` <path d="M18 62 L30 52 L30 78 L18 72 Z" fill="${C.rubber}"/>
@@ -145,7 +157,8 @@ writeFileSync(join(OUT, 'diving_fill.svg'), svg(
// --- Kontrollblatt
const NAMES = [
'diving_gear', 'diving_fill',
'diving_tank_small', 'diving_tank_medium', 'diving_tank_large', 'diving_tank_xl'
'diving_tank_small', 'diving_tank_medium', 'diving_tank_large', 'diving_tank_xl',
'diving_tank_trimix'
];
const slots = (extra = '') =>