DOOM × MATRIX: SYSTEM FAILURE

Ein interaktives Text-Adventure in Python, das die Lore von DOOM und The Matrix zu einer gemeinsamen, düsteren Verschwörung verschmilzt: Die Matrix läuft nicht neben der Hölle — sie läuft auf ihr.

"What if the Matrix was just a very inefficient DOOM engine?"

Doom Slayer trifft Agent Smith


Inhaltsverzeichnis


Schnellstart

Voraussetzungen: Python 3.9+ (getestet mit 3.13). Keine Pflicht-Abhängigkeiten — colorama wird automatisch genutzt, falls installiert (für saubere ANSI-Farben in der klassischen Windows-Konsole), ist aber optional.

python doom-matrix-adventure.py

Optionale Flags:

python doom-matrix-adventure.py --fast          # überspringt alle Tipp-/Dramatik-Verzögerungen
python doom-matrix-adventure.py --seed=1337      # reproduzierbarer Run (fester Zufalls-Seed)
python doom-matrix-adventure.py --fast --seed=42 # beides kombiniert

Der Einstieg funktioniert auch direkt über das Paket:

python -m doom_matrix.main

Story-Prämisse

Du wachst im Construct auf — dem neutralen Trainingsraum der Matrix. Morpheus begrüßt dich als Doom Slayer, doch bevor du dich orientieren kannst, schlägt Alarm: Die Maschinen haben etwas gebaut, das sie HELL SERVER nennen.

Die zentrale Wendung: Argent-Energie treibt die Matrix an. Die Menschen in den Stasiskapseln sind keine Batterien — sie sind Seelen-Prozessoren, die Dämonen rendern. Die Hölle ist kein Ort neben der Simulation, sie ist deren Fundament. Der Doom Slayer selbst ist ein Rogue Process, ein Programm, das sich weigerte gelöscht zu werden — deshalb kann er die Regeln beider Welten brechen.

Auf dem Weg begegnest du dem weißen Hasen (ein Fourth-Wall-Break-Moment direkt zu Spielbeginn), dem Orakel in ihrer Küche mitten im Matrix-Code, und erlebst einen echten "Fehler in der Matrix": eine schwarze Katze, die exakt zweimal denselben Weg läuft — das untrügliche Zeichen dafür, dass gerade jemand den Code verändert.


Charakterklassen

Zu Beginn wählst du eine von drei Klassen. Sie bestimmen Startwerte, Startwaffe und wie schnell deine Corruption steigt (relevant für die Enden):

Klasse Fokus HP Armor Focus Hacking Strength Corruption-Rate Startwaffe
Slayer Doom — Kraft & Ausdauer 120 20 60 2 8 ×1.0 Super Shotgun (20 Shells)
Operator Matrix — Hacking & Mobilität 85 10 100 9 3 ×1.0 Plasma Rifle (100 Cells)
Anomalie (Hybrid) Ausgewogen, einzigartige Dialoge 100 15 80 5 5 ×2.0 Super Shotgun + etwas Plasma

Zusätzlich wählst du zu Spielbeginn im Construct eine zweite Waffe (Super Shotgun oder Plasma Rifle) — unabhängig von der Klasse.


Spielablauf & Layer

Das Spiel ist in Layer unterteilt, die den Fortschritt der Simulation widerspiegeln:

Layer Ort
4 Mars UAC Base
3 The Matrix (Start)
2 Hell Server
1 The Architect's Core
0 (geheim) — nur im wahren Ende erreichbar

