• Welcome to Schneider / Amstrad CPC Forum.
Welcome to Schneider / Amstrad CPC Forum. Please login.

10. October 2026, 04:45:59

Login with username, password and session length

Shoutbox

TFM

2026-06-04, 18:26:16
Zwei Jahre später... und wieder ein Sommerloch!

TFM

2024-04-08, 20:42:44
Happy Sonnenfinsternis!  :)

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devil-System

2023-07-09, 10:37:40
Zweiter 👋😂🤣

Recent

Members
Stats
  • Total Posts: 13,121
  • Total Topics: 1,566
  • Online today: 233
  • Online ever: 12,177
  • (30. July 2026, 22:15:07)
Users Online
Users: 0
Guests: 250
Total: 250

250 Guests, 0 Users

Hexenküche (Cauldron) 2026

Started by Devil-System, 02. October 2026, 18:07:04

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Devil-System

Ich habe Hexenküche komplett zerlegt und größtenteils neu geschrieben. (mit Hilfe von KI)
Dabei herausgekommen ist eine komplett neue Version des Spiels, die ich zu Halloween releasen möchte.
Hier für euch ein Teaser bereits: (Selbstlaufende Demo der Spieleengine)


Online:
https://jamsi.cpcwiki.de/?s=jdQ4AmUr2x1r&embedded=true&input=RUN%22DEMO%22

Oder als DSK:
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

Was hat die KI denn verbessert?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)

Devil-System

Cauldron 2026 - Aenderungen gegenueber Hexenkueche (1985)
==========================================================

Entwicklungshistorie, keine aktuelle Spielanleitung. Spaetere Eintraege
ersetzen fruehere Angaben. Spielanleitung: Cauldron2026.txt.
Aktueller Build und technische Dokumentation: README.txt.

