Αφού ασχολήθηκα με το Sultan’s Maze, είπα να δοκιμάσω και το Roland on the Ropes.
Ζήτησα από το Claude να δει αν μπορούσε να αλλάξει το scrolling από τα μεγάλα οριζόντια άλματα σε κάτι λίγο καλύτερο.
Και τα κατάφερε. Το οριζόντιο scrolling τώρα μετακινείται σε blocks χαρακτήρων mode 1 αντί για blocks χαρακτήρων mode 0, κάτι που είναι πολύ πιο όμορφο.
Αυτό οδήγησε σε ένα ακατάστατο τρεμόπαιγμα (shimmer) στον ίδιο τον Roland, το οποίο χρειάστηκε αρκετές δοκιμές και διορθώσεις για να φτιαχτεί.
Το επόμενο πράγμα που δοκίμασα ήταν μια επιτάχυνση.
Αυτό πέρασε από διάφορες εκδοχές και ιδέες, αλλά όπως θα δείτε, είναι πάρα πολύ πιο γρήγορο τώρα.
Τέλος, το τρεμόπαιγμα στις 4 πλευρές της οθόνης κατά το scrolling.
Αυτό συμβαίνει λόγω της χρήσης hardware scrolling και ήθελα να δω αν το Claude μπορούσε να κάνει κάτι για να το ελαχιστοποιήσει.
Δεν έχει εξαφανιστεί τελείως (ακόμα και μετά από αρκετές βελτιώσεις), αλλά είναι πολύ καλύτερο.
Υπήρξαν κάποια λάθη στην πορεία, αλλά με αρκετές δοκιμές και βελτιώσεις, έβγαλε ένα αρκετά καλό αποτέλεσμα!
Σημειώστε ότι δεν έχω δοκιμάσει όλες τις πτυχές του gameplay, αλλά φαίνεται να λειτουργεί μια χαρά.
[EDIT] Χμμμ, περίεργο. Στον in-browser RVM Player τρέχει πάρα πολύ αργά!
[EDIT2] Φαίνεται πως έχει να κάνει με την επιλεγμένη μέθοδο χειρισμού. Αφαιρώ το dsk προς το παρόν.
Προσπαθούσα να καταλάβω πώς να προσθέσω όλο το κείμενο που είχα γράψει στην ανάρτηση, και τελικά μπόρεσα να το επικολήσω στο «Project Notes & Prompts».
Μου φάνηκε παράξενο που δεν μπορούσα να δημοσιεύσω κάτι σχετικά με το παιχνίδι μέσα στο θέμα.
Είναι σχεδιασμένο έτσι ώστε οι αναρτήσεις για vibe-coded περιεχόμενο να έχουν περιορισμούς ως προς το τι μπορεί να δημοσιευτεί;
Επίσης, έχω την απορία, για ποιο λόγο έκλεισε το νήμα Sultan’s Maze; (Θέλω να ξέρω αν έκανα κάτι λάθος και τι θα πρέπει να προσέχω στο μέλλον).
Aporo an xrisimopoiise tis plirofories mou gia na apofygei to tremopaigma stis pleyres…
Rotisa to ChatGPT tis proalles pos na kano kapoio pragma me to scrolling (eixa periergeia an tha mporouse na skeftei kapoio kainourgio pragma apo idi hyparchouses plirofories, alla ochi), to rotisa pou vrike tis plirofories tou, kai mou parathetouse dika mou logia apo to palio forum tou cpcwiki. Telos panton, egno to eicha dhmosieusei ekei gia na to xrisimopoiisei o kosmos…
En taxei, den einai to tremopaigma apo to R3 pou skeftomoun.
Einai to synithis hardware scroll, xoris xrisi tou R3, kai den einai double buffering, pragma pou echei ενδιαφέρον. Ok, fainetai oti mporei na echei xetylixei to tile drawing se LDIs.
Όσον αφορά τη χρήση της LDI, ένα από τα πρώτα μου prompts ήταν αυτό:
i would like to look at patching the in-game code to improve the scrolling. and if that can be done, for a new .bin to be built than can slot back onto the dsk. at the moment the scrolling is very jumpy, moving in what appears to be 1 mode 0 character at a time. i would like it to move in jumps the size of mode 1 characters
και ο Claude απάντησε:
It can be done, and the patched ROLANDC.BIN and ROLANDD.BIN are ready to drop onto the dsk under the same names. I have only run them in my own harness (a Z80 core with stubbed firmware calls), not on a CPC or a real emulator, so they need a run in yours.
How the game scrolls
The game is Mode 0, built from 4×8-byte tiles (one Mode 0 character), with a 20×23 tile window plus a 2-row status panel.
Scrolling is firmware hardware scroll (SCR SET OFFSET): ±4 bytes horizontally, ±80 vertically, then one new column or row of tiles is drawn.
Vertical steps are 8 scanlines, which is already Mode 1 character height, so I left vertical alone.
All drawing goes through one tile blitter at &2AF8, which is what made the patch small.
What the patch does
Each horizontal step is now two 2-byte steps. Game logic is untouched and still moves one tile per loop.
First half-step (hook at &A1DA, just after the tile buffer rebuild): shifts the offset by 2, draws half of the incoming column, and redraws the player and the status panel.
Second half-step (hook at &34EF, the original scroll point): shifts by the other 2, draws the full column, and restores the tiles under the player.
Faster blitter: I also replaced &2AF8 with an unrolled LDI version to pay for the extra drawing. This affects the whole game, not just scrolling.
Where it lives: 397 bytes at &A900 in the zero padding at the end of ROLANDC, and 118 bytes at &2A79 in the padding below the old blitter. File lengths and headers are unchanged.
Kαι αργότερα, όταν προσπαθούσε να μειώσει το τρεμόπαιγμα (shimmering) που προκαλούσε το hardware scroll, ο Claude είπε τα εξής:
Τι άλλαξε
Ολίσθηση του panel κατά το wrap: τα μήκη των εκτελέσεων υπολογίζονται μία φορά ανά κίνηση (έως και τρεις ευθείες εκτελέσεις ανά γραμμή σάρωσης, χωρισμένες εκεί που η πηγή ή ο προορισμός συναντά το τέλος των 2K του), και στη συνέχεια κάθε γραμμή αντιγράφεται με LDIR/LDDR. Όταν δεν υπάρχει wrap στη μέση, χρησιμοποιεί και πάλι την ανεπτυγμένη αντιγραφή (unrolled copy).
Κατάργηση της εναλλακτικής λύσης για το πρώτο μισό βήμα: η επαναχεδίαση του panel στο μισό στάδιο αφαιρέθηκε, καθώς η ολίσθηση δεν αποτυγχάνει πλέον λόγω του wrap.
Βήματα σχοινιού: η ολίσθηση πλέον λειτουργεί στη ζώνη και στα κατακόρυφα βήματα.
Είναι εντυπωσιακό το τι μπορεί να κάνει και μάλιστα τόσο γρήγορα.
Το χρησιμοποιώ στη δουλειά και τις προάλλες κοιτούσα τον κώδικα που είχε δημιουργηθεί· είχε χρησιμοποιήσει μια γρήγορη μέθοδο αναζήτησης (look up) που δεν γνώριζα μέχρι τότε, οπότε διάβασα γι’ αυτήν και έμαθα κάτι καινούργιο.
Το καλό με τη μέθοδο που χρησιμοποιείται σε αυτή την έκδοση είναι ότι η οριζόντια κύλιση μπορεί να είναι πιο ομαλή από την κατακόρυφη, επειδή δεν υπάρχει διαγώνια κύλιση πουθενά στο παιχνίδι.
Πραγματικά εξαιρετικό! Δεν μου άρεσε ποτέ το παιχνίδι λόγω του scrolling. Αυτό τώρα είναι «αρκετά καλό» για να το απολαύσω. Δεν χρειάζεται καλύτερο scrolling.
Απόλυτα καταπληκτικό και ένας υπέροχος τρόπος χρήσης της τεχνητής νοημοσύνης (AI).
E, ήμουν κάπως αναποφάσιστος σχετικά με τη χρήση της ΤΝ, αλλά πρέπει να παραδεχτώ ότι έλυσε πολλά από τα «προβλήματα» εδώ στο Roland On The Ropes.
Αφού το έπαιξα λίγο, θα έλεγα ότι η πραγματικά γρήγορη ταχύτητα του «gameplay» - αν και εντυπωσιακή - κάπως χαλάει τη συνολική εμπειρία του παιχνιδιού. Μετά από χρόνια ενασχόλησης με το παιχνίδι, το οποίο παίζω ακόμα αρκετά συχνά, κάνει πολύ δύσκολο το να υπολογίσεις τη στιγμή που πρέπει να πηδήξεις πάνω από τους αρουραίους, για να δώσω ένα προφανές παράδειγμα. Σε μεγαλύτερες πίστες με πολλαπλούς εχθρούς, όπως νυχτερίδες κ.λπ., θα είναι απλά ένας εφιάλτης εκνευρισμού.
Υπάρχει τρόπος να κρατήσουμε τις βελτιώσεις αλλά να ρίξουμε λίγο την ταχύτητα;
Aυτή είναι μια πολύ ωραία βελτίωση και μια καλή χρήση της ΑΙ για στοχευμένες μικρές αλλαγές, ώστε να βελτιωθεί η υπάρχουσα βάση κώδικα χωρίς να χρειάζεται να αφιερωθεί τόσος χρόνος σε χειροκίνητη ανάλυση και διορθώσεις. Πιστεύω ότι αυτό διαφέρει αισθητά από τη χρήση παραγωγικής ΑΙ για τη δημιουργία παιχνιδιών από το μηδέν με ελάχιστη συμβολή από προγραμματιστές ή σχεδιαστές γραφικών.
Αυτό που θα ήταν ωραίο είναι το διαφανές blitting του sprite του φαντάσματος όταν περνάει μέσα από τοίχους, αντί για αυτή τη μεγάλη, απότομη κίνηση.
Δεν ξέρω τι να πω. Έχεις μεταμορφώσει εντελώς την εμπειρία του παιχνιδιού. Το είχα αυτό στο πακέτο υποδοχής όταν πρωτοπήρα τον CPC. Μου άρεσε αρκετά, αλλά το scrolling σε ξενέρωνε λίγο· τώρα όμως… Είναι τόσο καλό και ομαλό - Μπράβο!
Πιστεύεις ότι η σχεδίαση των sprites θα μπορούσε να βελτιωθεί χρησιμοποιώντας AI; Μπορείς να δεις ότι δεν υπάρχει διαφάνεια, καθώς όλα τα sprites έχουν μαύρο φόντο. Θα ήταν υπέροχο αν μπορούσαν να βελτιωθούν.
Συγγνώμη @ervin , είχα χάσει την αρχική σου απάντηση.
Ποιο θέμα έκλεισε;
Επίσης, όχι, δεν υπάρχει όριο στο τι μπορείς να δημοσιεύσεις στην κατηγορία. Η μόνη προϋπόθεση είναι η φόρμα (αν και ακόμα δεν έχω καταλάβει πώς κατάφερες να προσπεράσεις αυτό το βήμα😁)
Αρχικά το είχα δημιουργήσει σε λάθος υπο-φόρουμ, και αφού ανέφερες ότι έπρεπε να το δημιουργήσω σε ένα κατάλληλο υπο-φόρουμ σχετικά με την ΤΝ, το μετέφερα στο «Vibe-coded games».
Στη συνέχεια το νήμα έκλεισε, και μόλις αργότερα κατάλαβα ότι μπορεί να εννοούσες ότι έπρεπε να το ξαναδημιουργήσω στο κατάλληλο φόρουμ.
Οπότε το λάθος μου ήταν ότι απλώς το μετέφερα στο Vibe-coded αντί να το δημιουργήσω ξανά εκεί.