Skip to content

Prototype F-Zero-style racing game made with Python/pygame. Projekt for retro fun and learning Python.

Notifications You must be signed in to change notification settings

burnshall-ui/mode7-racer

 
 

Repository files navigation

mode7-racer (Fork)

Prototyp eines F-Zero-artigen Rennspiels, entwickelt mit Python/pygame.

Dies ist ein Fork von pschuermann97/mode7-racer mit Gameplay-Verbesserungen.

Screenshot 1 Screenshot 2 Screenshot 3

Aktueller Status

Testversion mit 3 funktionierenden Strecken:

  • Funktioniert1 (neue selbst erstellte Strecke)
  • Event Horizon I
  • Space 3 (komplexe Strecke mit vielen Kurven und Rampen)

Die anderen Strecken sind noch in Arbeit - die Kollisionsdaten passen noch nicht zur Textur.

Änderungen in diesem Fork

  • Animiertes Logo-Intro mit Zoom-Effekt und Sound
  • Retro-Menüsystem mit Logo, Streckenauswahl und Sound-Effekten
    • Navigation-Sounds beim Blättern
    • Bestätigungs-Sound bei Auswahl
    • Animierte Pfeile von beiden Seiten (SNES-Style)
  • Mini-Map (unten links): Statische Streckenübersicht mit Spielerpunkt
    • Optional pro Strecke eigenes Minimap-Bild (siehe Abschnitt „Mini-Map“ unten)
  • Pause-Menü (ESC während des Rennens) mit Continue/Restart/Quit
  • Menü-Musik mit angepasster Lautstärke
  • Höhere Auflösung mit dynamischem Skalierungssystem
  • Pfeiltasten-Steuerung (intuitiver)
  • Angepasste Spielgeschwindigkeit für bessere Spielbarkeit
  • SNES-Style Game Over Bildschirm
  • Rückwärtssprung-Bug behoben
  • Map Editor zum visuellen Erstellen von Strecken-Kollisionen
  • Bobbing-Effekt beim Fahren (F-Zero-Style Auf-und-Ab)
  • Dirt-Zonen als neues Streckenelement (verlangsamt den Spieler)
  • Partikel-Effekte bei der Landung nach Sprüngen (Funkenflug)
  • Verbesserte Sprungphysik (kürzere, präzisere Sprünge)
  • Dedizierte Jump-Animation (Sprite 0004 beim Springen)
  • Highscore-System: Persistente Speicherung der Bestzeiten (JSON).
  • Erweiterte Audio-Kulisse:
    • Differenzierte Motorgeräusche (Leerlauf, Gas, Boost, Lenken)
    • Kollisions-Sounds und Regenerations-Effekte
    • Neuer Race-Finished-Screen mit Musik
  • Performance-Optimierungen:
    • Gecachte Overlay-Surfaces (Game Over, Finish Screen)
    • Gecachte Fonts für bessere Framerate
    • Gecachte Gradient-Hintergründe im Menü
    • Optimierte Konstanten in eigene Module ausgelagert
    • Partikel-Limit für stabile Performance
  • Balance-Verbesserungen:
    • Recovery-Geschwindigkeit 4x schneller (50 statt 13)
    • Energieanzeige korrekt skaliert
    • Konsistentere Schadensberechnung
  • Gamepad/Controller-Unterstützung:
    • Kompatibel mit den meisten USB-Controllern (Logitech, Xbox, PlayStation, etc.)
    • D-Pad oder Analog-Stick für Lenkung
    • Konfigurierbare Buttons und Trigger
    • Funktioniert in Menüs und während des Spiels

Das in dieser Implementierung verwendete Mode7-Rendering-Modul basiert auf dem Mode7-Tutorial von Coder Space (https://www.youtube.com/watch?v=D0MPYZYe40E).

Wenn du mit dem Code des Spielprototyps experimentieren möchtest, siehe Abschnitt "Installationsanweisungen" unten. Wenn du den Prototyp nur ausprobieren möchtest und die erforderlichen Abhängigkeiten nicht auf deinem Computer installieren möchtest, siehe "Test-Build".

Bitte beachte, dass der ursprüngliche Inhalt dieses Repositories unter der Creative Commons Lizenz CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/) verfügbar ist. Ursprünglicher Autor: pschuermann97

Map Editor

Der Map Editor ermöglicht das visuelle Erstellen und Bearbeiten von Strecken-Kollisionsdaten.

Starten

python map_editor.py

Steuerung

Taste Funktion
Q / E Textur wechseln (vorher/nächste)
Pfeiltasten Karte verschieben
+ / - Zoom
T Rechteck-Typ wechseln (Strecke/Rampe/Recovery/Dash/Finish/Checkpoint)
P Startposition setzen (dann auf Karte klicken)
A / D Startwinkel drehen
L Bestehende Track-Kollisionsdaten laden
C Python-Code in Konsole ausgeben
S Python-Code in Datei speichern
N Alles löschen (Rechtecke + Startposition)
ESC Beenden

