-
Posts
646 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Everything posted by Keroro
-
Lo slideshow di immagini è carino, il problema è dopo. I font del titolo sono molto ingombranti e non ha molto senso mostrare il mouse se scorri le opzioni con le frecce. Un problema sono anche gli fps che oscillano tra 18 e 30, sono troppo bassi, se decidi di limitarli conviene imporre 60 come massimo (e dimezzare tutte le velocità), così quando carichi la cpu non scendi sotto i 30. Uno dei tipici errori nella programmazione di videogiochi tramite linguaggi è fermarsi alla creazione del framework e non creare alcun gioco. Con una buona mappa, il mouse nascosto con su un'icona particolare per ogni azione, e un briciolo di trama diventa tutto più presentabile. Credo che a nessun grafico interessi fare un gioco in c++ che sembri peggio di un gioco in rmxp. Sembrerò duro ma sono tutte cose che ho imparato a mie spese :)
-
Sbavo :Q_
-
fatelo in questo topic il gdr, se attira tante persone dividete tra loro il costo della sezione
-
certo, ti lascio volentieri il campo (anche perché non ho avuto successo :_:) , appena inizi allegro torno, è una libreria interessante anche se di vecchio stampo, ma questo la rende perfetta per i giochi in pixel art!
-
Il mio obiettivo era più creare uno spunto che una lezione dettagliata, anche perché è pieno di lezioni dettagliate sulle classi su altri siti, ma sono pochi che le applicano al game design ^^ Mi sono incasiinato in un problemaaaaaaa sull'ereditarietà dei costruttori in c++ ma se qualcun altro solleva domande ci dedico più tempo u.u
-
mmm non mi ricordavo come si muoveva e mi sono andato a cercare il codice, il dannato gatto mi suggeriva solo di cliccare su gioca ora. Il movimento tramite mouse è pratico ma non mi piace che effettua lo scrolling ogni volta, a mio parere se il tile è abbastanza vicino al centro dovrebbe evitarlo o farlo dopo aver effettuato il movimento. Invece al momento se clicco prima sposta la telecamera e poi inizia a muoversi ed è brutto :s. Cerca di passare a html5 al più presto, ho iniziato a lavorarci da poco e sono molto soddisfatto :3
-
*Il comando SWITCH_ROM_MBC1 serve appunto a "switchare" a un manco di memoria indicato tra le parentesi.* forse era il bug che segnali tu che mi impallava :O ma non ricordo più dove ho messo il progetto quindi pace XD
-
Visto che Matty95 è latitante vedrò di scrivere qualcosa io. Short Lesson 1: Le stringhe Da quel che leggo gran parte di voi finora per memorizzare informazioni a carattere testuale ha utilizzato il tipo built-in char. Il tipo char è nato 40 anni fa e rappresenta una sequenza di 8 bit che codificati in ASCII ci danno un singolo carattere. Finora avete utilizzato array di char e questo presenta il problema che se volete memorizzare una parola di lunghezza superiore alla fissata il programma crasha per buffer overflow. Per evitare problemi di lunghezza dei caratteri e dover gestire dinamicamente la memoria in modo ottimale, utilizziamo il costrutto string della standard library. Vi mostro un esempio: #include <iostream> #include <string> using namespace std; //utile per imparare, dopo se ne farà a meno int main(){ string temp; cout << "Inserisci il tuo nome avventuriero: "; cin >> temp; cout << "Bene, il tuo nome e' "<< temp<< "!\n"; system("PAUSE"); return 0; } La forza di string è che permette facilmente di copiare il contenuto di una stringa in un'altra o concatenare stringhe o fare altre operazioni sulle stringhe, spesso prone agli errori per via della memoria limitata. Tutto questo è possibile perché string è una classe. Le classi in c++ sono magiche ;O Compito per casa: Esaminare e testare 3 esempi dal sito http://anaturb.net/C/string_exapm.htm escluso il primo. Short Lesson 2: Le classi Da quel che abbiamo visto finora una classe è un nuovo tipo di variabile che ha le sue operazioni, (se avete aperto il link, anche le sue funzioni). E' arrivato il momento di creare una nostra classe piuttosto che usarne una creata da altri come string. Da dove cominciamo? Una classe non è altro che un modello astratto che semplifica l'oggetto da rappresentare elencando solo le proprietà di interesse, anche perché se dovesse elencare ogni sfaccettatura un solo oggetto richiederebbe un'infinità di codice. Vogliamo creare un rpg in c++, prendiamo carta e penna ed immaginiamo come vogliamo realizzarlo. Solo dopo aver progettato tutto conviene mettersi di fronte al pc. Nel nostro rpg interpretiamo un personaggio e avremo a che fare con altri personaggi, amichevoli o meno :D. Nota Seguiranno una serie di spoiler che presentano il codice volta per volta, consiglio di leggere prima tutto il testo e poi aprire gli spoiler rileggendolo, a mio parere avere un'idea globale delle cose permette di scrivere codice migliore. Se poi siete smaliziati e sapete già programmare prendetelo come esercizio, dopo aver letto il testo una volta rileggetelo ed intanto programmate, quando avete finito di programmare e quello che avete fatto funziona (o se non funziona e vi arrendete) allora aprite gli spoiler e confrontate. L'importante è che produciate codice corretto ed in qualche modo equivalente per rimanere al passo con l'evoluzione della cosa :3 Immaginiamo quindi di partire creando una classe Character che rappresenta lo scheletro di un qualsiasi personaggio del nostro rpg, noi inclusi. Vogliamo che il nostro personaggio abbia un nome e delle caratteristiche tipiche da rpg: Strenght, Agility, HP e TotalHP. La forza può andare da 1 a 10, l'agilità da 1 a 10, gli hp da 0 (morto) a 10. Il nostro personaggio avrà 4 in forza, 7 in agilità e 3/3 hp. Sono molto celere nei commenti, se avete dubbi per qualsiasi cosa chiedete ;O Vi lascio due compitini per casa: Aggiungere alla classe personaggio una variabile gold che tiene traccia delle finanze sempre positiva, tuttalpiù nulla, naturalmente si parte senza soldi, bisogna creare un metodo per restituire il valore ed uno per cambiarlo. Creare un nemico di nome Wolfgang, con strength a 10, agility a 5 e 4 su 4 hp e stamparlo a video. Le soluzioni dei compitini dovranno pervenire in spoiler, pena l'azzeramento dei voti dal mio registro Nella prossima lezione implementeremo il combattimento, speriamo che il nostro eroe rimarrà vivo o.o
-
Per le info http://www.codeblocks.org/features E' comodo perché si può usare anche su linux, infatti l'ho installato anche in uni :D
-
Miyamoto Dream Land
Keroro replied to Vegas46's topic in Progetti (mobile o con altri tool o linguaggi)
Grafica da 0? Ma è Yoshi island 3! -
Un'altra soluzione: Per il c++ consiglio l'ide Code::Blocks
-
Ecco cos'era allora :O Aggiungo codice che non c'entra un cazzo e quello che funzionava smette di funzionare, toglievo il codice neoaggiunto e si comportava in un altro modo ancora XD. La mia avventura con il game boy classic finisce qui, non ho intenzione di adeguarmi a programmare con mille mila array, passo al game boy advance u_u (o ricomincio sul pc, ho trovato del codice che avevo scritto 3 anni fa :o)
-
Per ora ho lasciato stare, penso che quando mi servirà stampare un'immagine a tutto schermo barerò usando i banchi di memoria del gbc :rovatfl: Condivido codice e idee, così incentivo altri a farlo http://www.rpg2s.net/forum/public/style_emoticons/default/sisi.gif (soprattutto ProGM a continuare con i tutorial XD) Sto studiando un modo per gestire fluidamente animazioni e implementare timer, il delay(x) nel while(1) non mi convince, pensavo di basarmi sulla funzione clock e sincronizzarmi con il vbl #include <time.h> // int main(){ clock_t old_time, now, delta; //... old_time = clock(); while (1){ now = clock(); delta = now - old_time; old_time = now; update_world(delta); wait_vbl_done(); } return 0; } La variabile delta indica i cicli di clock trascorsi, dovrebbe essere piccola come un UINT8, ma è un UINT16 ed il fatto che sia unsigned mi rompe le scatole per creare i timer, anche se fortunatamente ho cassato l'idea dei puntatori a funzione, rimpiango le funzioni implicite di linguaggi come javascript... Pensavo di fare la delta globale, in modo che evito di passarla a cascata ad ogni sottofunzione che ha bisogno di animarsi :D Ho provato a usare anche gli sprite, li ho istanziati con lo schermo off con move_sprite(n,0,0), fuori schermo, poi li warpo tranquillamente a schermo on con move_sprite e li aggiorno con scroll_sprite. (giusto?) Il personaggio spara 6 colpi, quindi ho pensato 2 sprite di personaggio + 6, uno per proiettile Ogni colpo è uno sprite. #define MAX_PROIETTILI 6 struct proiettile { UINT x; UINT y; }; struct eroe { UINT x; UINT y; UINT velx; UINT vely; struct proiettile pistola[MAX_PROIETTILI]; } struct eroe Hero; //var globale eroe /* Da chiamare con lo schermo off */ void init_eroe(UINT8 x, UINT8 y){ UINT8 i; struct proiettile * p = Hero.pistola; Hero.x = x; Hero.y = y; Hero.velx = 0U; Hero.vely = 0U; set_sprite_data(0U,3U,sprite_eroe); //lo sprite ha 3 tile //lo sprite 0 e lo sprite 1 sono il chara set_sprite_tile(0U,0U); //allo sprite 0 assegna il tile 0 set_sprite_tile(1U,1U); //allo sprite 1 assegna il tile 1 move_sprite(0U,Hero.x,Hero.y); move_sprite(1U,Hero.x,Hero.y+8U); for (i=0U;i<MAX_PROIETTILI;i++){ //i proiettili vanno dallo sprite 2 a 7. il tile 2 è la grafica del proiettile set_sprite_tile(2U+i, 2U); move_sprite(2U+i,0U,0U); //sposto il proiettile iesimo in (0,0) p[i].x = 0U; //aggiorno le coordinate del singolo proiettile p[i].y = 0U; } } PS: Il fatto che ad ogni costante numerica unsigned vada aggiunta una U finale è una rottura di palle U_U
-
Ciao, ho letto i tutorial della prima pagina e ho iniziato a fare delle prove Non mi funziona il passaggio da APA a sprite mode o almeno, la prima volta funziona (seppur con qualche glitch grafico) mentre dopo la grafica va a donnine allegre. Questo è il codice, include il title.h dell'esempio dell'APA #include <gb/gb.h> #include <gb/drawing.h> #include <stdio.h> #include "title.h" /* Chiamami prima di disegnare qualcosa*/ void draw_start(){ DISPLAY_OFF; HIDE_SPRITES; HIDE_WIN; HIDE_BKG; disable_interrupts(); } /* Chiamami dopo aver disegnato qualcosa in sprite mode (non in APA!) */ void draw_end(){ SHOW_BKG; SHOW_WIN; SHOW_SPRITES; DISPLAY_ON; enable_interrupts(); } void disable_APA(){ UINT8 i; for (i=0;i<255;i++){ remove_VBL(i); remove_LCD(i); } LCDC_REG = 0x07; mode(0xE2); } int main(){ UINT8 su,giu,dx,sx; su = 0x01; //su giu = 0x02; //giu dx = 0x03; //destra sx = 0x04; //sinistra do { //Title Screen draw_start(); draw_image(title_tiledata); gotogxy(2,15); gprintf("Press %c to Start", dx); DISPLAY_ON; enable_interrupts(); //Aspetto che disegni tutto wait_vbl_done(); //Pressione tasto DX waitpad(J_RIGHT); waitpadup(); //aspetta il rilascio dei tasti //Non voglio piu' usare APA disable_APA(); draw_start(); [url="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"]printf[/url]("nSchermo PulitonPress Start"); draw_end(); //Pressione tasto START waitpad(J_START); waitpadup(); //Aspetto che disegni tutto wait_vbl_done(); } while (1); return 0; } Come si risolve :?
-
Ruby Voglio imparare aiutatemi
Keroro replied to fra700's question in Supporto (programmi, linguaggi o software)
l'rgss è ruby insieme a delle classi precotte, niente di più. Se conosci ruby e leggi l'help dalla sezione script di rpgxp o vx hai tutto ciò che ti serve per iniziare, naturalmente per farti un po' le ossa ti conviene apprendere leggendo gli script fatti da altri -
Una cosa è parlare di usare l'etere o altre sostanze come mezzo di trasporto di informazioni un'altra è quella di un apparecchio succhia anima: scientificamente è assurdo in quanto l'anima non ha estensione fisica e le teorie che sostengono il contrario, come quella dei 21 grammi su cui hanno fatto il film, sono state confutate da decenni.
-
l'update serve solo per gli autotiles, problema risolto
-
Malanga non ha fatto altro che divulgare il "cosa" hanno raccontato i suoi esaminati. Quello che credo è che però, assunti i racconti per veri, sia ancora lontano dall'individuare il "perché": perché gli alieni rapiscono ed inseriscono chip. Secondo me l'aspirazione dell'anima (o animosità) tramite chip è una teoria campata per aria e sono in disaccordo con questa visione mistica in cui con tutte le creature terrestri ed extraterrestri che esistono è stato individuato l'uomo come serbatoio di anima. Se aspirata da qualche parte l'anima deve finire, si immagazzina nel chip in modo che è necessario un secondo intervento per rimuoverlo? E come fa un chip di un isotopo di silicio non presente sulla terra ad avere la capacità di assorbire ma anche solo di rilevare l'anima? Oppure questa viene trasmessa come un'onda elettromagnetica? Si aggiungo tante domande fantatecnologiche tanto di natura fisica che metafisica. Io penso che se i chip sottopelle esistano essi siano o un sistema di monitoramento, come quello che piantiamo nel collo degli uccelli prima della migrazione o negli animali della savana, o un sistema di rilascio di sostanze (esempio banale: rilascio di isotopi radiattivi per tenere sotto controllo determinati tipi di cancro) Il motivo? Ognuno di noi può essere stato soggetto ad un esperimento e diventare il progetto di una di queste entità, che siano alieni e non, governi o scienziati pazzi. Il problema è: dove sono questi chip? Il tuo amico dice di avercelo nella mano, apriamolo e vendiamo il chip su ebay, esistono miglioni di fanatici disposti a spendere qualunque cifra per queste cose, diventiamo ricchi :O Apo: Il video della fisica quantistica che hai postato è fatto da un ragazzo che ha una conoscenza di fisica che si ferma a wikipedia, il principio di Heisenberg nel campo in cui lavora Malanga viene usato anche per energia e tempo. Nel finale inoltre vuol fare intendere che la coscienza umana è superiore ad ogni macchina. Che poi l'autore sia tutt'altro che un affidabile e rigoroso uomo di scienza è un altro discorso.
-
mi sono accorto che Graphic.frame_count viene caricato da Scene_file quindi non è necessaria alcuna compensazione :D #se sono passate almeno 7 oreif (Graphics.frame_count / Graphics.frame_rate)> 25200 var = 2#altrimenti se sono passate almeno 5 oreelsif (Graphics.frame_count / Graphics.frame_rate)> 18000 var = 1end
-
Dai venite anche in chat, prendetela come abitudine :*
-
Si possono inserire/sostituire files in un archivio encrypted?
Keroro replied to nihil-omen's question in Supporto RGSS (XP)
La funzione version restituisce una stringa fissata da me e serve solo a distinguere una dll da una più aggiornata, perché prevedo di aggiungere nuove funzioni e potrà essere utile controllare di avere la dll "compatibile". Ho aggiornato la dll, mi ero scordato di togliere la creazione del file debug.txt, e ho aggiunto una classe che la gestisce =) Download aggiornato #==============================================================================# ** Kerolib Class#------------------------------------------------------------------------------# This class handles the libKeroro.dll. Its functions include the md5# hash of a file. Add this class before Game_Temp.# Version 01#============================================================================== class Kerolib #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize @kero_md5 = Win32API.new('libKeroro.dll','file_md5',['P','P'],'V') @kero_ver = Win32API.new('libKeroro.dll','version',['P'],'V') @md5 = ' '*32 #buffer di 32 byte @buffer = ' '*8 #buffer di 8 byte end #-------------------------------------------------------------------------- # * Get the md5 hash of the file given by filename #-------------------------------------------------------------------------- def hash(filename) @md5 = ' '*32 #crea un nuovo buffer @kero_md5.call(filename,@md5) return @md5 end #-------------------------------------------------------------------------- # * Get the Version of the DLL #-------------------------------------------------------------------------- def version @buffer = ' '*8 #crea un nuovo buffer @kero_ver.call(@buffer) return @buffer endend test code: kerolib = Kerolib.new a = kerolib.hash('Game.exe') b = kerolib.hash('Game.ini') c = kerolib.version() p a p b p c -
Risultato: Hai una buona memoria. Sei molto socievole. Preferisci pianificare il da farsi anche per le piccole cose. Sembra inoltre che sei un tipo curioso, vero? E magari ora vuoi sapere come lo so. Unica imprecisione: non voglio sapere come lo sai, riesco ad intuirlo con buona approssimazione :) L'idea dell'analisi dell'input nel contesto rpgmaker è molto interessante, attendo ulteriori sviluppi.
-
Si possono inserire/sostituire files in un archivio encrypted?
Keroro replied to nihil-omen's question in Supporto RGSS (XP)
Non sapevo che criptassi le risorse all'interno di un unico file, per questo ho proposto quella versione :) Visto che ne avevate bisogno ho creato una dll che calcola l'hash md5 di un file e può essere usata sia da rpg maker xp che da rpg maker vx. Potete scaricarla da http://www.gamemaker.it/ruby/download_lib.php Script di esempio: kero_ver = Win32API.new('libKeroro.dll','version',['P'],'V') kero_md5 = Win32API.new('libKeroro.dll','file_md5',['P','P'],'V') version = ' '*8 md5 = ' '*32 kero_ver.call(version) p version kero_md5.call('Game.exe', md5) p md5 Sono funzioni abbastanza semplici, non ho voluto definire classi o roba pesante, gestitela come volete! Se vi garba fatemelo sapere :D -
Si possono inserire/sostituire files in un archivio encrypted?
Keroro replied to nihil-omen's question in Supporto RGSS (XP)
Aaaah quindi non c'è alcun tipo di confronto tra la nuova e vecchia versione! Ma a questo punto si potrebbe anche ottimizzare la banda, se 5 update sovrascrivono Scripts.rxdata quello che conta è solo l'ultimo :3 Io farei così: I file rxdata che pesano di più sono 3: Animations, Scripts e Tilesets, gli altri non pesano molto e possono essere aggiornati sempre e accomunati nella categoria Other Ogni patch quindi è formata da massimo 4 file, una per categoria, Patch1_1 Patch1_2 Patch1_3 Patch1_4 corrispondono rispettivamente alle patch per Animations,Scripts,Tilesets, Other Esempio file di log.txt online, la presenza di 1 dopo il nome della patch indica la presenza di _1 (Animation), quella dopo di _2 (Scripts) e così via.. Update1,1,1,0,1Update2,1,0,0,0Update3,0,1,0,1 Struttura richiesta #Init@ani = nil@scr = nil@til = nil@other = Array.new Parsing del log.txt begin file = File.new('log.txt','r') while (temp = file.gets) #Separo ogni valore e lo metto nell'array arr arr = temp.split(/,/) if arr[1] == 1 @ani = arr[0] end if arr[2] == 1 @scr = arr[0] end if arr[3] == 1 @til = arr[0] end if arr[4] == 1 @other.push arr[0] end end file.closerescue => err p errend Scaricamento if @ani != nil download($host + '/patch/'+@ani + '_1.zip')endif @scr != nil download($host + '/patch/'+@scr + '_2.zip')endif @til != nil download($host + '/patch/'+@til + '_3.zip')end@other.each { |file| download($host + '/patch/'+file + '_4.zip') } Se hai N patch, con questo sistema scarichi al massimo N+3 patch ma puoi anche scaricarne solo 1 se tutte modificano lo stesso file critico, es tutte modificano solo Scripts verrà scaricata solo l'ultimo Update. In questo esempio verranno scaricati: Update2_1.zipUpdate3_2.zipUpdate1_3.zipUpdate1_4.zipUpdate3_4.zip Sono più file ma si risparmiano almeno 200 kb (in questo esempio trascuro il versioning, il controllo se abbiamo bisogno di tutte le patch, può essere fatto in modo semplice o tramite un array di stringhe in cui controlliamo se l'update è stato già fatto oppure salvandosi solo la stringa dell'ultimo update eseguito e processare da lì in poi) -
Si possono inserire/sostituire files in un archivio encrypted?
Keroro replied to nihil-omen's question in Supporto RGSS (XP)
Sono contento di essere stato utile :3 L'autoupdate implica che stai facendo un rpg online :? Ma le risorse che scarichi e carichi sono solo quelle in più o tutte quante? Come riesci a creare una patch di solo le risorse che mancano in maniera automatica?