Ablauf

  1. Construct-Intro — Aufwachen, Morpheus, Alarm, Waffenwahl.
  2. Weißer Hase — ein Hologramm huscht vorbei. Folgst du ihm, öffnet sich kurz ein "Kaninchenbau" mit einem Blick auf die reale Terminal-Sitzung (inkl. echtem Systembenutzernamen) — das setzt die Weichen für das geheime Ende.
  3. Agent-Imp-Kampf — dein erster Gegner, halb Agent, halb Dämon.
  4. Wegwahl — drei Portale: Mars UAC Base, tiefer in die Matrix, oder direkt zum Hell Server (Schnellweg, aber weniger Beute).
  5. Mars UAC Base (Hub) — Waffenkammer (BFG 10000 + rote Keycard), Kontrollzentrum (Hacking-Check → Crucible-Fragment), Waffentresor (benötigt rote Keycard), prozedural generierte Nebenräume.
  6. Matrix Deep — die schwarze Katze (Deja-vu-Glitch), das Orakel (Dialogszene + Crucible-Fragment), Kampf gegen Agent Smith (Dialogwahl beeinflusst, ob er sich vervielfacht).
  7. Mars UAC Base und Matrix Deep sind beide vor dem Hell Server erreichbar — welchen Weg du zuerst nimmst, der andere folgt automatisch danach. Nur die dritte Portal-Option ("Schwarzes Loch") überspringt beide.
  8. Hell Server (Hub) — Altarraum (drittes Crucible-Fragment), prozedurale Kampf-/Beuteräume, Bosskampf gegen den Cyberdemon.
  9. Der Archi-Lord (Endboss) — Dialogwahl beeinflusst Corruption und das spätere Ende; bei drei gesammelten Crucible-Fragmenten kannst du sie zum Crucible Sword verschmelzen.
  10. Ending — abhängig von Entscheidungen, Corruption und ob du den weißen Hasen gefolgt bist plus alle drei Fragmente besitzt.

Kampfsystem

Kämpfe laufen rundenbasiert mit vier (bzw. fünf) Aktionen ab:

  • Schießen — wählt eine verfügbare Waffe, Schaden hängt vom Waffen-Dreieck ab:
    • Ballistisch (Shotgun, Fäuste) ist stark gegen demon, schwach gegen program.
    • Plasma (Plasma Rifle, BFG) ist stark gegen program/hybrid, etwas schwächer gegen demon.
    • Nahkampf (Crucible Sword) ist ausgeglichen, leicht im Vorteil gegen hybrid.
  • Bullet Time — kostet 25 Focus, garantiert Ausweichen des nächsten Gegnerangriffs und einen kritischen Treffer (+50% Schaden). Reicht der Focus nicht, verpufft der Versuch als normaler (ungeschützter) Zug.
  • Glory Kill — nur nutzbar, wenn ein Gegner gestaggert ist (seine Stagger-Leiste ist voll). Tötet ihn sofort und heilt dich um 25 HP. Ohne gestaggerten Gegner schlägt der Versuch fehl und du kassierst einen Konter.
  • Hack — ein Skill-Check (d20 + Hacking gegen die Firewall des Gegners). Erfolg lässt dich einen Effekt wählen (Einfrieren, Waffen-Jam, HP-Leak, Gegner umdrehen). Misslingt der Hack, erleidest du Rückstoßschaden und sammelst eine Trace-Marke — bei drei Marken schickt das System Verstärkung in den Kampf.
  • Medkit benutzen — erscheint nur, wenn du ein Medkit im Inventar hast.

Boss-Gegner (Cyberdemon, Archi-Lord) haben mehrere Phasen: bei bestimmten HP-Schwellen werden sie aggressiver und ihre Stagger-Leiste wird zurückgesetzt.


Hacking-System

Hacking ist nicht nur eine Kampfoption, sondern auch der Schlüssel zu Umgebungsrätseln:

  • Kontrollzentrum (Mars Base): ein Hack mit Firewall 10 öffnet ein verstecktes Fach mit einem Crucible-Fragment.
  • Schwarze-Katze-Glitch (Matrix Deep): ein optionaler Hack (Firewall 12) lässt dich der Code-Bruchstelle nachspüren und ein Log-Fragment finden — kostet aber etwas Corruption.

