Draco's Tutorial

« Older   Newer »
 
  Share  
.
  1.     +12   Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous

    Come creare un Hack Rom di Pokémon



    Lezione 1-1: Le basi

    Precisiamo subito che esistono due tipi di giochi di Pokèmon creati dai fan:
    • Le Hack Roms
    • I progetti RPG
    La prima è un gioco che nasce sulle basi di una rom GBA ed è un gioco per GBA, giocabile su PC e su una console con relativa cassettina pirata su cui è copiato il gioco. La seconda è un progetto creato con RPG Maker e reso pokemon. Questo tipo di progetto sta prendendo molto piede per la sua facile personalizzazione, per le possibilità grafiche che offre e per una generale facilità dʼuso grazie alle varie patch con già inseriti gli script necessari a rendere il gioco un gioco di pokemon.
    Noi ci dedicheremo al primo tipo: le Hack Roms. Ricordamdoci che, se state usando un Mac, per questi tipi di progetti si necessita di una macchina virtuale o di BootCamp (serve Windows)

    Ecco il download di cosa ci servirà per la prima lezione: Click Me.

    Andremo ora ad analizzare il principale programma di hacking: Advance Map
    Nel pack che vi ho fornito ci sono due versioni. Questo tutorial si baserà sulla versione 1.92, la più vecchia, poiché quella piu recente è uscita quando ho smesso di hackerare, e dunque non ne conosco le novità (inoltre la v 1.92 è in italiano)
    Aprite AdvanceMap 1.92, selezionate lʼItaliano e accettate la “licenza”. Vi apparirà questa schermata:

    Di seguito, le funzioni dei pulsanti indicati nell'immagine:
    CITAZIONE
    1: Apre la rom (a vostra scelta se Ruby o Fire Red, rigorosamente in versione USA!).
    2: Salva il nostro lavoro.
    3: Crea una nuova mappa
    4: Inserisce la mappa. Lo vedremo in seguito.
    5: Editor Blocchi. Funzione molto importante, la vedremo in seguito.
    6: Gestisce la connessione tra le mappe. Analizzeremo più tardi nel dettaglio questa funzione
    7: Editor mappa del mondo. Vedremo in seguito

    Ci sono inoltre due pulsanti tra il 4 ed il 5. Il primo serve a tornare al warp precedente (lo vedremo più avanti) mentre il secondo serve a visualizzare gli sprite dei "people" che andiamo a inserire nella mappa.

    Passiamo dunque a lavorare su una mappa vera e propria: Apriamo la ROM (nel mio caso, pokemon ruby) e vedremo che nella colonna a sinistra sono comparse tre scritte:
    CITAZIONE
    "Per Header"
    "Da INI"
    "File mappe"

    Selezioniamo "Per Header". Scopriremo così che si trattano di tre "Cartelle" che si aprono una sotto l'altra. Nel caso specifico, sotto "Per Header" compariranno delle cartelle chiamate con un numero, e che contengono a loro volta delle mappe.
    Le città e i percorsi sono nello “0” per Ruby e nel “3” per Fire Red
    Gli altri numeri sono gli interni delle mappe presenti nelle cartelle sopracitate.
    I numeri 0, 1, 2 di Fire Red sono inutilizzabili (sono le mappe per i servizi multiplayer), quindi non fateci caso.
    Aperta una di queste cartelle noterete che vicino ad ogni mappa ci sono due numeri:
    Il primo è il Bank e il secondo è un numero di riferimento.
    Questi numeri sono molto importanti perché sono la carta dʼintendità delle mappe, e servono per inserirle nel gioco, per creare script di vario genere e per connetterle tra loro (come ad esempio, per entrare in una porta).

    Volendo potete anche usare “da INI”:
    In questo caso ci saranno, al posto dei numeri, i nomi di città e percorsi, e dentro ogni cartella ci sarà la mappa principale con relative case ed edifici. BANK e NUMERO DI RIFERIMENTO restano sempre invariati.


    Muoviamo i primi passi! Una mappa va SEMPRE creata da zero, tuttavia per prendere familiarità con il programma, possiamo cominciare ad aprire una mappa:

    Io ho aperto PETALBURG CITY.
    Come vedete a destra ci sono i TILESET: Sono blocchi di immagini che compongono le mappe. Selezionatene uno (che verrà circondato da un quadrato rosso) e cliccate sulla mappa dove volete metterlo.
    Se confrontate la mia PETALBURG CITY con una normale, noterete che io ho tolto alcuni alberi, inserito una strada di cemento e messo una grotta dietro al Pokemon Center. Da questo piccolo esempio potete comprendere le infinite possibilità offerte da A-Map.

    ATTENZIONE A:
    GLI ERRORI DI MAPPING!

    Usate bene i tileset, alcuni sono davvero ricercati ed è molto difficile trovarli nella colonna di destra! Soprattutto agli inizi è molto facile non notare questi tipi di errori, per evitarli, oltre ad un poʼ di esperienza, ci si può aiutare postando i vostri lavori in forum specializzati.
    Se proprio non trovate il tileset che fa per voi, lo potrete "costruire", come vedremo tra poco.
    Ora concludiamo questa prima lezione con i “movimenti permessi”
    Dei cinque pannelli in alto, il primo serve ad editare la mappa, il secondo per stabilire i movimenti permessi (gli altri li vedremo con calma in seguito).

    Clicchiamo dunque su “Vista movimenti permessi per vedere la mappa sotto un altra prospettiva...
    Ora vedremo per ogni tileset inserito nella mappa dei numeri, che potremo editare (ovvero mettere sulla mappa), esattamente come prima inserivamo i Tileset.

    Vediamo assieme cosa corrispondono i vari numeri (posizionabili e modificabili a piacere, proprio come i tileset, attraverso l'uso della colonna a destra):
    CITAZIONE
    0 = Libertà assoluta di movimento
    1 = Oggetto invalicabile
    4 = Transitabile ad altezza 0 (Ovvero usando Surf e Cascata)
    C = Normale camminata (= Altezza 2)
    D = Ostacolo ad Altezza 2 (Da mettere ai piedi degli alberi)
    10 = Transitabile; Altezza 3 (Ovvero per i ponti dai quali non si può scendere, perché sono ad un altezza superiore. Per Transitare dal livello 3 al livello 2, ovvero quello della normale camminata, dovete metterci in mezzo uno 0; Vedi ad esempio FORTREE CITY)
    5 = Ostacolo ad Altezza 0 (Surf, sarebbe lʼequivalente di D quando camminate)
    3C = Transitabile sia da sopra che da sotto

    Tutti gli altri sono dei “Transitabili” o degli “Ostacoli a determinate altezze, spezzate come al solito dagli “0” che permettono il passaggio da una allʼaltra altezza. Sono abbastanza complessi, l'importante per ora è che vi ricordiate che 4 è lʼacqua, C è la camminata e 1 è lʼinvalicabile.

    Consiglio finale: Se siete in dubbio su come impostare i movimenti permessi su determinate strutture, rocce, alberi, porte, etc, potete cercare nelle mappe del gioco quellʼelemento e da li capire come impostarlo.
    Ricordatevi comunque che sulle porte va messo un bellʼ1.




    Lezione 1-2: Vista Evento
    Continuiamo le nostre lezioni con A-Map, proseguendo con lʼanalizzare i restanti menù a tendina sopra la mappa (Lezioni 1-2 e 1-3).

    Prima però, voglio suggerirvi tre combinazioni di tasti utili mentre create la vostra mappa:
    CITAZIONE
    - Click Tasto Centrale / Rotella:
    Funziona come il secchiello di paint cioè riempie col tile che hai scelto tutti i tile simili accanto a quello cliccato.
    - CTRL + Tasto Centrale / Rotella:
    Simile al comando precedente ma al posto di sostituire solo i tile adiacenti sostituisce tutti i tile uguali a quello cliccato che sono presenti nella mappa.
    - CTRL + Tasto Destro (Trascinare):
    Seleziona più di un tile dalla tavolozza o dalla mappa. Molto utile per riprodurre var edifici o alberi

    Bene, ora passiamo al succo della lezione di oggi: la Vista Evento.
    In questa sezione di editing passerete la maggior parte del vostro tempo. Ecco come si presenta:

    Guardiamo dunque le icone sulla mappa:
    P: Questa rappresenta una persona. Può direttamente essere visualizzato lo sprite in anteprima premendo il bottone con lo sprite di Landon.
    S: Questo serve a collocare uno script che va messo per cartelli o scritte varie (com quella sul pokemon center)
    W: Questo è il Teletrasporto, consiste in un cambiamento di mappe, si mette sulle porte o in casi particolari per teletrasportarsi in un altra mappa
    S: Questo è un generico script calpestabile: si attiva quando ci si passa sopra. Lo vedremo più avanti,.
    F: Questa è la posizione di volo, ovvero il luogo dove atterreremo usando Volo.

    A destra abbiamo un pannello in grado di settare i vari eventi, che cambia a seconda dellʼevento che andremo a scegliere. C'è poi un menù a tendina che permette di scegliere il tipo di "evento" da settare. In basso c'è invece il gestore eventi, che permette di scegliere il numero di eventi da avere a disposizione ed il tipo. Ora analizziamo uno ad uno ogni tipo di evento:

    Posizione di volo:
    Nella posizione di volo è semplice il settaggio: partiamo col dire che le posizioni di volo sono numerate, e dunque se vogliamo inserirne una in una mappa nuova dobbiamo per forza spostarla da una mappa già esistente. Per farlo dobbiamo inserire il Bank mappa e il Mappa, da me rinominato Numero di riferimento, per spostarlo nella mappa si usano le coordinate
    in Posizione (X/Y) tenendo presente che usa il sistema esadecimale, dunque bisogna contare: 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E; F; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 1A; 1B; 1C; 1D; 1E; 1F; etc... Bisogna imparare bene, col tempo ci si fa lʼabitudine ;)

    Cartello:
    Passiamo ora a qualcosa di un pochino più complesso: Cartello
    Selezioniamo “Cartello” dal menù a tendina, e poi selezioniamo il nostro dal numero evento (zero incluso). Posizione (X/Y) si
    basa sullo stesso identico concetto di prima, mettete le coordinate in base a dove si trova il cartello. Livello di
    esecuzione lasciate “sempre”, mentre per “Tipo di cartello” le cose si complicano. Infatti questo script ha una tripla funzione: Cartello, Strumento Nascosto (quelli per il metal detector) e Base Segreta (solo su Ruby). Consiglio vivamente di lasciar stare Base Segreta e di passare alle altre funzioni. Abbiamo infatti 5 tipi di script (ovvero il cartello) e 3 strumenti nascosti. Non mi pare ci siano differenze tra i tre strumenti nascosti, anche se consiglio di non inserirli in un hack, mentre invece facciamo attenzione ai 5 tipi di script:
    Con lo Script potete leggere il cartello semplicemente avvicinandovi al tile su cui è posto DA QUALSIASI DIREZIONE, mentre gli altri applicano delle restrizioni (solo dallʼalto, solo dal basso, etc.)
    Sconosciuto: lasciate sempre 00|00; Nei tempi in cui hackeravo, ero riuscito (in modi che ignoro) ad utilizziare a mio favore questi parametri, che però lo stesso creatore del programma non è riuscito a giustificare, limitandosi ad inserirli.
    Offest Script è la parte più importante: quando impareremo a fare gli script, vi spiegherò bene cosa sono gli offest. Per ora mi limito a dirvi che sono come un “link” nel gioco: il gioco apre lʼoffest che lo porta allo script, che potremo visualizzare tramite “Apri script”.

    Script:
    In Script vediamo i soliti comandi, offest, posizione, con due sconosciuti e le variabili, di cui parlerò più avanti. Passiamo oltre.

    Persone:
    In Persona appunto vediamo gli sprite che gironzolano per la mappa.
    Abbiamo il Numero persona, che deve essere DIVERSO per ogni persona nella mappa, il Numero Sprite, che determina lo sprite (visto che sono più di 150, è consigliabile visualizzare gli sprite per avere un anteprima sulla mappa). Abbiamo poi lʼimmancabile Sconosciuto seguito dalla Posizione ed un secondo Sconosciuto
    Poi cʼè il menù tendina Tipo movimento. Movimento copiatelo da altre persone, sinceramente non ricordo il suo effetto. Lasciate gli Sconosciuto come sono, inserite lʼoffest dello script. Se volete creare un allenatore, selezionate Allenatore e il raggio di vista, più avanti vedremo come fare lo script per gli allenatori.

    Teletrasporto:
    Passiamo ora allʼultimo tipo di evento: il Teletrasporto
    Il teletrasporto consiste in unʼevento che ci manda in un altra mappa, sia in entrata, che in uscita.
    Saltando Posizione e Sconosciuto, andiamo ora a verificare i tre elementi più importanti: attraverso Bank e Numero di riferimento scegliamo la mappa di destinazione. Ma dove arriveremo? Semplice, su un altro teletrasporto! Ma se ci sono più teletrasporti in una sola mappa?
    Si decide in che teletrasporto "apparire" grazie al N. Teletrasporto, che DEVE essere diverso per ogni teletrasporto, ed inoltre deve corrispondere con il relativo teletrasporto di destinazione. Dunque se io volessi creare un teletrasporto che connette la porta di una casa con una porta di una casa, posiziono un teletrasporto sulla porta della casa e due “sui tappetino rosso” dentro la casa o uno (se a monouscita) e darò a tutti lo stesso numero teletrasporto!

    Bene, anche questa lezione è giunta alla fine, consiglio a tutti di non gettarsi subito su un hack ma di sperimentare. Nelle prossime due lezioni vedremo i restanti menù a tendina e le altre funzioni di A-Map.




    Lezione 1-3: Le altre elementari funzioni di A-Map
    Continuiamo lʼanalisi dei pannelli passando a Vista Pokemon Selvatici.

    Come possiamo notare questo menù è allʼapparenza molto semplice: lo è anche nei fatti. Dovremo infatti scegliere un pokemon con relativo livello minimo e massimo, e la frequenza con cui compare un selvatico (lo standard è 20 = 7%).
    Inutile dire che se metteremo un Machop e due Numel, troveremo più Numel che Machop.
    Cliccando su espandi possiamo aggiungere un pokemon alla lista con relativo habitat (Acqua, Erba Alta, Alberi e Pesca).
    Nel menù “Specie” scegliamo quali pokemon settare, se quelli per lʼerba alta, quelli per lʼacqua, etc.

    Passiamo ora allʼultimo pannello: Il Vista header
    Questo è piuttosto importante perché contiene diverse informazioni sulla mappa, quali anche il suo nome:

    Vediamo dunque in cima il nome, che possiamo cambiare o selezionandone uno oppure riscrivendolo. Poi premendo “Cambia Nome”.
    Con Mostra nome allʼentrata scegliamo se deve mostrare il nome in cima a sinistra e con quale stile (Grande città, percorso, etc)
    Sotto abbiamo Musica, ovvero il motivetto che si dovrà sentire nella mappa, impostabile sia selezionandolo che mettendo il numero della musica, Grotta, che serve a decidere se deve essere buio e se si può usare Flash, più delle altre robe, il Tempo, ovvero il tempo climatico: pioggia, neve, vulcano, platinette, etc.
    Il tipo di mappa, ed infine il tipo battaglia, nei percorsi lasciate causale, se cercate qualcosa di più ricercato, date sfogo alla fantasia ;)
    Abbiamo poi gli script mappa, piuttosto complicati, per ora lasciateli li dove sono.
    Le Dimensioni mappa che deciderete a vostro piacere e i tileset usati. Il primo dei due numeri determina una serie di tileset, che si andrà ad affiancare alla seconda. Di solito per gli esterni (città, percorsi, tutto) si usa il lo “0” nel Tileset 1 e nel Tileset 2 i tileset particolari di quella città, come strutture o edifici particolari. Andiamo ora ad analizzare lʼultimo pezzo elementare di A-Map: LʼEditor Blocchi.
    Si apre con il pezzo di puzzle viola ed ecco come si presenta:

    Come vedete abbiamo 3 sezioni:
    Partendo da sinistra, la prima sono i nostri tileset belli che pronti, la seconda sono i VERI tileset con lʼeditor e nella terza il comportamento dei tile.
    Come funziona lʼeditor? Semplice: non trovate un tileset o ne avete bisogno uno particolare? Ecco come procedere: aprite lʼeditor blocchi e selezionate nella prima sezione un quadrato blu (quindi vuoto).
    Facciamo finta che io abbia bisogno di un tile dellʼangolo in alto a sinistra di una roccia con dietro la radice destra di un albero:

    Seleziono la palette della roccia e clicchiamo sulla roccia nei VERI TILESET.
    In alto nel piccolo quadratino abbiamo lʼelemento selezionato, con cui comporremo il tileset sopra.
    Ora selezioniamo le palette dellʼalbero e componiamolo sotto, tenendo presente che i VERI TILE possono essere girati specularmente sia in verticale che in orizzontale con i pulsanti FlipX e FlipY. Infine facciamo salva. I Byte di comportamento stabiliscono alcuni comportamenti di alcuni tile, come quelli che, quando ci cammini sopra, vengono saltati, o ti spingono via, o quel che volete.
    Spiegarlo è difficile, ma provate e capirete in fretta le meccaniche (:




    Lezione 2-1: Iniziare un Hack! La trama
    Per le vostre prime Hack (ma anche per le ultime), il mio consiglio è di fare UNA SOLA REGIONE. Farne due è difficile, sia sotto il profilo tecnico, sia di trama, sia di tempo necessario a fare tutto ciò. Due regioni significano doppio lavoro, e nella programmazione la sintesi del lavoro è fondamentale, per evitare di dare alla luce un gioco tre o quattro anni dopo l’inizio dello sviluppo. Ricordatevi inoltre che difficilmente la vostra prima Hack potrà mai vedere la luce, sarà un terreno di prova, e per questo si amplierà man mano che scoprirete cose nuove, finché non cambierà del tutto aspetto. Ecco perché dovete partire con qualcosa di non troppo complicato, le cose le aggiungerete pian piano.

    La prime scelte che dovrete fare saranno queste:

    ~ Quale base usare (Ruby/FireRed/Emerald)
    ~ Fakemon o no? (Vi consiglio di no, ci vogliono tempo e abilità, inoltre non è più una cosa originale ed il rapporto che i giocatori hanno con i Pokémon è insuperabile)
    ~ Quali Pokémon ci saranno? Quali no?
    ~ Seguirò una linea tradizionale oppure no?
    Quest’ultima domanda è davvero delicata. Volete un allenatore che viaggia nella regione, sconfigge un team malvagio e conquista medaglie e lega, oppure qualcosa di completamente diverso? Dipende da quanto siete fantasiosi…

    Detto questo, scrivete una trama. Per esempio, io scrivo questa qui:
    CITAZIONE
    “Sei un ragazzo che alleva Pokémon. Un signore è conosciuto per avere un tempo, salvato la tua città da una carestia che la colpì. Si tratta di un paesinoai è in corso una guerra per accaparrarsi i giacimenti minerari tra *nome regione e *nome regione. L’anziano uomo sconfisse la Lega Pokémon e divenne ricchissimo. Ritornato al paese, distribuì il denaro, elesse un sindaco che lo gestisse, e se ne andò. Con gli anni la situazione non è cambiata, i pochi viveri che arrivano costano tantissimo, e le zone intorno al paese sono costantemente bombardate. Il sindaco, oramai vecchio, decide di convocarti e regalarti un Pokémon, infine con i soldi rimanenti compra un cannone da contraerea, in modo da permetterti una fuga. Il tuo obiettivo è conquistare il più velocemente possibile la Lega ed il denaro, dal momento che l’arrivo di quel cannone ha comportato un istantaneo inasprimento della guerra.
    Durante il viaggio, scoprirai la corruzione che è arrivata fino ad i piani alti del governo, dove sono infiltrati migliaia di personaggi legati ad una compagnia ricchissima che gestisce le miniere e che tiene viva la guerra. “

    Come potete vedere, ho costruito un plot assolutamente originale, ma che tiene fede alle classiche linee di gioco: abbiamo un team malvagio e le palestre, inoltre crea infinite possibilità, in un momento in cui un ragazzo va in contatto con un mondo tutto nuovo e ricco.
    Leggete molto, ispiratevi a vere situazioni, io mi sono ispirato alla guerra che c’è tra il nord e sud sudan per la mia storia, l’ho scritta in 10 minuti scarsi… Significa che in qualche ora, costruirete tutti i passaggi e gli eventi che caratterizzeranno il gioco, che poi verranno conditi con altre piccole cose e, soprattutto, si modificheranno con l’apprendimento di nuovi script che si potranno applicare!



    Lezione 2-2: La regia: pianificare gli eventi

    Come ho detto in precedenza, trama e regia sono molto importanti. Come abbiamo visto nella lezione precedente, dovete iniziare immaginando un contesto storico/politico, il "clima" in cui la storia è ambientata. Per farvi un esempio: Pokèmon tratta le avventure di Satoshi giusto? Però il contesto è "mondo abitato da pokèmon", la storia dei personaggi è venuta dopo.
    Ecco perché dopo aver creato un contesto politico, sociale, economico, storico, dovete adattare di conseguenza i tile, ed infine creare la storia del personaggio, che si rapporta con il mondo che avete creato. Questo processo è lungo, specie perché le fonti di ispirazione sono ovunque ed è difficile non risultare banali. Altro problema sono i tile: se si vuole cambiare contesto storico, è difficile trovarli adatti alle proprie esigenze.
    Il personaggio deve avere un obbiettivo, un intralcio, e deve immischiarsi in affari esterni al suo obbiettivo nel tentativo di eliminare l'intralcio. Come per esempio, "scoprire che la associazione che ha incontrato per caso durante il suo viaggio, e dalla quale deve recuperare la chiave necessaria per accendere il generatore elettrico e salire sulla vetta del monte in funivia, è in realtà collegata con una grossa azienda farmaceutica che ha infiltrati nel governo, e sgominarli tutti".
    Ora dovete pianificare gli eventi. Per farlo dovete armarvi di carta e penna, e disegnare le mappe su notebook inserendo gli eventi in modo preciso. Se trovate degli amici con cui farlo, potete riunirvi e discutere assieme, risulterebbe divertente. Ricordate che bisogna rendere sempre tutto il più spettacolare possibile, attraverso prima di tutto ai tile, poi ai personaggi: Le loro frasi devono rispecchiare una caratterizzazione forte e distintiva, e così le loro reazioni, come salti e corse, agitazione o profonda calma... ricordate Red? Lui con quel "..." in pokemon oro, diceva molto. Ed anche "Lori", la ragazza che voleva intervistarci dopo la vittoria su Lance, che corre impaziente a destra e a sinistra per l'arena dello scontro (che allora erano 3 tile scrausi, ma vabbè xD) con quella corsa dava un idea grossolana del suo personaggio. Capite?
    Con script sempre più complessi riuscirete anche a variare l'azione, ricordatevi che il gioco deve catturarvi e deve spingervi a "scoprire di più" fino a finirlo. Non deve essere banale o noioso, deve dare colpi di scena, tutti diversi. Provate a guardare tanti film, anime, telefilm da cui prendere spunto, e quando vedete qualcosa che vi lascia a bocca aperta, chiedetevi come portare quella reazione sul vostro gioco senza copiare palesemente l'opera originale.
    Con la pratica farete esperienza, dalla prossima lezione, torniamo a parlare dei tools.




    Lezione 3-1: Prepariamoci a scriptare!
    Salve ragazzi! Nella lezione di oggi incominciamo a parlare di scripting!
    Prima di cominciare, scaricate il pacchetto che vi servirà oggi: Click Here.
    Siccome lo scripting è un argomento potenzialmente infinito, questa terza lezione verrà sviluppata in concomitanza con la quarta, che inizierò in seguito. Mi raccomando, controlla sempre gli aggiornamenti!

    Scompattata la cartella che vi ho preparato, aprite la versione di A-Map con la quale vi trovate meglio. Fatto ciò, andate nel menù Impostazioni ->Scegli Editor di Script. Selezionate a questo punto XSE, il compilatore per eccellenza. Dopo aver fatto ciò, potrete inserire script compilati con XSE nelle mappe di A-Map.
    Vi spiegherò il procedimento.
    Prima di tutto leggete l'inizio di questo mio vecchissimo tutorial, nel quale spiego brevemente come utilizzare XSE e FSF: Click.
    Non preoccupatevi della parte di scripting vero e proprio, di quella parlerò io qui in modo più preciso.
    Vi voglio invece spiegare come funziona XSE, lo trovo di vitale importanza: XSE è un compilatore, ciò significa che lui interpreta i nostri comandi e li scrive nella memoria del gioco in un modo comprensibile al gioco stesso.
    Il primo comando che si inserisce nel compilatore è:
    CITAZIONE
    #dynamic 0xXXXXXX

    Questo comando serve ad indicare al compilatore un offset dinamico, che possiamo ottenere da FSF. (Da inserire al posto delle X). Immaginate la Rom come un enorme archivio di cassetti: ogni cassetto contiene un singolo comando, come un messaggio, un movimento. Ad ogni cassetto è assegnato un offset, una specie di indirizzo con il quale la rom lo riconosce. Infine ci sono cassetti contenenti le coordnate degli altri cassetti, e l'offset di questi è quello che andremo ad utilizzare.
    Con il comando dynamic, il compilatore troverà autonomamente dei cassetti liberi nella rom e ci metterà dentro i nostri comandi. Questi non sono concetti semplici, andando avanti nel tuo apprendimento saranno più chiari.
    Parlando in termini pratici, una volta che avremo scritto il nostro script, potremo compilarlo. XSE scriverà quindi lo script nella rom, e ci darà un offset da inserire in a-map nella sezione eventi, una volta selezionato un cartello o un personaggio. Da quel momento, se avrete fatto tutto giusto, lo script si avvierà.





    Lezione 3-2: Il primo script
    Analizziamo ora uno script scritto con XSE.
    CITAZIONE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @sms 0x6
    release
    end

    #org @sms
    = La carica rivela l'uomo.nQuesta frase è attribuita ad unoldei Sette Savi.

    Questo script, se assegnato ad una persona, le farà dire: "La carica rivela l'uomo. Questa frase è attribuita ad uno dei Sette Savi."
    Analizziamo ogni riga.
    Nella prima abbiamo il nostro offset dinamico spiegato prima
    Nella seconda abbiamo invece l'offset che dovremo inserire in a-map. Come vedete dopo org abbiamo "@start". Il compilatore, vedendo la @, capisce che deve sostituirla con un offset. Il nome "start"lo metto io per comodità, potete mettere quello che volete. L'importante è che non sia uguale ad altri già inseriti, dopo vedremo perché.
    I comandi "Lock" e "Release" servono a bloccare il gioco mentre lo script è in esecuzione, e si mettono sempre subito dopo il primo #org l'uno, e prima dell'"end" l'altro
    "Faceplayer" è un comando che si utilizza solo nelle persone, e fa si che il personaggio si giri verso il giocatore.
    Ecco finalmente il comando "msgbox". Come potete vedere, a questo comando è stato affidato un offset (@sms), mentre invece 0x6 è il tipo di messaggio. Gli altri tipi di messaggio sono:
    CITAZIONE
    0x2: è un messaggio normale, tuttavia comprende al suo interno anche il comando faceplayer, e dunque se si utilizza questo tipo di messaggio si può omettere "faceplayer". Lo sconsiglio.
    0x3: Si tratta di un tipo di messaggio usato solo in FireRed/LeafGreen, per i cartelli, poiché la textbox cambia
    0x4: Si tratta di un normale messaggio, tuttavia dopo il comando, nella riga successiva, va aggiunto il comando "closeonkeypress". Questo messaggio rimarrà sullo schermo fino alla pressione di un tasto.
    0x5: Questo messaggio è una domanda, le cui uniche risposte possono essere "si" o "no". Lo vedremo più avanti
    0x6: Questo è il messaggio normale, strausato. Limitatevi ad usare questo e lo 0x5 se necessario.

    Come avrete notato, il comando viene ripreso. Dopo "end" si inserisce infatti il comando #org @sms. Questo comando dice al compilatore che lì vi sono le informazioni riguardo al comando scritto nella lista di comandi iniziali, che funziona come un indice. Qui dovremo scrivere il nostro testo. Per farlo, dovremo utilizzare l'adattatore di testo (ctrl+t/ Strumenti ->Adattatore di testo). Scrivete li il vostro testo ed inseritelo. Questo adattatore inserirà in automatico i comandi "/n; /p; /l" che gli dicono quando andare a capo, etc. Potete farlo anche manualmente come facevo io all'inizio, ma sinceramente non mi ricordo più cosa differenzia i tre comandi, inoltre l'adattatore di testo è molto più comodo, e non dovrete ridurvi a contare ogni lettera.
    "End" Comando che determina la chiusura dell"indice e la fine dello script.
    Per farvi meglio capire come funziona il passaggio "Pointer --> Offset" vi mostro lo script dopo che XSE lo compila:
    CITAZIONE
    '---------------
    #org 0x8001B7
    lock
    faceplayer
    msgbox 0x88001C4 MSG_NORMAL '"La carica rivela l'uomo.nQuesta f..."
    release
    end


    '---------
    ' Strings
    '---------
    #org 0x8001C4
    = La carica rivela l'uomo.nQuesta frase è attribuita ad unoldei Sette Savi.

    In a-Map dovremo assegnare all'evento designato (in questo caso una persona) l'offset: 8001B7






    Lezione 3-3 : GivePokemon. GiveItems
    Eccoci ad una nuova parte! Andremo ora a vedere uno script relativamente semplice, composto da un solo comando da inserire nell'indice del compilatore (per farla breve, nella stessa lista di comandi dove avete inserito il msgbox nella lezione precedente!)
    Questo script aggiungerà alla vostra squadra/al vostro zaino un pokemon/oggetto. Prima però, scaricate questo pacchetto piccolissimo: Click
    Eccoli qui:

    CITAZIONE
    givepokemon

    CITAZIONE
    giveitem

    Ed ecco due script:

    CITAZIONE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @sms 0x6
    givepokemon 0x1 0x5 0x0 0x0 0x0 0x0
    release
    end

    #org @sms
    = Conserva con cura questonBulbasaur!

    In questo script vediamo il comando givepokemon completo.
    Nel pacchetto che vi ho fatto scaricare troverete due elenchi, dove sono scritti tutti i pokemon e tutti gli script con i rispettivi valori esadecimali.
    Ora andiamo a vedere a cosa servono. Dopo aver scritto il comando "givepokemon", dovrete mettere sei valori:
    CITAZIONE
    givepokemon 0xNUMERO POKEMON (ESADECIMALE) 0xLIVELLO POKEMON (ESADECIMALE) 0xITEM CHE IL POKEMON TIENE IN MANO (ESADECIMALE) 0x0 0x0 0x0

    Ignorate gli ultimi tre valori. Credo che i primi tre invece siano chiari. il numero degli item e dei pokemon esadecimale lo trovate nel pacchetto come detto prima, mentre il numero livello lo dovrete trovare usando la calcolatrice di XSE, in alto a destra. Selezionate "dec" e scrivete il livello normale. Premete poi su "Hex" per avere il corrispettivo esadecimale. Per essere chiari, vi spiegherò brevemente come funziona l'esadecimale:
    noi normalmente contiamo così: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12... ed ogni 9 numeri (cioè al decimo) aumentiamo la decina. Nell'esadecimale invece aumentiamo la decina ogni 15 numeri (cioè al sedicesimo), e dunque sarà: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11...
    Dunque nel mio caso, riceveremo un Bulbasaur al 5, con testo annesso. Se avrete la squadra al completo, il pokemon andrà direttamente al pc.

    CITAZIONE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @sms 0x6
    giveitem 0x1 0x1 0x0
    release
    end

    #org @sms
    = Cavolo! Mio fratello ti ha dato ilnsuo Bulbasaur! Devi proprio essrelun grande allenatore! Ecco, tieni,lte la meriti!

    Il GiveItem è più semplice da usare. Dovrete solo mettere il numero dello strumento e la quantità (sempre esadecimale). Nel tipo di messaggio, l'ultimo valore, mettete 0. Verrà fuori il vostro testo, più l'automatico "Red ha ottenuto Master Ball" diverso a seconda della lingua.
    ATTENZIONE: Questo script è usato anche per gli oggetti per terra. Quando volete mettere qualcosa per terra, create uno sprite giocatore, e scegliete come "sprite" quello della pokeball (n 92 in fire red, non ricordo in ruby). Create uno script così:
    CITAZIONE
    #dynamic 0x800000
    #org @start
    lock
    giveitem 0x1 0x1 0x1
    release
    end

    Se notate, ho cambiato il numero del messaggio. Questo farà scomparire lo sprite dopo averlo cliccato una volta.



    Infine ricordo il giveegg, grazie al quale potete farvi dare le uova. C'è solo il valore del pokemon da settare, non sto nemmeno a spiegarvelo :)



    Lezione 3-4: Le flag

    Dopo una lunga assenza (sorry D:), aggiorno il mio tutorial. In questa quarta parte della lezione tre, andremo a spiegare uno dei fondamentali dello scripting: le flag.
    Questi sono i comandi che servono per gestire le flag:
    CITAZIONE
    setflag 0xNumeroFlag Permette di settare una flag.
    clearflag 0xNumeroFlag Permette di togliere una flag.
    checkflag 0xNumeroFlag Permette di verificare se la flag è settata oppure no.

    Flag in inglese significa bandiera. Funziona infatti come una piccola bandierina. Quando voi settate una flag, innalzate la bandiera. Quando voi togliete la flag, la tirate giù. Con il comando checkflag, voi chiedete alla ROM di verificare se la bandiera è innalzata oppure no, e di agire in modo diverso a seconda della situazione.
    Facciamo un esempio pratico: immaginate di voler creare un evento in cui un uomo vi regala un pokèmon. Per farlo, basterà fare un givepokèmon! Tuttavia avrete bisogno di far si che quella persona, dopo avervi dato il pokèmon, cambi script: altrimenti vi regalerà pokèmon all'infinito. Per fare ciò, vi basterà usare le flag. Vediamo lo script:
    CITAZIONE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    checkflag 0x2000
    if 0x1 goto @flagattiva
    msgbox @sms 0x6
    givepokemon 0x1 0x5 0x0 0x0 0x0 0x0
    setflag 0x2000
    release
    end

    #org @flagattiva
    msgbox @msg 0x6
    release
    end

    #org @sms
    = Conserva con cura questo\nbulbasaur!

    #org @msg
    = Come sta Bulbasaur?

    Come vedete, subito dopo il faceplayer, chiedo alla ROM di verificare se la flag numero 2000 è attiva. il comando "if 0x1 goto @flagattiva" accompagna il checkflag. Sostanzialmente dico questo alla ROM: "Controlla (checkflag) la flag numero 2000 (0x2000), se (if) è attiva (0x1) vai (goto) al pointer chiamato "flagattiva" (@flagattiva)."

    Se la flag non è attiva, lo script procederà in modo regolare: si attiverà il msgbox e il givepokèmon, dopodichè si attiverà la flag numero 2000. La seconda volta che parlerete con questa persona, lo script salterà tutta la prima parte, e andrà invece a "#org @flagattiva", dove lo script continua.
    Provate voi stessi ad inserire lo script nella rom e verificatene il funzionamento!
    Ricordate di usare sempre numeri molto alti, poiché le flag dalla (mi sembra) 1500 in giù sono già utilizzate dal gioco. Per precauzione, partite dalla flag numero 2000, e andate in ordine crescente. Se siete un po' sbadati, segnatevi le flag che avete già usato, così da evitare errori negli script (se, infatti, con uno script avete attivato una flag, questa rimarrà attiva fino a che non verrà disattivata con un clearflag. Grazie a questo sistema, potete far si che certi eventi nel gioco non accadano prima di altri. Spero che il concetto sia chiaro (:
    Per farvi un esempio, guardate il video della lezione 3-3. Il ragazzo vi regala una master ball dopo che l'uomo vi ha regalato un bulbasaur. Se noi diamo all'uomo lo script che abbiamo fatto assieme in quest'ultima lezione, possiamo inserire anche un checkflag 0x2000 nello script del ragazzo, così che non vi regali la masterball sino a quando non vi sarete fatti dare il bulbasaur dall'uomo.

    Concludo inserendo una lista di flag "speciali" che attivano particolari eventi nel gioco
    Per Fire Red e Leaf Green
    0x820 - Consegna 1a medaglia
    0x821 - Consegna 2a medaglia
    0x822 - Consegna 3a medaglia
    0x823 - Consegna 4a medaglia
    0x824 - Consegna 5a medaglia
    0x825 - Consegna 6a medaglia
    0x826 - Consegna 7a medaglia
    0x827 - Consegna 8a medaglia
    0x828 - Attiva Pokemon Menu
    0x829 - Attiva Pokedex Menu
    0x82F - Attiva Scarpe da Corsa

    Per Ruby e Shappire
    0x800 - Attiva Pokemon Menu
    0x801 - Attiva Pokedex Menu
    0x802 - Attiva Pokenav Menu
    0x807 - Consegna 1a medaglia
    0x808 - Consegna 2a medaglia
    0x809 - Consegna 3a medaglia
    0x80A - Consegna 4a medaglia
    0x80B - Consegna 5a medaglia
    0x80C - Consegna 6a medaglia
    0x80D - Consegna 7a medaglia
    0x80E - Consegna 8a medaglia
    0x860 - Attiva Scarpe da Corsa


    IN AGGIORNAMENTO..

    Edited by Dracõ - 20/8/2013, 16:25
     
    .
  2. ~Rago
        Like  
     
    .

    User deleted


    Good.
     
    .
  3. Plat
        Like  
     
    .

    User deleted


    Metto importante ;)!
     
    .
  4.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    Aggiunta lezione 1-2
     
    .
  5.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    Ho fatto la 1-3, appena posso la posto
     
    .
  6.     Like  
     
    .
    Avatar

    Saiyan

    Group
    Member
    Posts
    2,086
    Location
    Pianeta Vegeta

    Status
    Anonymous
    Bellissima Guida,salvata nei preferiti,comunque se puoi,più in là potresti fare delle guide su come modificare la storia,cioè per esempio,come pokemon crono che all'inizio fai un sogno e la storia è diversa.
    E poi se puoi anche come usare A-Text (anche se è facile,ma qualcuno potrebbe non saperlo usare) e anche tutti gli altri programmi importanti
    PS:Cambia il nome della discussione,al posto di "Draco's Tutorial Parte Uno" dovresti scrivere "Draco's Tutorial: Come creare una Hack Rom"
    Non vedo l'ora che escano le prossime guide ^_^
     
    .
  7.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    CITAZIONE (Antonio Castelluccio @ 9/5/2012, 22:18) 
    Bellissima Guida,salvata nei preferiti,comunque se puoi,più in là potresti fare delle guide su come modificare la storia,cioè per esempio,come pokemon crono che all'inizio fai un sogno e la storia è diversa.
    E poi se puoi anche come usare A-Text (anche se è facile,ma qualcuno potrebbe non saperlo usare) e anche tutti gli altri programmi importanti
    PS:Cambia il nome della discussione,al posto di "Draco's Tutorial Parte Uno" dovresti scrivere "Draco's Tutorial: Come creare una Hack Rom"
    Non vedo l'ora che escano le prossime guide ^_^

    Grazie mille
    Vedremo tutto con calma, ma A-Text lo facciamo in fretta perché, a parte per il dialogo dell'inizio e alcuni termini specifici, non serve a niente a mio parere ;)
     
    .
  8.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    Aggiunta lezione 3
     
    .
  9.     Like  
     
    .
    Avatar

    Saiyan

    Group
    Member
    Posts
    2,086
    Location
    Pianeta Vegeta

    Status
    Anonymous
    Quando aggiungi la quarta?
     
    .
  10.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    In sto periodo sono molto occupato con la scuola, non l'ho ancora scritta. Direi che posso trovare il tempo appena finita la scuola, quindi verso il 10-11 giugno, mi spiace ):
     
    .
  11.     Like  
     
    .
    Avatar

    Advanced Member

    Group
    students«
    Posts
    4,983
    Location
    Roma

    Status
    Offline
    molto bene proprio ciò che cercavo, e visto che in un anno ho scordato quelle poche cose che sapevo sulle hack rom mi tocca ricominciare da zero
     
    .
  12.     Like  
     
    .
    Avatar

    Saiyan

    Group
    Member
    Posts
    2,086
    Location
    Pianeta Vegeta

    Status
    Anonymous
    Draco mi faresti un favore per domani che è il mio compleanno di fare la quarta parte visto che hai anche detto che verso il 10-11 Giugno potevi mettela :)
     
    .
  13.     Like  
     
    .
    Avatar

    Senior Member

    Group
    admin♣
    Posts
    11,194

    Status
    Anonymous
    Ho fatto già la lezione due, vai a guardare ;)
     
    .
  14. ~Anbu
        Like  
     
    .

    User deleted


    Ho accorpato tutte le lezioni in un unico topic, per mettere in ordine le discussioni di questa sezione.
    Draco, se dovessi creare altre lezioni, modifica il primo post, grazie. ;D

    Ah, ho importantizzato!
     
    .
  15. brok7
        Like  
     
    .

    User deleted


    Aiuto!
    ma la storia deve essere per forza legata a pokemon rubino o posso cambiare tutto?
    cioè posso togliere palestre e fare si che il mio obbiettivo sia scalare un monte enorme pieno di pokemon (un esmpio assurdo)?
     
    .
47 replies since 25/4/2012, 20:34   13020 views
  Share  
.