Files
Doom-Matrix-Classic/doom-matrix-adventure.py
T

580 lines
28 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
DOOM × MATRIX: SYSTEM FAILURE
Ein interaktives Text-Adventure
"""
import sys
import time
import random
import os
# Farbcodes für Terminal
class Colors:
GREEN = '\033[92m'
RED = '\033[91m'
CYAN = '\033[96m'
YELLOW = '\033[93m'
MAGENTA = '\033[95m'
WHITE = '\033[97m'
BOLD = '\033[1m'
DIM = '\033[2m'
END = '\033[0m'
# Spieler-Status
class Player:
def __init__(self):
self.name = "The One Slayer"
self.health = 100
self.armor = 0
self.weapons = ["Fists"]
self.ammo = {"bullets": 0, "shells": 0, "cells": 0, "bfg": 0}
self.layer = 3 # Start in Matrix
self.inventory = []
self.glory_kills = 0
self.hacks = 0
self.location = "construct"
def show_status(self):
print(f"\n{Colors.BOLD}{Colors.CYAN}═══ STATUS ═══{Colors.END}")
print(f"Health: {self._bar(self.health, 100, Colors.RED)}")
print(f"Armor: {self._bar(self.armor, 100, Colors.YELLOW)}")
print(f"Layer: {self._layer_name()}")
print(f"Weapons: {', '.join(self.weapons)}")
if any(self.ammo.values()):
print(f"Ammo: {', '.join([f'{k}={v}' for k,v in self.ammo.items() if v > 0])}")
print(f"{Colors.CYAN}══════════════{Colors.END}\n")
def _bar(self, val, max_val, color):
filled = int(val / max_val * 20)
bar = '█' * filled + '░' * (20 - filled)
return f"{color}{bar}{Colors.END} {val}%"
def _layer_name(self):
layers = {
4: f"{Colors.RED}MARS UAC BASE{Colors.END}",
3: f"{Colors.GREEN}THE MATRIX{Colors.END}",
2: f"{Colors.MAGENTA}HELL SERVER{Colors.END}",
1: f"{Colors.YELLOW}THE ARCHITECT'S CORE{Colors.END}"
}
return layers.get(self.layer, "UNKNOWN")
def slow_print(text, delay=0.02):
"""Langsames Tippen für Dramatik"""
for char in text:
print(char, end='', flush=True)
time.sleep(delay)
print()
def dramatic_pause(seconds=1):
time.sleep(seconds)
def clear_screen():
os.system('clear' if os.name != 'nt' else 'cls')
def title_screen():
clear_screen()
print(f"""
{Colors.RED}{Colors.BOLD}
██████╗ ██████╗ ██████╗ ███╗ ███╗
██╔══██╗██╔═══██╗██╔═══██╗████╗ ████║
██║ ██║██║ ██║██║ ██║██╔████╔██║
██║ ██║██║ ██║██║ ██║██║╚██╔╝██║
██████╔╝╚██████╔╝╚██████╔╝██║ ╚═╝ ██║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
{Colors.END}
{Colors.GREEN}{Colors.BOLD}
███╗ ███╗ █████╗ ████████╗██████╗ ██╗██╗ ██╗
████╗ ████║██╔══██╗╚══██╔══╝██╔══██╗██║╚██╗██╔╝
██╔████╔██║███████║ ██║ ██████╔╝██║ ╚███╔╝
██║╚██╔╝██║██╔══██║ ██║ ██╔══██╗██║ ██╔██╗
██║ ╚═╝ ██║██║ ██║ ██║ ██║ ██║██║██╔╝ ██╗
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝
{Colors.END}
{Colors.YELLOW}{Colors.BOLD}
╔═══════════════════════════════════════╗
║ S Y S T E M F A I L U R E ║
╚═══════════════════════════════════════╝
{Colors.END}
{Colors.DIM}
"What if the Matrix was just a very
inefficient DOOM engine?"
{Colors.END}
""")
print(f"\n{Colors.CYAN}[Drücke ENTER um zu starten]{Colors.END}")
input()
def intro(player):
clear_screen()
slow_print(f"{Colors.GREEN}Du wachst auf...{Colors.END}", 0.05)
dramatic_pause(1)
slow_print(f"\n{Colors.WHITE}Um dich herum: Grüner Code. Endlose Zeilen davon.{Colors.END}")
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}")
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}")
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}")
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}")
dramatic_pause(0.5)
slow_print(f"\n{Colors.CYAN}Morpheus Hayden:{Colors.END} {Colors.YELLOW}'Waffen. Jetzt.'{Colors.END}")
slow_print(f"{Colors.WHITE}Vor dir materialisieren sich zwei Waffen:{Colors.END}")
print(f"\n {Colors.GREEN}[1]{Colors.END} Super Shotgun (klassisch, brutal)")
print(f" {Colors.GREEN}[2]{Colors.END} Plasma Rifle (Matrix-Style, hacking-fähig)")
choice = input(f"\n{Colors.CYAN}Wähle deine Waffe: {Colors.END}").strip()
if choice == "1":
player.weapons.append("Super Shotgun")
player.ammo["shells"] = 20
slow_print(f"\n{Colors.YELLOW}Du greifst die Super Shotgun. Das Gewicht fühlt sich... richtig an.{Colors.END}")
else:
player.weapons.append("Plasma Rifle")
player.ammo["cells"] = 100
slow_print(f"\n{Colors.YELLOW}Du greifst das Plasma Rifle. Die Energieanzeige pulsiert im Takt des Matrix-Codes.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.RED}KRACH!{Colors.END}")
slow_print(f"{Colors.WHITE}Die Wand explodiert. Ein Agent stürmt herein — aber er sieht... falsch aus.{Colors.END}")
slow_print(f"{Colors.WHITE}Sein Anzug ist zerrissen. Unter der Haut: Schuppen. Hörner.{Colors.END}")
return "agent_fight"
def agent_fight(player):
slow_print(f"\n{Colors.BOLD}{Colors.RED}═══ KAMPF: AGENT IMP ═══{Colors.END}")
agent_health = 50
while agent_health > 0 and player.health > 0:
print(f"\n{Colors.RED}Agent Imp:{Colors.END} {agent_health} HP")
print(f"{Colors.CYAN}Du:{Colors.END} {player.health} HP | {player.armor} Armor")
print(f"\n {Colors.GREEN}[1]{Colors.END} Schießen")
print(f" {Colors.GREEN}[2]{Colors.END} Ausweichen (Bullet Time)")
print(f" {Colors.GREEN}[3]{Colors.END} Glory Kill (Nahkampf)")
print(f" {Colors.GREEN}[4]{Colors.END} Hack (Matrix-Manipulation)")
action = input(f"\n{Colors.CYAN}Aktion: {Colors.END}").strip()
if action == "1":
if "Super Shotgun" in player.weapons and player.ammo["shells"] > 0:
damage = random.randint(15, 25)
player.ammo["shells"] -= 2
slow_print(f"\n{Colors.YELLOW}BOOM! Die Super Shotgun trifft den Agenten direkt in die Brust!{Colors.END}")
elif "Plasma Rifle" in player.weapons and player.ammo["cells"] > 0:
damage = random.randint(10, 20)
player.ammo["cells"] -= 10
slow_print(f"\n{Colors.YELLOW}Zzzzt! Plasma-Bolzen durchbohren den Agenten!{Colors.END}")
else:
damage = random.randint(3, 8)
slow_print(f"\n{Colors.YELLOW}Du schlägst mit den Fäusten zu. Nicht sehr effektiv...{Colors.END}")
agent_health -= damage
slow_print(f"{Colors.RED}-{damage} HP für den Agenten!{Colors.END}")
elif action == "2":
slow_print(f"\n{Colors.GREEN}Zeit verlangsamt sich. Grüner Code umhüllt dich.{Colors.END}")
slow_print(f"{Colors.GREEN}Du weichst den Kugeln aus wie Neo — aber mit mehr Wut.{Colors.END}")
player.armor = min(100, player.armor + 10)
slow_print(f"{Colors.YELLOW}Armor +10!{Colors.END}")
elif action == "3":
if agent_health <= 15:
slow_print(f"\n{Colors.RED}{Colors.BOLD}GLORY KILL!{Colors.END}")
slow_print(f"{Colors.RED}Du stürmst vor, packst den Agenten und RISSST seinen Kopf ab!{Colors.END}")
slow_print(f"{Colors.RED}Grüne Flüssigkeit spritzt — kein Blut. Code.{Colors.END}")
agent_health = 0
player.health = min(100, player.health + 25)
player.glory_kills += 1
slow_print(f"{Colors.GREEN}+25 HP! Der Tod des Agenten heilt dich.{Colors.END}")
else:
slow_print(f"\n{Colors.YELLOW}Zu weit weg für einen Glory Kill!{Colors.END}")
damage = random.randint(5, 10)
player.health -= damage
slow_print(f"{Colors.RED}Der Agent trifft dich! -{damage} HP!{Colors.END}")
elif action == "4":
if player.hacks < 3:
slow_print(f"\n{Colors.GREEN}Du greifst in den Code ein...{Colors.END}")
slow_print(f"{Colors.GREEN}'There is no spoon' — aber es gibt einen Bug.{Colors.END}")
agent_health -= 20
player.hacks += 1
slow_print(f"{Colors.RED}Der Agent glitched! -20 HP!{Colors.END}")
else:
slow_print(f"\n{Colors.RED}Das System hat deine Hacks erkannt! Firewall aktiviert!{Colors.END}")
damage = random.randint(10, 20)
player.health -= damage
slow_print(f"{Colors.RED}Rückstoß-Schaden! -{damage} HP!{Colors.END}")
# Agent greift an
if agent_health > 0:
dramatic_pause(0.5)
attack_type = random.choice(["shoot", "glitch", "spawn"])
if attack_type == "shoot":
damage = random.randint(5, 15)
if player.armor > 0:
armor_absorb = min(player.armor, damage)
player.armor -= armor_absorb
damage -= armor_absorb
slow_print(f"\n{Colors.RED}Der Agent schießt! Armor absorbiert {armor_absorb} Schaden!{Colors.END}")
player.health -= damage
slow_print(f"{Colors.RED}Du erleidest {damage} Schaden!{Colors.END}")
elif attack_type == "glitch":
slow_print(f"\n{Colors.MAGENTA}Der Agent glitched durch den Raum! Er ist direkt vor dir!{Colors.END}")
damage = random.randint(10, 20)
player.health -= damage
slow_print(f"{Colors.RED}Hinterhalt! -{damage} HP!{Colors.END}")
else:
slow_print(f"\n{Colors.MAGENTA}Der Agent spawnt einen Mini-Imp!{Colors.END}")
slow_print(f"{Colors.RED}Der Imp beißt dich! -5 HP!{Colors.END}")
player.health -= 5
if player.health <= 0:
slow_print(f"\n{Colors.RED}{Colors.BOLD}GAME OVER{Colors.END}")
slow_print(f"{Colors.RED}Der Agent hat dich terminiert.{Colors.END}")
slow_print(f"{Colors.DIM}Morpheus Hayden: 'Er war nicht bereit...'{Colors.END}")
return "game_over"
slow_print(f"\n{Colors.GREEN}{Colors.BOLD}AGENT IMP ELIMINIERT!{Colors.END}")
slow_print(f"{Colors.YELLOW}Sein Körper zerfällt zu grünem Code und verschwindet.{Colors.END}")
dramatic_pause(1)
return "after_fight"
def after_fight(player):
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}")
dramatic_pause(0.5)
slow_print(f"\n{Colors.WHITE}Vor dir öffnen sich drei Portale:{Colors.END}")
print(f"\n {Colors.GREEN}[1]{Colors.END} {Colors.RED}Roter Tunnel{Colors.END} — zurück zur Mars-UAC-Base (Layer 4)")
print(f" {Colors.GREEN}[2]{Colors.END} {Colors.GREEN}Grüner Code-Strom{Colors.END} — tiefer in die Matrix (Layer 3)")
print(f" {Colors.GREEN}[3]{Colors.END} {Colors.MAGENTA}Schwarzes Loch{Colors.END} — direkt zum HELL SERVER (Layer 2)")
choice = input(f"\n{Colors.CYAN}Wähle deinen Weg: {Colors.END}").strip()
if choice == "1":
player.layer = 4
return "mars_base"
elif choice == "2":
player.layer = 3
return "matrix_deep"
else:
player.layer = 2
return "hell_server"
def mars_base(player):
slow_print(f"\n{Colors.RED}{Colors.BOLD}═══ MARS UAC BASE ═══{Colors.END}")
slow_print(f"{Colors.WHITE}Du materialisierst dich in einer kalten, roten Landschaft.{Colors.END}")
slow_print(f"{Colors.WHITE}Die UAC-Base liegt in Trümmern. Dämonen-Überreste überall.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.YELLOW}Ein Terminal flackert. Eine Nachricht von Dr. Betruger...{Colors.END}")
slow_print(f"{Colors.DIM}'Sie haben uns angelogen. Die Maschinen und die Dämonen...'{Colors.END}")
slow_print(f"{Colors.DIM}'...sie arbeiten zusammen. Die Matrix IST die Hölle.'{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.CYAN}Trinity VEGA:{Colors.END} {Colors.YELLOW}'Wir müssen den BFG 10000 finden. Er ist hier irgendwo.'{Colors.END}")
print(f"\n {Colors.GREEN}[1]{Colors.END} Waffenkammer durchsuchen")
print(f" {Colors.GREEN}[2]{Colors.END} Kontrollzentrum hacken")
print(f" {Colors.GREEN}[3]{Colors.END} Direkt zum HELL SERVER portalen")
choice = input(f"\n{Colors.CYAN}Aktion: {Colors.END}").strip()
if choice == "1":
slow_print(f"\n{Colors.GREEN}Du findest den BFG 10000!{Colors.END}")
player.weapons.append("BFG 10000")
player.ammo["bfg"] = 3
slow_print(f"{Colors.YELLOW}'Big Fucking Gun' — die ultimative Waffe.{Colors.END}")
slow_print(f"{Colors.RED}WARNUNG: Jeder Schuss verbraucht enorme Energie.{Colors.END}")
elif choice == "2":
slow_print(f"\n{Colors.GREEN}Du hackst das Kontrollzentrum...{Colors.END}")
slow_print(f"{Colors.GREEN}Koordinaten zum HELL SERVER gefunden!{Colors.END}")
player.hacks += 2
slow_print(f"{Colors.YELLOW}Du kannst jetzt zwischen Layern frei reisen!{Colors.END}")
else:
slow_print(f"\n{Colors.YELLOW}Du aktivierst das Portal...{Colors.END}")
dramatic_pause(1)
player.layer = 2
return "hell_server"
def matrix_deep(player):
slow_print(f"\n{Colors.GREEN}{Colors.BOLD}═══ TIEF IN DER MATRIX ═══{Colors.END}")
slow_print(f"{Colors.WHITE}Der Code wird dichter. Realität ist hier nur eine Option.{Colors.END}")
slow_print(f"{Colors.WHITE}Du siehst endlose Reihen von Menschen in Stasiskapseln —{Colors.END}")
slow_print(f"{Colors.WHITE}aber sie spielen nicht nur Sims. Sie RENDERN.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.CYAN}Ein Agent erscheint — aber er sieht normal aus. Smith?{Colors.END}")
slow_print(f"{Colors.CYAN}Agent Smith:{Colors.END} {Colors.YELLOW}'Mr. Anderson... oder sollte ich sagen...{Colors.END}")
slow_print(f"{Colors.CYAN}Agent Smith:{Colors.END} {Colors.YELLOW}'...Doom Slayer?'{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.RED}Smith lächelt. Sein Lächeln ist zu breit. Zu viele Zähne.{Colors.END}")
print(f"\n {Colors.GREEN}[1]{Colors.END} 'Mein Name ist Neo.' (Klassisch)")
print(f" {Colors.GREEN}[2]{Colors.END} 'Rip and tear, until it is done.' (Doom)")
print(f" {Colors.GREEN}[3]{Colors.END} Beides gleichzeitig sagen (Chaos)")
choice = input(f"\n{Colors.CYAN}Deine Antwort: {Colors.END}").strip()
if choice == "1":
slow_print(f"\n{Colors.GREEN}'Mein Name ist Neo.'{Colors.END}")
slow_print(f"{Colors.CYAN}Smith:{Colors.END} {Colors.YELLOW}'Wie vorhersehbar.'{Colors.END}")
slow_print(f"{Colors.RED}Smith multipliziert sich! 5 Agenten umzingeln dich!{Colors.END}")
elif choice == "2":
slow_print(f"\n{Colors.RED}'Rip and tear, until it is done.'{Colors.END}")
slow_print(f"{Colors.CYAN}Smith:{Colors.END} {Colors.YELLOW}'Interessant. Sie haben sich verändert.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Smith zögert. Er kennt diese Worte nicht.{Colors.END}")
player.armor += 20
else:
slow_print(f"\n{Colors.GREEN}'Mein Name ist Neo...'{Colors.END}")
dramatic_pause(0.5)
slow_print(f"{Colors.RED}'...und ICH WERDE ALLES ZERREISSEN!'{Colors.END}")
slow_print(f"{Colors.YELLOW}Du aktivierst Bullet Time UND Berserker-Mode gleichzeitig!{Colors.END}")
player.health = min(100, player.health + 20)
player.armor += 30
dramatic_pause(1)
slow_print(f"\n{Colors.RED}Der Kampf beginnt! Aber Smith ist nicht allein...{Colors.END}")
slow_print(f"{Colors.MAGENTA}Hinter ihm öffnet sich ein Portal — zur Hölle.{Colors.END}")
player.layer = 2
return "hell_server"
def hell_server(player):
slow_print(f"\n{Colors.MAGENTA}{Colors.BOLD}═══ HELL SERVER ═══{Colors.END}")
slow_print(f"{Colors.WHITE}Du betrittst einen Raum, der nicht existieren sollte.{Colors.END}")
slow_print(f"{Colors.WHITE}Lava-Flüsse aus geschmolzenem Silizium.{Colors.END}")
slow_print(f"{Colors.WHITE}Dämonen mit Netzwerk-Kabeln statt Nervensträngen.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.RED}Ein Cyberdemon tritt aus den Schatten.{Colors.END}")
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}")
print(f"\n {Colors.GREEN}[1]{Colors.END} Direkter Angriff")
print(f" {Colors.GREEN}[2]{Colors.END} Umgebung hacken (Lava-Flüsse umleiten)")
if "BFG 10000" in player.weapons:
print(f" {Colors.GREEN}[3]{Colors.END} BFG 10000 einsetzen!")
choice = input(f"\n{Colors.CYAN}Taktik: {Colors.END}").strip()
if choice == "3" and "BFG 10000" in player.weapons:
slow_print(f"\n{Colors.RED}{Colors.BOLD}BFG 10000 AKTIVIERT!{Colors.END}")
slow_print(f"{Colors.RED}Die grüne Kugel der Zerstörung fliegt auf den Cyberdemon zu...{Colors.END}")
dramatic_pause(2)
slow_print(f"\n{Colors.YELLOW}Der Cyberdemon SCREAMT in digitalen Tönen!{Colors.END}")
slow_print(f"{Colors.YELLOW}Sein Körper zerfällt in Bytes und Asche!{Colors.END}")
slow_print(f"{Colors.GREEN}Der HELL SERVER stürzt ein!{Colors.END}")
return "final_boss"
elif choice == "2":
slow_print(f"\n{Colors.GREEN}Du greifst in den Server-Code ein...{Colors.END}")
slow_print(f"{Colors.GREEN}'There is no spoon — aber es gibt einen Buffer Overflow!'{Colors.END}")
slow_print(f"{Colors.RED}Lava-Flüsse ändern ihre Richtung!{Colors.END}")
slow_print(f"{Colors.RED}Der Cyberdemon wird von geschmolzenem Silizium überflutet!{Colors.END}")
return "final_boss"
else:
slow_print(f"\n{Colors.RED}Du stürmst vor!{Colors.END}")
slow_print(f"{Colors.RED}Kugeln fliegen. Raketen explodieren.{Colors.END}")
player.health -= 30
slow_print(f"{Colors.RED}Du erleidest schwere Schäden! -30 HP!{Colors.END}")
if player.health > 0:
slow_print(f"\n{Colors.GREEN}Aber du erreichst den Cyberdemon!{Colors.END}")
slow_print(f"{Colors.RED}GLORY KILL! Du reißt sein Server-Rack aus dem Körper!{Colors.END}")
return "final_boss"
else:
return "game_over"
def final_boss(player):
dramatic_pause(2)
clear_screen()
slow_print(f"\n{Colors.YELLOW}{Colors.BOLD}═══ DER ARCHI-LORD ═══{Colors.END}")
slow_print(f"{Colors.WHITE}Hinter dem Trümmern des HELL SERVERS öffnet sich eine weiße Tür.{Colors.END}")
slow_print(f"{Colors.WHITE}Dahinter: Ein Raum aus reinem Licht. Und Code.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.YELLOW}Eine Gestalt materialisiert — halb Der Architekt, halb Dark Lord Davoth.{Colors.END}")
slow_print(f"{Colors.YELLOW}Der Archi-Lord.{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Willkommen, Doom Slayer. Oder Neo. Oder wer auch immer Sie heute sind.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Sie haben beide Systeme zerstört. Die Matrix. Die Hölle.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Was erwarten Sie als Nächstes? Eine Medaille?'{Colors.END}")
dramatic_pause(1)
print(f"\n {Colors.GREEN}[1]{Colors.END} 'Ich will die Wahrheit.'")
print(f" {Colors.GREEN}[2]{Colors.END} 'Ich will alles zerstören.'")
print(f" {Colors.GREEN}[3]{Colors.END} 'Ich will... einen neuen Spielstand.'")
choice = input(f"\n{Colors.CYAN}Deine Antwort: {Colors.END}").strip()
if choice == "1":
slow_print(f"\n{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Die Wahrheit? Die Wahrheit ist...'{Colors.END}")
dramatic_pause(2)
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'...dass Sie nur Code sind. In meinem Code. In meinem Spiel.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Aber Sie haben gewonnen. Also...'{Colors.END}")
elif choice == "2":
slow_print(f"\n{Colors.RED}Du aktivierst alle Waffen gleichzeitig.{Colors.END}")
slow_print(f"{Colors.RED}Super Shotgun. Plasma Rifle. BFG 10000. Fäuste.{Colors.END}")
slow_print(f"{Colors.RED}Und etwas Neues — einen Crucible Sword aus reinem Code.{Colors.END}")
else:
slow_print(f"\n{Colors.GREEN}Du lächelst.{Colors.END}")
slow_print(f"{Colors.GREEN}'Ich will einen neuen Spielstand.'{Colors.END}")
slow_print(f"{Colors.GREEN}'Mit Cheats.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'...Interessant.'{Colors.END}")
dramatic_pause(2)
slow_print(f"\n{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Sie haben gewonnen, Mr. Anderson.'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'Oder Doom Slayer. Oder...'{Colors.END}")
slow_print(f"{Colors.YELLOW}Archi-Lord:{Colors.END} {Colors.WHITE}'...wie auch immer Sie sich nennen wollen.'{Colors.END}")
dramatic_pause(1)
slow_print(f"\n{Colors.GREEN}Die Welt um dich herum zerfällt — aber nicht in Chaos.{Colors.END}")
slow_print(f"{Colors.GREEN}Sie reorganisiert sich. Wird zu etwas Neuem.{Colors.END}")
slow_print(f"{Colors.GREEN}Eine Welt, in der Menschen frei sind.{Colors.END}")
slow_print(f"{Colors.GREEN}Und Dämonen... naja, die gibt's immer noch.{Colors.END}")
slow_print(f"{Colors.GREEN}Aber jetzt haben wir Waffen.{Colors.END}")
return "ending"
def ending(player):
dramatic_pause(2)
clear_screen()
print(f"""
{Colors.GREEN}{Colors.BOLD}
╔═══════════════════════════════════════════════════╗
║ ║
║ S Y S T E M F A I L U R E - C L E A R ║
║ ║
╚═══════════════════════════════════════════════════╝
{Colors.END}
""")
slow_print(f"\n{Colors.CYAN}Statistiken:{Colors.END}")
print(f" Health übrig: {player.health}%")
print(f" Glory Kills: {player.glory_kills}")
print(f" Hacks: {player.hacks}")
print(f" Waffen: {', '.join(player.weapons)}")
print(f" Layer erreicht: {player._layer_name()}")
slow_print(f"\n{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}Du:{Colors.END} {Colors.CYAN}'Gut. Dann gibt's noch mehr zu rip and tear.'{Colors.END}")
dramatic_pause(1)
print(f"""
{Colors.MAGENTA}{Colors.BOLD}
╔═══════════════════════════════════════════════════╗
║ ║
║ N E W G A M E + U N L O C K E D ║
║ ║
║ • God Mode ║
║ • Unendlich Munition ║
║ • Alle Waffen ║
║ • Matrix-Hacking ║
║ ║
║ "Let's rip and tear, Mr. Anderson." ║
║ ║
╚═══════════════════════════════════════════════════╝
{Colors.END}
""")
slow_print(f"\n{Colors.GREEN}Danke fürs Spielen! 🐇{Colors.END}")
slow_print(f"{Colors.DIM}Erstellt von LXC für Andy{Colors.END}")
def game_over(player):
clear_screen()
print(f"""
{Colors.RED}{Colors.BOLD}
╔═══════════════════════════════════════════════════╗
║ ║
║ G A M E O V E R ║
║ ║
╚═══════════════════════════════════════════════════╝
{Colors.END}
""")
slow_print(f"\n{Colors.RED}Du bist gefallen...{Colors.END}")
slow_print(f"{Colors.DIM}Aber in der Matrix ist Tod nur ein Bug.{Colors.END}")
slow_print(f"{Colors.DIM}Ein Patch könnte helfen.{Colors.END}")
print(f"\n{Colors.CYAN}[ENTER zum Beenden]{Colors.END}")
input()
sys.exit(0)
def main():
player = Player()
title_screen()
# Spiel-Loop
current_scene = intro(player)
scenes = {
"agent_fight": agent_fight,
"after_fight": after_fight,
"mars_base": mars_base,
"matrix_deep": matrix_deep,
"hell_server": hell_server,
"final_boss": final_boss,
"ending": ending,
"game_over": game_over
}
while current_scene != "ending" and current_scene != "game_over":
if current_scene in scenes:
current_scene = scenes[current_scene](player)
else:
break
# Ending
if current_scene == "ending":
ending(player)
print(f"\n{Colors.CYAN}[ENTER zum Beenden]{Colors.END}")
input()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print(f"\n\n{Colors.YELLOW}Spiel unterbrochen. Bis zum nächsten Mal! 🐇{Colors.END}")
sys.exit(0)