Erfolgschance: Würfelwurf (1-20) + Hacking-Wert ≥ Firewall des Ziels.


Inventar & Gegenstände

Item Wirkung
Medkit Heilt 30 HP
Armor-Shard Gibt 15 Armor
Ammo-Pack Füllt Munition aller Waffen auf
Backup-Pille Einmaliges Auto-Revive bei tödlichem Treffer
Rote/Blaue/Gelbe Keycard Öffnet entsprechend verriegelte Türen in Hub-Räumen
Crucible-Fragment Sammle 3, um den Crucible Sword zu schmieden — und Voraussetzung für das geheime Ende
Praetor-Token Skillpunkt (Health, Focus, Hacking oder Strength dauerhaft erhöhen)
Log-Datei Lore-Fragment, kein Kampfeffekt

Waffen: Fäuste (unbegrenzt), Super Shotgun, Plasma Rifle, BFG 10000 (limitierte Spezialmunition), Crucible Sword (nur nach Verschmelzung aller 3 Fragmente).


Enden

Welches Ende du bekommst, hängt von Corruption, deiner letzten Dialogwahl beim Archi-Lord und ob du den weißen Hasen gefolgt bist und alle drei Crucible-Fragmente besitzt:

Ende Bedingung
Wake Up (geheimes, wahres Ende) Weißem Hasen gefolgt und 3/3 Crucible-Fragmente. Layer 0 wird erreicht — ein Fourth-Wall-Break mit deinem echten Systembenutzernamen.
Der Dunkle Pakt Corruption ≥ 60% — du wirst selbst zum neuen Dark Lord.
Der neue Architekt Dialogwahl "Ich will die Kontrolle übernehmen" beim Archi-Lord.
...mit Cheats (New Game+) Dialogwahl "Ich will einen neuen Spielstand" beim Archi-Lord.
Rip and Tear Standard-Ende, falls keine der obigen Bedingungen zutrifft.
Game Over → Bluepill Bei Tod: die blaue Pille schlucken → ironisches Büro-Ende.
Game Over → Neu laden Bei Tod: Programm beenden.

Hinweis zum geheimen Ende: Um alle 3 Fragmente zu sammeln, musst du sowohl die Mars UAC Base (Kontrollzentrum-Hack) als auch Matrix Deep (Orakel) besuchen, bevor du den Hell Server (Altarraum) betrittst — die dritte Portal-Option ("Schwarzes Loch") überspringt beide und macht das wahre Ende in diesem Run unerreichbar.


Easter Eggs & Cheat-Codes

Cheat-Codes können jederzeit anstelle einer normalen Eingabe (z. B. im Kampfmenü oder in Hub-Räumen) eingegeben werden:

Code Effekt
IDDQD God Mode an/aus (kein Schaden mehr)
IDKFA Alle Waffen + volle Munition
thereisnospoon Senkt Corruption leicht
xyzzy Klassischer Nichts-passiert-Scherz (Referenz auf Colossal Cave Adventure, 1977)
doom / knee-deep / kneedeepinthedead Pixel-Nostalgie-Easter-Egg, gibt einen Bonus-Praetor-Token

Weitere versteckte Momente:

  • Der weiße Hase erscheint nur einmal, direkt vor dem ersten Kampf.
  • Die schwarze Katze läuft zweimal exakt gleich — ein bewusster "Fehler in der Matrix", kein Zufallsevent.
  • Das Orakel reagiert unterschiedlich, je nachdem ob du dem Hasen gefolgt bist und wie hoch deine Corruption ist.

Speicherstände & Loop-Twist

Nach jedem Spielende wird automatisch ein Speicherstand unter doom_matrix/saves/autosave.json abgelegt. Zusätzlich führt doom_matrix/saves/meta.json Buch über die Gesamtzahl deiner Durchläufe.

Ab dem zweiten Durchlauf reagiert Morpheus mit einer subtil unterschiedlichen Zeile zu Spielbeginn — ein wachsender Hinweis darauf, dass diese Simulation schon öfter gelaufen ist, als dir bewusst ist.


