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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

+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 = '') =>
+34
View File
@@ -0,0 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<defs>
<linearGradient id="steel" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#64748b"/>
<stop offset="28%" stop-color="#cbd5e1"/>
<stop offset="55%" stop-color="#94a3b8"/>
<stop offset="100%" stop-color="#64748b"/>
</linearGradient>
<linearGradient id="glass" x1="0" y1="0" x2="0.7" y2="1">
<stop offset="0%" stop-color="#38bdf8"/>
<stop offset="100%" stop-color="#0284c7"/>
</linearGradient>
</defs>
<rect x="38" y="26" width="52" height="8" rx="4" fill="#1e293b"/>
<g>
<rect x="38.4" y="24" width="15.200000000000001" height="17" rx="3" fill="#334155"/>
<circle cx="46" cy="21" r="8" fill="none" stroke="#1e293b" stroke-width="4.5"/>
<rect x="27" y="38" width="38" height="80" rx="15.833333333333334" fill="url(#steel)" stroke="#0f172a" stroke-width="2.5"/>
<rect x="32.7" y="44.4" width="4.94" height="40" rx="2.47" fill="#cbd5e1" opacity="0.75"/>
<rect x="27" y="65.2" width="38" height="22" fill="#a78bfa"/>
</g>
<g>
<rect x="74.4" y="24" width="15.200000000000001" height="17" rx="3" fill="#334155"/>
<circle cx="82" cy="21" r="8" fill="none" stroke="#1e293b" stroke-width="4.5"/>
<rect x="63" y="38" width="38" height="80" rx="15.833333333333334" fill="url(#steel)" stroke="#0f172a" stroke-width="2.5"/>
<rect x="68.7" y="44.4" width="4.94" height="40" rx="2.47" fill="#cbd5e1" opacity="0.75"/>
<rect x="63" y="65.2" width="38" height="22" fill="#a78bfa"/>
</g>
<rect x="20" y="65" width="88" height="23" rx="4" fill="#a78bfa" stroke="#0f172a" stroke-width="2"/>
<text x="64" y="82" text-anchor="middle" font-family="sans-serif"
font-size="14" font-weight="700" fill="#0f172a">TRIMIX</text>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB