Hacking Bruce Lee

Started by Fessor, 13. November 2019, 23:07:58

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fessor

Das hier müsste der richtige Bereich sein, denke ich..
Irgendwie nerven mit die Meldungen auf indieretronews und anderen Seiten an, dass die anderen Plattformen (Atari, C64, ZX) erweiterte Bruce Lee-Fassungen bekommen haben.

Inspiriert von diesen beiden Threads bei Atariage:
https://atariage.com/forums/topic/288392-two-bruce-lee-sequels/#comments
https://atariage.com/forums/topic/292947-bruce-lee-retweaked-sprites/#comments

habe ich angefangen Bruce Lee mal mit nem Reassembler zu zerlegen und zu schauen, ob hiervon irgendwas übertragbar wäre.

Kartendaten sind unkomprimiert 40x11 Zeilen (440 Bytes). Die Tiles sind 8x8 Pixel groß und werden auf 8x16 gedehnt. (Atari lässt grüßen)
Die Verwaltungsstruktur sowie die RLE-Daten werden an Arbeitsadressen kopiert.

0x1500: Mode 0 Zeichen für Statuszeile
0x1800 - 0x27ff Grafiktiles (Mode 0)
0x2800 - 0x2cff Verwaltungsstrukturen für die 20 Karten zu je 64 bytes.
    16 bytes mit Farbdaten für Border und Ink 0 - 15
    1 Word mit Pointer auf rledata, 1 Word mit Pointer auf Overlaydaten, Vier Pointer auf Routinen für noch unbekannte Events.
    0x13-0x40 Verwendungszweck noch unbekannt

0x2d00, 0x2d01: 0xc9, 0xff - Markiert das Ende der Liste der Verwaltungsstrukturen; theoretisch wären noch mehr Karten möglich, wenn man denn genug Speicher hätte.

0x2d02 - 0x47ff: 20x (RLE-Daten, OVL-Daten)

0x4800 - 0x484b - Tabelle mit Pointern auf die Sprites

0x484c - 0x57ff: Spritedata (Mode 0)

0x5800: jp main
               ret
0x5804 - 0x58a3: Jumptabelle für die Kartenevents, wird bei Spielstart in die Kartenheader reinkopiert, je vier Routinen pro Raum.

0x58b3 - 0x58f2: Kopierziel für Kartenverwaltungsstruktur (64 Bytes)
0x5923 - 0x5ada: unkomprimierte Kartendaten (440 Bytes)
0x5adb - 0x5e12: Kopie der unkomprimierten Kartendaten (440 Bytes) (Karte für den zweiten Spieler)

0x9000 - 0x926f - Daten Zeichensatzdefinition

Bemerkenswert finde ich, dass Soundwiedergabe, Textausgabe, Tastaturabfrage etc alles sauber über Betriebssystemroutinen erfolgt.


Die Karten sind RLE-Kodiert und der Basic-Loader wurde kurzerhand mal umgehackt um Proof-of-Concept zu bekommen. Nächtes Schritte wären Export in ein Format für einen Mapeditor wie TILED oder RGAS um Level einfach editieren zu können.

10 REM Bruce Lee Map Viewer
20 MEMORY &14FF
30 MODE 1:BORDER 0:INK 0,0:INK 1,26
150 LOAD"bruce.n02
200 adr=&2D02
210 i=PEEK(adr):adr=adr+1
220 IF i=0 THEN END
230 IF i>127 THEN 300
240 j=i:i=PEEK(adr):adr=adr+1
250 PEN 1
260 PRINT CHR$(1)CHR$(i);
270 j=j-1:IF j>0 THEN GOTO 260
280 GOTO 210
290 i=PEEK(adr):adr=adr+1
300 z=i AND &7F
310 i=PEEK(adr):adr=adr+1
320 PEN 3
330 PRINT CHR$(1)CHR$(i);
340 z=z-1:IF z>0 THEN GOTO 310
350 GOTO 210



Soviel schon mal zum Auftakt...

30.12.19: Diskimage, Hackingguide angehängt
02.01.20: Hackingguide aktualisiert (Kapitel für Sprites ergänzt)
04.01.20: Hackingguide aktualisiert (Absatz zu den Aufzügen und der Farbanimation ergänzt

TFM

Da hast Du Dir aber gut was vorgenommen. Vielleicht wäre "neu schreiben" ja einfacher. Wer weiß. In jedem Fall viel Glück und Erfolg dabei.  :smiley027:
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

Fessor

Fürs Neuschreiben fehlt mir das know-how und hoffe durch die Analyse das ein oder andere zu lernen.

Das Kartenmaterial für Return of Fury und Tilesets wurden veröffentlicht, die Kommentare lassen aber drauf schliessen, das Eingriffe in den Code nötig sein werden. Sehr wahrscheinlich wg. hart kodierten Abhängigkeiten welche Lampe welchen Durch-/Ausgang beeinflusst...

Erweiterungen an der Engine erscheinen mir nicht unrealistisch. Hinter der Zeichensatzdefinition ist noch genug Platz für ein oder zwei weitere Tilesets, bzw Platz für Laderoutine um Material bei Bedarf nachladen zu können....

Kommt Zeit, kommt Rat, ich hab ja grad erst mit der Analyse angefangen. ;)



TFM

Lernen kann man da sicher viel.  :) Allerdings gibt's auf dem CPC eben leider auch sehr viele Spectrum Portierungen, und die sind nun mal zu allermeist Flickschusterei. Aber mit etwas Glück wird's schon gut gehn.  :)
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

