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:
commit
46116f7f4b
25 files changed
+2594
No files matched your search
@@ -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
|
||||
Reference in new issue
Block a user