Maus

Aktion Funktion
Linksklick + Ziehen Neues Rechteck zeichnen
Rechtsklick Rechteck löschen
Mittelklick + Ziehen Karte bewegen
Mausrad Zoom

Workflow: Neue Strecke erstellen

  1. Erstelle eine PNG-Textur (4000x2000 Pixel) und lege sie in gfx/
  2. Starte den Map Editor und wähle die Textur mit Q/E
  3. Zeichne die Strecken-Rechtecke (Typ: Strecke)
  4. Füge Ziellinie, Checkpoints, Rampen etc. hinzu
  5. Setze die Startposition mit P + Klick und drehe den Winkel mit A/D
  6. Drücke C um den Code zu sehen oder S um ihn zu speichern
  7. Kopiere den Code in settings/track_settings.py als neue Track-Funktion
  8. Kopiere die Startposition (init_player_pos_x/y/angle) in settings/league_settings.py
  9. Aktualisiere die Track-Namen in menu.py

Rechteck-Typen

Typ Farbe Beschreibung
Strecke Grün Fahrbare Fläche
Rampe Gelb Sprungschanze
Recovery Cyan Heilzone (regeneriert Energie)
Dash Plate Magenta Speed-Booster
Dirt Braun Verlangsamungszone (Damping-Effekt)
Ziellinie Rot Start/Ziel
Checkpoint Blau Muss passiert werden für gültige Runde

Startposition

Die Startposition wird als oranger Pfeil angezeigt und zeigt Position und Blickrichtung des Spielers beim Rennstart.

  • P drücken, dann auf die Karte klicken um die Position zu setzen
  • A/D um den Startwinkel zu drehen
  • Der generierte Code enthält init_player_pos_x, init_player_pos_y und init_player_angle

Installationsanweisungen

  1. Installiere Python Version 3.10+ auf deinem Computer (https://www.python.org/downloads/)
  2. Installiere pygame: pip install pygame
  3. Installiere numba für Performance-Optimierung: pip install numba
  4. Klone dieses Repository: git clone
  5. Starte das Spiel: python main.py

Test-Build

Du findest den ursprünglichen Test-Build unter https://pschuermann97.itch.io/mode7-racer, der 4 aufeinanderfolgende Rennen bietet.

Steuerung (Spiel)

Tastatur

Taste Funktion
Pfeil Links/Rechts Lenken
Pfeil Hoch Beschleunigen
Pfeil Runter Bremsen
Leertaste Booster verwenden (nach 1 Runde freigeschaltet)
ESC Pause-Menü öffnen
R Rennen neu starten (Debug)

Gamepad/Controller

Das Spiel unterstützt die meisten USB-Controller (Logitech, Xbox, PlayStation, etc.).

Button Funktion
D-Pad / Linker Stick Lenken
X / Kreuz (Button 0) Beschleunigen / Bestätigen
Dreieck (Button 3) Bremsen
Kreis (Button 1) Booster
Start (Button 9) Pause-Menü

Tipp: Die Button-Belegung kann in settings/gamepad_settings.py angepasst werden. Setze dort GAMEPAD_DEBUG = True, um die Button-Nummern deines Controllers in der Konsole zu sehen.

Menü-Steuerung

Taste / Button Funktion
Pfeil Hoch/Runter oder D-Pad Menü-Navigation
Enter / Leertaste oder X-Button Bestätigen
ESC oder Start-Button Pause-Menü schließen

Jedes Rennen erfordert 3 Runden zum Abschluss. Nach Abschluss eines Rennens drücke Leertaste, um zum nächsten zu springen. Wenn deine Energie auf null sinkt, drücke Leertaste zum Neustart.

Mini-Map

Während eines Rennens wird unten links eine statische Mini-Map angezeigt.

  • Eigene Mini-Map pro Strecke (empfohlen):
    • Lege ein Bild unter gfx/ui/minimaps/ ab.
    • Namenskonvention: gfx/ui/minimaps/<floor_texture_basename>_minimap.png
    • Beispiel: gfx/event_horizon_track2.pnggfx/ui/minimaps/event_horizon_track2_minimap.png
  • Fallback: Wenn kein Bild vorhanden ist, rendert das Spiel eine einfache Mini-Map aus den Kollisions-Rechtecken.
  • Konfiguration: Siehe settings/ui_settings.py (z.B. MINIMAP_ENABLED, Skalierung/Größe, Marker-Verhalten).

About

Prototype F-Zero-style racing game made with Python/pygame. Projekt for retro fun and learning Python.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%