diff --git a/README.md b/README.md index 914c994..4757fcc 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Ein interaktives Text-Adventure in Python, das die Lore von **DOOM** und **The M > "What if the Matrix was just a very inefficient DOOM engine?" +![Doom Slayer trifft Agent Smith](Wallpaper/Doom_Slyer.png) + --- ## Inhaltsverzeichnis @@ -50,7 +52,7 @@ python -m doom_matrix.main ## Story-Prämisse -Du wachst im **Construct** auf — dem neutralen Trainingsraum der Matrix. Morpheus Hayden 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. +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. @@ -86,7 +88,7 @@ Das Spiel ist in **Layer** unterteilt, die den Fortschritt der Simulation widers ### Ablauf -1. **Construct-Intro** — Aufwachen, Morpheus Hayden, Alarm, Waffenwahl. +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). @@ -185,7 +187,7 @@ Weitere versteckte Momente: 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 Hayden mit einer subtil unterschiedlichen Zeile zu Spielbeginn — ein wachsender Hinweis darauf, dass diese Simulation schon öfter gelaufen ist, als dir bewusst ist. +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. --- diff --git a/Wallpaper/Doom_Slyer.png b/Wallpaper/Doom_Slyer.png new file mode 100644 index 0000000..5d23428 Binary files /dev/null and b/Wallpaper/Doom_Slyer.png differ diff --git a/Wallpaper/Doom_Slyer2.png b/Wallpaper/Doom_Slyer2.png new file mode 100644 index 0000000..6e9d9c5 Binary files /dev/null and b/Wallpaper/Doom_Slyer2.png differ diff --git a/Wallpaper/doom-slayer-agent-smith-wallpaper-3840x2160.png b/Wallpaper/doom-slayer-agent-smith-wallpaper-3840x2160.png new file mode 100644 index 0000000..b6739a4 Binary files /dev/null and b/Wallpaper/doom-slayer-agent-smith-wallpaper-3840x2160.png differ diff --git a/doom_matrix/engine/save.py b/doom_matrix/engine/save.py index f7e7c8b..ef34acd 100644 --- a/doom_matrix/engine/save.py +++ b/doom_matrix/engine/save.py @@ -79,7 +79,7 @@ def loop_twist_line(run_count): if run_count <= 1: return None if run_count == 2: - return "Morpheus Hayden: 'Habe ich das hier nicht schon einmal gesagt?'" + return "Morpheus: 'Habe ich das hier nicht schon einmal gesagt?'" if run_count < 5: - return f"Morpheus Hayden: 'Lauf Nummer {run_count}. Du wirst besser. Oder ich erinnere mich besser.'" - return f"Morpheus Hayden: 'Lauf Nummer {run_count}. Ehrlich gesagt -- ich weiss nicht mehr, welcher von uns beiden real ist.'" + return f"Morpheus: 'Lauf Nummer {run_count}. Du wirst besser. Oder ich erinnere mich besser.'" + return f"Morpheus: 'Lauf Nummer {run_count}. Ehrlich gesagt -- ich weiss nicht mehr, welcher von uns beiden real ist.'" diff --git a/doom_matrix/world/endings.py b/doom_matrix/world/endings.py index 06deb07..ad6283d 100644 --- a/doom_matrix/world/endings.py +++ b/doom_matrix/world/endings.py @@ -65,8 +65,8 @@ def ending(player): def _ending_rip_and_tear(player): _banner("SYSTEM FAILURE - CLEAR", Colors.GREEN) - slow_print(f"{Colors.YELLOW}Trinity VEGA:{Colors.END} {Colors.CYAN}'Wir haben es geschafft. Die Welt ist frei.'{Colors.END}") - slow_print(f"{Colors.YELLOW}Morpheus Hayden:{Colors.END} {Colors.CYAN}'Aber der Krieg... der Krieg ist nie vorbei.'{Colors.END}") + slow_print(f"{Colors.YELLOW}Trinity:{Colors.END} {Colors.CYAN}'Wir haben es geschafft. Die Welt ist frei.'{Colors.END}") + slow_print(f"{Colors.YELLOW}Morpheus:{Colors.END} {Colors.CYAN}'Aber der Krieg... der Krieg ist nie vorbei.'{Colors.END}") slow_print(f"{Colors.YELLOW}Du:{Colors.END} {Colors.CYAN}'Gut. Dann gibt's noch mehr zu rip and tear.'{Colors.END}") dramatic_pause(1) _banner("NEW GAME+ UNLOCKED", Colors.MAGENTA) @@ -76,7 +76,7 @@ def _ending_new_architect(player): _banner("DER NEUE ARCHITEKT", Colors.CYAN) slow_print(f"{Colors.WHITE}Du setzt dich in den leeren Thron aus Code, den der Archi-Lord hinterlassen hat.{Colors.END}") slow_print(f"{Colors.WHITE}Von hier aus siehst du jede Zeile der Matrix. Jede Entscheidung. Jeden Bug.{Colors.END}") - slow_print(f"{Colors.YELLOW}Morpheus Hayden:{Colors.END} {Colors.CYAN}'Und jetzt? Wirst du besser sein als er?'{Colors.END}") + slow_print(f"{Colors.YELLOW}Morpheus:{Colors.END} {Colors.CYAN}'Und jetzt? Wirst du besser sein als er?'{Colors.END}") slow_print(f"{Colors.WHITE}Du antwortest nicht sofort. Macht macht keine Antworten leichter.{Colors.END}") slow_print(f"{Colors.GREEN}'Ich werde es zumindest versuchen.'{Colors.END}") @@ -87,7 +87,7 @@ def _ending_dark_pact(player): slow_print(f"{Colors.RED}Der Archi-Lord zerfaellt nicht in Nichts -- er zerfaellt in DICH.{Colors.END}") slow_print(f"{Colors.RED}Seine Macht, sein Hunger, seine Krone aus Servern und Schwefel.{Colors.END}") dramatic_pause(1) - slow_print(f"{Colors.YELLOW}Trinity VEGA weicht zurueck.{Colors.END} {Colors.CYAN}'...Slayer?'{Colors.END}") + slow_print(f"{Colors.YELLOW}Trinity weicht zurueck.{Colors.END} {Colors.CYAN}'...Slayer?'{Colors.END}") slow_print(f"{Colors.RED}{Colors.BOLD}Du:{Colors.END} {Colors.RED}'Der Slayer ist tot. Es gibt nur noch den Dark Lord.'{Colors.END}") slow_print(f"{Colors.DIM}[GEHEIMES ENDE FREIGESCHALTET: DARK LORD]{Colors.END}") diff --git a/doom_matrix/world/layers.py b/doom_matrix/world/layers.py index 147f8cf..251170a 100644 --- a/doom_matrix/world/layers.py +++ b/doom_matrix/world/layers.py @@ -29,25 +29,25 @@ def construct_intro(player, rng=None): slow_print(f"{Colors.WHITE}Du kennst diesen Ort. Das Construct.{Colors.END}") dramatic_pause(0.5) - slow_print(f"\n{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Er ist wach.'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Er ist wach.'{Colors.END}") dramatic_pause(0.5) slow_print(f"\n{Colors.WHITE}Eine Gestalt nähert sich. Halb Mensch, halb Metall.{Colors.END}") - slow_print(f"{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Willkommen zurück, Doom Slayer.'{Colors.END}") + slow_print(f"{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Willkommen zurück, Doom Slayer.'{Colors.END}") dramatic_pause(0.5) - slow_print(f"\n{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Die Maschinen haben etwas Neues gebaut.'{Colors.END}") - slow_print(f"{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Sie nennen es... HELL SERVER.'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Die Maschinen haben etwas Neues gebaut.'{Colors.END}") + slow_print(f"{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Sie nennen es... HELL SERVER.'{Colors.END}") dramatic_pause(1) slow_print(f"\n{Colors.RED}Plötzlich ertönt ein Alarm!{Colors.END}") slow_print(f"{Colors.WHITE}Der Boden bebt. Grüner Code wird rot.{Colors.END}") dramatic_pause(0.5) - slow_print(f"\n{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Wir haben Company! Agent-Signaturen überall!'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Wir haben Company! Agent-Signaturen überall!'{Colors.END}") dramatic_pause(0.5) - slow_print(f"\n{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Waffen. Jetzt.'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Waffen. Jetzt.'{Colors.END}") slow_print(f"{Colors.WHITE}Vor dir materialisieren sich zwei Waffen:{Colors.END}") choice = menu([ @@ -106,7 +106,7 @@ def white_rabbit_moment(player, rng=None): slow_print(f"{Colors.WHITE}Als Beobachter. Als jemand, der das hier von AUSSEN spielt.{Colors.END}") dramatic_pause(1) - slow_print(f"\n{Colors.CYAN}Morpheus Hayden (von weit weg):{Colors.END} {Colors.YELLOW}'Wo bist du?! Der Agent ist da!'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Morpheus (von weit weg):{Colors.END} {Colors.YELLOW}'Wo bist du?! Der Agent ist da!'{Colors.END}") slow_print(f"{Colors.WHITE}Die Tür schliesst sich. Der Kaninchenbau verschwindet -- fuer jetzt.{Colors.END}") registry = load_item_registry() @@ -145,8 +145,8 @@ def agent_fight(player, rng=None): def after_fight(player, rng=None): - slow_print(f"\n{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Beeindruckend. Aber das war nur ein Scout.'{Colors.END}") - slow_print(f"{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Wir müssen hier raus. Der HELL SERVER wartet.'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Morpheus:{Colors.END} {Colors.YELLOW}'Beeindruckend. Aber das war nur ein Scout.'{Colors.END}") + slow_print(f"{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Wir müssen hier raus. Der HELL SERVER wartet.'{Colors.END}") dramatic_pause(0.5) slow_print(f"\n{Colors.WHITE}Vor dir öffnen sich drei Portale:{Colors.END}") @@ -282,10 +282,10 @@ def _black_cat_glitch(player, rng): slow_print(f"{Colors.WHITE}{cat_line}{Colors.END}") dramatic_pause(0.3) - slow_print(f"\n{Colors.MAGENTA}Trinity VEGA erstarrt.{Colors.END}") - slow_print(f"{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Das war... derselbe Moment. Exakt derselbe.'{Colors.END}") - slow_print(f"{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Ein Deja-vu ist kein Zufall. Es bedeutet, dass sich gerade{Colors.END}") - slow_print(f"{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}etwas im Code veraendert hat. Jemand manipuliert diesen Server. Jetzt.'{Colors.END}") + slow_print(f"\n{Colors.MAGENTA}Trinity erstarrt.{Colors.END}") + slow_print(f"{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Das war... derselbe Moment. Exakt derselbe.'{Colors.END}") + slow_print(f"{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Ein Deja-vu ist kein Zufall. Es bedeutet, dass sich gerade{Colors.END}") + slow_print(f"{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}etwas im Code veraendert hat. Jemand manipuliert diesen Server. Jetzt.'{Colors.END}") dramatic_pause(1) player.flags["cat_glitch_count"] += 1 @@ -464,8 +464,8 @@ def hell_server(player, rng=None): slow_print(f"{Colors.RED}Sein Körper ist halb Fleisch, halb Server-Rack.{Colors.END}") slow_print(f"{Colors.RED}Seine Raketenwerfer sind mit Ethernet-Kabeln verbunden.{Colors.END}") dramatic_pause(1) - slow_print(f"\n{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Das ist es. Der HELL SERVER.'{Colors.END}") - slow_print(f"{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Wenn wir den zerstören, fällt die gesamte Simulation!'{Colors.END}") + slow_print(f"\n{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Das ist es. Der HELL SERVER.'{Colors.END}") + slow_print(f"{Colors.CYAN}Trinity:{Colors.END} {Colors.YELLOW}'Wenn wir den zerstören, fällt die gesamte Simulation!'{Colors.END}") boss = Enemy.create("cyberdemon") victory = run_combat(player, [boss], title="BOSS: CYBERDEMON", rng=rng)