1. Flugtraegheit (Oberwelt)                                  [fertig]
   - src/cauldron2026.asm: fly_inertia / fly_reset (Segment extra ab #876B)
   - Aufruf im land_loop statt fester dx=4; Hauptcode behaelt seine Laenge.
   - Parameter (Einheit 1/16 Pixel pro Bewegungsschritt):
       FLY_VMAX  64  Hoechstgeschwindigkeit (= Original 4 px)
       FLY_ACC   10  Beschleunigung
       FLY_FRIC   3  Ausrollen ohne Eingabe (~20 Schritte, ~50 px)
       FLY_BRAKE 14  Zusatzbremse beim Gegenlenken
   - Hoch/runter unveraendert direkt.
   - Geschwindigkeit wird beim Landen/Laufen/Tod geloescht.

Build:  python build.py   ->  disk/cauldron2026.dsk
Test:   python tools_py/test_run.py analysis/t_new
        (laeuft einen Raum nach rechts und hebt dort auf der freien Flaeche ab;
         NODEATH=1 schaltet die Baum-Absturzpruefung fuer Sondertests ab)

2. Maskierte Sprites statt XOR                                [fertig]
   - Sprites ueberdecken den Hintergrund deckend; Stift 0 ist transparent.
     Keine Farbmischung mehr vor Baeumen, Haus, Mond oder Hoehlenwaenden.
   - Hintergrundsicherung: 8 x 126 Byte bei #BBC0-#BFAF
     (Stack braucht nur #BFD2-#BFEF, gemessen mit Zufallsspiel).
   - Ablauf je Durchlauf: alle Slots rueckwaerts wiederherstellen (sprites_off),
     dann alle vorwaerts maskiert zeichnen (sprites_on).
   - Kollision unveraendert pixelgenau: Sprite-Pixel ueber Stift 8-15.
   - Maske wird pro Byte berechnet (keine 256-Byte-Tabelle noetig).
   - Angepasst: update_sprites (2 Aufrufe), erase_sprites, remove_sprite,
     place_sprite, init_sprites, clear_screen, blit_xor (Tueranimation).
     Alle Patches im Hauptcode behalten die Laenge.
   - Taktgeber Oberwelt (LAND_PACE = 37 Interrupts): Im Original bremsten die
     Rasterwartezeiten je Sprite das Spiel; ohne sie liefe es ~60 % zu schnell.
     Gemessen: Original 8,0 / neu 8,5 Durchlaeufe pro Sekunde, Hoehle 10,0 / 10,0.

Werkzeuge:
   tools_py/speed.py        Spieltempo messen (CPC_FILES=... fuer das Original)
   tools_py/shots.py        Vergleichsbilder Kesselraum/Oberwelt
   tools_py/random_play.py  Zufallsspiel mit Screenshots (Grafikreste finden)

Sprite-Engine ohne Flimmern (Überarbeitung)
-------------------------------------------
- Sprites, die sich nicht überlappen, werden einzeln erneuert:
  Hintergrund zurück, maskiert neu zeichnen.
- Überlappende Sprites bilden eine Gruppe (mit ihren Partnern, auch den
  alten Lagen). Für die Gruppe den Hintergrund rückwärts zurückschreiben,
  dann vorwärts neu zeichnen.
- Zeitpunkt ist jeweils das Rasterfenster knapp unter dem Sprite bzw. der
  Gruppe (Interrupt 3/4/5/6/1). So bleibt fast ein ganzer Frame Zeit, bis
  der Strahl wieder dort ankommt.
- Titel-Logo liegt jetzt in der Zusatzbank des 6128 (Bank 4, &4000) und
  wird von dort gezeichnet. Das schafft Platz im Hauptspeicher für die
  neue Engine. Das Spiel braucht damit einen CPC 6128 (bzw. 128 KB).
- Messung (tools_py/flicker.py): flimmernde Flug-Frames
  vorher ca. 34 %, jetzt 0–2 %.

Cheat: Unsterblich
------------------
- Im Titel mit C statt Feuer starten -> unsterblich:
  Die Magie sinkt nicht, und es gehen keine Leben verloren.
  Ein Absturz wird noch gezeigt, kostet aber nichts.
- Mit Feuer gestartet ist wieder alles normal (der Cheat wird bei jedem
  Start neu gesetzt).

------------------------------------------------------------
Horizontales Scrolling in der Oberwelt (land2026.asm, Datei X1.BIN)
------------------------------------------------------------
- Nur der Landschaftsstreifen (Zeilen 144-199) scrollt, byteweise und
  zeilenweise synchron zum Raster ab Interrupt 5; die Hexe bleibt in der
  Bildmitte (X 74/75), alle anderen Sprites werden mitverschoben.
- Die Welt ist ein Ring aus 62 Bildschirmen; Haustueren/Tore werden beim
  Aufbau neuer Spalten eingeblendet, Tuer-Animationen werden auf die
  Kamera umgerechnet.
- Hoehlen scrollen nicht (Originalverhalten).
- Speicher: Der Oberwelt-Code (2643 Byte) liegt in Bank 4 (#4500) und wird
  beim Betreten der Oberwelt nach #33B0 kopiert (Platz der Hoehlen-
  Raumdaten). Hoehlen-Tiles (#0040) und -Raumdaten liegen als Kopie in
  Bank 4 (#5200/#5C00) und werden beim Betreten einer Hoehle
  zurueckgeholt. #0040-#09AF dient in der Oberwelt als Zeilenpuffer.
- Oberwelt ca. 7,5 Durchlaeufe/s (vorher 8), Hoehle unveraendert 10.
- Behoben: doppelter Tuer-Blit (alte/neue Phase) zog die Kamera zweimal ab.

------------------------------------------------------------
Korrekturen: Energiefelder in der Oberwelt, Ton beim Magie-Tanken
------------------------------------------------------------
- Energiefelder (und andere Objekte) erschienen beim Scrollen oft nicht:
  lag ein Objekt beim Bildschirmwechsel ausserhalb des Bildes, wurde es
  verworfen, und die Original-Spawnroutine versuchte danach immer wieder
  dasselbe Objekt. Neu (land2026.asm): spawn_all (Objekt j -> Slot j+2 wie
  im Original) und eine Warteliste (6 Eintraege) fuer Objekte ausserhalb
  des Bildes; Energiefelder/Schluessel, die aus dem Bild scrollen, kommen
  beim Zurueckscrollen wieder.
- Ton auf dem Energiefeld: die Kollision wird seit der Sprite-Engine am
  Schleifenende ermittelt, sound_c_timeout schaltete den Ton sofort wieder
  ab (nur ein Knacken). witch_hit_bolt haelt ihn jetzt 2 Durchlaeufe und
  stoesst die Huellkurve jeden Durchlauf neu an (wie im Original).

------------------------------------------------------------
Dreisprachig: Deutsch / English / Francais
------------------------------------------------------------
- Sprachwahl im Loader (BACK1): 1 = Deutsch, 2 = English, 3 = Francais.
- Ladebild passend zur Sprache: C1.BIN (DE), C2.BIN (UK), C3.BIN (F),
  aus den Original-Disketten extrahiert.
- L1.BIN (Bank 4, #6900): Textbloecke EN/FR, Cauldron-Logo (29 x 35),
  Apostroph-Zeichen fuer FR. Der Stub (set_language) kopiert den Textblock
  nach #ACF6 und setzt die 15 Text-Operanden im Code um; build.py prueft
  diese Operanden.
- Quellen: src/lang/text_en.asm, src/lang/text_fr.asm (DB-Texte), erzeugt
  mit tools_py/gen_lang.py aus den Originalen (tools_py/intl_extract.py
  liest die kopiergeschuetzten UK/F-Disketten: Ladeskript von DISC.BIN).
- FR: die zwei Startzeilen ueberlappten im Original; korrigiert.
- Die UK/F-Originale unterscheiden sich vom deutschen Spiel nur in Texten,
  Logo, Ladebild und einem Zeichen; Spiellogik identisch.

------------------------------------------------------------
Korrekturen: Ladebild EN/FR, DISC.BAS, Rauch am Hexenhaus
------------------------------------------------------------
- Ladebild fuer English/Francais: data/TITLEEN.SCR (JavaCPC) -> C2.BIN
  und C3.BIN (vorher falsch aus der Originaldiskette extrahiert).
- Der BASIC-Loader heisst auf der Diskette jetzt DISC.BAS (RUN"DISC").
- Rauch am Hexenhaus fehlte nach einer Weltumrundung: der Rauch (Slot 5)
  wurde uebersprungen, wenn das Energiefeld des Nachbarbildschirms den
  Slot noch belegte. Belegte Slots kommen jetzt in die Warteliste; Rauch
  zaehlt wie Energiefeld/Schluessel zu den Objekten, die beim
  Zurueckscrollen wieder erscheinen.

== Farb-Variante (disk/cauldron2026_color.dsk) ==
- build.py baut jetzt ZWEI Disketten: cauldron2026.dsk (klassische Grafik, unveraendert)
  und cauldron2026_color.dsk (Assemblerschalter COLOR, rasm -DCOLOR=1).
- Grafik automatisch erzeugt mit tools_py/colorize.py (src/gfx -> src/gfx_color):
  * Oberwelt: Himmel bleibt schwarz, Laub mit Lichtkanten/Verlauf (Stift 1 hellgruen),
    Grasstruktur am Boden, Baumstaemme links beleuchtet / rechts schattiert.
  * Hoehlen: helle Oberkanten auf Fels und Bloecken (Stift 1 je Farbsatz).
  * Sprites: groessere Farbflaechen mit Licht oben links / Schatten unten rechts
    (gelb/orange/weiss/grau), Umriss unveraendert.
- Spiellogik unveraendert: Stift 0 bleibt 0, Hoehlen-Stifte 6/7 (floor_check) bleiben,
  Hintergrund nie in Sprite-Stiften. Sprite-Umrisse unveraendert.
- Zurueck zur klassischen Grafik: einfach cauldron2026.dsk verwenden.
- colorize.py braucht numpy; die fertigen Dateien liegen bereits in src/gfx_color/.

== Todesflug (beide Versionen) ==
- Stirbt die Hexe im Flug, taumelt sie mit ihrer Fluggeschwindigkeit in Flugrichtung
  weiter (Traegheit ohne Joystick, Reibung bremst), Scrolling laeuft mit.
  Beim Aufschlag steht sie. (fly_dying in cauldron2026.asm, Aufruf in land_dying_sound)
- Farb-Variante: Tuergrafiken (door/door_small) nach gfx_color umgefaerbt, weil Stift 1
  jetzt Laub-Licht ist: Holz der grossen Tuer Stift 3 (rot), Details der kleinen Tuer Stift 5.
- Farb-Variante, Nachbesserung: Berge (Farbsatz 1, Stift 1 jetzt weiss) mit Schneegraten,
  Wasser mit Schaumkrone und Glitzer, Grabsteine/Mauern mit Mondlicht-Oberkante (Stift 4).
  Sprites: Weiss/Grau werden nicht mehr schattiert (Geister wieder klar weiss).
- Farb-Variante: animierte Wellen. Wasserkacheln (Bildschirme 5-8, 14-18, 56-61) tragen
  Schaumkronen/Kraeusellinien in den Phasen-Stiften 4/5/6; water_anim (cauldron2026.asm,
  Aufruf am Anfang von land_update, nur ifdef COLOR) zeigt dort game_ink_ptr auf eine
  Farbsatz-Kopie und laesst die Phasen reihum aufleuchten (WAVE_LIT/WAVE_OFF/WAVE_SPD).
- Farb-Variante, Korrekturen: Wellen nur noch Stifte 5/6 (+Pause), weil Stift 4 Mond und
  Sterne zeichnet (blinkten mit). Totenkopf (Bilder 96/97) und Pastellgelb nicht mehr
  schattiert (einzelne Pixel blinkten). Fledermaeuse wieder mit Lichtkante (grau->weiss/schwarz).
- build.bat fuer Windows (ruft build.py ueber "py -3" oder "python" auf).

== Verfolger in der Oberwelt (beide Versionen) ==
- Durch das Scrolling verschwanden Verfolger nicht mehr beim Bildwechsel und flogen bei
  gleichem Tempo endlos hinterher. Jetzt ist die waagerechte Schrittweite eines Verfolgers
  (Bewegungsrichtung #0F) in der Oberwelt mindestens Hexen-dx + 1: er holt langsam auf.
  Steht die Hexe oder in den Hoehlen: Originaltempo. (home_2026 in cauldron2026.asm)
- Test: tools_py/chase_test.py (Abstand der Verfolger beim Dauerflug).

== Cheat: ueberall landen und starten ==
- Im Cheat-Modus (Titel mit C) entfaellt in der Oberwelt der Bodenabsturz (ground_2026 statt
  ground_check in der Flugschleife): Abheben vor dem Haus/zwischen Staemmen und Landen ueber
  dem Wald sind moeglich. Ohne Cheat unveraendert (Originalverhalten).
- Test: tools_py/cheat_land_test.py [cheat]

== Zusatzcode in Bank 5 (Datei Y1.BIN) ==
- Neue Datei src/bank5.asm, der Loader laedt sie nach Bank 5 (#4000). Aufruf einmal je
  Spielschleife ueber frame_2026/b5_call. build.py erzeugt src/b5_syms.inc automatisch.
- Pause: Taste P haelt das Spiel an, schaltet den Ton stumm und zeigt "PAUSE". Mit P geht es weiter.
  P, M und T werden im Interrupt abgefragt (50 Hz), dadurch reagiert die Pause sofort.
- Musik im Spiel (Standard an, Taste T schaltet an/aus): Umsetzung der C64-Musik
  (music/Cauldron.sid, Keith Miller 1985) mit tools_py/sid_dump.py und sid_convert.py -> src/music2026.inc.
  Drei Stimmen: Arpeggio (h-Moll), Bass und Schlagzeug bzw. leiser Nachhall.
  Der Player laeuft im Interrupt (int_2026, 50 Hz, 11 Frames je Schritt).
  psg_hook merkt sich die PSG-Zugriffe des Spiels. Kanaele mit laufendem Effekt werden
  gemieden, die Stimmen weichen auf freie Kanaele aus (Arpeggio > Bass > Schlagzeug),
  so laeuft die Musik bei Effekten weiter.
- title_keys nach Bank 5 verschoben (Platz im Hauptspeicher).
- Nach einem Lebensverlust ist die Hexe 2 Sekunden unverwundbar und blinkt.
- Magie-Warnung: Unter 20 blinkt die Magieanzeige.
- Farbversion: Wellen-Animation nach Bank 5 verschoben (Platz im Hauptspeicher).
- Titelmusik: Die alte CPC-Titelmusik (music_step) ist ersetzt durch dieselbe C64-Fassung
  (title_music -> Bank 5, Funktion 5). Wie beim SID beginnt sie nur mit dem Arpeggio, der Bass setzt spaeter ein.
- Verpasste Musiktakte (Interrupt in read_joystick/psg_write) werden beim naechsten Interrupt nachgeholt.
- cpcemu.py: Interrupts bleiben wie beim echten Gate Array bis zum EI anhaengig.
- Pause: statt "PAUSE" wird der Rand dunkelrot (die Anzeige zeigt dort gesammelte Gegenstaende).
- Titelmusik mit dem C64-Intro, nur einmal gespielt: zuerst nur Schlagzeug, ab Schritt 30 (ca. 6,6 s)
  der Bass, ab Schritt 158 (ca. 35 s) das Arpeggio, danach die normale Schleife.
  Bei jedem Titelstart beginnt sie neu. Im Spiel startet die Musik sofort vollstaendig.
- Musik-Instrumentierung naeher am SID: Arpeggio und Bass sind gehaltene Toene mit konstanter
  Lautstaerke (beim SID bleibt das Gate an, nur die Tonhoehe wechselt), statt angezupft und abklingend.
  Schlagzeug als kurzer weicher Rausch-Tick; der Nachhall entfaellt (hat der SID nicht).
  Pegel: Arpeggio 11, Bass 12 (im Titel je +1). Vergleich: music/sid_referenz.wav (tools_py/sid_render.py).
- Ton-Wahl im Spiel: Standard sind Soundeffekte. Taste M schaltet auf Musik (alle drei Kanaele,
  Effekte stumm; psg_hook verwirft dann Ton/Rauschen/Lautstaerke des Spiels) und zurueck.
  Taste T entfaellt.
- ESC im Spiel: zurueck zum Titel (wie nach Game Over), dort neues Spiel starten.
- Alternative Steuerung: W/A/S/D + SPACE zusaetzlich zu Joystick und Cursortasten.
  read_joystick -> Bank 5 (b5_joy), gilt auch im Titel und auf dem Game-Over-Bildschirm.
- Taste I fuer die Hoehlenkarte reserviert (Karte folgt).
- Titel-Intro wie beim C64 (Bank 5, b5_intro): Das Logo steht in der Bildmitte. Die Hexe fliegt
  von links heran, landet auf dem Logo, geht rechts-links-rechts, hebt ab und fliegt davon.
  Danach erscheint der normale Titel; die Musik (mit C64-Intro) laeuft durch.
  Feuer/SPACE bricht das Intro ab.
  Rastersplit ueber int_2026/intro_modes: Interrupt 3 (Bildzeile 34) Mode 0 fuer die Hexe,
  Interrupt 4 (Bildzeile 86) Mode 1 fuer das Logo (ab Zeile 89).
  Die Hexe wird nach Interrupt 5 gezeichnet (flackerfrei).
  Hexen-Frames der jeweiligen Variante per incbin in Bank 5. LOGO_Y/GROUND in bank5.asm.
- cpcemu.py: screen_split() stellt den Mode je Rasterzeile dar.
- Intro-Feinschliff: Landen/Abheben mit den Frames der Gegenrichtung (24-27). Logo 2 Zeilen tiefer
  (LOGO_Y 91), Hexe 8 Zeilen tiefer (GROUND 72, steht direkt auf dem Logo).
  Der Wechsel auf Mode 1 erfolgt jetzt verzoegert bei Zeile 93 (INTRO_DLY).
  Die Oe-Punkte (Zeilen 91-92) werden nach Mode 0 gewandelt, die Hexe wird dort maskiert gezeichnet.
- Mode-Split wieder wie zuvor (Interrupt 3 -> Mode 0, Interrupt 4 -> Mode 1, ohne Verzoegerung).
  Logo (LOGO_Y 91) und Hexe (GROUND 72) bleiben an der neuen Position. Die Mode-0-Wandlung der
  Oe-Punkte ist abgeschaltet (SPLIT_Y = LOGO_Y); Code und Maskierung bleiben per "if" erhalten.
- Hexe im Intro 2 Zeilen hoeher (GROUND 70).
- Intro: Hexe laeuft vor dem Abheben einmal mehr links-rechts (rechts-links-rechts-links-rechts).
- Fix: Beim Spielstart aus dem Titel blieb der letzte Musikton endlos haengen (b5_init loeschte 'owned', mus_release schaltete danach nichts mehr ab). Jetzt werden die drei Kanaele vorher stummgeschaltet. Test: tools_py/start_silence_test.py
- Karte auf Taste I (src/map2026.asm, Bank 5; Layout: tools_py/map_gen.py -> src/map2026.inc):
  In der Hoehle erscheinen alle 5 Hoehlensysteme, aber nur besuchte Raeume, mit Verbindungen (grau),
  Ausgaengen zur Oberwelt (orange) und noch liegenden Gegenstaenden (gelb).
  Draussen die 62 Oberwelt-Bildschirme in 4 Reihen: besuchte weiss, unbekannte als grauer Strich,
  Haeuser orange, noch liegende Schluessel gelb. Die Hexe blinkt magenta.
  Das Spiel pausiert (Ton wie bei P). Der Bildschirm wird zeilenweise in Bank 6 gesichert und
  danach wiederhergestellt; die Kopierroutine liegt in der Bildschirmluecke #EFD0.
  Schliessen mit I, Feuer, P oder ESC. Besuchte Raeume werden bei Spielstart geloescht.
  Tests: tools_py/map_test.py, tools_py/map_cave_test.py <bank5.sym>
- Karte ueberarbeitet: Jetzt wird die gesamte Karte gezeigt (besucht weiss, unbesucht grau).
  Es werden alle noch liegenden Gegenstaende und Schluessel angezeigt.
  In der Kartenansicht waehlen die Tasten die Ansicht: 0 = Oberwelt, 1-5 = Hoehlensysteme,
  West -> Ost nach Hauseingang (1: Bildschirme 3/10, 2: 22, 3: Kesselraum/33, 4: 37, 5: 45).
  Beim Oeffnen erscheint die Ansicht, in der die Hexe gerade ist.
  Hoehlen werden einzeln gross dargestellt (Zelle 16x20 Pixel).
  Tests: tools_py/map_views_test.py, tools_py/map_restore_test.py (je mit bank5.sym)
- ESC -> Titel: 0,5 s Wartezeit vor dem Titelaufbau (Logo wurde in JavaCPC oben 2 Zeilen gestoert).
- Intro-Split: Der Mode-Wechsel steht jetzt am Anfang von int_2026, vor int_timers. Dadurch schaltet Mode 1 ca. 2,2 Rasterzeilen frueher (1,3 statt 3,5 Zeilen nach dem Interrupt); das englische Logo (ab Zeile 91, direkt unter der Hexe) hat damit mehr Luft. Messung: tools_py/split_latency_test.py (CPC_LANG=1).
- Intro-Split: Mode 1 kommt jetzt 3 Zeilen spaeter, per feste Warteschleife in intro_modes (INTRO_DLY 48, 16 = 1 Rasterzeile auf echter Hardware). Die Warteschleife bleibt vor int_timers und ist damit unabhaengig vom Spielzustand. Der Hauptspeicher ist jetzt voll (EXTRA_END #8900).
- Intro nur noch nach dem Laden. Nach ESC oder Spielende geht es direkt in den Titel (Merker intro_seen in Bank 5).
- Titel: Das Copyright steht eine Zeile hoeher (DE Zeile 17, EN/FR Zeile 18). Darunter, eine Spalte weiter rechts,
  steht "IMPROVED BY DEVIL-SYSTEM" in der Copyright-Farbe (alle Sprachen). Die Zeile druckt Bank 5 ueber
  print_text; der Bindestrich ist Zeichen #46 (im Text "|").
  Test: tools_py/title_credit_test.py (CPC_LANG=0/1/2)

Cheat-Flugmodus in Hoehlen (Taste F)
- Nur mit Cheat (C im Titel): in einer Hoehle schaltet F auf Fliegen wie in der
  Oberwelt (mit Traegheit), Rand dunkelblau. Erneut F -> Laufen/Springen, Rand schwarz.
- Beim Fliegen werden Waende/Plattformen durchflogen; Schiessen ist im Flug aus.
- Raumwechsel ueber die normalen Ausgaenge; Pause stellt den blauen Rand wieder her;
  ESC und neues Spiel schalten den Flugmodus ab.
- Code: src/cfly2026.asm (Bank 5, Funktion 8), Test: tools_py/cheat_fly_test.py

Cheat: Schluessel und Hoehlenstart
- Nur mit Cheat: K gibt sofort den Schluessel (Symbol + Sammel-Sound), wenn keiner getragen wird.
- 1-5 bringen die Hexe an den Eingang von Hoehlensystem 1-5 (wie durch die Haustuer:
  1 = Haus Bildschirm 3, 2 = 22, 3 = Kesselraum 33, 4 = 37, 5 = 45). Geht aus der Oberwelt
  und aus jeder Hoehle, nicht waehrend des Sterbens. Cheat-Fliegen wird dabei abgeschaltet.
  Der Kesselraum (3) schickt die Hexe wie im Original nach kurzer Zeit wieder hinaus.
- Tasten 1-5 in der Karte (I) loesen keinen Sprung aus.
- Code: src/cfly2026.asm (cwarp_tick), Test: tools_py/cheat_warp_test.py

Fehlerbehebungen
- Titel-Logo nach ESC aus der Oberwelt kaputt: Die Kopien Oberwelt-Code/Hoehlendaten
  (#33B0, Laenge #0C80) liefen bei eingeblendeter Bank 4 ueber #4000 hinaus und
  ueberschrieben den Logo-Anfang in Bank 4. Jetzt nur bis #3FFF (LAND_COPY).
  Test: tools_py/logo_corrupt_test.py (Bank 4 vorher/nachher identisch).
- Cheat-Fliegen: nach einem Raumwechsel war die Hexe nicht mehr steuerbar
  (witch_dir = 0 -> enter_cave_room schaltete das Hexen-Sprite ab). b5_cfly setzt
  witch_dir jetzt auf die Flug-Animation. Test: tools_py/cheat_fly_room_test.py

Intro nach ESC
- ESC im Spiel fuehrt wieder ins C64-Intro (Hexe landet auf dem Logo), da das Logo nicht
  mehr beschaedigt wird. Nach Spielende weiterhin direkt der Titel.
  Test: tools_py/esc_title_test.py (spielt auch in der Oberwelt, Logo identisch mit Kaltstart).

Soundeffekte wieder wie im Original
- Nach der Titelmusik blieb die Mixer-Maske der Musik (mus_and #F8 / mus_or #38) im
  Effekte-Modus aktiv: jeder Mixer-Wert des Spiels wurde zu #38 (alle Toene an, kein
  Rauschen) -> alle Effekte klangen anders. mus_release setzt die Maske jetzt auch dann
  zurueck, wenn die Musik keine Kanaele mehr belegt; zusaetzlich beim Spielstart (b5_init).
  Tests: tools_py/sfx_compare.py (PSG je Frame vs. Original), tools_py/sfx_mixer_test.py
  (Register 7 == psg_mixer, auch nach M-Umschaltung).
- Cheat-Tasten K/1-5 werden jetzt im Interrupt gelesen (vorher im Spieltakt ohne DI ->
  PSG-Zugriffe konnten sich mit dem Interrupt ueberschneiden).

Mode-Split im Spiel (Untersuchung)
- Interrupt-Annahme, Split-Code und CRTC-Werte sind identisch mit dem Original
  (tools_py/int_latency_test.py, tools_py/split_timing_test.py).
- Test-Emulator: verlor Interrupts direkt nach EI (tools_py/cpcemu.py korrigiert).

Schneller Mode-Split im Spiel
- Oberkante der Hoehlendecken flimmerte zwischen Mode 0 und 1. Neuer Vorab-Einsprung
  (src/split2026.asm, bei #0010, Vektor #0039, eingerichtet in b5_init) schreibt Mode 0
  beim Split-Interrupt sofort: nach ~0,6 statt ~1,2 Zeilen -> eine Zeile frueher sichtbar,
  nicht mehr knapp an der Zeilengrenze. Nicht im Titel/Intro/Karte.
  Test: tools_py/fast_split_test.py
- Intro nach dem Laden hatte den Split 1 Zeile zu spaet (schneller Einsprung war schon
  aktiv). Jetzt: Intro/Titel immer mit dem normalen Handler (b5_intro setzt #A000),
  der schnelle Split wird erst beim Spielstart eingerichtet (tk_go).
  Test: tools_py/intro_split_cmp.py

- Diskette aufgeraeumt: Die 24-Byte-Parameterbloecke B1/D1/F1/H1 (frueher Kassetten-
  Header) stehen jetzt direkt im Loader BACK1 (Tabelle "params"). Auf der Diskette
  liegen nur noch C1/E1/G1/I1 (+ C2/C3, X1, L1, Y1). H1 wird weiterhin von build.py
  an die Laenge von I1 angepasst und beim Assemblieren eingebunden.
  Test: tools_py/loader_test.py (alle drei Sprachen).


========================================================================
01.10.2026 - Option B: maximale Oberwelt-Variante
========================================================================
LAND_PACE = 18 statt 24 (Ziel bei geringer Last: 16,67 Spielschleifen/s).
Schneller Pfad fuer sprite-freie Scroll-Baender; ohne Scrollen nur ein
Banddurchlauf; finish_pass einmal am Ende; spr_scr in der Oberwelt als
Gezeichnet-Marker. Hoehlen-Takt bleibt bei gemessenen 12,50 FPS.
Beide DSKs neu assembliert und direkt aus den Disketten getestet. Details,
reale Teststrecken-Werte und Testgrenzen stehen in MAX_BUILD.txt.
Testprogramm: tools_py/max_build_test.py; Rohdaten: disk/max_test_results.json.
Auslieferung: disk/cauldron2026_max.dsk und disk/cauldron2026_max_color.dsk.


========================================================================
01.10.2026 - Maximal-Variante, Mapping-Fix 1
========================================================================
Fehler aus der Performance-Optimierung korrigiert: gfx_tiles2 / 256
wurde bei #09B0 zu #0A assembliert. Grafikbasis lag dadurch bei #0AB0;
alle Kachelgrafiken wurden um 16 Eintraege versetzt ausgewaehlt.
High-Byte nun mit gfx_tiles2 >> 8 gebildet. Pro DSK nur ein Codebyte
geaendert; Kartendaten, Hoehlencode und LAND_PACE = 18 unveraendert.
Neue unabhaengige Referenz direkt aus Level-/Grafikdateien; alle 62
Bildschirme plus alle Tuerphasen geprueft, 0 Abweichungen. Der alte,
selbstreferentielle col_render-Vergleich wurde im Spieltest ersetzt.
Auslieferung: disk/cauldron2026_max_fix1.dsk und
              disk/cauldron2026_max_color_fix1.dsk.
Details: MAX_BUILD.txt; Tests: tools_py/map_regression_test.py,
          tools_py/max_build_test.py und tools_py/loader_test.py.


========================================================================
01.10.2026 - Maximal-Variante, Tuer-Fix 2
========================================================================
Tatsaechliche Tueranimationen (nicht nur statische Phasen) geprueft.
Der alte blit_xor beruecksichtigte die Kamera, aber keine Bildrandgrenzen:
negative X-Spalten wurden zu grossen positiven Werten, X>=80 schrieb
in andere Zeilen und Sprite-Verwaltungsdaten. Beide Fehler reproduziert.
Neuer land_blit XORt nur Spalten 0..79; BC/DE/IY bleiben erhalten, IX
laeuft auch ueber unsichtbare Bytes bis zum naechsten Grafikblock weiter.
blit_pre dispatcht nur in der Oberwelt auf den vollstaendigen neuen Blitter;
Hoehlen behalten den Original-Rumpf. Mapping-Fix und LAND_PACE=18 bleiben.
Alle sechs Haeuser und 80 Kamera-Offsets beider DSKs, insgesamt 7640
Oeffnungs-/Schliessschritte inklusive acht ueberlappender Sprites, erfolgreich.
Zusatztests: komplette RAM-Grenzen, Register/Stack/IX, Scrollen nach Tueren,
alle Hauseintritte/Hoehlen-Rueckkehrpfade, Pause/Karte mit Bildrestauration,
normaler Lebensverlust/Respawn, ESC/Neustart und 600 Gameplay-Bilder.
120 kontrollierte Renderbudgets/Bilder stimmen exakt mit Fix 1 ueberein;
der normale schnelle Oberwelt-Pfad bleibt unveraendert. Hoehlen 12,50 Hz.
ROMloser Analyseemulator; kein vollstaendiger Hardware-/Rastertest.
Auslieferung: disk/cauldron2026_max_fix2.dsk und
              disk/cauldron2026_max_color_fix2.dsk.
Details: MAX_BUILD.txt; maschinenlesbarer Bericht: disk/FIX2_TEST_REPORT.json.


========================================================================
01.10.2026 - Titelbilder und Dokumentation zusammengefuehrt
========================================================================
- Beide DSKs: C1.BIN fuer Deutsch, C2.BIN fuer English/Francais;
  C3.BIN entfaellt. Sprachwahl 1/2/3 bleibt erhalten.
- Color-DSK: Titel aus color_titles/, vorhandenen AMSDOS-Header beim Build
  entfernen; MODE 0, alle Farben/Border schwarz, laden nach &C000,
  CALL &C7D0 fuer Palette/Setup. Klassischer Titelablauf bleibt erhalten.
- Cauldron2026.txt ist die einzige dreisprachige Spielanleitung: Start,
  Hardware, Spielziel, P/ESC/K, Karte 0-5 und Trainerverhalten ergaenzt.
  C startet direkt mit Trainer; 1-5 teleportieren direkt in die Hoehlen
  (Einstiegsraum des Systems), nicht vor die Haeuser in der Oberwelt.
- Entwicklerinfos in README.txt zusammengefuehrt; developer_info.txt
  entfaellt. Originalanalyse bleibt dort als historische Referenz erhalten.
  MAX_BUILD.txt als historischen Testbericht gekennzeichnet.


01.10.2026 - Zusaetzliche sprachfeste DSKs
---------------------------------------
Build erzeugt pro Grafikvariante drei DSKs mit FIXED_LANG=0/1/2:
Hexenkueche2026, Cauldron2026_EN, Cauldron2026_FR, jeweils auch _color.
Kein Sprachmenue, nur passendes Ladebild; Mehrsprach-DSKs bleiben erhalten.
ROMloser Z80-Test direkt aus allen sechs DSKs: Sprache, Ladefolge,
Color-Aufruf und Spiel-RAM/Banken wie bei entsprechender Menuewahl.

01.10.2026 - Absturz am Boden / Blickrichtung bei Gegenlenken
   - Reproduktion aus cpc_frames/frame_01.sna: land_death_state=1,
     Absturzfolge 9. Bei Y>=171 wurde die normale Lande-Routine erreicht;
     diese addierte 6 zur Folge und erzeugte Feuerball 15 statt des Todesablaufs.
   - land_dispatch_2026 gibt einem aktiven Absturz Vorrang: Explosion,
     Wartezeit, genau ein Lebensverlust und erneuter Start der Hexe.
   - fly_face_2026 richtet das Flugsprite nach dem Vorzeichen von fly_vx aus.
     Beim Bremsen bleibt die bisherige Richtung erhalten; vx=0 dreht nicht um.
     Sprites wechseln erst bei echter Umkehr. LAND_PACE bleibt bei 18.
   - Hauptprogramm-Adressen bleiben erhalten; Zusatzcode passt weiterhin
     unter die Maskentabelle und in den Oberwelt-Codebereich unter #4000.
   - Beide Grafikvarianten und alle acht DSKs neu gebaut.
   - tools_py/crash_regression_test.py: Originalfehler, Tod/Respawn,
     Blickrichtung und Brems-/Umkehrfolge aus beiden gebauten DSKs geprueft.
     gameplay_regression_test.py: Pause/Karte, Tod, ESC/Neustart und je
     300 Oberwelt-Durchlaeufe bestanden.
   - analysis/frame_01_fixed.sna ist die Kopie des Nutzer-Snapshots mit
     den kleinen Laufzeit-Codekorrekturen fuer den direkten Vergleich.
     Der Original-Snapshot bleibt unveraendert und enthaelt weiterhin den Fehler.

02.10.2026 - Musik vor sichtbarem Intro
   - Beim ersten Start nach dem Laden bleibt die Palette ca. 5 Sekunden
     schwarz (250 Bildtakte). Das Logo wird bereits unsichtbar vorbereitet.
   - Titelmusik laeuft waehrenddessen; erst danach werden Titel-/Sprite-Farben
     gesetzt und die Hexe beginnt ihren Anflug. Feuer ueberspringt die
     Schwarzphase nicht. Nach ESC gibt es keine erneute Fuenf-Sekunden-Pause.
   - Fruehe Raster-Interrupts werden beim Logo-Aufbau unterdrueckt; die
     Spielpalette bleibt waehrend Vorbereitung und Wartezeit deaktiviert.
   - Alle acht DSKs sowie die beiden Kopien im Hauptordner aktualisiert.
   - intro_black_start_test.py: Schwarzphase (249.62 Bildtakte), fertiges
     Logo, laufende Musik und spaeter Animationsbeginn in beiden Varianten.
     Gameplay- und Absturz-Regressionen ebenfalls bestanden.

Start nach dem Laden (02.10.2026): Vor dem Umkopieren der Spiel-Daten und
des Codes setzt der C800-Stub alle 16 Farben und den Rand auf Schwarz und
haelt sie waehrend Kopieren und Bildschirm-Loeschen schwarz. Farben erst nach
der unsichtbaren Logo-Vorbereitung und Intro-Musikverzoegerung. Keine
zusaetzliche Wartezeit vor der Kopie. Gilt fuer alle acht Spiel-DSKs
und wird vom Teaser-Build fuer beide Grafikvarianten uebernommen.
Pruefung: ../Cauldron_2026_Teaser/start_black_check.py (alle zehn DSKs).

02.10.2026 - Savegame-/Highscore-Projektkopie
  5 speichert / 9 laedt; kompakter binaerer Spielstand (458 Byte, Format v4).
  Kein Bildschirm im Spielstand: kompletter Engine-Neuaufbau nach I/O.
  Zehn Highscores; HIGHSCOR.DAT auf allen acht DSKs vorinstalliert.
  SAVEGAME.SAV / HIGHSCOR.DAT ohne Attribute. Direkte Binaertransfers.
  Palette vorher schwarz, Split aus; erst nach Neuaufbau wieder einschalten.
  DE/EN/FR Diskmeldungen. Namen mit Joystick oder A-Z/0-9/SPACE/DEL/ENTER.
  Game Over/Sieg: saubere Ueberleitung, danach wieder vollstaendiges Intro.
  Cheat-Teleport 1-4 (5 ist Speichern); Karte weiterhin Ansichten 1-5.
  Z80-Engine und echte AMSDOS-/FDC-Tests fuer Classic und Color bestanden.
  Namensdialog: sichtbares Raster A-Z, 0-9 sowie SPACE/DEL/END; roter
  Auswahlrahmen, Joystick in vier Richtungen, Tastatur weiterhin direkt.
  Schmaler gelber Cursor hinter dem eingegebenen Namen, ohne Font-Abhaengigkeit.
  Titelmusik belegt stets alle drei PSG-Kanaele; alte Effekt-Lautstaerken
  nach Tod/Highscore-Diskdialog blockieren die Percussion nicht mehr.
  Spielstart mit Feuer/SPACE oder C: Musik blendet in ca. 0,9 Sekunden aus.
  Feuer/SPACE ueberspringt auch Schwarzphase und Wartezeit vor der Hexe;
  nach dem Ausblenden direkt ins Spiel. Normales Intro-Timing bleibt gleich.

02.10.2026 - Laengeres Ausblenden
  Titelstart und Intro-Skip: Musik blendet jetzt etwa 4,5 Sekunden aus.

02.10.2026 - Schwierigkeitswahl und Trainer-Sperren
  Vor neuen Partien NORMAL / HARD (DE: SCHWER, FR: DIFFICILE).
  Joystick waehlt, Feuer/ENTER bestaetigt; N/H waehlen direkt.
  Normal nimmt die Oberwelt-Tempoerhoehung zurueck, begrenzt auf Hexen-
  Maximaltempo und reduziert um 10% mit Nachkomma pro Verfolger.
  Hard behaelt das bisherige schnellere Verfolgungstempo; Hoehlen unveraendert.
  Savegame v5, 467 Byte: Schwierigkeit und Nachkommazustaende gespeichert.
  Trainer sperrt 5/9, Save/Load-Diskzugriff und Highscore-Eingabe; auch ein
  bereits aktivierter Trainer bleibt fuer die ganze Partie gesperrt.
  Highscoreformat v4 und vorhandene HIGHSCOR.DAT bleiben unveraendert.

Easy als dritte Schwierigkeit: Normal-Verfolgertempo, halber Gegnerschaden
und halbe Punkte (abgerundet), Schusskosten 5% statt 10%.
Auswahl E/N/H oder Joystick, Sprache DE/EN/FR, Spielstand speichert Easy.

Komprimierte selbstlaufende Titel an &4000; Palette vorher schwarz.
Loader nach &A000 verlegt (AMSDOS-Arbeitsbereich freihalten).
Cauldron2026_combined.dsk mit tokenisiertem DISC.BAS, Sprach-/Grafikwahl.
Gemeinsame Savegame-Datei kompatibel zwischen Classic/Color, gleiche Sprache.

03.10.2026 - Java-Editor: Enhanced-Hoehlenobjekte und Bewegungsmuster
- Gegner/Objekte (Slots 1-7) je Raum: Typ, Position, Bewegungsmuster, Drag und Undo.
- 53 gemeinsam genutzte Bewegungsmuster: Richtungen, Dauer, dx/dy editierbar; Groessen bleiben fest.
- Enhanced speichert eigene room_enemies.bin und movement_*.bin unter src/level_enhanced.
- Classic-Daten bleiben im ASM-Zweig; Kesselplaetze und Hexen-Einstieg bleiben geschuetzt.
- cauldron_items ist jetzt fest an tab_room_enemies+19*32+7 gebunden. Der bisherige
  relative equ-Ausdruck wurde im Bank-5-Symbolimport faelschlich zu #0003 statt #B22C.
  Die Savegame-Bereichstabelle zeigt dadurch wieder auf die Kessel-Gegenstaende.

03.10.2026 - Editor: Spielbare Raum-Vorschau
- Test room startet die echte Enhanced-Spielengine in einem eingebetteten JEMU-CPC direkt im ausgewaehlten Hoehlenraum, inklusive ungespeicherter Grafik-, Karten-, Gegner- und Bewegungsdaten.
- Temporaerer RASM-Build und RAM-Snapshot, keine Projektdateien/DSKs werden geschrieben. Pause, Neustart und volle Spielsteuerung; Save/Load und Highscore-Diskzugriff im Test deaktiviert.
- Gegner per Klick auf eine freie Kartenposition versetzen, mit Rueckfrage und einem Undo-Schritt. Ziehen bewahrt den angeklickten Punkt am Sprite.

03.10.2026 - Bewegliche Plattformen (Classic + Enhanced)
- Normal/Easy: Plattformen nehmen die stehende Hexe horizontal und vertikal mit. Beim Springen, Fallen, Sterben oder Herunterlaufen endet die Mitnahme; Hard behaelt das bisherige Verhalten.
- Vertikale Unterstuetzung unabhaengig vom 8-Pixel-Bodenraster; gleiche Speicheradressen und unveraendertes Savegame-Format.
- SPR_PLATFORM wird in kill_or_collect explizit ausgeschlossen: Beruehrung und Schuesse zerstoeren Plattformen nicht.
- Editor: Klick waehlt nur noch Gegner aus; Versetzen per Klick und Rueckfrage entfallen. Ziehen bleibt verfuegbar.

03.10.2026 - Zusaetzlicher Pumpkin-Gegner (Classic + Enhanced)
- Typ 12 behaelt den Originalfilter fuer die Finale-Abfolge; grosser Kuerbis unveraendert.
- Neuer Typ 42 Pumpkin enemy: gleiche Animation/Grafik, normale Gegnerkollision und Punkte, frei waehlbare Bewegung und keine Eintrittssperre.
- Editor zeigt Typ 42 an; Test room setzt entered_flag vor dem ersten Raumaufbau auch fuer Typ 12.
- Speicheradressen und Savegame-Format unveraendert; Editor-JAR und DSKs neu gebaut.

03.10.2026 - Java-Musik-Editor fuer die Titelmusik
- Tracker-Tab mit vier 32-Zeilen-Patterns, Melodie/Bass/Percussion, Notenuebersicht, Copy/Paste, Transponieren und eigenem Undo/Redo.
- Vorschau ungespeicherter Musik im echten CPC-/AY-Player; originaler Songanfang standardmaessig aktiv (Percussion, Bass, Melodie).
- Speichern in music2026.inc mit Backup und Schutz vor externen Aenderungen; beide 2026-Grafikversionen verwenden dieselbe Musik.
- PT3-Export sowie Vortex-Text/VT2 fuer Arkos-Import; einmaliger Intro-Vorspann, danach Loop. Kein direkter AKS-Export.
- Feste 128 Schritte, 11 Frames pro Schritt, Instrumente und Speicherlayout bleiben bestehen.
- Build aktualisiert zusaetzlich die CPU-/AY-Browserfassung, falls diese neben dem Projekt liegt.

03.10.2026: Music editor: MIDI type-1 export with three voices, original buildup and loop markers. Complete scrollable song overview. PT3 unused samples have independent data; VT2 unused samples explicitly defined (Arkos import fix).


03.10.2026: VT2 text import fix: remove explicit Ornament0 / Sample0 sections, which Vortex rejects. Added range and pattern-width regression checks.


03.10.2026: Editor protected Cauldron-Edited working copy with independent DSK build and blocked original exports. Native animated sprite previews, cave pen-8 / water palette effects, optional invulnerability blink. Session history with grouped undo and persistent save descriptions. Conservative room observations; intentional one-sided entrances never block builds.


03.10.2026: Hoehlen-Ausgangsbug behoben: Ein abgelehnter seitlicher Oberwelt-Ausgang prueft jetzt weiterhin die vertikalen Ausgaenge (Raum 6 -> 7 am linken Rand). Untere Oberwelt-Ausgaenge bleiben gesperrt, ohne Pruefschleife. Z80-Regression fuer beide Seitenraender, normalen Abstieg und Oberwelt-Ausgang bestanden.

04.10.2026 - Ein Projekt, Restore-Daten und erweiterter Java-Editor
- Arbeitsprojekt ist Cauldron_2026; keine separate Cauldron-Edited-Kopie mehr.
  restore_data/ sichert die wiederherstellbaren Editor-Daten. Original wieder
  herstellen, Backups, Historie und Undo/Redo bleiben verfuegbar.
- Oberwelt-Vorschau zeigt das ganze Spielfeld einschliesslich leerem Himmel
  (ohne Mond/Sterne), animierte Spawns/Objects und einen eigenen Tuer-Layer.
  Spawns sowie bestehende Hoehleneingaenge/Tueren lassen sich bearbeiten.
- Oberwelt startet im Editor bei Bildschirm 33; Navigation laeuft als Ring
  von 0 bis 61. Select/Drag auf einem Objekt wechselt in den Objects-Modus.
  Die spielbare Oberwelt-Vorschau startet mittig fliegend oberhalb der Tiles.
- Enemies heisst in der GUI Objects. Sprite-Animation standardmaessig 50%;
  die Live-Sprite-Vorschau wird nur im Sprites-Modus dargestellt.
- Landscape Columns und Cave Blocks sind pixelweise editierbar, mit
  Palettenauswahl und Color Cycling. Landschafts-Pixel bearbeiten die
  zugrunde liegenden Mini-Tiles; gemeinsam genutzte Tiles werden beachtet.
- Eigenes Title-screen-Panel: Logos, DE/EN/FR-Texte und Positionen bearbeiten.
  Logo-Pixel werden quadratisch angezeigt; EN/FR teilen ihr Logo.
- Test Game startet das komplette Spiel ab Intro, mit Sprachauswahl und
  ungespeicherten Editor-Daten. Raum-/Oberwelt-Tests bleiben separat moeglich.
- Save & Export HTML erzeugt die CPU-/AY-Browserfassung aus dem Projekt.
  Node liegt im Projekt unter tools/node/; kein Node auf PATH erforderlich.

04.10.2026 - Loader, Titelbilder und getrennter HTML-Build
- Classic und Enhanced zeigen das ausgewaehlte Ladebild bereits vor dem
  Laden der Zusatzbank-Dateien X/L/Y, auch auf der Combined-Disk.
- Enhanced EN/FR verwenden wieder das englische Ladebild: COLEN.CMP wurde
  aus dem richtigen englischen Bild neu erzeugt; DE verwendet COLDE.CMP.
- build.bat baut die CPC-DSKs ohne automatische Aktualisierung des externen
  Web-Projekts. HTML wird ausdruecklich ueber den Editor/Export aktualisiert.

04.10.2026 - Sprite-Pixelwerkzeuge und neue Hexen-Belegung
- Load Overlay / Remove Overlay: PNG auf die Pixelansicht skalieren und mit
  60% Transparenz darueberlegen. Das Overlay aendert keine Sprite-Pixel.
- Copy / Paste kopieren das ausgewaehlte Asset. Clear leert nur das aktuelle
  Sprite auf Stift 0 (Transparenz), mit Undo/Redo.
- Move Up / Move Down verschieben das aktuelle Sprite um eine Pixelzeile
  mit Wrap: unten herausgeschobene Zeile erscheint oben, und umgekehrt.
- Neue vierphasige, rechtsgerichtete Hexen-Animationen:
    000-003: schneller Flug; 004-007: normaler Flug;
    012-015: langsamer Flug/Schweben; 016-019: Gehen.
  Linksvarianten werden abgeleitet. Andere Sprite-Belegungen bleiben bestehen.
- Fluganimation nach tatsaechlichem Geschwindigkeitsbetrag (1/16 Pixel):
  0-16 langsam, 17-47 normal, 48-64 schnell. Die Blickrichtung folgt der
  wirklichen Bewegung; Gegenlenken dreht die Hexe nicht vorzeitig um.
- Intro und Lande-Abschluss verwenden die neue Belegung. Der Build erzeugt
  passende Intro-Linksvarianten, ohne die editierbaren Sprite-Dateien zu ändern.
- Live-Vorschau bietet normalen/schnellen/langsamen Flug und gespiegelte
  Linksvarianten. Keine automatische Uebernahme neuer Enhanced-Pixel nach Classic.

04.10.2026 - Vorberechneter Spritecache statt Spiegeln beim Richtungswechsel
- Ersetzt das zwischenzeitliche Spiegeln der Flug-/Laufdaten waehrend des
  Spiels: Bank 6 enthaelt 113 Originalframes plus 16 vorberechnete Linksframes,
  insgesamt 16.254 Byte. Aufbau vor Spielbeginn, keine zusaetzliche Grafikdatei.
- Hoehlen- und Oberwelt-Renderer lesen direkt aus diesem Cache. Richtungs-
  wechsel waehlen fertige Frames; keine Pixelkopie und kein zusaetzliches
  Herunternehmen der Sprites allein zum Spiegeln.
- Raster-/Mode-Split-Interrupts bleiben beim Zeichnen und bei der Auswahl
  aktiv. Der Musikinterrupt stellt die zuvor eingeblendete Spritebank wieder her.
- Karte und Disk-I/O benutzen Bank 6 voruebergehend weiter; anschliessend
  wird der Cache neu erzeugt. Beim Karten-Neuaufbau bleiben Rasterinterrupts
  aktiv; Musik-Bankwechsel werden bis zum Ende des Neuaufbaus ausgesetzt.
- Absturz: die sieben Crashframes werden richtungsabhaengig im Cache
  gespiegelt, bei aktiven Rasterinterrupts. Original-Grafikdaten bleiben erhalten.
- Disk-I/O-Lesepuffer jetzt #7810, gesicherter Rueckkehr-Stack #7C10;
  genug Platz auch fuer den temporaeren Editor-Test-Build.
- Emulator-Pruefungen: alle Cache-/Spiegelpixel, Geschwindigkeitsgrenzen,
  vier Animationsphasen, Gehen, unveraenderte Originalframes, IRQ-Bankrueckkehr,
  Cave-Renderer, Cache-Neuaufbau mit Rasterinterrupts, Absturz, Oberwelt-
  Steuerung, echte Kartenrueckkehr, Intro/Skip/Spielstart und Neustart bestanden.
- Classic-/Enhanced-DSKs samt Combined-Disk, Editor-JAR und CPU-/AY-HTML
  unter exports/html aktualisiert. Sprite-Pixel des Benutzers nicht veraendert.

04.10.2026 - Enhanced-Hexensprites nach Classic uebernommen
- Alle 39 Hexenframes aus src/gfx_color/sprites.bin unveraendert nach
  src/gfx/sprites.bin kopiert: 000-007, 012-034, 047-048 und 106-111.
- Kein Farbtausch; alle Stiftindizes bleiben exakt wie in Enhanced.
  Andere Classic-Sprites und die Spiellogik bleiben unveraendert.
- Vorherige Classic-Grafik unter graphics_editor/backups/classic-witch-import-*
  gesichert. DSKs und CPU-/AY-HTML mit den uebernommenen Grafiken aktualisiert.

04.10.2026 - Tueranimation (Classic und Enhanced)
- Nach jeder Oeffnungs- oder Schliessphase werden Hexe und Gegner sofort
  erneut gezeichnet, ohne auf den naechsten gepaceten Grafikdurchlauf zu warten.
  Keine Bewegungsschritte, Animationsschritte oder Kollisionsauswertung werden
  durch diesen zusaetzlichen Renderdurchlauf ausgefuehrt.
- Mode-Split und Musik-Interrupts bleiben aktiv. Die kurze unsichtbare
  Bildschirmluecke EFD0 wird nach der Sprite-Cache-Erzeugung fuer den Helfer
  wiederverwendet; Karte und Save/Load stellen ihn beim Cache-Neuaufbau wieder her.
- Native Emulatorpruefung: kleine/grosse Tueren, unmittelbare Sprite-Rueckkehr,
  unveraenderte Positionen, Register und RAM-Bank; Sprite-Cache und Kartenrueckkehr.
- Aufnahmepruefung: Schluessel und alle neun sammelbaren Gegenstaende funktionieren
  mit den neuen Hexensprites. Manuell platzierte Test-Schluessel brauchen weiterhin
  eine passende Zuordnung in der Schluesselliste des Spiels.

04.10.2026 - Schwarze Palette bis zur Intro-Farbfreigabe
- Der letzte Loader-Parameterblock H1 setzt keine alte Spielpalette mehr,
  sondern alle Firmware-Stifte und den Rahmen auf Schwarz. Damit bleiben
  Startvorbereitung und Laden der Highscores durchgehend unsichtbar.
- Die vorhandene Farbfreigabe passend zur Intro-Musik bleibt unveraendert.
  Gilt fuer Classic, Enhanced, alle Sprachen und die kombinierte Disk.

04.10.2026 - Vorausschauende Flugkamera nach C64-Vorbild
- Flug nach rechts: Hexe wandert weich nach links (X 48/49). Flug nach links:
  Hexe wandert nach rechts (X 100/101). Damit ist mehr Landschaft in Flugrichtung
  sichtbar. Bei langsamer Bewegung (Betrag <= 16) und beim Schweben bleibt
  die Kamera innerhalb X 48..101 stehen: mehr Spielraum fuer genaue Landungen.
  Bei schnellerem Flug folgt der Vorlauf der wirklichen Bewegungsrichtung.
- Gehen behaelt die mittige Kamera. Nach dem Landen weiche Rueckkehr zur Mitte.
- Zeilenrenderer unterstuetzt jetzt 1 bis 4 Byte Kameraschritte, einschliesslich
  neuer Randspalten. Schnelles LDI/LDD-Kopieren bleibt erhalten.
- Bildschirmzuordnung, Objekt-Spawns und geparkte Objekte beruecksichtigen
  variable Hexenpositionen und grosse vorzeichenbehaftete Kamera-Abstaende.
  Savegame-Format bleibt unveraendert.
- Native Emulatorpruefung: beide Vorlauf-Richtungen, alle acht Zeilenschritte,
  Gehzentrierung, Landung, Weltrand und Objektpositionen bei breiten Kameraoffsets.
- Loader-Nachbesserung: unmittelbar vor preserve_firmware werden Firmware-Stifte
  und Rahmen ebenfalls schwarz gesetzt. Der beim Highscore-Laden wiederhergestellte
  Firmware-Zustand kann dadurch keine alte MODE-/Titelpalette mehr einschalten.

- C64-Mitschnitt fuer die Richtungswechsel in 172 PNGs (0,1-Sekunden-Abstand)
  unter graphics_editor/build/scroll_reference/frames_10fps zerlegt.

04.10.2026 - Flugkamera: seitliche Positionen wiederhergestellt
- Schneller Rechtsflug wieder X 16/17, Linksflug X 136/137.
- Bei langsamer Bewegung/Schweben (|vx| <= 16) bleibt die Kamera stehen,
  solange die Hexe nicht den Bildschirmrand erreicht.
- Kameraschwenk beim Umdrehen waechst mit der echten Geschwindigkeit:
  maximal 1, 2, 3 oder 4 Byte pro Durchlauf. Langsames Gegenlenken loest
  keinen vollen Schwenk mehr aus. Gehen/Landen maximal 2 Byte wie zuvor.

04.10.2026 - Einzelbild-Glitch beim Flug-Richtungswechsel
- face_left/face_right wechselten die Animationsfolge, liessen spr_frame aber
  bis zum naechsten Animationstakt auf einem Bild der alten Richtung stehen.
- Der Flug-Richtungswechsel uebernimmt jetzt das erste Bild der neuen Folge
  sofort. Unveraenderte Richtung und Schweben behalten ihre Animationsphase.
- Geprueft fuer beide Richtungen und alle drei Fluggeschwindigkeits-Gruppen;
  Original- und gespiegelte Bilder werden im selben Durchlauf korrekt gewaehlt.

04.10.2026 - Laengere Schuesse beim Fliegen
- Flug-Schuesse leben 32 statt 8 Spiel-Durchlaeufe; die urspruengliche
  Bewegungsgeschwindigkeit bleibt erhalten. Genuegend Lebensdauer fuer
  mindestens eine Bildschirmbreite auch bei mitlaufender Flugkamera.
- Oberwelt-Abschnittswechsel loeschen einen aktiven Schuss nicht mehr.
  Treffer bzw. Verlassen des sichtbaren Bildes beenden ihn weiterhin.
- Beim Verlassen des Bildes wird der Schusstimer sofort freigegeben.
  Rauschperiode laeuft durch die verlaengerte Lebensdauer nicht unter Null.
- Schuesse in Hoehlen und beim Gehen behalten ihre bisherige Lebensdauer.

04.10.2026 - Eine kombinierte Disk und dreisprachige Changelogs
- Der Build erzeugt nur noch Cauldron_2026.dsk mit Classic/Enhanced und
  Deutsch/Englisch/Franzoesisch. Start: RUN"DISC", dann Sprache/Grafik waehlen.
- Varianten werden intern im Speicher gebaut; keine getrennten Sprach-/Grafik-
  DSKs mehr. Identische Ausgabe in disk/ und im Projekt-Hauptordner.
  Alte Disk-Ausgaben entfernt. Savegame/Highscores bleiben gemeinsam und
  beschreibbar; aktuell 11 KB frei.
- CHANGES_2026.txt wird CHANGES_2026_DE.txt; englische und franzoesische
  Fassungen in CHANGES_2026_EN.txt / CHANGES_2026_FR.txt. README aktualisiert.

04.10.2026 - Neues Enhanced-Titelbild von TITAN
- Die Enhanced-Versionen verwenden ein neues Titelbild von TITAN.

04.10.2026 - Highscoreanzeige: Spritecache und unterbrechungsfreie Musik
- Die Titel-/Highscore-Umschaltung sichert das Titelbild in Bank 6 und
  ueberschreibt damit den Spritecache. Ein eigener Merker bleibt auch nach
  Rueckkehr zum Titel erhalten. Vor Spielstart werden alle 129 Cacheframes
  und der Tuer-Helfer wieder aufgebaut, auch beim Start aus der Highscoreliste.
- Der Cache-Neuaufbau erfolgt erst nach dem Musik-Fade. Bildschirm-Loeschen
  und Listenaufbau lassen Musikinterrupts aktiv; nur kurze Palette-/Kopier-
  Abschnitte sperren sie. Wiederholte Titelwechsel pausieren die Musik nicht.
- Native CPC-/AMSDOS-Pruefung fuer Classic und Enhanced: drei Titel-/Listen-
  Wechsel, beide Startwege, kompletter Cache und Tuer-Helfer. Musikupdates
  bleiben im rund 20-ms-Takt (maximal ca. 20,5 ms im Test).
- Combined-Disk und CPU-/AY-HTML aktualisiert. HTML-Export liest jetzt die
  einzige Cauldron_2026.dsk und ordnet Enhanced-Dateinamen korrekt zu.
https://cpcwiki.de
Dein Deutsches CPCWiki!