Initial commit: DOOM x MATRIX System Failure text adventure

Modulares Python-Textadventure mit Kampfsystem (Stagger, Bullet Time,
Glory Kills, Hacking-Skill-Checks), Hub-Raum-Navigation, prozeduralen
Encountern, 3 Charakterklassen, mehreren Enden und Story-Elementen
(weißer Hase, Orakel, schwarze-Katze-Deja-vu-Glitch).
This commit is contained in:
fedora_openclaw committed 2026-07-05 18:56:44 +02:00
commit 46116f7f4b
25 files changed
+2594

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Hacking-Skill-Check-System: d20 + Hacking vs. Firewall, mit Trace-Marken."""
import random
from doom_matrix.engine.ui import Colors, slow_print, menu
HACK_EFFECTS = [
("freeze", "Gegner einfrieren (verliert naechsten Zug)"),
("jam", "Waffe des Gegners blockieren (-50% Schaden fuer 2 Runden)"),
("leak", "HP-Leak (sofortiger Schaden ueber Zeit)"),
("turn", "Gegner gegen Verbuendete aufhetzen (falls mehrere anwesend)"),
]
def attempt_hack(player, firewall, rng=None):
"""Fuehrt einen Skill-Check durch. Gibt (erfolg, roll_text) zurueck."""
rng = rng or random
roll = rng.randint(1, 20)
total = roll + player.hacking
success = total >= firewall
slow_print(f"\n{Colors.GREEN}[HACK-CHECK] Wurf: {roll} + Hacking {player.hacking} = {total} "
f"vs. Firewall {firewall}{Colors.END}")
if success:
player.hacks += 1
else:
player.trace_marks += 1
slow_print(f"{Colors.RED}Trace-Marke registriert! ({player.trace_marks}/3){Colors.END}")
return success
def choose_hack_effect():
print(f"\n{Colors.GREEN}Waehle deinen Hack-Effekt:{Colors.END}")
options = [(str(i + 1), label) for i, (_, label) in enumerate(HACK_EFFECTS)]
choice = menu(options, "Effekt")
try:
idx = int(choice) - 1
if 0 <= idx < len(HACK_EFFECTS):
return HACK_EFFECTS[idx][0]
except ValueError:
pass
return HACK_EFFECTS[0][0]
def apply_hack_effect(effect, enemy, player, rng=None):
rng = rng or random
if effect == "freeze":
enemy.frozen = True
slow_print(f"{Colors.GREEN}{enemy.name} friert ein — System-Deadlock im naechsten Zug!{Colors.END}")
elif effect == "jam":
enemy.jammed = 2
slow_print(f"{Colors.GREEN}Die Waffe von {enemy.name} blockiert. Schaden -50% fuer 2 Runden.{Colors.END}")
elif effect == "leak":
leak_dmg = rng.randint(10, 20)
enemy.apply_damage(leak_dmg)
slow_print(f"{Colors.RED}HP-Leak! {enemy.name} verliert {leak_dmg} HP ueber einen Pufferueberlauf.{Colors.END}")
elif effect == "turn":
slow_print(f"{Colors.GREEN}{enemy.name} wird kurzzeitig gegen die eigene Seite aufgehetzt.{Colors.END}")
enemy.turned = True
def trace_triggered(player):
"""Wird True, wenn 3 Trace-Marken erreicht sind -- spawnt Verstaerkung."""
if player.trace_marks >= 3:
player.trace_marks = 0
return True
return False