Commodore 64 > Programmazione, Grafica e Musica
Aiuto con le sprites
Denz:
Buongiorno a tutti,
Mi sto filettando con la creazione di un videogioco in basic, giusto per complicarmi la vita, vita che non è di un programmatore.
Il progetto si basa sul creare qualcosa con l'aiuto di chatGPT per testarne le potenzialità e fino ad ora, nonostante alcuni problemi è andato tutto abbastanza bene, il codice può essere scritto meglio ma funziona.
Ora però sono nella situazione in cui ho 16 Sprite, non ho bisogno di visualizzarle tutte ma nonostante le stia salvando in una locazione diversa della memoria, non riesco a richiamare le sprite necessarie alla bisogna.
Ad esempio: carico il primo seti di Sprite in cui si seleziona il colore di una macchina tra 8 diverse, poi dovrei caricare le sprite della pista che sono altrove ma mantenendo la Sprite della vettura scelta.
Dato che non sono programmatore la.mia logica mi consiglia di copiare i dati della Sprite selezionata e copiare il listato in uno spazio libero del secondo set di Sprite in modo da avere tutto il necessario. Oppure avere il secondo set di Sprite da chiamare e visualizzare solo le sprite necessarie (6 nel mio caso) e visualizzare una Sprite del primo set (per comodità CarSET e RaceSET).
Posso allegare il listato se qualcuno ha bisogno per aiutarmi nel risolvere o anche solo contribuire in qualunque modo.
Ringrazio anticipatamente chiunque si degni di rispondere e anche chi si prende solo la briga di leggere.
Grazie :martello:
Roberto:
Senza vedere il listato è un salto nel buio. Non so nemmeno se ho capito bene cosa intendi fare.
In linea di principio, per la pista, la prassi dovrebbe prevedere l'utilizzo di caratteri ridefiniti.
A meno che tu non voglia realizzare un esercizio di stile utilizzando solo sprites, come avviene nelle "Only Sprites Compo", che hanno prodotti giochi quali
S.P.R.E.R.O.
https://ready64.org/giochi/scheda_gioco/id/5793/s.p.r.e.r.o.
oppure
SPRITE INVADERS
https://ready64.org/giochi/scheda_gioco/id/5796/sprite-invaders
che però sono in ASM.
Griffon:
Credo ci sia qualche incomprensione di fondo. Il 64 ha solo 8 sprite hardware. Ottenerne di più a schermo è un trucco di programmazione che implica routine in assembly, o l'uso di un compilatore/linguaggio basic avanzato che permetta di scrivere le necessarie routine in interrupt.
Il basic v2 è troppo lento per gestire una cosa del genere senza l'aiuto di routine in assembly.
Detto ciò, mi sembra che si voglia scrivere un gioco di corse? Solitamente lo sfondo è fatto con dei caratteri ridefiniti, cui vengono sovrapposti sprite per le cose che necessitano di un movimento più rapido (come le auto).
Quindi, ci servono più informazioni per capire quello che si vuol realizzare...
Rimane il consiglio di usare un basic compilabile (come xc-basic) o un altro linguaggio con compilatore (come il Rascal o il cc65) per ralizzare una cosa del genere.
Denz:
La cosa divertente è che non ho idea di come si programmi. Quindi è tutto un esperimento.
Per rispondere a Roberto, si probabilmente il progetto è quello o qualcosa di simile, ma vorrei restare in basic.
Il listato lo aggiungo in coda a questo post, tieni in considerazione che:
1- é brutto
2- é molto brutto
3- sono solo Sprite e menù senza un vero senso logico per ora
4- il mio tentativo era, dopo la selezione della vettura, copiare i listati relativi alla Sprite, all'interno della posizione 0 del secondo set di Sprite e ricaricarlo prima di avviare la partita, in modo da avere le sprite della pista per montare il circuito e la Sprite della macchina da muovere
5- é davvero molto brutto
6- è un progetto fatto con ChatGPT quindi è al 100% terreno inesplorato
Per rispondere a Griffon, se leggi la risposta sopra capisci che non voglio andare oltre le 8 Sprite, ma magari riuscire a fare un, passami il termine nabbo, "copia incolla" delle liste necessarie per avere il "RaceSET" per fare quello che mi occorre. Se secondo te è impossibile però, accetto consigli. Quello che vorrei evitare è di avere più file da caricare, infatti stavo cercando anche un modo per trasformare delle BMP fatte con P1 in dati grezzi per caricarle direttamente sul basic. Tipo l'immagine del layout del circuito prima dell'avvio della partita. Ovviamente non sono riuscito nemmeno in quello, anche se, sempre chatGPT mi ha consigliato di fare il file kla (fatto e funzionante) e poi mi ha scritto un programma in python per convertire l'immagine in dati grezzi ma anche lì ho avuto un problema con un'estensione in visual studio code e non sono riuscito a portare a casa il risultato.
Il gioco è di per sé un gioco di corse a scorrimento verticale primitivo dove la Sprite non ruota ma si muove solo a dx e sx all'interno del circuito che scorre e che, tramite le "curve" simula un circuito reale. Non ho ancora deciso come rappresentare il circuito ma mi adatto ai limiti della mia scelta di restare in basic, se possibile.
Quello che voglio fare è quindi rendere funzionale il menù che ho creato fino ad ora in modo coerente.
Se hai bisogno di maggiori informazioni posso essere più chiaro e descrittivo.
Qui sotto lascio il listato dove cercavo di visualizzare il secondo set di Sprite senza un buon risultato dato che visualizzavo immagini corrotte
[rimosse 388 linee di basic e caricate come allegato - occhio!]
Grazie a tutti dell'aiuto
Griffon:
Da quel che ho capito, vuoi solo cambiare il contenuto degli sprite con altro contenuto. E' certamente possibile, basta cambiare le locazioni di memoria da 2040 a 2047 (rispettivamente per gli sprite 0-7). Nel tuo listato, carichi i dati grafici di alcuni sprite da 12800 a 12800+511, e poi esegui una serie di poke nelle locazioni dette sopra. per calcolare dove dove puntino, bisogna dividere la locazione per 64 (gli sprite devono essere sempre allineati a 64, ovvero devono essere in un indirizzo divisibile per 64 senza resto). Nel caso di 12800, 12800 / 64 fa 200. E infatti nel listato c'è una poke 2040,200.
Ora, nel listato tu carichi il secondo set di immagini per glli sprite SOPRA alla precedente. Questo è il motivo per cui non riesci a visualizzarli. Devi caricarli oltre ai precedenti, e POKEare la locazione corretta in 2040-2047.
Tutto il discorso sopra fila ed è bello, ma non stai tenendo conto di come la memoria del commodore 64 funziona, ed andrai inevitabilmente incontro a problemi se prima non ti studi le basi. E chatgpt, specie con le macchine d'epoca, spara delle castronate incredibili. Purtroppo, non ci sono scorciatoie.
Consiglio di recuperarsi (da archive.org) il manuale del commdoore 64, anche in italiano, che spiega abbastanza bene le basi a tal proposito, e in secondo luogo, la programmer's reference guide. Alcuni altri siti sono molto utili, come https://sta.c64.org/cbm64mem.html, che spiega cosa fanno le varie locazioni di memoria del 64.
C'è tanto da studiare, e passare dal basic v2 rende le cose più complesse, ma con buona volontà si può imparare. In bocca al lupo!
P.S. Consiglio anche l'incredibile sito https://petscii.krissz.hu/ per la creazione e conversione in file di dati (utilizzabili anche in basic) di sprite per C64, oltre che creazione di caratteri ridefiniti e schermate.
Navigazione
[0] Indice dei post
Vai alla versione completa