Fessor

Spectrumports sind ne Sache für sich.
Ich glaub nicht, dass Bruce Lee ein Port von der Spectrumversion ist; die Fassung vom ZX hat eine andere/bessere KI und der dicke Yamo vermag es die erklimmbaren Objekte zu erklimmen und bleibt nicht einfach nur auf der untersten Ebene.


Proof-of-Concept funktioniert einigermaßen; Lampen (gesicherte Erkenntnis) und Ausgänge (muss noch verfolgt werden) werden in eigenen Strukturen gespeichert.

TFM

TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

oobdoo

Welchen Reassembler hast Du verwendet?
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Fessor

yazd und dasmx. yazd ist open source und wird immer noch gepflegt, dasmx ist mittlerweile freeware.

In der Hauptsache aber dasmx, da man über ein "Symbolfile" lenken kann, wie die Binärdatei behandelt werden soll. Sprich: Codebereiche benennen, die er selbsttätig nicht finden konnte, Datenbereiche benennen, Label vergeben etc. Ist zwar ne Sysiphusarbeit, da man dieses Symbolfile manuell pflegen muss, aber das Ergebnis ist dann doch recht beeindruckend.

Meistens reicht es schon aus ihm als Startparameter die Ladeadresse und den Einstiegsadresse mitzugeben und er verfolgt dann den Code ziemlich gut automatisch nach und erstellt schon beim ersten Mal ein ziemlich gut brauchbares Assemblerlisting.


Fessor

Bin aber  grade dabei, mich in ghidra einzuarbeiten; da kann man alles schön mit GUI machen.
https://www.ghidra-sre.org/


oobdoo

Quote from: Fessor on 16. November 2019, 23:04:00
Bin aber  grade dabei, mich in ghidra einzuarbeiten; da kann man alles schön mit GUI machen.
https://www.ghidra-sre.org/
Ist das nicht gefährlich mit einer NSA Software?  :zwinker0018:

Naja, hat einen Vorteil. Man braucht sich um ein Backup seiner Daten nicht mehr kümmern.  :D
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Fessor

Quote from: oobdoo on 17. November 2019, 16:55:58
Quote from: Fessor on 16. November 2019, 23:04:00
Bin aber  grade dabei, mich in ghidra einzuarbeiten; da kann man alles schön mit GUI machen.
https://www.ghidra-sre.org/
Ist das nicht gefährlich mit einer NSA Software?  :zwinker0018:

Naja, hat einen Vorteil. Man braucht sich um ein Backup seiner Daten nicht mehr kümmern.  :D

Nujo... deswegen hab ich auch mit NMAP geguckt ob die Software irgendwie "nach hause" telefonieren will. Tut sie nicht ;)

Fessor

So.. Neues von der Analysefront:
So Merkwürdig, wie die Inks gesetzt sind und wie der Bildspeicher bei den Kollsionsroutinen mit Bitmasks verglichen wird, kommt Keith56s Beitrag hier: http://www.cpcwiki.eu/forum/programming/multiplatform-z80-asm-development-videos-with-vampires!/msg180560/#msg180560
genau zur rechten Zeit. Bei Bruce Lee scheint diese Technik auch angewendet worden zu sein. Was einigermaßen schade ist; hätte gehofft gehabt, dass man die Grafik farblich hätte aufhübschen können.


- Musikplayer (Über Jumptabelle: Call &8c00, direkt: Call &8d14)
- Soundeffekte (Zur Rückverfolgung interessant)
- Joytick/Keyboardabfrage (Zur Vorwärtsverfolgung interessant)
- Joytick/Keyboardabfrage (Zur Vorwärtsverfolgung interessant)
"AI" für die Demo - läuft praktisch auf eine aufgezeichnete Spielsession hinaus wo in ner Tabelle gespeichert wurde, wie lange in welche Richtung gelenkt wurde. Wird in die Joystick/Tastaturabfrage einspeist.

- Verwaltungsinformationen für die drei Sprites; ich hab immer noch nicht rausgefunden, wie die Spritedaten angesprochen werden; der Reassembler hat weder Label auf die Tabelle mit den Pointern zu den Sprites ermittelt, noch Referenzen bei den Spritedaten richtung Programmcode. Da ist wieder irgendwelches digitales Hexenwerk am Start und die die Adressen scheinen irgendwie errechnet zu werden, was der Reassembler natürlich nicht kann.

- Kollisionsroutine für begehbaren Untergrund
- Kollisionsroutine um kletterbare Objekte zu ermitteln

In den Kartenheadern ist Platz für eine kleine Jumptabelle für vier Funktionen enthalten. Unklar ist noch, wann welche Funktion aufgerufen wird.
Die Jumps werden beim initialisieren der Karte in die Strukturen reinkopiert; hier muss noch näher reingeschaut werden.

Kann man Winape eigentlich auch Symboltabellen unterschieben? Debuggen mit Hexadressen ist ein ziemlich mühseliges Geschäft...

TFM

Doch besser alles neu machen mit anständiger Grafik?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

Fessor

Da fehlt mir das Know How für. Mein persönliches Ziel ist es die Engine zunächst einmal gut genug zu verstehen um zu gucken ob und wo Änderungen nötig sind um ihr andere Levels unterjubeln zu können.

oobdoo

Eine neue Grafik kann man auch aus der 64er Version klauen.  :zwinker0018:
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088