Autore Topic: Aiuto con le sprites  (Letto 1005 volte)

Denz

  • Neo-iscritto
  • *
  • Post: 28
  • Gioco Preferito: bubble Bobble
Aiuto con le sprites
« il: 24 Giugno 2024, 13:08:20 »
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

  • Administrator
  • Utente
  • *****
  • Post: 2426
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Re:Aiuto con le sprites
« Risposta #1 il: 24 Giugno 2024, 17:04:33 »
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.
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

Griffon

  • Newbie
  • *
  • Post: 4
  • Gioco Preferito: Preoject Firestart
Re:Aiuto con le sprites
« Risposta #2 il: 24 Giugno 2024, 17:23:00 »
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

  • Neo-iscritto
  • *
  • Post: 28
  • Gioco Preferito: bubble Bobble
Re:Aiuto con le sprites
« Risposta #3 il: 24 Giugno 2024, 18:23:24 »
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
« Ultima modifica: 24 Giugno 2024, 18:36:31 da Roberto »

Griffon

  • Newbie
  • *
  • Post: 4
  • Gioco Preferito: Preoject Firestart
Re:Aiuto con le sprites
« Risposta #4 il: 24 Giugno 2024, 23:32:44 »
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.
« Ultima modifica: 24 Giugno 2024, 23:34:16 da Griffon »

Denz

  • Neo-iscritto
  • *
  • Post: 28
  • Gioco Preferito: bubble Bobble
Re:Aiuto con le sprites
« Risposta #5 il: 25 Giugno 2024, 01:06:22 »
ho una sola domanda ancora. ma ogni set di sprite deve avere sempre almeno 2 colori in comune? nel senso se ho tre set di sprite e quindi 24 sprite, mi ritrovo con 2 colori comuni a tutte e 24 e una che varia tra tutte le sprite oppure posso avere un seti di 3 colori per set di sprite?

Griffon

  • Newbie
  • *
  • Post: 4
  • Gioco Preferito: Preoject Firestart
Re:Aiuto con le sprites
« Risposta #6 il: 25 Giugno 2024, 10:07:20 »
Ogni set di  8 Sprite ha due colori in comune e uno liberamente selezionabile per ogni Sprite, più il colore trasparente.

Nulla ti vieta di cambiare i due colori comuni se cambi le grafiche, però

Denz

  • Neo-iscritto
  • *
  • Post: 28
  • Gioco Preferito: bubble Bobble
Re:Aiuto con le sprites
« Risposta #7 il: 26 Giugno 2024, 12:26:30 »
Quindi come carico correttamente secondo voi i tre set di sprites? Fermo resta do che se ne riumuovo una, il caricamento procede tranquillo, certo non sono ancora alla visualizzazione "ingame" però sapere che sono tutte caricate e pronte all'uso non satebbe male

Griffon

  • Newbie
  • *
  • Post: 4
  • Gioco Preferito: Preoject Firestart
Re:Aiuto con le sprites
« Risposta #8 il: 27 Giugno 2024, 01:12:14 »
Ti è già stato spiegato sopra: li carichi in un indirizzo di memoria dopo le precedenti e quando ti serve cambiarne l'aspetto, cambi i puntatori sprite a 2040~2047.

Ad esempio, se carichi il primo set da 12800 a 15311, carica il secondo a partire da 15312, e imposta 2040 a (15312 / 64 ) = 239, e i successivi di conseguenza.