Kommandozeilen-Optionen

Flag Beschreibung
--fast Deaktiviert alle Tipp-Animationen und dramatischen Pausen
--seed=<zahl> Fixiert den Zufalls-Seed für reproduzierbare Durchläufe

Projektstruktur

Doom-Matrix/
├── doom-matrix-adventure.py     # Kompatibilitäts-Wrapper / Haupteinstieg
└── doom_matrix/
    ├── main.py                  # Alternativer Einstiegspunkt (python -m doom_matrix.main)
    ├── engine/
    │   ├── ui.py                 # Farben, Textausgabe, Balken, Glitch-Effekte
    │   ├── game.py                # Titel-Bildschirm, Klassenwahl, Szenen-Dispatch
    │   ├── save.py                 # JSON-Speicherstände, Meta-Statistiken, Loop-Twist
    │   └── cheats.py                # Cheat-Code-Handling
    ├── entities/
    │   ├── player.py              # Spieler-Stats, Klassen, Leveling, Corruption
    │   ├── enemy.py                # Datengetriebene Gegner-Klasse (Stagger-System)
    │   └── items.py                 # Item/Waffen/Inventar-Klassen, Waffen-Dreieck
    ├── systems/
    │   ├── combat.py               # Kampf-Engine (Stagger, Bullet Time, Glory Kill)
    │   └── hacking.py                # Skill-Check-System, Trace-Marken
    ├── world/
    │   ├── rooms.py                 # Room-/Hub-Klassen für Raum-Navigation
    │   ├── generator.py              # Prozedurale Raum-/Encounter-Generierung
    │   ├── layers.py                  # Story-Szenen aller Layer (Intro bis Endboss)
    │   └── endings.py                  # Ending-Logik und Game-Over-Verzweigung
    ├── data/
    │   ├── weapons.json              # Waffendaten (Schaden, Munitionstyp, Typ)
    │   ├── enemies.json               # Gegnerdaten (HP, Stagger, Angriff, Firewall)
    │   └── items.json                  # Item-Definitionen
    └── saves/                        # Autosave & Meta-Statistiken (JSON, zur Laufzeit erzeugt)

Architekturprinzipien:

  • Daten von Logik getrennt — Gegner, Waffen und Items liegen als JSON vor und lassen sich ohne Code-Änderungen erweitern oder neu balancieren.
  • Room-Graph statt linearer Szenen — Hub-Bereiche (Mars UAC Base, Hell Server) bestehen aus vernetzten Room-Objekten statt fest verdrahteter Szenenfolgen.
  • Eine generische Kampf-Engine — dieselbe run_combat()-Funktion bedient sowohl einfache Gegner als auch mehrphasige Bosse.
  • Seed-injizierbarer Zufall — jede Funktion, die Zufallswerte braucht, nimmt ein random.Random-Objekt entgegen, was reproduzierbare Testläufe und den --seed-Modus ermöglicht.

Erweitern des Spiels

  • Neue Gegner: Eintrag in doom_matrix/data/enemies.json ergänzen (id, name, type, hp, stagger_max, attack_range, firewall, optional boss/phases).
  • Neue Waffen: Eintrag in doom_matrix/data/weapons.json ergänzen und in entities/player.py bzw. der jeweiligen Szene über player.add_weapon("<id>") vergeben.
  • Neue Räume/Hubs: world/rooms.pys Room/Hub-Klassen verwenden; siehe world/layers.py (mars_base, hell_server) als Referenz.
  • Neue Enden: world/endings.py::determine_ending() um eine weitere Bedingung erweitern und einen passenden _ending_*-Handler ergänzen.
  • Neue Cheat-Codes: in engine/cheats.py::try_cheat() ergänzen.

Erstellt von LXC für Andy. 🐇

S
Description
No description provided
Readme
7.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 100%