Dopo aver smanettato con Sultan’s Maze, ho pensato di dare un’occhiata a Roland on the Ropes.
Ho chiesto a Claude se fosse in grado di cambiare lo scrolling, trasformando quei grandi salti orizzontali in qualcosa di un po’ migliore.
E ci è riuscito. Ora lo scrolling orizzontale si muove a blocchi di caratteri in Mode 1 invece che in Mode 0, il che è decisamente più piacevole.
Questo ha causato un sfarfallio fastidioso proprio su Roland, per il quale c’è voluto un po’ di botta e risposta per risolverlo.
La cosa successiva da provare era un aumento della velocità.
Ci sono volute diverse iterazioni e idee, ma come vedrete, ora è un sacco più veloce.
Infine, lo sfarfallio sui 4 lati dello schermo durante lo scrolling.
Questo succede a causa dell’uso dello scrolling hardware, e volevo vedere se Claude potesse fare qualcosa per minimizzarlo.
Non è sparito del tutto (anche dopo diversi miglioramenti), ma va molto meglio.
C’è stato qualche errore lungo il percorso, ma con abbastanza test e tentativi, è uscito fuori un ottimo risultato!
Tenete presente che non ho testato tutti gli aspetti del gameplay, ma sembra funzionare bene.
[EDIT] Hmmm, strano. Nel player RVM direttamente nel browser gira lentissimo!
[EDIT2] Sembra essere legato al sistema di controllo selezionato. Per il momento rimuovo il file dsk.
Stavo cercando di capire come aggiungere al post tutto il testo che avevo scritto, e sono riuscito a incollarlo in “Project Notes & Prompts”.
Mi è sembrato strano non poter pubblicare qualcosa sul gioco all’interno del topic.
È fatto apposta che i post sui contenuti vibe-coded siano limitati riguardo a ciò che si può pubblicare?
Inoltre, sono curioso, come mai la discussione su Sultan’s Maze è stata chiusa? (Vorrei sapere se ho sbagliato qualcosa e a cosa dovrei stare attento in futuro).
Mi chiedo se abbia usato le mie informazioni per prevenire lo sfarfallio sui lati…
L’altro giorno ho chiesto a ChatGPT come fare una cosa con lo scorrimento (ero curioso di vedere se riuscisse a tirare fuori qualcosa di nuovo dalle info esistenti, ma niente), gli ho chiesto dove avesse trovato quelle informazioni, e stava citando proprio me dal vecchio forum di cpcwiki. Beh, l’avevo pubblicato lì apposta perché la gente lo usasse…
Ok, non è lo sfarfallio da R3 a cui stavo pensando.
È il solito scorrimento hardware, non usa R3, e non usa il doppio buffering, il che è interessante. Ok, sembra che abbia srotolato il rendering dei tile in istruzioni LDI.
Riguardo all’uso di LDI, uno dei miei primi prompt è stato questo:
vorrei valutare la possibilità di applicare una patch al codice di gioco per migliorare lo scorrimento. E, se fattibile, creare un nuovo .bin che possa essere reinserito nel dsk. Al momento lo scorrimento è molto a scatti, sembra muoversi un carattere di mode 0 alla volta. Vorrei che si muovesse a scatti della dimensione dei caratteri di mode 1
e Claude ha risposto:
È fattibile, e i file patchati ROLANDC.BIN e ROLANDD.BIN sono pronti per essere inseriti nel dsk con gli stessi nomi. Li ho eseguiti solo nel mio ambiente di test (un core Z80 con chiamate firmware simulate), non su un CPC o un emulatore reale, quindi dovrai provarli sul tuo.
Come funziona lo scorrimento del gioco
Il gioco è in Mode 0, costruito con tile da 4×8 byte (un carattere in Mode 0), con una finestra di 20×23 tile più un pannello di stato di 2 righe.
Lo scorrimento è uno scorrimento hardware tramite firmware (SCR SET OFFSET): ±4 byte in orizzontale, ±80 in verticale, dopodiché viene disegnata una nuova colonna o riga di tile.
I passi verticali sono di 8 scanline, che corrisponde già all’altezza di un carattere in Mode 1, quindi ho lasciato invariato quello verticale.
Tutto il disegno passa attraverso un unico tile blitter a &2AF8, ed è questo che ha reso la patch così contenuta.
Cosa fa la patch
Ogni passo orizzontale è ora composto da due passi da 2 byte. La logica di gioco non è stata toccata e si muove ancora di un tile per ciclo.
Primo mezzo passo (hook a &A1DA, subito dopo la ricostruzione del buffer dei tile): sposta l’offset di 2, disegna metà della colonna in entrata e ridisegna il giocatore e il pannello di stato.
Secondo mezzo passo (hook a &34EF, il punto di scorrimento originale): sposta degli altri 2, disegna l’intera colonna e ripristina i tile sotto il giocatore.
Blitter più veloce: ho anche sostituito &2AF8 con una versione LDI srotolata (unrolled) per compensare il disegno aggiuntivo. Questo influisce sull’intero gioco, non solo sullo scorrimento.
Dove risiede: 397 byte a &A900 nel padding di zeri alla fine di ROLANDC, e 118 byte a &2A79 nel padding sotto il vecchio blitter. Le lunghezze dei file e gli header sono rimasti invariati.
E più tardi, nel tentativo di ridurre lo sfarfallio causato dallo scorrimento hardware, Claude ha detto questo:
Cosa è cambiato
Scorrimento del pannello attraverso il wrap: le lunghezze di esecuzione vengono calcolate una volta per movimento (fino a tre sezioni rettilinee per linea di scansione, divise dove la sorgente o la destinazione incontra la fine dei suoi 2K), quindi ogni linea viene copiata con LDIR/LDDR. Quando non c’è un wrap di mezzo, usa ancora la copia srotolata.
Rimosso il fallback del primo mezza passo: il ridisegno del pannello a mezzo stato è stato eliminato, poiché lo scorrimento non fallisce più a causa del wrap.
Passi di corda: ora lo scorrimento funziona nella zona anche sui passi verticali.
È davvero impressionante quello che riesce a fare, e così velocemente.
Lo uso al lavoro e l’altro giorno, guardando il codice che aveva generato, ho notato che aveva utilizzato un metodo di ricerca rapida che non conoscevo: ho approfondito l’argomento e ho imparato qualcosa di nuovo.
Il bello del metodo usato in questa versione è che lo scorrimento orizzontale può essere più fluido rispetto a quello verticale, perché in nessun punto del gioco si verifica uno scorrimento diagonale.
Veramente fantastico! Non mi è mai piaciuto il gioco a causa dello scrolling. Ora però è “abbastanza buono” da potermelo godere. Non c’è bisogno di un miglioramento dello scrolling.
Assolutamente eccezionale e un ottimo modo di usare l’IA.
Beh, sono stato un po’ indeciso sull’uso dell’IA, ma devo ammettere che ha risolto parecchi dei “problemi” qui su Roland On The Ropes.
Dopo averci giocato un po’, devo dire che la velocità di gioco davvero elevata — per quanto impressionante — rovina un po’ l’esperienza generale. Giocandoci da anni, ancora abbastanza regolarmente, rende fin troppo difficile calcolare il tempo per saltare sopra i topi, tanto per fare un esempio evidente. Nei livelli successivi, con più nemici come i pipistrelli ecc., diventerà un’incubo di frustrazione.
C’è un modo per mantenere i miglioramenti, ma limitandosi a dare una regolata alla velocità?
Questo è un ottimo miglioramento e un buon uso dell’IA per apportare modifiche mirate di piccole dimensioni volti a migliorare il codice esistente, senza dover perdere tutto quel tempo in analisi e patch manuali. Penso che sia opportunamente diverso dall’usare l’IA generativa per creare giochi da zero senza un vero apporto da parte di sviluppatori o grafici.
Sarebbe bello avere un blitting trasparente dello sprite del fantasma quando passa attraverso i muri, al posto di quel movimento così a blocchi.
non so davvero cosa dire. Hai completamente trasformato l’esperienza di gioco! Avevo questo gioco nel mio pacchetto di benvenuto quando ho preso il CPC per la prima volta. Mi piaceva parecchio, ma lo scrolling era un po’ fastidioso… ma ora? È così bello e fluido — ottimo lavoro!
Pensi che la resa degli sprite possa essere migliorata usando l’IA? Come puoi vedere non c’è trasparenza, dato che tutti gli sprite hanno lo sfondo nero. Sarebbe fantastico se si potessero migliorare.
Scusa @ervin, mi ero perso la tua risposta iniziale.
Quale discussione è stata chiusa?
E comunque no, non c’è alcun limite a ciò che puoi pubblicare nella categoria, l’unico requisito è il modulo (che non ho ancora capito come sei riuscito a superare)
All’inizio l’avevo creato nel sotto-forum sbagliato e, dopo che mi hai fatto notare che avrei dovuto crearlo in un sotto-forum pertinente all’IA, l’ho spostato in «Vibe-coded games».
Poi il thread è stato chiuso, e solo più tardi mi sono reso conto che forse intendevi che avrei dovuto ricrearlo nel forum appropriato.
Quindi il mio errore è stato semplicemente spostarlo in Vibe-coded invece di ricrearlo lì.