Decompiling κλασικών παιχνιδιών CPC

Γεια σε όλους.

Σκέφτηκα να δοκιμάσω κάτι.

Ανέβασα ένα snapshot ενός διάσημου ισομετρικού παιχνιδιού στο Claude και μετά του ζήτησα (με μερικά πολύ συγκεκριμένα κριτήρια) να κάνει decompile το παιχνίδι από το snapshot και να το ξαναγράψει εξ ολοκλήρου σε BlitzMax, με στόχο τα πάντα (μενού, gameplay, ήχοι κ.λπ.) να λειτουργούν ακριβώς όπως στο αρχικό παιχνίδι.

Μιλάμε έπαθα πλάκα. Σε κάτι παραπάνω από μία ώρα ήταν έτοιμο, και το αποτέλεσμα είναι εκπληκτικό.

Ο κώδικας blitzmax που προέκυψε είναι ευανάγνωστος και έχει σχόλια.

Αν ενδιαφέρεται κανείς, αυτό ήταν το prompt μου (χρησιμοποιώντας τη ρύθμιση Low του Claude Opus 5.5):

γεια σου.
κάνε decompile αυτό.

θα ήθελα να γίνει port σε blitzmaxNG 0.165.3.61.

Κάνε port ΟΛΟΚΛΗΡΟ το πρόγραμμα σε blitzmax.
Πολύ απλός, καθαρός, ευανάγνωστος κώδικας και εντελώς unoptimised.
Προσπάθησε να φτιάξεις έναν αντίστοιχο ήχο για κάθε ήχο του προγράμματος.
Κάνε το να τρέχει σε παράθυρο 1280x800, όπου η οθόνη του cpc να είναι σε κλίμακα x 4.

όχι optimisation.
όχι περίπλοκα πράγματα.
απλώς ένα καθαρό 1:1 port.

όχι περίεργα κόλπα με τη μνήμη για την επεξεργασία δεδομένων, απλώς απλά arrays όπου είναι εφικτό.
ο χρυσός κανόνας είναι να κρατήσεις τον κώδικα blitzmax ΟΣΟ ΠΙΟ ΑΠΛΟ ΓΙΝΕΤΑΙ, και όσο πιο ευανάγνωστο και εύκολο στην παρακολούθηση γίνεται.

σοβαρά, καθόλου περίπλοκα ή «σοφιστικέ» πράγματα!

3 «Μου αρέσει»

… Και το αποτέλεσμα;

Θυμάμαι το BlitzBasic και τις πρώτες μου προσπάθειες να φτιάξω ένα ριμέικ του Asphalt :slight_smile:

Υπάρχει καμία εικόνα να δούμε;

Ορίστε μερικές εικόνες.

[EDIT] Ουπς, άφησα τον δείκτη του ποντικιού πάνω από το παράθυρο κατά τη λήψη των εικόνων!

1 «Μου αρέσει»

Ουσιαστικά το ίδιο παιχνίδι, τα remakes θα είναι πιο εύκολο να δημιουργηθούν.

Δοκίμασα με τον πηγαίο κώδικα του παιχνιδιού μου, Bitume, να κάνω μετάβαση στο C++ framework μου με Direct2d (ενημέρωση του framework Direct3d που είχα χρησιμοποιήσει για το remake του Hurlements για Windows). Και φυσικά δουλεύει.

1 «Μου αρέσει»

Και πάλι, άλλο ένα είδος παιχνιδιού που προσπαθούσα να μιμηθώ σε ένα πρότζεκτ χειροκίνητα (φτιάχνοντας ένα είδος ισομετρικού framework για CPC)… Προσπαθώντας να μάθω στην πορεία (βρήκα μέχρι και ένα άρθρο του Jon Ritman πάνω σε αυτό για να διαβάσω). Και η τεχνητή νοημοσύνη μπορεί απλώς να δώσει τον κώδικα αν το θέλω.

Αλλά δεν πειράζει, είναι απλώς «μια υλοποίηση» ανάμεσα σε άλλες… Μπορώ να συνεχίσω με αργούς ρυθμούς (αντί για τσαπατσούλικους).

Σκόπευες να το επεξεργαστείς και να το χρησιμοποιήσεις ως βάση για ένα άλλο παιχνίδι; Ή μήπως είναι απλώς για την ομορφιά του porting;

Πάντα με ενδιέφερε το πώς φτιάχνονταν τα ισομετρικά παιχνίδια, ειδικά αν αναλογιστεί κανείς τους περιορισμούς του υλικού (hardware). Και ο κώδικας σε BlitzMax είναι πολύ ευκολονόητος και ιδανικός για να μάθει κανείς από αυτόν. Η τεχνητή νοημοσύνη μού έδωσε απλώς έναν τρόπο να εξετάσω και να καταλάβω στην πράξη πώς λειτουργεί.

