<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Makerando GamerLog &#187; Denzel</title>
	<atom:link href="https://www.makerando.com/gamerlog/author/denzel/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.makerando.com/gamerlog</link>
	<description>Stai in contatto con il making</description>
	<lastBuildDate>Thu, 02 Jul 2015 11:07:19 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Nuove recensioni in arrivo!</title>
		<link>https://www.makerando.com/gamerlog/nuove-recensioni-in-arrivo/</link>
		<comments>https://www.makerando.com/gamerlog/nuove-recensioni-in-arrivo/#comments</comments>
		<pubDate>Fri, 05 Jun 2015 20:31:55 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[Generale]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=195</guid>
		<description><![CDATA[Salve makers! Gamerlog ha riaperto i battenti e vi propone già una recensione a cura del nuovo membro della redazione Ryoku. Potete trovarlo qui: Presto nuovi articoli 😀]]></description>
				<content:encoded><![CDATA[<p>Salve makers!<br />
Gamerlog ha riaperto i battenti e vi propone già una recensione a cura del nuovo membro della redazione Ryoku.<br />
Potete trovarlo qui: <a href="http://www.makerando.com/gamerlog/recensione-yume-nikki/" title="Yume Nikku"></a><br />
Presto nuovi articoli <img src="https://s.w.org/images/core/emoji/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/nuove-recensioni-in-arrivo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il Making in Rosa</title>
		<link>https://www.makerando.com/gamerlog/making-in-rosa/</link>
		<comments>https://www.makerando.com/gamerlog/making-in-rosa/#comments</comments>
		<pubDate>Wed, 09 Jul 2014 12:47:29 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[interviste]]></category>
		<category><![CDATA[RPGMaker]]></category>
		<category><![CDATA[approfondimenti]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[donne]]></category>
		<category><![CDATA[intervista]]></category>
		<category><![CDATA[makerando]]></category>
		<category><![CDATA[making]]></category>
		<category><![CDATA[ragazze]]></category>
		<category><![CDATA[rpg]]></category>
		<category><![CDATA[rpg maker]]></category>
		<category><![CDATA[rpgmaker]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=162</guid>
		<description><![CDATA[In un mondo, quello del game making, che di solito è prettamente maschile, negli ultimi anni abbiamo notato un crescente interesse da parte del mondo femminile a questa passione. Non sono molte le donne che sono presenti nelle community di making, ma sono in costante aumento e questo ha spinto noi di Makerando a intervistare alcune [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft wp-image-163 " src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/07/RPG_VX_Elf.png" alt="Female" width="195" height="305" />In un mondo, quello del game making, che di solito è prettamente maschile, negli ultimi anni abbiamo notato un crescente interesse da parte del mondo femminile a questa passione. Non sono molte le donne che sono presenti nelle community di making, ma sono in costante aumento e questo ha spinto noi di Makerando a intervistare alcune di loro e riportare le loro esperienze.<br />
Le nostre &#8220;cavie&#8221;, per così dire, sono due ragazze della community di Makerando, <a href="http://www.makerando.com/user/12-mihachan/" target="_blank"><strong>MihaChan</strong> </a>e <a href="http://www.makerando.com/user/83-shiki/" target="_blank"><strong>Shiki</strong></a>, che ringrazio moltissimo per avermi dedicato il loro tempo e per aver risposto alle nostre domande. <strong>MihaChan</strong> è presente nel mondo del making già da diverso tempo, mentre <strong>Shiki</strong> da relativamente poco, abbiamo così fornito a tutti voi, nostri lettori, due esperienze diverse ma unite allo stesso tempo dalla passione di creare il proprio videogame.</p>
<p><span id="more-162"></span></p>
<p><strong>Denzel: <strong style="color: #282828;">Come ti sei avvicinata al mondo del making?</strong><br />
</strong></p>
<p><strong>MihaChan:<br />
</strong><span style="color: #282828;">Per puro caso, un giorno insieme ad una conoscenza decidemmo di fare un gioco, e da allora (ormai penso 2 anni fa? non ne sono sicura) ho iniziato a muovermi in questo mondo.</span><strong><br />
</strong></p>
<p><strong>Shiki:<br />
</strong><span style="color: #282828;">Per puro caso&#8230;</span><br style="color: #282828;" /><span style="color: #282828;">Frequento da anni un forum di scrittura, in quanto mi piace molto leggere e scrivere, e in una discussione, nella sezione Off Topic, si parlava di creare un videogioco. Lì ho sentito parlare per la prima volta di RPG Maker. C&#8217;era anche linkato il primo video tutorial di Ghost Rider!</span><br style="color: #282828;" /><span style="color: #282828;">Questo è successo circa un anno fa.</span><br style="color: #282828;" /><span style="color: #282828;">Anche se mi ero interessata, ho incominciato a informarmi davvero molto più in là. Quell&#8217;estate pensavo ad altre cose, tra cui ad aprire il mio blog.</span><br style="color: #282828;" /><span style="color: #282828;">Presi a dedicarmi davvero al making quando mi sono iscritta a Makerando, quindi nel novembre del 2013.</span><strong><br />
</strong></p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Quali sono state le prime difficoltà?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Ah praticamente tutto è stato una difficoltà! Non sapevo assolutamente niente, e tanto meno capivo qualcosa!</p>
<p><strong>Shiki:<br />
</strong>Un po&#8217; tutto, non conoscendo assolutamente nulla, ma soprattutto non capivo come funzionavano i chipset e il mapping; tutt&#8217;ora mi danno qualche problema, ma non so esattamente perché xD</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Come le hai superate?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Ho avuto la fortuna di incontrare persone competenti che con molta pazienza, mi hanno aiutato a capire, rendendomi il lavoro più semplice e divertente.</p>
<p><strong style="line-height: 1.625;">Shiki:<br />
</strong>Chiedendo e seguendo i tutorial trovati in giro, sia qui che in altri forum. Al momento ne frequento due attivamente, tra cui Makerando.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Hai un ruolo definito? Come hai sviluppato la passione per il game making?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong><span style="color: #282828;">I</span>l mio ruolo definito è Grafica. La passione è venuta pian piano, con la voglia di realizzare qualcosa di completamente mio.</p>
<p><strong>Shiki:<br />
</strong>I ruoli in cui mi ritrovo di più sono Eventer e Storyboarder.<br />
Ho sempre amato inventare storie, basta pensare a un&#8217;altra mia passione, cioè scrivere. Poi riesco a capire abbastanza bene la logica degli eventi, non so spiegare perché, ma mi diverto molto quando mi dedico a questa parte del making.<br />
La passione per il game making l&#8217;ho sempre avuta, sepolta dentro di me xD.<br />
Ho sempre desiderato creare qualcosa di mio, tra cui anche un videogioco, ma partendo dal presupposto che poteva essere troppo difficile, non mi sono mai informata, fino a ora.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Hai trovato facilmente il tuo spazio in un ambiente in cui la maggiorparte dei makers sono<br />
uomini?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Sì. Non sono una che si fa mettere sotto da queste bazzecole!</p>
<p><strong>Shiki:<br />
</strong>Certo, per me non è assolutamente un problema!<br />
Anzi, da piccola amavo di più giocare fuori o alla PlayStation con i maschi, piuttosto che con le femmine e le loro bambole.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong>Che tipo di progetto stai sviluppando?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Ne sto sviluppando tre, a dire il vero, uno in solitaria e due in collab. Il mio personale, è un Fantasy. I due in personale sono un Action/Survivor e un Fantasy.</p>
<p><strong>Shiki:<br />
</strong>Ho iniziato il mio primo progetto da pochissimo, circa un mese.<br />
Questo è di genere sovrannaturale, forse un po&#8217; horror. E&#8217; più che altro un piccolo gioco, che non sarà molto lungo (forse 4 ore di gioco circa), che voglio completare prima d&#8217;imbarcarmi in un progetto vero e proprio.<br />
Il progetto serio a cui vorrò dedicarmi più avanti sarà probabilmente un distopico-cyberpunk. Alcune cose della trama le ho già in mente.<br />
Quando avrò finito di scrivere la storia del sovrannaturale, imposterò la storia del distopico.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Che consigli vuoi dare a chi si affaccia in questo mondo per la prima volta?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Che deve impegnarsi e fare molte, molte prove, pure senza un risultato completo finale! Perché l&#8217;unico modo per renderlo semplice e riuscire nel proprio progetto, è facendo mille tentativi finché non si capisce e si impara. Quindi sì, IMPEGNATEVI!</p>
<p><strong>Shiki:<br />
</strong>Non saprei, essendo comunque ancora alle prime armi&#8230;<br />
I consigli che posso dare è di seguire i tutorial e i consigli di chi è più esperto. Non dovete subito mettervi a creare progetti difficili ed elaborati; iniziate dalle basi, pian piano prendeteci mano. Partite dalle cose semplici, imbarcarsi in un progetto difficile fin dall&#8217;inizio per me è controproducente.<br />
Poi come tool consiglio il 2000 o il 2003, reperibili gratis in italiano per chi, come me, non è molto bravo con la grafica ma se la cava con gli eventi. Se invece accade il contrario (siete bravi con la grafica e gli eventi vi stanno un po&#8217; più ostici) allora usate XP o l&#8217;ACE, però in questo caso è buona cosa impararsi un po&#8217; di Ruby e RGSS, a modo di capire come funzionano gli Scripts, per evitare il copia e incolla passivo.<br />
Ma soprattutto non arrendetevi alle prime difficoltà, in questo genere di cose ci vuole molta pazienza.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Che sensazioni provi durante lo sviluppo del tuo progetto? Senti di essere supportata in modo adeguato?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Beh, come posso dire&#8230; Mi sento bene, mi sento &#8220;importante&#8221;, come credo ci si senta chiunque si impegni s qualcosa seriamente, e molto spesso mi sento spossata e incavolata perché alcune cose non m riescono, ma di solito sono molto contenta! E sì, assolutamente sì!</p>
<p><strong>Shiki:<br />
</strong>Le stesse sensazioni che provo quando scrivo, sinceramente non come spiegarle a parole&#8230;<br />
Però quando un lavoro poi viene come voglio mi sento realizzata, in caso contrario mi arrabbio o/e m&#8217;intristisco ma poi continuo a provare fino a quando risolvo il problema e dopo mi sento ancora più felice.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Come sono i tuoi rapporti con gli altri membri delle community in cui partecipi in modo attivo?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Ottimi! Sono tutti bravissimi, simpatici e disponibili! <img src="http://www.makerando.com/public/style_emoticons/default/biggrin.png" alt=":D" /></p>
<p><strong>Shiki:<br />
</strong>Buoni, ancora non ho avuto modo di approfondire le conoscenze con nessuno, quindi le miei discussioni con loro non vanno al di fuori dell&#8217;argomento principale. Ma io sono anche una persona che ama stare sulle sue e mi ci vuole tempo per fare amicizia. Comunque mi trovo sicuramente molto bene.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Ti sei mai sentita svantaggiata?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Nah.</p>
<p><strong>Shiki:<br />
</strong>Mai, solo mi rimprovero di non essermi avvicinata prima al making.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Che tipo di studi hai fatto?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Ho sempre avuto una passione per l&#8217;arte, quindi ho frequentato una scuola d&#8217;arte, che però mi ha molto delusa. Poi sono passata all&#8217;informatico, che è molto gradevole. Quindi direi entrambi!</p>
<p><strong>Shiki:<br />
</strong>Mi sono diplomata in un istituto tecnico biologico e adesso frequento la triennale d&#8217;ingegneria biomedica.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Ti hanno aiutata nella tua passione?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Beh, nella passione del disegno NO, in quella del making sì, e molto!</p>
<p><strong>Shiki:<br />
</strong>Se per passione ci riferiamo solo al making, forse solo un po&#8217; l&#8217;università.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Hai altri interessi?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Sì, l&#8217;arte, il disegno.</p>
<p><strong>Shiki:<br />
</strong>Troppi, a dire il vero.<br />
I principali sono leggere e scrivere, l&#8217;informatica in generale, Anime e Manga, arti marziali, robe come fisica, astronomia, ecc. Generalmente sono molto curiosa.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Ti ispiri a qualche figura o a qualcosa per creare il tuo progetto?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Beh mi ispiro a giochi Fantasy famosi; Final Fantasy, Kingdom Hearts, Chrono Trigger et simili… Quindi sì!</p>
<p><strong>Shiki:<br />
</strong>Generalmente ora prendo spunto da altri giochi fatti con RPG Maker e poi m&#8217;ispiro a videogiochi classici come Final Fantasy, Kingdom Hearts e Silent Hill.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Hai parlato di questa tua passione con altre persone? Se si, cosa pensano del making?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Nah, a parte le persone conosciute qui, non ne ho parlato con nessuno, anche perché sembra che il resto del mondo sia schifato da tali cose ò_ò</p>
<p><strong>Shiki:<br />
</strong>Sì, con il mio ragazzo e le poche persone fidate che posso considerare amici, che si contano sulle dita di una mano. Ho accennato qualcosa anche a mia madre, che però non ci capisce molto xD<br />
Sono incuriositi e interessati e dicono che vogliono provare i giochi che farò, specialmente mia cugina e il mio ragazzo hanno detto che mi faranno da betatester; ma il realtà solo il mio ragazzo sembra davvero interessato a questo mondo.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Hai degli obiettivi?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Certo. Chi non ne ha? Ma se parliamo di making nello specifico, l&#8217;unico obiettivo e divertirmi e far divertire.</p>
<p><strong>Shiki:<br />
</strong>Per quanto riguarda il making il mio unico obbiettivo è creare qualcosa di mio, divertirmi e far divertire.<br />
In generale di obbiettivi ne ho parecchi, come migliorare in alcune cose; ad esempio la conoscenza della lingua inglese, imparare davvero il giapponese, imparare seriamente a programmare e altre cose.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Il making ha cambiato la tua vita? Se si, come?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Oddio sì. Mi ha permesso di conoscere persone straordinarie, di affezionarmi specialmente ad una di queste, che mi sta regalando bellissimi momenti. Quindi sì, mi ha cambiato la vita.</p>
<p><strong>Shiki:<br />
</strong>Più o meno sì, perché mi ha permesso di dedicarmi a una passione che seppellisco fin da piccola.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Quale è stato il primo videogame a cui hai giocato? E il primo sviluppato con RPG Maker?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Il primo videogame della mia vita è stato Ninja Boy. Era stupendo! Invece di realizzati con RPG Maker… hmm… Non ricordo, mi spiace :/</p>
<p><strong>Shiki:<br />
</strong>Purtroppo ho iniziato a giocare ai videogame un po&#8217; tardi. All&#8217;inizio mia madre non voleva comprarmi un gameboy perché pensava non fosse adatto a una bambina e io in quel periodo non insistetti più di tanto, quindi mi limitavo a giocare ogni tanto con quelli dei miei compagni, oppure andavo a casa di uno di loro che aveva la playstation, però aveva solo giochi di macchine.<br />
Alla fine, quando avevo 10-11 anni i miei comprarono un pc e lì giocai davvero per la prima volta a un videogioco, cioè Harry Potter e la pietra Filosofale. Lo so, non è il nome di chissà quale gioco famoso e storico, ma è stato il primo videogioco a cui ho giocato davvero.<br />
Mentre il primo gioco sviluppato con RPG Maker che ho giocato è stato Ib.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Hai delle proposte per Makerando?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Beh, forse di organizzare più contest? Sinceramente non so, per me personalmente va benissimo così com&#8217;è.</p>
<p><strong>Shiki:<br />
</strong>Sinceramente non saprei, da quando mi sono iscritta il forum si è evoluto velocemente. Spero vivamente che continui così e con questo ritmo.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <span style="color: #000000;"><strong>Vuoi dire qualcosa alla community?</strong></span></strong></p>
<p><strong>MihaChan:<br />
</strong>Ragazzuoli vi voglio bene! Siete tutti fantastici, continuate così mi raccomando! *-*</p>
<p><strong>Shiki:<br />
</strong>Di continuare così, che qui è stato il mio vero punto di partenza per il mondo del making, quindi ringrazio davvero chi mi ha aiutato ad iniziare questa esperienza.</p>
<p>&nbsp;</p>
<p><strong>Denzel: <strong style="color: #282828;">Vuoi dire qualcosa alle altre ragazze che vogliono sviluppare questa passione?</strong></strong></p>
<p><strong>MihaChan:<br />
</strong>Di impegnarsi, di chiedere aiuto, di non lasciarsi demoralizzare da questo mondo &#8220;maschilista&#8221;. Ah, sì, e di non fare le gatte morte per farsi realizzare il progetto da altri, perché non c&#8217;è alcuna soddisfazione alla fine! (lo dico perché ho conosciuto gente così, mio malgrado xD)</p>
<p><strong>Shiki:<br />
</strong>Prima di tutto di non arrendersi solo perché questo sembra un mondo solo per maschi; io questi problemi non me ne faccio, ma ci sono altre che potrebbero esserne intimorite. Di non avere paura a chiedere e d&#8217;impegnarsi. Come in qualunque altra passione, ciò che serve è sempre una buona dose di forza di volontà e umiltà.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/making-in-rosa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Offerta STEAM &#8211; RPGMaker VX Ace</title>
		<link>https://www.makerando.com/gamerlog/offerta-steam-rpgmaker-vx-ace/</link>
		<comments>https://www.makerando.com/gamerlog/offerta-steam-rpgmaker-vx-ace/#comments</comments>
		<pubDate>Mon, 23 Jun 2014 21:19:31 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[RPGMaker]]></category>
		<category><![CDATA[VX ACE]]></category>
		<category><![CDATA[compra rpgmaker]]></category>
		<category><![CDATA[makerando]]></category>
		<category><![CDATA[offerte]]></category>
		<category><![CDATA[rpgmaker vx ace]]></category>
		<category><![CDATA[scarica rpgmaker]]></category>
		<category><![CDATA[steam]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=158</guid>
		<description><![CDATA[Salve makeratori! Oggi vi segnaliamo una curiosa offerta di STEAM in occasione dei saldi estivi. Grazie a questa famosa piattaforma per il gaming, potrete comprare RPGMaker VX Ace ad un prezzo scontato del 50% fino al 30 Giugno. Inoltre, sempre in offerta, troviamo un bundle che comprende RPGMaker VX Ace e 3 pack di risorse [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Salve makeratori!<br />
Oggi vi segnaliamo una curiosa offerta di STEAM in occasione dei saldi estivi.</p>
<p>Grazie a questa famosa piattaforma per il gaming, potrete comprare RPGMaker VX Ace ad un prezzo <strong>scontato del 50%</strong> fino al 30 Giugno.</p>
<p>Inoltre, sempre in offerta, troviamo un bundle che comprende <strong>RPGMaker VX Ace e 3 pack di risorse aggiuntive</strong>:</p>
<div>
<ul>
<li><img class="alignleft wp-image-10 size-full" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/vxa.png" alt="" width="60" height="125" />RPG Maker: Frontier Works Futuristic Heroes and BGM</li>
<li>RPG Maker: Monster Legacy 1</li>
<li>RPG Maker: Classic Fantasy Music Pack</li>
</ul>
<p>Corri ad acquistare la tua copia qui: <a href="http://store.steampowered.com/app/220700">http://store.steampowered.com/app/220700</a></p>
</div>
<p><a id="dlc_row_291471" class="game_area_dlc_row odd" style="color: #b0aeac;" href="http://store.steampowered.com/app/291471/?snr=1_5_9__405"></a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/offerta-steam-rpgmaker-vx-ace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RPGMaker VX Online Game &#8211; Parte I</title>
		<link>https://www.makerando.com/gamerlog/rpgmaker-vx-online-game-parte-i/</link>
		<comments>https://www.makerando.com/gamerlog/rpgmaker-vx-online-game-parte-i/#comments</comments>
		<pubDate>Wed, 18 Jun 2014 16:12:55 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[RPGMaker]]></category>
		<category><![CDATA[VX]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[enterbrain]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[makerando]]></category>
		<category><![CDATA[netplay]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[rgss]]></category>
		<category><![CDATA[rgss2]]></category>
		<category><![CDATA[rgss3]]></category>
		<category><![CDATA[rmx-os]]></category>
		<category><![CDATA[rpg]]></category>
		<category><![CDATA[rpgmaker client]]></category>
		<category><![CDATA[rpgmaker netplay]]></category>
		<category><![CDATA[rpgmaker online]]></category>
		<category><![CDATA[rpgmaker vx]]></category>
		<category><![CDATA[rpgmaker vx ace]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scarica]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[vx ace]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=119</guid>
		<description><![CDATA[Con l&#8217;introduzione dello scripting in RGSS in RPGMaker XP, si sono aperte molte frontiere sulla personalizzazione dei nostri giochi. Col tempo sono apparsi molti script per rendere i propri giochi più interessanti e sempre più stupefacenti. La semplicità con la quale si può creare un gioco con RPGMaker ha fatto in modo di avvicinare sia [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Con l&#8217;introduzione dello scripting in RGSS in RPGMaker XP, si sono aperte molte frontiere sulla personalizzazione dei nostri giochi. Col tempo sono apparsi molti script per rendere i propri giochi più interessanti e sempre più stupefacenti. La semplicità con la quale si può creare un gioco con RPGMaker ha fatto in modo di avvicinare sia principianti che utenti avanzati nella programmazione a creare nuove esperienze di gioco.</p>
<p>Gli MMORPG, ovvero <span style="color: #545454;">Massive(ly) Multiplayer Online Role-Playing Game, sono l&#8217;esperienza di gioco più coinvolgente di questo secolo, giocare online ti permette di abbattere i limiti fisici, giocare con altre persone ed entrare e vivere nel mondo fantastico del titolo online a cui stiamo giocando.</span></p>
<p>Anche su RPGMaker molti hanno tentato di realizzare un&#8217;esperienza di gioco online, sono tanti gli scripts che sono stati realizzati. In principio per RPGMaker XP vi fu Netplay e Netplayplus, seguiti da tanti altri, compresi alcuni tentativi italiani.</p>
<p>Oggi vi propongo la traduzione di un articolo inglese, di <span style="font-weight: bold; color: #333333;">sorlokreaves </span>che utilizzando le sue conoscenze di JAVA e Ruby, ha creato un semplicissimo sistema client/server per RPGMaker VX utilizzando i <strong>socket</strong> del protocollo TCP.</p>
<p>L&#8217;articolo si rivolge a chi ha già alcuni rudimenti di programmazione e vuole realizzare un sistema online nel proprio gioco.<span id="more-119"></span></p>
<h3>Step 1 : Casi d&#8217;uso</h3>
<p>Cominciamo col creare un progetto nuovo su RPGMaker VX. Create una mappa iniziale, mettete qualche tile di &#8220;terra&#8221;. Dopo aggiungete un NPC (evento) con questi comandi:</p>
<ul>
<li>Messaggio: &#8220;Apertura Socket&#8221;</li>
<li>Script
<pre class="lang:ruby decode:true">s = TCPSocket.open('127.0.0.1', 7689)
s.close()</pre>
</li>
<li>Messaggio: &#8220;Successo&#8221;</li>
</ul>
<p>Adesso, provate il gioco e parlate con l&#8217;evento, dovreste vedere questo messaggio di errore e il gioco crasherà.</p>
<div id="attachment_120" style="width: 818px" class="wp-caption aligncenter"><img class="size-full wp-image-120" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_first_crash1.png" alt="No &quot;sockets&quot; library significa che non esiste nessuna classe TCPSocket, il che farà crashare il nostro script da due linee" width="808" height="576" /><p class="wp-caption-text">No &#8220;sockets&#8221; library significa che non esiste nessuna classe TCPSocket, il che farà crashare il nostro script da due linee</p></div>
<p>Cos&#8217;è appena successo? Bene, prima abbiamo provato a creare un socket. Questo socket assumeva che noi avessimo un server che stava girando su <em>127.0.0.1</em> (indirizzo di localhost, vuol dire che il server girava su questo computer) e che era collegato alla porta <span style="color: #333333;">7689</span>. Siccome nessun server è stato lanciato, ci si aspetta un crash. -comunque abbiamo ottenuto un diverso messaggio di errore. Se guardate il messaggio d&#8217;errore, vedrete che RPGMaker VX non è riuscito a trovare l&#8217;oggetto &#8220;TCPSocket&#8221;. In altre parole RPGMaker VX non da supporto nativo alle librerie Ruby che gestiscono il networking (comunicazione online).-<br />
Nemmeno RPGMaker XP offriva questo supporto nativamente, e l&#8217;autore si interroga come RMX-OS (script per RPGMaker XP, che permette di creare giochi online) lo abbia potuto ottenere.<br />
Se avete già esperienza con i linguaggi di programmazione, sapete che di solito la parte di networking è collegata direttamente al sistema operativo. Se siete curiosi di vedere come Ruby si connetta attraverso i socket, potete scaricare il sorgente di <strong>Ruby</strong> 1.8 e analizzare il file <strong>thread.rb</strong><br />
Scarica Ruby qui: <a href="http://ftp.de.debian.org/debian/pool/main/r/ruby1.8/ruby1.8_1.8.7.249.orig.tar.gz" target="_blank">http://ftp.de.debian.org/debian/pool/main/r/ruby1.8/ruby1.8_1.8.7.249.orig.tar.gz</a></p>
<h3>Step 2 : Prendendo in prestito la Libreria di Codice</h3>
<p>Se avete familiarità con l&#8217;ambiente di scripting di RGSS, avrete notato che non supporta la primitiva &#8220;require&#8221;. Questo ha senso dal momento che &#8220;require&#8221; cerca il percorso alla libreria standard, potresti avviare delle librerie di Ruby che i videogiocatori non hanno. C&#8217;è da dire però che RPGMaker è in grado di eseguire codice nativo dalle DLLs. Per esempio questa funzionerà bene:</p>
<pre class="lang:ruby decode:true">Win32API.new(DLL, 'connect', 'ppl', 'l').call(1, 2, 3)</pre>
<p>Potremmo considerare di combinare insieme le DLL per creare insieme una &#8220;finta&#8221; libreria per il networking. Eventualmente potremmo migrare ad una cosiddetta libreria nativa, così potremmo guadagnare i benefici di primitive di basso livello. Un esempio è dato dalla libreria:<br />
<a href="http://rubyforge.org/projects/win32utils/" target="_blank">http://rubyforge.org/projects/win32utils/</a></p>
<p>Se la estraete e l&#8217;analizzate noterete che il codice sorgente ha molti require tag. Se volete utilizzarla dovrete essenzialmente sostituire queste con funzionalità compatibili.</p>
<p>Comunque per questo tutorial utilizzeremo la libreria <span style="color: #333333;">Win32 API </span>utilizzata da Blizzard in RMX-OS, che dice di aver preso da Ruby 1.8.1. Questo non creerà problemi di licenza, poichè Ruby permette l&#8217;utilizzo di copie di librerie modificate e ridistribuite.</p>
<p>Il codice di networking di RMX-OS è costruito con chiamate a DLL, questo è il codice da copiare:</p>
<pre class="height-set:true height:350 lang:ruby decode:true">#==============================================================================
# ** Module Win32 - Handles numerical based data.
#------------------------------------------------------------------------------
# Author    Ruby
# Version   1.8.1
#==============================================================================

module Win32

  #----------------------------------------------------------------------------
  # ● Retrieves data from a pointer.
  #----------------------------------------------------------------------------
  def copymem(len)
    buf = "\0" * len
    Win32API.new('kernel32', 'RtlMoveMemory', 'ppl', '').call(buf, self, len)
    buf
  end
  
end

# Extends the numeric class.
class Numeric
  include Win32
end

# Extends the string class.
class String
  include Win32
end

#==============================================================================
# ** Module Winsock - Maps out the functions held in the Winsock DLL.
#------------------------------------------------------------------------------
# Author    Ruby
# Version   1.8.1
#==============================================================================

module Winsock

  DLL = 'ws2_32'

  #----------------------------------------------------------------------------
  # * Accept Connection
  #----------------------------------------------------------------------------
  def self.accept(*args)
    Win32API.new(DLL, 'accept', 'ppl', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Bind
  #----------------------------------------------------------------------------
  def self.bind(*args)
    Win32API.new(DLL, 'bind', 'ppl', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Close Socket
  #----------------------------------------------------------------------------
  def self.closesocket(*args)
    Win32API.new(DLL, 'closesocket', 'p', 'l').call(*args)
  end  
  #----------------------------------------------------------------------------
  # * Connect
  #----------------------------------------------------------------------------
  def self.connect(*args)
    Win32API.new(DLL, 'connect', 'ppl', 'l').call(*args)
  end    
  #----------------------------------------------------------------------------
  # * Get host (Using Adress)
  #----------------------------------------------------------------------------
  def self.gethostbyaddr(*args)
    Win32API.new(DLL, 'gethostbyaddr', 'pll', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Get host (Using Name)
  #---------------------------------------------------------------------------- 
  def self.gethostbyname(*args)
    Win32API.new(DLL, 'gethostbyname', 'p', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Get host's Name
  #----------------------------------------------------------------------------
  def self.gethostname(*args)
    Win32API.new(DLL, 'gethostname', 'pl', '').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Get Server (Using Name)
  #----------------------------------------------------------------------------
  def self.getservbyname(*args)
    Win32API.new(DLL, 'getservbyname', 'pp', 'p').call(*args)
  end
  #----------------------------------------------------------------------------
  # * HT OnL
  #----------------------------------------------------------------------------
  def self.htonl(*args)
    Win32API.new(DLL, 'htonl', 'l', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * HT OnS
  #----------------------------------------------------------------------------
  def self.htons(*args)
    Win32API.new(DLL, 'htons', 'l', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Inet Adress
  #----------------------------------------------------------------------------
  def self.inet_addr(*args)
    Win32API.new(DLL, 'inet_addr', 'p', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Inet NtOA
  #----------------------------------------------------------------------------
  def self.inet_ntoa(*args)
    Win32API.new(DLL, 'inet_ntoa', 'l', 'p').call(*args)
  end  
  #----------------------------------------------------------------------------
  # * Listen
  #----------------------------------------------------------------------------
  def self.listen(*args)
    Win32API.new(DLL, 'listen', 'pl', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Recieve
  #----------------------------------------------------------------------------
  def self.recv(*args)
    Win32API.new(DLL, 'recv', 'ppll', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Select
  #----------------------------------------------------------------------------
  def self.select(*args)
    Win32API.new(DLL, 'select', 'lpppp', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Send
  #----------------------------------------------------------------------------
  def self.send(*args)
    Win32API.new(DLL, 'send', 'ppll', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Set Socket Options
  #----------------------------------------------------------------------------
  def self.setsockopt(*args)
    Win32API.new(DLL, 'setsockopt', 'pllpl', 'l').call(*args)
  end  
  #----------------------------------------------------------------------------
  # * Shutdown
  #----------------------------------------------------------------------------
  def self.shutdown(*args)
    Win32API.new(DLL, 'shutdown', 'pl', 'l').call(*args)
  end
  #----------------------------------------------------------------------------
  # * Socket
  #----------------------------------------------------------------------------
  def self.socket(*args)
    Win32API.new(DLL, 'socket', 'lll', 'l').call(*args)  
  end
  #----------------------------------------------------------------------------
  # * Get Last Error
  #----------------------------------------------------------------------------
  def self.WSAGetLastError(*args)
    Win32API.new(DLL, 'WSAGetLastError', '', 'l').call(*args)
  end
 
end

#==============================================================================
# ** Socket - Creates and manages sockets.
#------------------------------------------------------------------------------
# Author    Ruby
# Version   1.8.1
#==============================================================================

class Socket

  #----------------------------------------------------------------------------
  # ● Constants
  #----------------------------------------------------------------------------
  AF_UNSPEC                 = 0  
  AF_UNIX                   = 1
  AF_INET                   = 2
  AF_IPX                    = 6
  AF_APPLETALK              = 16

  PF_UNSPEC                 = 0  
  PF_UNIX                   = 1
  PF_INET                   = 2
  PF_IPX                    = 6
  PF_APPLETALK              = 16

  SOCK_STREAM               = 1
  SOCK_DGRAM                = 2
  SOCK_RAW                  = 3
  SOCK_RDM                  = 4
  SOCK_SEQPACKET            = 5
  
  IPPROTO_IP                = 0
  IPPROTO_ICMP              = 1
  IPPROTO_IGMP              = 2
  IPPROTO_GGP               = 3
  IPPROTO_TCP               = 6
  IPPROTO_PUP               = 12
  IPPROTO_UDP               = 17
  IPPROTO_IDP               = 22
  IPPROTO_ND                = 77
  IPPROTO_RAW               = 255
  IPPROTO_MAX               = 256

  SOL_SOCKET                = 65535
  
  SO_DEBUG                  = 1
  SO_REUSEADDR              = 4
  SO_KEEPALIVE              = 8
  SO_DONTROUTE              = 16
  SO_BROADCAST              = 32
  SO_LINGER                 = 128
  SO_OOBINLINE              = 256
  SO_RCVLOWAT               = 4100
  SO_SNDTIMEO               = 4101
  SO_RCVTIMEO               = 4102
  SO_ERROR                  = 4103
  SO_TYPE                   = 4104
  SO_SNDBUF                 = 4097
  SO_RCVBUF                 = 4098
  SO_SNDLOWAT               = 4099
  
  TCP_NODELAY               = 1
  
  MSG_OOB                   = 1
  MSG_PEEK                  = 2
  MSG_DONTROUTE             = 4
  
  IP_OPTIONS                = 1
  IP_DEFAULT_MULTICAST_LOOP = 1
  IP_DEFAULT_MULTICAST_TTL  = 1
  IP_MULTICAST_IF           = 2
  IP_MULTICAST_TTL          = 3
  IP_MULTICAST_LOOP         = 4
  IP_ADD_MEMBERSHIP         = 5
  IP_DROP_MEMBERSHIP        = 6
  IP_TTL                    = 7
  IP_TOS                    = 8
  IP_MAX_MEMBERSHIPS        = 20

  EAI_ADDRFAMILY            = 1
  EAI_AGAIN                 = 2
  EAI_BADFLAGS              = 3
  EAI_FAIL                  = 4
  EAI_FAMILY                = 5
  EAI_MEMORY                = 6
  EAI_NODATA                = 7
  EAI_NONAME                = 8
  EAI_SERVICE               = 9
  EAI_SOCKTYPE              = 10
  EAI_SYSTEM                = 11
  EAI_BADHINTS              = 12
  EAI_PROTOCOL              = 13
  EAI_MAX                   = 14

  AI_PASSIVE                = 1
  AI_CANONNAME              = 2
  AI_NUMERICHOST            = 4
  AI_MASK                   = 7
  AI_ALL                    = 256
  AI_V4MAPPED_CFG           = 512
  AI_ADDRCONFIG             = 1024
  AI_DEFAULT                = 1536
  AI_V4MAPPED               = 2048
  
  #----------------------------------------------------------------------------
  # ● Returns the associated IP address for the given hostname.
  #----------------------------------------------------------------------------  
  def self.getaddress(host)
    gethostbyname(host)[3].unpack('C4').join('.')
  end
  #----------------------------------------------------------------------------
  # ● Returns the associated IP address for the given hostname.
  #----------------------------------------------------------------------------  
  def self.getservice(serv)
    case serv
    when Numeric
      return serv
    when String
      return getservbyname(serv)
    else
      raise 'Please us an interger or string for services.'
    end
  end
  #----------------------------------------------------------------------------
  # ● Returns information about the given hostname.
  #----------------------------------------------------------------------------
  def self.gethostbyname(name)
    raise SocketError::ENOASSOCHOST if (ptr = Winsock.gethostbyname(name)) == 0
    host = ptr.copymem(16).unpack('iissi')
    [host[0].copymem(64).split("\0")[0], [], host[2], host[4].copymem(4).unpack('l')[0].copymem(4)]
  end
  #----------------------------------------------------------------------------
  # ● Returns the user's hostname.
  #----------------------------------------------------------------------------  
  def self.gethostname
    buf = "\0" * 256
    Winsock.gethostname(buf, 256)
    buf.strip
  end
  #----------------------------------------------------------------------------
  # ● Returns information about the given service.
  #----------------------------------------------------------------------------
  def self.getservbyname(name)
    case name
    when /echo/i
      return 7
    when /daytime/i
      return 13
    when /ftp/i
      return 21
    when /telnet/i
      return 23
    when /smtp/i
      return 25
    when /time/i
      return 37
    when /http/i
      return 80
    when /pop/i
      return 110
    else
      raise 'Service not recognized.'
    end
  end
  #----------------------------------------------------------------------------
  # ● Creates an INET-sockaddr struct.
  #----------------------------------------------------------------------------  
  def self.sockaddr_in(port, host)
    begin
      [AF_INET, getservice(port)].pack('sn') + gethostbyname(host)[3] + [].pack('x8')
    rescue
    end
  end
  #----------------------------------------------------------------------------
  # ● Creates a new socket and connects it to the given host and port.
  #----------------------------------------------------------------------------  
  def self.open(*args)
    socket = new(*args)
    if block_given?
      begin
        yield socket
      ensure
        socket.close
      end
    end
    nil
  end
  #----------------------------------------------------------------------------
  # ● Creates a new socket.
  #----------------------------------------------------------------------------  
  def initialize(domain, type, protocol)
    SocketError.check if (@fd = Winsock.socket(domain, type, protocol)) == -1
    @fd
  end
  #----------------------------------------------------------------------------
  # ● Accepts incoming connections.
  #----------------------------------------------------------------------------  
  def accept(flags = 0)
    buf = "\0" * 16
    SocketError.check if Winsock.accept(@fd, buf, flags) == -1
    buf
  end
  #----------------------------------------------------------------------------
  # ● Binds a socket to the given sockaddr.
  #----------------------------------------------------------------------------  
  def bind(sockaddr)
    SocketError.check if (ret = Winsock.bind(@fd, sockaddr, sockaddr.size)) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Closes a socket.
  #----------------------------------------------------------------------------  
  def close
    SocketError.check if (ret = Winsock.closesocket(@fd)) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Connects a socket to the given sockaddr.
  #----------------------------------------------------------------------------  
  def connect(sockaddr)
    SocketError.check if (ret = Winsock.connect(@fd, sockaddr, sockaddr.size)) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Listens for incoming connections.
  #----------------------------------------------------------------------------  
  def listen(backlog)
    SocketError.check if (ret = Winsock.listen(@fd, backlog)) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Checks waiting data's status.
  #----------------------------------------------------------------------------  
  def select(timeout)
    SocketError.check if (ret = Winsock.select(1, [1, @fd].pack('ll'), 0, 0, [timeout, timeout * 1000000].pack('ll'))) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Checks if data is waiting.
  #----------------------------------------------------------------------------  
  def ready?
    not select(0) == 0
  end  
  #----------------------------------------------------------------------------
  # ● Reads data from socket.
  #----------------------------------------------------------------------------  
  def read(len)
    buf = "\0" * len
    Win32API.new('msvcrt', '_read', 'lpl', 'l').call(@fd, buf, len)
    buf
  end
  #----------------------------------------------------------------------------
  # ● Returns recieved data.
  #----------------------------------------------------------------------------  
  def recv(len, flags = 0)
    buf = "\0" * len
    SocketError.check if Winsock.recv(@fd, buf, buf.size, flags) == -1
    buf
  end
  #----------------------------------------------------------------------------
  # ● Sends data to a host.
  #----------------------------------------------------------------------------  
  def send(data, flags = 0)
    SocketError.check if (ret = Winsock.send(@fd, data, data.size, flags)) == -1
    ret
  end
  #----------------------------------------------------------------------------
  # ● Writes data to socket.
  #----------------------------------------------------------------------------  
  def write(data)
    Win32API.new('msvcrt', '_write', 'lpl', 'l').call(@fd, data, 1)
  end

end

#==============================================================================
# ** TCPSocket - Creates and manages TCP sockets.
#------------------------------------------------------------------------------
# Author    Ruby
# Version   1.8.1
#==============================================================================

class TCPSocket &lt; Socket

  #----------------------------------------------------------------------------
  # ● Creates a new socket and connects it to the given host and port.
  #----------------------------------------------------------------------------  
  def self.open(*args)
    socket = new(*args)
    if block_given?
      begin
        yield socket
      ensure
        socket.close
      end
    end
    nil
  end
  #----------------------------------------------------------------------------
  # ● Creates a new socket and connects it to the given host and port.
  #----------------------------------------------------------------------------  
  def initialize(host, port)
    super(AF_INET, SOCK_STREAM, IPPROTO_TCP)
    connect(Socket.sockaddr_in(port, host))
  end
  
end

#==============================================================================
# ** SocketError
#------------------------------------------------------------------------------
# Default exception class for sockets.
#==============================================================================

class SocketError &lt; StandardError
  
  ENOASSOCHOST = 'getaddrinfo: no address associated with hostname.'
  
  def self.check
    errno = Winsock.WSAGetLastError
    raise Errno.const_get(Errno.constants.detect { |c| Errno.const_get(c).new.errno == errno })
  end
  
end</pre>
<p>Nell&#8217;editor degli scripts (F11), fate tasto destro su &#8220;Main&#8221;, e scegliete &#8220;Inserisci&#8221;, scrivete &#8220;Ruby Library Code&#8221; nel nome e incollate il codice precedente. Scegliete OK e salvate il gioco.</p>
<p>Se provate il gioco adesso, finirete con l&#8217;avere un errore. Quindi cancellate l&#8217;evento che abbiamo creato in precedenza, e aggiungete il codice che segue direttamente nello script Main, esattamente dopo <span style="color: #333333;">Graphics.freeze<br />
</span></p>
<pre class="lang:ruby decode:true">s = TCPSocket.open('127.0.0.1', 7689)
s.close()</pre>
<p>Adesso salva il gioco, e avvia il game testing. Otterrai il seguente messaggio d&#8217;errore:</p>
<div id="attachment_127" style="width: 664px" class="wp-caption aligncenter"><img class="size-full wp-image-127" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_conn_ref_err1.png" alt="Questo errore significa che la libreria di codice è stata caricata, ma non ha trovato il server. Stiamo facendo progressi!" width="654" height="539" /><p class="wp-caption-text">Questo errore significa che la libreria di codice è stata caricata, ma non ha trovato il server. Stiamo facendo progressi!</p></div>
<p>Questo è il tipo d&#8217;errore che stavamo cercando! Congratulazioni, la struttura base del codice TCP che hai aggiunto era corretta.</p>
<h3><span style="color: #333333;"> Step 3 : Inizializzare e Testare la Connessione con gli NPCs</span></h3>
<p>Abbiamo bisogno di testare una connessione TCP -inoltre dovremmo sistemare il bug che non permette agli NPC di attivare il nostro codice. Questi sono i nostri prossimi compiti.</p>
<p>Se hai trovato nel codice l&#8217;origine dell&#8217;errore, sei arrivato a queste linee di codice:</p>
<pre class="lang:ruby decode:true">  def self.check
    errno = Winsock.WSAGetLastError
    raise Errno.const_get(Errno.constants.detect { |c| Errno.const_get(c).new.errno== errno })
  end</pre>
<p>L&#8217;errore è da riteneresi nello statement &#8220;raise&#8221;. Se non capisci la logica a blocchi di Ruby, questo ti sconforterà e non vorrai proseguire. Ma prova questa piccola astrazione :</p>
<pre class="lang:ruby decode:true"> def self.check
    errno = Winsock.WSAGetLastError
    constName = Errno.constants.detect { |c| Errno.const_get(c).new.errno== errno }
    raise Errno.const_get(constName)
  end</pre>
<p>Prova questo codice ancora e noterai che l&#8217;errore sta nuovamente sulla linea di &#8220;raise&#8221;. Il programmatore originale voleva trovare gli errori di Win32 attraverso il loro ID, ma non ha messo in conto che un socket inizializzato a null avrebbe potuto generare un errore senza codice ID. Per risolvere basta questo:</p>
<pre class="lang:ruby decode:true">def self.check
      errno = Winsock.WSAGetLastError
      constName = Errno.constants.detect {|c| Errno.const_get(c).new.errno == errno }
      if constName
        raise Errno.const_get(constName)
      else
        raise "Unknown network error code: #{errno}"
      end
  end</pre>
<p>Adesso se proverai ad avviare il codice dell&#8217;evento, vedrai l&#8217;errore <span style="color: #333333;">“Unknown network error code”</span>.<br />
A questo punto dovremmo dire che <span class="skimlinks-unlinked" style="color: #333333;">TCPSocket.open</span><span style="color: #333333;">()</span> non è tecnicamente corretto, poichè si aspetta che noi passiamo alla funzione un blocco di codice da eseguire. Questo potrebbe andare bene per una procedura socket immediata come ricevere l&#8217;ora attuale, o le condizioni meteo da un server centrale, ma noi abbiamo bisogno di una connessione persistente con il server per il nostro engine. Come ti aspetterai il nostro codice supererà il limite del comando Script dell&#8217;Evento. Quindi, cambia il codice script dell&#8217;evento con:</p>
<pre class="lang:ruby decode:true">tcptest()</pre>
<p>&#8230;e aggiungi il codice seguente al modulo &#8220;Main&#8221;, direttamente prima dello statement &#8220;begin&#8221;</p>
<pre class="lang:ruby decode:true">  def tcptest
    #Createa a socket
    s = TCPSocket.new('127.0.0.1', 7689)

    #Send a test message
    s.send("Testing...\n")
    #Receive a result from the server
    msg = ''
    while
      buffer = s.recv(1024)    #Read UP TO 1024 bytes
      buffer.gsub!(0.chr, '') #Remove null bytes
      msg += buffer            #Append received data
      break if buffer.count("\n")&gt;0   #Stop if we've reached the newline
    end
    #Done; close the socket, print our message
    s.close()
    print "Received: #{msg}"
  end</pre>
<p>Il nostro codice è molto semplice, abbiamo usato &#8220;new&#8221; invece di &#8220;open&#8221;, e abbiamo usato &#8220;send&#8221; e &#8220;recv&#8221; per mandare e ricevere i dati. Un problema di recv, è che non aspetterà che il server abbia finito di comunicare la risposta per intero, così abbiamo bisogno di memorizzare l&#8217;intero messaggio di bit non appena vengono ricevuti. D&#8217;altronde una delle garanzie di TCP è che non riceveremo messaggi disordinati, questo è un punto che ci risparmierà molti mal di testa.</p>
<p>Adesso quello che abbiamo bisogno è il server. Credo che Ruby non sia molto indicato come codice client\server, proveremo così a scriverne uno in Java. Un problema con Java è che compilare il codice ed eseguirlo potrebbe essere difficoltoso. Piuttosto che fornirvi un tutorial completo su <a href="http://www.eclipse.org/">Eclipse </a>o javac, ti chiederò di scaricare e installare <a href="http://www.textpad.com/">Textpad</a>.</p>
<p>NB: Alcuni utenti hanno segnalato che è necessario anche scaricare JDK. Apri una finestra di comando, e scrivi <strong style="color: #333333;">javac -version.</strong> Se ottieni un messaggio d&#8217;errore, allora devi <a href="http://java.sun.com/javase/downloads/widget/jdk6.jsp">scaricare JDK</a>.</p>
<p>Adesso crea un nuovo file, chiamalo esattamente &#8220;<strong style="color: #333333;"><span class="skimlinks-unlinked" style="font-weight: inherit; font-style: inherit;">SimpleServer.java</span></strong><span class="skimlinks-unlinked" style="font-weight: inherit; font-style: inherit;">&#8220;, e dentro scrivi questo codice:</span></p>
<pre class="lang:ruby decode:true">import java.io.*;
import java.net.*;

class SimpleServer {
  public static void main(String argv[]) throws Exception {
    String clientSentence;
    String capitalizedSentence;
    ServerSocket welcomeSocket = new ServerSocket(7689);

    for ( ; ; ) {
      System.out.println("Waiting for connection...");
      Socket connectionSocket = welcomeSocket.accept();
      System.out.println("  &gt;Socket connected");

      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
      DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
      clientSentence = inFromClient.readLine();

      System.out.println("  &gt;Received: " + clientSentence);
      capitalizedSentence = clientSentence.toUpperCase() + '\n';
      outToClient.writeBytes(capitalizedSentence);
      System.out.println("  &gt;Replied: " + capitalizedSentence);
    }
  }
}</pre>
<p>&nbsp;</p>
<p>Abbastanza semplice? Abbiamo ignorato la parte di controllo degli errori, sarà relativamente semplice far crashare il server. Ma per una demo veloce, ce la farà. Il server legge le frasi mandate dal client, e le riporta in maiuscolo. Poichè abbiamo mandato la stringa &#8220;Testing&#8230;&#8221; attraverso il client, il server restituirà &#8220;TESTING&#8230;&#8221;.</p>
<p>Per compilare il codice del server, in TextPad, clicca su &#8220;Tools-&gt; External Tools-&gt; Compile Java&#8221;.<br />
<img class="aligncenter size-full wp-image-132" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_javatextpad1.png" alt="TextPad" width="697" height="580" />Se il codice non contiene errori, vedrai il messaggio di avvenuta compilazione. Adesso per avviare il server, clicca su &#8220;Tools-&gt;External Tools-&gt;Run Java Application&#8221;, a questo punto apparirà una finestra di comando con su scritto &#8220;Waiting for connection…&#8221;.<img class="aligncenter size-full wp-image-133" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_server_ready1.png" alt="Server" width="677" height="392" />Questo significa che il server è pronto per accettare una connessione alla porta 7689. Adesso avvia il gioco, parla con l&#8217;evento NPC, e vedrai un messaggio con la risposta del server:</p>
<div id="attachment_134" style="width: 570px" class="wp-caption aligncenter"><img class="size-full wp-image-134" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_server_works1.png" alt="Il messaggio del server è arrivato al client" width="560" height="454" /><p class="wp-caption-text">Il messaggio del server è arrivato al client</p></div>
<p>La finestra del server avrà ulteriori messaggi:</p>
<div id="attachment_135" style="width: 687px" class="wp-caption aligncenter"><img class="size-full wp-image-135" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/post10_server_log1.png" alt="Log del Server" width="677" height="392" /><p class="wp-caption-text">Log del Server</p></div>
<p>Dal momento che abbiamo chiuso la connessione, il server sta aspettando un&#8217;altra connessione in ingresso. Potremmo ri-parlare con l&#8217;evento, oppure chiudere e aprire il gioco di nuovo e parlare con l&#8217;evento. Avremo bisogno che il client tenga la connessione per altri messaggi, ma per adesso abbiamo provato che il networking di RPGMaker VX funziona. Premi CTRL+C per chiudere la finestra, premi Y se necessario per confermare la chiusura del server.</p>
<h3>Step 4 : Un passo indietro</h3>
<p>A questo punto è opportuno fermarsi un attimo e capire cosa abbiamo realizzato. C&#8217;è stato molto &#8220;codice incollato&#8221;, ma ecco cosa abbiamo fatto:</p>
<ul>
<li>Abbiamo creato un server che può &#8220;ricevere&#8221; connessioni sulla porta 7689, e un client che può richiedere una connessione a questa porta.</li>
<li>Una volta connessi, client e server possono mandare e ricevere una sequenza di caratteri.</li>
</ul>
<p>E questo è quanto. Aggiungendo altri clients, qualche tipo di sincronizzazione e partizionando i nostri dati in &#8220;messaggi&#8221; o &#8220;eventi di gioco&#8221;, sono solo dettagli di quello che il server TCP in realtà può fare. Per esempio possiamo mandare le coordinate di un evento, di un giocatore. In questo modo possiamo trattare i giocatori come eventi NPC in altri giochi del RPG che volete realizzare. Possiamo mandare tiles, per permettere ai giocatori di costruire le loro case, o personalizzare gli avatar di ogni giocatore, oppure coordinare un battle system. Tutte queste cose possono essere realizzate mandando stringhe al server TCP.</p>
<h3>Step 5 : Una Prova leggermente più impressionante</h3>
<p>Continua nella seconda parte&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/rpgmaker-vx-online-game-parte-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RPGMaker 2000/2003 su Smartphone</title>
		<link>https://www.makerando.com/gamerlog/rpgmaker-2000-2003-su-smartphone/</link>
		<comments>https://www.makerando.com/gamerlog/rpgmaker-2000-2003-su-smartphone/#comments</comments>
		<pubDate>Tue, 17 Jun 2014 18:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[2000]]></category>
		<category><![CDATA[2003]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[RPGMaker]]></category>
		<category><![CDATA[2k]]></category>
		<category><![CDATA[2k3]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[emulatore]]></category>
		<category><![CDATA[maker]]></category>
		<category><![CDATA[makerando]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[rpg]]></category>
		<category><![CDATA[rpgmaker]]></category>
		<category><![CDATA[smartphone]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=108</guid>
		<description><![CDATA[Uno dei nostri sogni, quando realizziamo un videogame, è sicuramente quello di distribuire la nostra creatura a più persone possibili, per farlo provare a tutti e sentirci orgogliosi della nostra creatura. Oggi le piattaforme sono molto più numerose, il mercato videoludico si sta sempre più espandendo, e i tool come RPGMaker trovano poco spazio su [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Uno dei nostri sogni, quando realizziamo un videogame, è sicuramente quello di distribuire la nostra creatura a più persone possibili, per farlo provare a tutti e sentirci orgogliosi della nostra creatura. Oggi le piattaforme sono molto più numerose, il mercato videoludico si sta sempre più espandendo, e i tool come RPGMaker trovano poco spazio su queste nuove piattaforme.</p>
<p>Una importante rivoluzione nel videogaming è avvenuta nel mondo degli smartphone. Tutti noi ormai possediamo uno smartphone con un market da cui è possibile scaricare le applicazioni più disparate, giochi inclusi.</p>
<p>Oggi GamerLog porta alla vostra attenzione, un&#8217;applicazione per <strong>Android</strong>, davvero interessante. Sto parlando di <strong>Choco R2k Player </strong>creata da SweetChocolate e pubblicata sullo store a Gennaio 2014<span id="more-108"></span></p>
<div id="attachment_109" style="width: 977px" class="wp-caption aligncenter"><img class="size-full wp-image-109" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/choko.png" alt="Choco R2k Player" width="967" height="487" /><p class="wp-caption-text">Autore: SweetChocolate &#8211;  Data pubblicazione: 12 gennaio 2014</p></div>
<p>Questa app permette di emulare piuttosto bene i giochi realizzati con RPGMaker 2000 o 2003, e giocarli direttamente sul vostro smartphone.</p>
<p><img class="aligncenter size-full wp-image-110" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/chooko2.jpg" alt="" width="968" height="538" /></p>
<p>L&#8217;applicazione è completamente gratuita e in caso di bug o nella eventualità che il vostro gioco possa riscontrare problemi, l&#8217;autore si è reso disponibile ad estendere il supporto del vostro gioco. Per fare ciò basta contattarlo all&#8217;indirizzo email: <a href="mailto:chocolatlsweet@gmail.com" target="_blank">chocolatlsweet@gmail.com</a>.</p>
<p>Per poter giocare i vostri giochi dovete semplicemente scaricarli sul vostro smartphone e posizionarli nella cartella: <strong><span style="color: #333333;">SdCard/RPGL/</span></strong></p>
<p>E&#8217; disponibile sul <a href="https://sites.google.com/site/sweetierchocoplayer/navi/home" target="_blank">sito ufficiale</a> dello sviluppatore, una lista di giochi supportati che potete controllare <a href="https://sites.google.com/site/sweetierchocoplayer/supp/checked-game" target="_blank">qui</a>.<br />
Se volete installare l&#8217;applicazione, dovete avere minimo la versione <span style="color: #333333;">2.3.3 di Android.<br />
L&#8217;applicazione è disponibile sul <strong>Google Play Store</strong></span></p>
<p><a href="https://play.google.com/store/apps/details?id=com.sweetier.mrpg2kplayer"><img class="wp-image-111 size-full aligncenter" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/Badge-Google-Play-Store-Italiano1.png" alt="Google Play Store" width="400" height="119" /></a></p>
<p style="text-align: center;"><a href="https://play.google.com/store/apps/details?id=com.sweetier.mrpg2kplayer" target="_blank">https://play.google.com/store/apps/details?id=com.sweetier.mrpg2kplayer</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/rpgmaker-2000-2003-su-smartphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GamerLog Starts!</title>
		<link>https://www.makerando.com/gamerlog/gamerlog-starts/</link>
		<comments>https://www.makerando.com/gamerlog/gamerlog-starts/#comments</comments>
		<pubDate>Tue, 17 Jun 2014 17:53:52 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[Comunicazioni]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[forum]]></category>
		<category><![CDATA[gamerlog]]></category>
		<category><![CDATA[makerando]]></category>
		<category><![CDATA[redazione]]></category>
		<category><![CDATA[staff]]></category>
		<category><![CDATA[start]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=115</guid>
		<description><![CDATA[Salve a tutti! Siamo lieti di cominciare questa nuova avventura qui su Makerando. Gamerlog si prefigge di migliorare la vostra esperienza di community e di game making fornendovi un luogo di informazione pieno di news interessanti, approfondimenti, speciali recensioni e molto altro.  Vogliamo ispirarvi mentre create, vi forniremo nuovi spunti, analizzeremo insieme nuove prospettive, giocheremo [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Salve a tutti!<br />
Siamo lieti di cominciare questa nuova avventura qui su Makerando. Gamerlog si prefigge di migliorare la vostra esperienza di community e di game making fornendovi un luogo di informazione pieno di news interessanti, approfondimenti, speciali recensioni e molto altro. <img class="alignleft size-full wp-image-117" src="http://www.makerando.com/gamerlog/wp-content/uploads/2014/06/photo-1351.png" alt="GamerLog" width="150" height="150" /></p>
<p>Vogliamo ispirarvi mentre create, vi forniremo nuovi spunti, analizzeremo insieme nuove prospettive, giocheremo e ci divertiremo come solo con Makerando potrete fare.</p>
<p>Se siete interessati a scrivere con noi, o volete pubblicità su GamerLog, potete contattarmi attraverso il forum oppure attraverso gamerlog.</p>
<p>Che dire Stay Tuned</p>
<p>Continuate a seguirci!</p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/gamerlog-starts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work in Progress</title>
		<link>https://www.makerando.com/gamerlog/work-in-progress/</link>
		<comments>https://www.makerando.com/gamerlog/work-in-progress/#comments</comments>
		<pubDate>Sun, 08 Jun 2014 17:58:02 +0000</pubDate>
		<dc:creator><![CDATA[Denzel]]></dc:creator>
				<category><![CDATA[Comunicazioni]]></category>

		<guid isPermaLink="false">http://www.makerando.com/gamerlog/?p=24</guid>
		<description><![CDATA[La pagina di GL è attualmente in costruzione. Se sei arrivato qui, sei arrivato troppo presto 😀 Non ci vorrà molto! Il tempo necessario per costruire qualcosa di interessante per te ;D]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;">La pagina di GL è attualmente in costruzione.<br />
Se sei arrivato qui, sei arrivato troppo presto <img src="https://s.w.org/images/core/emoji/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Non ci vorrà molto! Il tempo necessario per costruire qualcosa di interessante per te ;D</p>
]]></content:encoded>
			<wfw:commentRss>https://www.makerando.com/gamerlog/work-in-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
