Diamaxus Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 (modificato) Ciao a tutti! Come ho detto nell’aggiornamento di qualche giorno fa, sto imparando a programmare per il GBA (GameBoy Advance) e vorrei aprire questa discussione sia per discuterne con con voi che per mostrarvi i miei progressi. Vorrei anche impostarlo come se fosse un tutorial nel caso qualcuno di voi fosse interessato a imparare, perciò citerò le fonti delle informazioni che vi darò, soprattutto per quanto riguarda le caratteristiche Hardware. Taggo @evilespeon e @ZedeFire che erano interessati alla discussione e altre persone che potrebbero essere interessate: @Macca @Porygatto che visto che sta giocando a Zaffiro magari gli interessa anche capire come caricare gli sprite sul gba , @Keroro @liviopocoyo @LadyDarkrai e @Vale e inoltre ringrazio @VictiniPika per avermi permesso di inserire i link. Partiamo proprio dall’hardware del GBA per poi passare ai comandi di base che useremo oggi. Cercherò di semplificare il più possibile. Se avete delle domande chiedete pure, farò del mio meglio per farvi capire i concetti. Chi vuole può saltare direttamente alla fine del post per vedere direttamente il risultato del mio primo programma. Il GBA ha un processore ARM a 32 bit. I giochi sono distribuiti in Game Paks che sono costituiti da una ROM per il codice e i dati e spesso dalla RAM per salvare le informazioni di gioco. Ha uno schermo LCD di 240x160 px capace di visualizzare 32768 colori (15 bit = 215 valori rappresentabili). Altre caratteristiche principali che saranno utili sono: Video: 3 modalità bitmap e 3 modalità tilemap 4 layer separati di tilemap (per gli sfondi) e 128 sprite (per gli oggetti) trasformazioni affini (rotazione/scalatura/trasformazione obliqua) su due sfondi e 32 oggetti effetti grafici speciali: mosaico, additive blending, fade a nero/bianco suono: 6 canali 4 generatori di suoni del GameBoy originale: 2 di onde quadre, 1 di onde generiche e 1 generatore di rumore 2 canali “DirectSound” per suonare campioni e musica. Altro: 10 tasti (4 frecce direzionali, select/start, A e B, L e R) 14 interrupt hardware modalità multiplayer a 4 giocatori attraverso cavetto multiboot sensore opzionale a infrarossi, sensore di luce e giroscopio. Linguaggio di programmazione C (possibile anche il C++) e Assembly ma esistono anche tool per programmare in altri linguaggi. Dal punto di vista della programmazione, il GBA non ha un sistema operativo (a differenza delle console moderne) il che significa che quando programmiamo andiamo a scrivere direttamente nei registri del processore. Sezioni di memoria Area | indirizzo di inizio | indirizzo di fine | lunghezza | dimensione della porta | descrizione ROM | 0000:0000h | 0000:3FFFh | 16 kb | 32 bit | memoria del BIOS, non può vi si può accedere per leggere i dati ma solo per scriverli. EWRAM | 0200:0000h | 0203:FFFFh | 256 kb | 16 bit | External Work RAM. Disponibile per il codice e i dati, viene usata dal cavo multiboot. IWRAM | 0300:0000h | 0300:7FFFh | 32 kb | 32 bit | Internal Work RAM. Disponibile per codice e dati, è la sezione di memoria più veloce. IO RAM | 0400:0000h | 0400:03FFh | 1kb | 16 bit | Registri Input-Output, è la sezione dove si controllano la grafica, il suono, i tasti e altre caratteristiche. PAL RAM | 0500:0000h | 0500:03FFh | 1kb | 16 bit | memoria usata per 2 palette ciascuna di 256 colori con profondità 15 bit, la prima è per gli sfondi, la seconda per gli sprite. VRAM | 0600:0000h | 0601:7FFFh | 96 kbit | 16 bit | Video RAM dove vengono conservati i dati per gli sfondi e gli sprite. OAM | 0700:0000h | 0700:03FFh | 1 kb | 32 bit | Object Attribute Memory, permette di controllare gli Sprite. PAK ROM | 0800:0000h | variabile | variabile | 16 bit | Game Pak ROM. È dove si trova il gioco e dove inizia l’esecuzione se non si usa un cavo multiboot. Sebbene la dimensione sia variabile il limite è 32 MB. Cart RAM | 0E00:0000h | variabile | variabile | 8 bit | Cartridge RAM. È dove si trovano i dati di salvataggio. La dimensione totale è variabile ma si consiglia 64 kb. N.B. kb sta per kilobit non kilobyte. fonte: https://gbadev.net/tonc/hardware.html Strumenti Per programmare in C vi basta un qualunque editor di testo, va bene anche NotePad. Per la compilazione della ROM serve un tool specifico, chiamato devkitPRO e se siete su Windows anche la shell Msys. Potete trovare tutte le info qui se siete interessati: https://devkitpro.org/wiki/Getting_Started Il motivo per il quale non usiamo un ambiente di sviluppo come Eclipse, DevC++ ecc. è che il Makefile che dobbiamo usare è speciale, in quanto il GBA controlla che l’intestazione della ROM del gioco sia corretta, in caso contrario dà errore. La struttura della cartella in cui salveremo i file con il codice C è quella in figura: in "include" vanno i file *.h, in "source" i file *.c Come emulatore io uso mGBA ma va bene uno qualsiasi. Nozioni base del C Vi darò solo quelle essenziali che userò di volta in volta, altrimenti sarebbero troppe. XD Innanzitutto dovete sapere che ogni istruzione C deve terminare con il punto e virgola (tranne in alcuni casi specifici come il ciclo for/while e le direttive al preprocessore). La dichiarazione di una variabile ha questa forma: tipo_della_variabile nome_della_variabile; Esistono vari tipi, quelli che vedrete più spesso sono int, char e float ma ce ne sono altri che potete vedere su wikipedia se siete interessati. Attraverso int dichiariamo una variabile di tipo intero ossia un numero intero. Attraverso char dichiariamo una variabile che contiene un carattere (cioè una lettera). Attraverso float dichiariamo una variabile che contiene un numero con la virola. Ad esempio attraverso l’istruzione int a; dichiaro una variabile di tipo intero che chiamo a. Per assegnare un valore a questa variabile devo scrivere ad es. int a = 10; Comunque non vi preoccupate che appena li incontriamo vi spiego di volta in volta quali sono. Poiché il nostro file sarà diviso in file.h e file.c per includere le funzioni che andremo a scrivere nei file *.h usiamo la primitiva #include “file.h” (senza punto e virgola, ricordate? Ci sono delle eccezioni ). Un altro elemento che avete bisogno di conoscere è il vettore, che è sostanzialmente una collezione di elementi per farla semplice. Immaginate che sia uno scaffale dove dove sono riposti in ordine degli oggetti. Data una variabile intera dim (che rappresenta la lunghezza del vettore), definiamo un vettore ad es. di tipo intero in questo modo: int vettore[dim]; Sostituendo tra le parentesi quadre un numero indichiamo uno specifico elemento di quel vettore, ad es. int vettore[0]; indica il primo elemento del vettore. Aggiungendo un secondo indice, rappresentiamo una matrice (link a wikipedia). Ad es. int matrice[dim1][dim2]; dove dim1 e dim2 sono i numeri di righe e di colonne della matrice. Il mio primo programma per GBA: Hello World Per i veterani del C, sappiate che non avendo un sistema operativo, non possiamo usare printf() o le funzioni incluse in stdio.h per scrivere sullo schermo. Quindi il primo programma che ho fatto è stato quello per disegnare a schermo una barretta verticale, come quella del classico PONG. Inizio con il commentare il mio file header helloworld.h: typedef unsigned short u16; typedef unsigned int u32; typedef u16 color; #define MEM_IO 0x04000000 #define MEM_VRAM 0x06000000 #define REG_DISPCNT *((volatile u32*)(MEM_IO + 0x0000)) #define DCNT_MODE3 0x0003 #define DCNT_BG2 0x0400 #define SCREEN_W 240 #define SCREEN_H 160 #define WHITE_COLOR 0x7FFF typedef color m3_line[SCREEN_W]; #define M3_MEM ((m3_line *)MEM_VRAM) In questo file quello che faccio in sostanza è definire alcune costanti e alcuni tipi che mi serviranno nel programma principale. u16 e u32 sono due tipi interi che definisco, la u sta per unsigned cioè senza segno 16 e 32 sono i bit che occupano in memoria. Il tipo color lo uso semplicemente per ricordarmi che il GBA è in grado di rappresentare i colori in 16 bit (il sedicesimo non viene usato quindi in realtà sono 15). MEM_IO è l’indirizzo del registro di Input-Output in base esadecimale. MEM_VRAM è l’indirizzo della RAM video espresso in base esadecimale. REG_DISPCNT è il registro di controllo dello schermo (Display Control Register), è complicata da spiegare in parole semplici questa istruzione ma diciamo che serve per accedere direttamente al contenuto del registro. Per farvi meglio capire come è fatto il registro vi allego questa immagine presa qui: Spoiler In base a dove scriviamo 1 o 0 nella tabella, attiviamo alcune funzioni. Per ora non preoccupatevi dei nomi; ci torneremo in un capitolo successivo. MEM_IO + 0x0000 = 0x04000000 ossia l’indirizzo 0400:0000 cioè l’indirizzo dell’IO RAM. Serve perché il valore di quella variabile potrebbe cambiare indipendentemente da quello che scriviamo nel codice, e stiamo dicendo al compilatore di ignorarla (volatile persuation). Non vado nel dettaglio perché è davvero complicato da spiegare. DCNT_MODE3 e DCNT_BG2 servono ad impostare la modalità dello schermo, di cui vi parlerò nel prossimo capitolo più nel dettaglio. SCREEN_W E SCREEN_H sono le dimensioni in pixel dello schermo. WHITE_COLOR è semplicemente il colore bianco espresso in base esadecimale. Per concludere le ultime due istruzioni mi servono a mappare i pixel dello schermo: con la prima creo un vettore di grandezza pari alla larghezza dello schermo e con la seconda indico l’indirizzo della Video RAM e siccome devo disegnare una linea deve essere dello stesso tipo con cui definisco le variabili a cui assegno un colore. Passiamo al file helloworld.c che ci serve a disegnare la barretta. #include "helloworld.h" int main(void) { u32 x = 10; u32 y = 10; REG_DISPCNT = DCNT_MODE3 | DCNT_BG2; for (u32 colonna = x; colonna <= (x + 2); colonna++) { for (u32 riga = y; riga <= (2 * y); riga++) { M3_MEM [riga][colonna] = WHITE_COLOR; } } while(1); return 0; } int main(void) {…} è la funzione principale, che ci permette di eseguire le nostre funzioni che abbiamo eventualmente definito nei file *.h . x e y sono le coordinate che ci permettono di definire un punto sullo schermo, assegno a queste il valore 10 per far partire la barretta in una posizione più centrale poiché sullo schermo l’origine degli assi si trova in alto a sinistra. REG_DISPCNT = DCNT_MODE3 | DCNT_BG2; mi serve per impostare i bit necessari ad attivare la modalità bitmap 3 e background2 sullo schermo. È arrivato il momento di disegnare la mia barretta, cosa che faccio attraverso due cicli for in modo tale da fissare il valore della coordinata x e far variare la coordinata y. L’istruzione M3_MEM [riga][colonna] mi permette di accedere alla posizione x,y sullo schermo per farla breve, nella pratica vado ad assegnare il valore “bianco” al registro della VRAM. While(1); serve per non far concludere il programma, poiché non essendoci un sistema operativo se il programma terminasse il comportamento non è definito. Non vi mostro il Makefile questa volta, perché già così sono un sacco di informazioni da assimilare, e inoltre in questo caso non mi è servito modificare il Makefile fornito da devkitPRO. XD A questo punto vado sulla shell scrivo cd /percorso/dove/hai/messo/la/cartella/del/tuo/programma faccio invio, e scrivo make questo è quello che uscirà scritto nella shell: Se è andato tutto a buon fine uscirà scritto "ROM fixed!". Aprendo la ROM questo è quello che apparirà a schermo: Per oggi è tutto, ci vediamo al prossimo capitolo. Se avete domande fatele pure, e fatemi sapere se vi interessa questa rubrica o se c'è qualcosa che non capite. Modificato 4 aprile da Diamaxus aggiungo link alla fonte aggiornata alla nuova versione E' stata aggiunta una reazione da ShadowBlue, VincyDarkHeart, BloodyRed e 2 altri 4 1 "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 Grandeeee che hai aperto la discussione e grazieee per il tag kohai ho dato una occhiata veloce e mi sembra tutto tanto troppo zeriano ma mi interessa devo dire dopo leggo per bene E' stata aggiunta una reazione da Diamaxus 1 TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 Adesso, evilespeon ha scritto: Grandeeee che hai aperto la discussione e grazieee per il tag kohai ho dato una occhiata veloce e mi sembra tutto tanto troppo zeriano ma mi interessa devo dire dopo leggo per bene Ma come!? ho cercato di spiegare nel modo più semplice possibile XD Scherzo, mi rendo perfettamente conto che non è semplice, ma magari prova a leggerlo con calma. "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 1 minuto fa, Diamaxus ha scritto: Ma come!? ho cercato di spiegare nel modo più semplice possibile XD Scherzo, mi rendo perfettamente conto che non è semplice, ma magari prova a leggerlo con calma. Ma ti ho detto ch per ora ho solo visto veloce e quindi leggo cose tipo reg_dispcnt e mi sembra zerianissimo XD Si infatti ora provo a leggerlo per bene TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 4 minuti fa, evilespeon ha scritto: Ma ti ho detto ch per ora ho solo visto veloce e quindi leggo cose tipo reg_dispcnt e mi sembra zerianissimo XD Si infatti ora provo a leggerlo per bene Ahah vabbè quello è normale, sono acronimi "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 2 minuti fa, Diamaxus ha scritto: Ahah vabbè quello è normale, sono acronimi È zeriano te lo dico io XD E' stata aggiunta una reazione da Diamaxus 1 TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 1 minuto fa, evilespeon ha scritto: È zeriano te lo dico io XD Va bene è zeriano XD "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 12 minuti fa, Diamaxus ha scritto: Va bene è zeriano XD Io comunque ho capito solo ora che tutto sto caos serve solo a fare quella piccola barra verticale alla fine...mi sa che la programmazione la lascio ai pikachu XD E' stata aggiunta una reazione da Diamaxus 1 TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 Adesso, evilespeon ha scritto: Io comunque ho capito solo ora che tutto sto caos serve solo a fare quella piccola barra verticale alla fine...mi sa che la programmazione la lascio ai pikachu XD Solo quella parte dove stanno quelle sigle e il main XD La parte precedente descrive proprio come è fatta la console XD Però intanto se ci hai capito qualcosa è già un buon risultato "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 4 minuti fa, Diamaxus ha scritto: Solo quella parte dove stanno quelle sigle e il main XD La parte precedente descrive proprio come è fatta la console XD Però intanto se ci hai capito qualcosa è già un buon risultato Ah ecco allora avevo capito tutto come sempre...ma anche no XD Ma piano piano sto capendo...forse XD E' stata aggiunta una reazione da Diamaxus 1 TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
liviopocoyo Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 non ho capito niente...però me lo ricorderò se devo prendere dei + dal prof di informatica... Dollina di Sora dal mitico @Shutmylazer Dollina di hogwarts legaacy dal mitico @Shutmylazer e sfondo del telefono fatto da lui premi musharna's dream ecco ho finito ecco il problema di essere nel forum attivamente da soli 8 mesi... allora, aspettando premiazioni o dediche, parlerò di un'altra cosetta La migliore colonna sonora di sempre: testo e musica Funfact, è stata composta in un giorno You've got a friend in me You've got a friend in me When the road looks rough ahead And you're miles and miles From your nice warm bed You just remember what your old pal said Boy, you've got a friend in me Yeah, you've got a friend in me You've got a friend in me You've got a friend in me You got troubles, I've got 'em too There isn't anything I wouldn't do for you We stick together and see it through 'Cause you've got a friend in me You've got a friend in me Some other folks might be A little bit smarter than I am Bigger and stronger too Maybe But none of them will ever love you The way I do It's me and you, boy And as the years go by Our friendship will never die You're gonna see it's our destiny You've got a friend in me You've got a friend in me You've got a friend in me Vincono 5 punti bimbo chiunque capisca di quale film è, se no chiamo Pocoyo e Pato che ti bastonano comunque interessi: pokemon :0 meerio :0 KH :0 Harry maguire Potter -> Hogwarts legacy :0 Calcio -> Inter :0 Baseball :0 Fortnait. i like fortnait, i like fortnait battle paaaass cose che odio: BASTA PAPERINO DIRMI DOVE SONO GLI INGREDIENTI CURAMI BRUTTO INCOMPETENTE PORTATEMI THE KING TOPO MUOVITI STUPIDA PAPERA SMETTI Di paRLarE In quESto MoDO !!!! oh, ciao winnie the pooh, guarda, ti ho portato del miele, ce l'ho gustiamo insieme? Aspetta, dov'è Tigro? Streamers preferiti: @Kiryu89 alias levelcrossing 89 @Remikyu e il mitico cydo che è talmente potente che non posso taggare ah sì, @Dadrake anche se è inattivo penso quegli altri non ve li dico, sono più n00b perchè non sono iscritti al forum. A nessuno gliene frega di me, giusto?? .. bè vi basta sapere che al mio cervello piace fare lo scemotto, per esempio so a memoria alcuni video di sio, come la ecensione della switch o alcune canzoni come estate al fiume e la nuova su gianlucoz La nonna ha preparato la cena, vado a cenare perchè mi scoccia subire un attacco di solletico Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 (modificato) 5 minuti fa, liviopocoyo ha scritto: non ho capito niente...però me lo ricorderò se devo prendere dei + dal prof di informatica... Capisco, forse è troppo complesso allora oppure io non so spiegare bene XD. Nel caso le prossime volte faccio vedere direttamente cosa succede sull'emulatore. Modificato 5 dicembre, 2023 da Diamaxus "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 7 minuti fa, Diamaxus ha scritto: Capisco, forse è troppo complesso allora oppure io non so spiegare bene XD. Nel caso le prossime volte faccio vedere direttamente cosa succede sull'emulatore. Nah te spieghi bene è che è un po incasinato di suo mi sa XD TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 1 minuto fa, evilespeon ha scritto: Nah te spieghi bene è che è un po incasinato di suo mi sa XD Un po' è vero, ci ho messo un po' per capire quali valori assegnare alla memoria la prima volta XD "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
ShadowBlue Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 Interessante seguo E' stata aggiunta una reazione da Diamaxus 1 Suicune ~AnimatoRaikou ~ Animato by @Alemat Repubblica Gialla di Alemat by @Alemat Claude Fire Emblem Three Houses by @Alemat Spoiler Icon Damon/ Chrom Fire Emblem by @chube Icon by @Diamaxus Tobirama Senju Grifontuono Phoenix Ball creata da @Mana @Vale Art @Korippo Lime @Vale Icon by @PeterPan Fiocchi commemorazione by @Lugialeon 19/08/18 Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
VincyDarkHeart Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 2 ore fa, Diamaxus ha scritto: Ciao a tutti! Come ho detto nell’aggiornamento di qualche giorno fa, sto imparando a programmare per il GBA (GameBoy Advance) e vorrei aprire questa discussione sia per discuterne con con voi che per mostrarvi i miei progressi. Vorrei anche impostarlo come se fosse un tutorial nel caso qualcuno di voi fosse interessato a imparare, perciò citerò le fonti delle informazioni che vi darò, soprattutto per quanto riguarda le caratteristiche Hardware. Taggo @evilespeon e @ZedeFire che erano interessati alla discussione e altre persone che potrebbero essere interessate: @Macca @Porygatto che visto che sta giocando a Zaffiro magari gli interessa anche capire come caricare gli sprite sul gba , @Keroro @liviopocoyo @LadyDarkrai e @Vale e inoltre ringrazio @VictiniPika per avermi permesso di inserire i link. Partiamo proprio dall’hardware del GBA per poi passare ai comandi di base che useremo oggi. Cercherò di semplificare il più possibile. Se avete delle domande chiedete pure, farò del mio meglio per farvi capire i concetti. Chi vuole può saltare direttamente alla fine del post per vedere direttamente il risultato del mio primo programma. Il GBA ha un processore ARM a 32 bit. I giochi sono distribuiti in Game Paks che sono costituiti da una ROM per il codice e i dati e spesso dalla RAM per salvare le informazioni di gioco. Ha uno schermo LCD di 240x160 px capace di visualizzare 32768 colori (15 bit = 215 valori rappresentabili). Altre caratteristiche principali che saranno utili sono: Video: 3 modalità bitmap e 3 modalità tilemap 4 layer separati di tilemap (per gli sfondi) e 128 sprite (per gli oggetti) trasformazioni affini (rotazione/scalatura/trasformazione obliqua) su due sfondi e 32 oggetti effetti grafici speciali: mosaico, additive blending, fade a nero/bianco suono: 6 canali 4 generatori di suoni del GameBoy originale: 2 di onde quadre, 1 di onde generiche e 1 generatore di rumore 2 canali “DirectSound” per suonare campioni e musica. Altro: 10 tasti (4 frecce direzionali, select/start, A e B, L e R) 14 interrupt hardware modalità multiplayer a 4 giocatori attraverso cavetto multiboot sensore opzionale a infrarossi, sensore di luce e giroscopio. Linguaggio di programmazione C (possibile anche il C++) e Assembly ma esistono anche tool per programmare in altri linguaggi. Dal punto di vista della programmazione, il GBA non ha un sistema operativo (a differenza delle console moderne) il che significa che quando programmiamo andiamo a scrivere direttamente nei registri del processore. Sezioni di memoria Area | indirizzo di inizio | indirizzo di fine | lunghezza | dimensione della porta | descrizione ROM | 0000:0000h | 0000:3FFFh | 16 kb | 32 bit | memoria del BIOS, non può vi si può accedere per leggere i dati ma solo per scriverli. EWRAM | 0200:0000h | 0203:FFFFh | 256 kb | 16 bit | External Work RAM. Disponibile per il codice e i dati, viene usata dal cavo multiboot. IWRAM | 0300:0000h | 0300:7FFFh | 32 kb | 32 bit | Internal Work RAM. Disponibile per codice e dati, è la sezione di memoria più veloce. IO RAM | 0400:0000h | 0400:03FFh | 1kb | 16 bit | Registri Input-Output, è la sezione dove si controllano la grafica, il suono, i tasti e altre caratteristiche. PAL RAM | 0500:0000h | 0500:03FFh | 1kb | 16 bit | memoria usata per 2 palette ciascuna di 256 colori con profondità 15 bit, la prima è per gli sfondi, la seconda per gli sprite. VRAM | 0600:0000h | 0601:7FFFh | 96 kbit | 16 bit | Video RAM dove vengono conservati i dati per gli sfondi e gli sprite. OAM | 0700:0000h | 0700:03FFh | 1 kb | 32 bit | Object Attribute Memory, permette di controllare gli Sprite. PAK ROM | 0800:0000h | variabile | variabile | 16 bit | Game Pak ROM. È dove si trova il gioco e dove inizia l’esecuzione se non si usa un cavo multiboot. Sebbene la dimensione sia variabile il limite è 32 MB. Cart RAM | 0E00:0000h | variabile | variabile | 8 bit | Cartridge RAM. È dove si trovano i dati di salvataggio. La dimensione totale è variabile ma si consiglia 64 kb. N.B. kb sta per kilobit non kilobyte. fonte: https://www.coranac.com/tonc/text/hardware.htm Strumenti Per programmare in C vi basta un qualunque editor di testo, va bene anche NotePad. Per la compilazione della ROM serve un tool specifico, chiamato devkitPRO e se siete su Windows anche la shell Msys. Potete trovare tutte le info qui se siete interessati: https://devkitpro.org/wiki/Getting_Started Il motivo per il quale non usiamo un ambiente di sviluppo come Eclipse, DevC++ ecc. è che il Makefile che dobbiamo usare è speciale, in quanto il GBA controlla che l’intestazione della ROM del gioco sia corretta, in caso contrario dà errore. La struttura della cartella in cui salveremo i file con il codice C è quella in figura: in "include" vanno i file *.h, in "source" i file *.c Come emulatore io uso mGBA ma va bene uno qualsiasi. Nozioni base del C Vi darò solo quelle essenziali che userò di volta in volta, altrimenti sarebbero troppe. XD Innanzitutto dovete sapere che ogni istruzione C deve terminare con il punto e virgola (tranne in alcuni casi specifici come il ciclo for/while e le direttive al preprocessore). La dichiarazione di una variabile ha questa forma: tipo_della_variabile nome_della_variabile; Esistono vari tipi, quelli che vedrete più spesso sono int, char e float ma ce ne sono altri che potete vedere su wikipedia se siete interessati. Attraverso int dichiariamo una variabile di tipo intero ossia un numero intero. Attraverso char dichiariamo una variabile che contiene un carattere (cioè una lettera). Attraverso float dichiariamo una variabile che contiene un numero con la virola. Ad esempio attraverso l’istruzione int a; dichiaro una variabile di tipo intero che chiamo a. Per assegnare un valore a questa variabile devo scrivere ad es. int a = 10; Comunque non vi preoccupate che appena li incontriamo vi spiego di volta in volta quali sono. Poiché il nostro file sarà diviso in file.h e file.c per includere le funzioni che andremo a scrivere nei file *.h usiamo la primitiva #include “file.h” (senza punto e virgola, ricordate? Ci sono delle eccezioni ). Un altro elemento che avete bisogno di conoscere è il vettore, che è sostanzialmente una collezione di elementi per farla semplice. Immaginate che sia uno scaffale dove dove sono riposti in ordine degli oggetti. Data una variabile intera dim (che rappresenta la lunghezza del vettore), definiamo un vettore ad es. di tipo intero in questo modo: int vettore[dim]; Sostituendo tra le parentesi quadre un numero indichiamo uno specifico elemento di quel vettore, ad es. int vettore[0]; indica il primo elemento del vettore. Aggiungendo un secondo indice, rappresentiamo una matrice (link a wikipedia). Ad es. int matrice[dim1][dim2]; dove dim1 e dim2 sono i numeri di righe e di colonne della matrice. Il mio primo programma per GBA: Hello World Per i veterani del C, sappiate che non avendo un sistema operativo, non possiamo usare printf() o le funzioni incluse in stdio.h per scrivere sullo schermo. Quindi il primo programma che ho fatto è stato quello per disegnare a schermo una barretta verticale, come quella del classico PONG. Inizio con il commentare il mio file header helloworld.h: typedef unsigned short u16; typedef unsigned int u32; typedef u16 color; #define MEM_IO 0x04000000 #define MEM_VRAM 0x06000000 #define REG_DISPCNT *((volatile u32*)(MEM_IO + 0x0000)) #define DCNT_MODE3 0x0003 #define DCNT_BG2 0x0400 #define SCREEN_W 240 #define SCREEN_H 160 #define WHITE_COLOR 0x7FFF typedef color m3_line[SCREEN_W]; #define M3_MEM ((m3_line *)MEM_VRAM) In questo file quello che faccio in sostanza è definire alcune costanti e alcuni tipi che mi serviranno nel programma principale. u16 e u32 sono due tipi interi che definisco, la u sta per unsigned cioè senza segno 16 e 32 sono i bit che occupano in memoria. Il tipo color lo uso semplicemente per ricordarmi che il GBA è in grado di rappresentare i colori in 16 bit (il sedicesimo non viene usato quindi in realtà sono 15). MEM_IO è l’indirizzo del registro di Input-Output in base esadecimale. MEM_VRAM è l’indirizzo della RAM video espresso in base esadecimale. REG_DISPCNT è il registro di controllo dello schermo (Display Control Register), è complicata da spiegare in parole semplici questa istruzione ma diciamo che serve per accedere direttamente al contenuto del registro. Per farvi meglio capire come è fatto il registro vi allego questa immagine presa qui: Apri contenuto nascosto In base a dove scriviamo 1 o 0 nella tabella, attiviamo alcune funzioni. Per ora non preoccupatevi dei nomi; ci torneremo in un capitolo successivo. MEM_IO + 0x0000 = 0x04000000 ossia l’indirizzo 0400:0000 cioè l’indirizzo dell’IO RAM. Serve perché il valore di quella variabile potrebbe cambiare indipendentemente da quello che scriviamo nel codice, e stiamo dicendo al compilatore di ignorarla (volatile persuation). Non vado nel dettaglio perché è davvero complicato da spiegare. DCNT_MODE3 e DCNT_BG2 servono ad impostare la modalità dello schermo, di cui vi parlerò nel prossimo capitolo più nel dettaglio. SCREEN_W E SCREEN_H sono le dimensioni in pixel dello schermo. WHITE_COLOR è semplicemente il colore bianco espresso in base esadecimale. Per concludere le ultime due istruzioni mi servono a mappare i pixel dello schermo: con la prima creo un vettore di grandezza pari alla larghezza dello schermo e con la seconda indico l’indirizzo della Video RAM e siccome devo disegnare una linea deve essere dello stesso tipo con cui definisco le variabili a cui assegno un colore. Passiamo al file helloworld.c che ci serve a disegnare la barretta. #include "helloworld.h" int main(void) { u32 x = 10; u32 y = 10; REG_DISPCNT = DCNT_MODE3 | DCNT_BG2; for (u32 colonna = x; colonna <= (x + 2); colonna++) { for (u32 riga = y; riga <= (2 * y); riga++) { M3_MEM [riga][colonna] = WHITE_COLOR; } } while(1); return 0; } int main(void) {…} è la funzione principale, che ci permette di eseguire le nostre funzioni che abbiamo eventualmente definito nei file *.h . x e y sono le coordinate che ci permettono di definire un punto sullo schermo, assegno a queste il valore 10 per far partire la barretta in una posizione più centrale poiché sullo schermo l’origine degli assi si trova in alto a sinistra. REG_DISPCNT = DCNT_MODE3 | DCNT_BG2; mi serve per impostare i bit necessari ad attivare la modalità bitmap 3 e background2 sullo schermo. È arrivato il momento di disegnare la mia barretta, cosa che faccio attraverso due cicli for in modo tale da fissare il valore della coordinata x e far variare la coordinata y. L’istruzione M3_MEM [riga][colonna] mi permette di accedere alla posizione x,y sullo schermo per farla breve, nella pratica vado ad assegnare il valore “bianco” al registro della VRAM. While(1); serve per non far concludere il programma, poiché non essendoci un sistema operativo se il programma terminasse il comportamento non è definito. Non vi mostro il Makefile questa volta, perché già così sono un sacco di informazioni da assimilare, e inoltre in questo caso non mi è servito modificare il Makefile fornito da devkitPRO. XD A questo punto vado sulla shell scrivo cd /percorso/dove/hai/messo/la/cartella/del/tuo/programma faccio invio, e scrivo make questo è quello che uscirà scritto nella shell: Se è andato tutto a buon fine uscirà scritto "ROM fixed!". Aprendo la ROM questo è quello che apparirà a schermo: Per oggi è tutto, ci vediamo al prossimo capitolo. Se avete domande fatele pure, e fatemi sapere se vi interessa questa rubrica o se c'è qualcosa che non capite. Interessantissimo! Per Capodanno ho mandato a prendere un libro che spiega le basi della programmazione in C/C++, visto che vorrei far entrare il mondo videoludico nel mio mondo lavorativo del futuro E' stata aggiunta una reazione da Diamaxus 1 Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 1 minuto fa, VincyDarkHeart ha scritto: Interessantissimo! Per Capodanno ho mandato a prendere un libro che spiega le basi della programmazione in C/C++, visto che vorrei far entrare il mondo videoludico nel mio mondo lavorativo del futuro Grazie Quando inizierai ti consiglio di procedere per piccoli passi, può essere complicato partire subito in quarta data la mole degli argomenti. E' stata aggiunta una reazione da VincyDarkHeart 1 "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
LadyDarkrai Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 E' stata aggiunta una reazione da Diamaxus 1 Un piccolo Jumpluff mimosa che @Diamaxus ha regalato a tutte noi donne, super carino Bellissimo logo creato da @LucarioGoldragon Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 1 minuto fa, LadyDarkrai ha scritto: Ci sta, non ti preoccupare XD Se però l'argomento ti interessa, io carico comunque le foto e i video di quello che esce sull'emulatore se vuoi puoi passare anche solo a guardare quello ogni tanto XD E' stata aggiunta una reazione da LadyDarkrai 1 "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 56 minuti fa, Diamaxus ha scritto: Un po' è vero, ci ho messo un po' per capire quali valori assegnare alla memoria la prima volta XD Esatto kohai è la cosa di suo che è bella complessa XD però è interessante TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 Adesso, evilespeon ha scritto: Esatto kohai è la cosa di suo che è bella complessa XD però è interessante Sono contento che ti interessi "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 Adesso, Diamaxus ha scritto: Sono contento che ti interessi Molto ho letto tutto bene e iano piano sto capendo di più so se procedi di piccoli passi ogni volta mi interessa molto TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 Adesso, evilespeon ha scritto: Molto ho letto tutto bene e iano piano sto capendo di più so se procedi di piccoli passi ogni volta mi interessa molto Va bene allora la prossima volta lo faccio più corto il capitoletto. Inoltre mi sa che il prossimo argomento è molto teorico, quindi forse è più facile da capire anche. "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
evilespeon Inviato 5 dicembre, 2023 Condividi Inviato 5 dicembre, 2023 1 minuto fa, Diamaxus ha scritto: Va bene allora la prossima volta lo faccio più corto il capitoletto. Inoltre mi sa che il prossimo argomento è molto teorico, quindi forse è più facile da capire anche. Si forse meglio così si riesce a seguire meglio che se non te ne intendi almeno due o tre volte devi rileggerlo per capire Ottimo dai E' stata aggiunta una reazione da Diamaxus 1 TEAM 0 RULES...J0IN THE P0KECLUB TEAM 0 UNIC0 PREMIO VINTO IN UN GDR FIN ORA...DOVEVO RIMETTERLO XD espon gif by @SlowHandBoy0...ditemi perche si chiama cosi please XD @Alemat è mio rivale e mi frega i pikachu ma ora è contento che è stato citato XD ragalino by @Porygatto (visitate la sua gallery) quanto carino pikachu che imita lotad Sprite by @Vale (visitate la sua gallery) Doll fantastiche fatte da my rival giallo @Alemat espeon compleanno espeon compleanno animata espeon di natale Espeon di natale is finally real XD elfilin super cute from kirby and the forgotten land by @Alemat doll ufficiale (anche se il rival dice di no XD) del mio disegno riolu kart by @Alemat eevee che evolve in espi by my rival @Alemat Evilespeon bossa team0 version gdr (versione icon) by @Silvercenturion Evilespeon bossa team 0 version gdr (versione sprite) by @Silvercenturion il trio politico (io, @Alemat e @Quasar) è qui Sprite by @Alemat tatsugiri di zeria by @Macca zeria e repubblica gialla sushide version,ci vogliamo bene in realtà siamo aleati u.u Lo sguardo sospetto succede solo alcune volte XD quello di repubblica guarda con sospetto lo zeriano per capire che combina coi pikachu e quello zeriano guarda con sospetto quello di repubblica gialla per capire se gli ha fregato dei pikachu per liberarli XD E comunque quello è uno sguardo d'affetto u.u sprite sempre by @Macca il trio politico e togeticplz in posa,sprite by rival giallo @Alemat Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Diamaxus Inviato 5 dicembre, 2023 Autore Condividi Inviato 5 dicembre, 2023 4 minuti fa, evilespeon ha scritto: Si forse meglio così si riesce a seguire meglio che se non te ne intendi almeno due o tre volte devi rileggerlo per capire Ottimo dai Questo primo capitolo è venuto più lungo perché dovevo spiegare anche tutto il funzionamento dei registri, forse avrei dovuto dividerlo in due parti "A ogni nuovo incontro segue sempre un addio. Tuttavia non è detto che debba essere per sempre... Starà a te deciderne la durata..." ~L'allegro venditore di maschere (TLOZ: Majora's Mask) Art Gallery | Instagram | Twitter Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Post raccomandati
Crea un account o accedi per commentare
E' necessario essere iscritto a Pokémon Millennium per poter commentare
Crea adesso un account
Registra un nuovo account nella nostro forum. E' semplice!
Crea un nuovo accountAccedi
Hai già un account? Accedi qui!
Accedi adesso