Και πρέπει να πω ότι ο Jon Ritman είναι μια απόλυτη διάνοια! Η σχέση αιτίου-αποτελέσματος ανάμεσα στα αντικείμενα του παιχνιδιού, οι αλληλεπιδράσεις μεταξύ χαρακτήρων και αντικειμένων, χαρακτήρων και επιφανειών, καθώς και μεταξύ χαρακτήρων, είναι εξαιρετικά βαθιά και με πολλές αποχρώσεις. Ποτέ δεν είχα εκτιμήσει πόσο πραγματικά πανέξυπνο είναι το «Head Over Heels». Όχι μόνο ένα αριστούργημα στον τομέα του gameplay, αλλά και ένα αριστούργημα προγραμματισμού.

Το «Head Over Heels» είναι το αγαπημένο μου παιχνίδι για CPC όλων των εποχών, οπότε το να ρίχνω μια ματιά πίσω από τα παρασκήνια είναι κάτι πολύ ξεχωριστό για μένα. Σκέφτομαι να ζητήσω από τον Claude να κάνει port το «Rasputin» στη συνέχεια…

1 «Μου αρέσει»

Δεν ξέρω το παιχνίδι Rasputin· από ισομετρικά παιχνίδια, το Fairlight με είχε εντυπωσιάσει πάρα πολύ.

Χμμμ. Το Fairlight είναι ενδιαφέρουσα επιλογή…

Ρασπούτιν.

Αυτό έγινε με το GTP 6.1 Sol.

Δεν είμαι σίγουρος αν η ενέργεια της Ασπίδας και του Σπαθιού εμφανίζονται σωστά. Δεν πειράζει.

Στη συνέχεια θα δοκιμάσω το Fairlight.

1 «Μου αρέσει»

Πώς συγκρίνεται το GTP 6.1 με το Claude.AI;

Το Claude φαίνεται λίγο καλύτερο για τέτοιου είδους πράγματα, αλλά θα φτιάξω το Fairlight τόσο με το Claude όσο και με το GPT.

Στη συνέχεια, ο κώδικας BlitzMax από το καθένα μπορεί να συγκριθεί.

Πρώτη προσπάθεια από το Claude (αλλά τώρα πρέπει να περιμένω 2 ημέρες για να μηδενιστεί το όριο χρήσης μου).

Δυστυχώς, ο χαρακτήρας του παίκτη είναι ένα χάλι από πίξελ και κανένα πλήκτρο ελέγχου δεν τον κάνει να κινηθεί.
Μόλις ανανεωθεί το όριο χρήσης μου, θα το συνεχίσω.

Η απόδοση του δωματίου είναι ήδη μια χαρά και δεν υπάρχει πρόβλημα απόδοσης σε αυτού του είδους τη μετατροπή.

1 «Μου αρέσει»

Η έκδοση του GPT.

Φαίνεται να λειτουργεί μια χαρά.

Και η ταχύτητα του παιχνιδιού μπορεί να αλλάξει μέσω μιας απλής CONST.

3 «Μου αρέσει»

Είναι καλή ιδέα να χρησιμοποιηθεί μια προσέγγιση gaming προσανατολισμένη στη BASIC· ο κώδικας θα είναι πιο ευανάγνωστος σε σχέση με το να μετατραπεί σε C++ και να διατηρηθεί μόνο η λογική του παιχνιδιού.

1 «Μου αρέσει»

Ο Rasputin διορθώθηκε.

1 «Μου αρέσει»

Ο κώδικας BlitzMax που προέκυψε και από τα 3 παιχνίδια είναι πράγματι πολύ εύκολος στην κατανόηση και την παρακολούθηση. Δεν ξέρω ακόμα πώς νιώθω για αυτό από ηθικής άποψης, αλλά ως εκπαιδευτικό εργαλείο είναι καταπληκτικός.

Υπήρχε ήδη ένα παρόμοιο ζήτημα με την αποσυναρμολόγηση (disassembly) του παιχνιδιού, αλλά αυτό εξακολουθούσε να απαιτεί αρκετές τεχνικές γνώσεις στο πλαίσιο της ανάπτυξης για CPC.

Αυτό είναι ένα πολύ καλό επιχείρημα… ωστόσο, σε αυτή την περίπτωση δεν «κέρδισα με την αξία μου» το δικαίωμα να εξετάσω πώς λειτουργούν τα παιχνίδια. Απλώς απέκτησα ξαφνικά (και εύκολα) τη δυνατότητα να κατανοήσω τους αλγορίθμους που χρησιμοποιούνται σε αυτά τα παιχνίδια κλειστού κώδικα.

Φυσικά, ο αρχικός πηγαίος κώδικας δεν είναι διαθέσιμος, και πρόκειται για ανακατασκευή. Όμως, από αλγοριθμική άποψη, είναι πολύ πιθανό να αποτελεί μια απόλυτα έγκυρη αναπαράσταση αυτού που είχαν δημιουργήσει οι αρχικοί προγραμματιστές. Μοιάζει με κλεψιά.