Aula di ±Fune± - Scripting GBA

« Older   Newer »
 
  Share  
.
  1. Volcanion
        Top   Dislike
     
    .

    User deleted


    Benvenuta, ±Fune±, nella tua aula di Scripting GBA!

    Allora, in questo "corso" impareremo principalmente lo scripting ma non l'ASM poiché se vorrai preferirei usare un'aula a parte per distinguere le due.

    Cos'è uno script?
    In termini "hack rom-iani" è essenzialmente un evento che si verifica all'interno di un gioco.

    Dimmi più o meno quali sono le tue competenze nel campo e cosa ti piacerebbe fare, poi inizieremo :)
     
    Top
    .
  2.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    Non mi ricordo quasi niente, solo magari riesco a modificare script semplici con guide ma da solo non so fare niente
     
    Top
    .
  3. Volcanion
        Top   Dislike
     
    .

    User deleted


    Benissimo, partiamo subito!

    Il necessario per le lezioni di scripting sono:
    - Un emulatore come VBA
    - Una ROM di Pokemon FRLG o RSE, è indifferente se non per un paio di comandi
    - XSE
    - Advance Map

    Recuperato tutto il materiale, iniziamo con lo scripting!
    Apri XSE e inserisci la ROM, con File--->Apri.

    Poi creiamo un semplice evento:

    CODICE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @msg 0x6
    release
    end

    #org @msg
    = Mi piacciono i treni


    Analizziamo dunque questo script:

    #dynamic 0x800000 = Serve per indicare un offset dinamico nel quale sta lo script
    #org @start = Serve per indicare una "zona" dello script, @start, il quale è un pointer che serve anche per reindirizzare a una parte dello script.
    lock = Blocca il personaggio in modo che non si possa muovere in giro o usare il menù
    faceplayer = Serve per far girare la persona alla quale stiamo parlando verso il giocatore
    msgbox @pointer 0x? = Il msgbox è essenzialmente una casella di testo che compare sullo schermo, vediamone i diversi tipi:
    msgbox @pointer 0x6 = Una normale textbox, la più utilizzata
    msgbox @pointer 0x5 = E' la textbox che vi chiederà sì o no, che vedremo poi come utilizzare
    msgbox @pointer 0x4 = E' un messaggio che rimane sullo schermo finchè non ci sarà un closeonkeypress o finchè non cambieremo mappa
    msgbox @pointer 0x3 = Non cambia praticamente nulla tra il primo e questo, ma alcuni lo usano per i cartelli
    msgbox @pointer 0x2 = Uno 0x6 che non necessita lock, faceplayer e release, molto comodo se non si crea uno script elaborato!

    Release = "Rilascia" il giocatore, è l'opzione opposta al lock
    End = Indica la fine dello script, ma dovremo poi scrivere ciò che è legato ai vari pointer!

    #org @msg = Altro pointer che indica che questa è la zona in cui va il messaggio in cui c'era scritto appunto @msg
    = Mi piacciono i treni = Per indicare cosa far dire in un messaggio basterà mettere un uguale e scrivere ciò che vogliamo far apparire sullo schermo, stando attenti a non superare i 34 caratteri inclusi gli spazi, se siamo pigri possiamo però utilizzare l'adattatore di testo di XSE (Strumenti-->Adattatore di testo).

    Creato lo script, clicchiamo sulle due rotelline e ci verrà fuori una roba di questo tipo:
    eXtreme Script Editor v1.1.1
    -------------------------------------
    DATA
    -------------------------------------
    Apertura output: (FILE)...
    Elaborazione script di input...
    1 - #DYNAMIC
    > lDynamicStart = 0x800000
    2 - #ORG
    > lNewOffset = 0x800000
    3 - (6A) - LOCK [+1]
    4 - (5A) - FACEPLAYER [+1]
    5 - (0F) - MSGBOX (native) [+8]
    > pText = 0x880000D
    > bType = 0x6
    6 - (6C) - RELEASE [+1]
    7 - (02) - END [+1]
    9 - #ORG
    > lNewOffset = 0x80000D
    10 - RAW TEXT [+21]
    > sText = "Mi piacciono i treni"
    -------------------------------------
    DYNAMIC_OFFSET 1
    > sLabel = @start
    > lOffset = 0x800000
    DYNAMIC_OFFSET 2
    > sLabel = @msg
    > lOffset = 0x80000D
    -------------------------------------
    Pulizia...
    Chiusura output...
    Elaborazione input terminata in 0,043 secondi.

    Ma concentriamoci sulla parte
    CODICE
    DYNAMIC_OFFSET 1
    > sLabel = @start
    > lOffset = 0x800000
    DYNAMIC_OFFSET 2
    > sLabel = @msg
    > lOffset = 0x80000D

    Il primo offset dinamico è quello dello script principale, che abbiamo chiamato @start e che corrisponde all'offset 0x800000
    Invece il secondo all'offset 0x80000D, ma PERCHE' FINISCE CON UNA D e non è nell'offset 0x800001 ?
    Semplicemente se guardi qua:
    CODICE
    3 - (6A) - LOCK [+1]
    4 - (5A) - FACEPLAYER [+1]
    5 - (0F) - MSGBOX (native) [+8]
    > pText = 0x880000D
    > bType = 0x6
    6 - (6C) - RELEASE [+1]
    7 - (02) - END [+1]

    Noti che ci sono dei numeri: la loro somma fa DODICI, e indovina in esadecimale come si chiama? Si chiama C!
    E se 12 è C, 13 ovvero IL PRIMO OFFSET DISPONIBILE è D se ragioni perchè se 12 è C e sono occupati gli offeset da 0x800000 a 0x80000C va perforza sul 13 ovvero D in HEX!
    Colgo l'occasione per dirti che anche su XSE, sulla destra, c'è un convertitore da decimale (i numeri che usiamo comunemente) a HEX.

    Prova a esercitarti su questo, poi ti dico come inserire gli script su A-Map nel gioco e ovviamente altri comandi, partiamo dalle basi che in realtà tanto basi non sono!
     
    Top
    .
  4.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    Fatto, mi sono esercitato su quello che mi hai detto (calcolo esadecimali, prove con questo script)
     
    Top
    .
  5. Volcanion
        Top   Dislike
     
    .

    User deleted


    Bene allora procediamo con la seconda lezione: le FLAG.
    Cosa sono le flag? Sono essenzialmente degli "interruttori" che indicano quando un evento è avvenuto o meno.
    I comandi che le riguardano sono:

    Checkflag 0x? = Controlla se una flag è attiva o meno
    If 0x1 goto @pointer = Non serve solo per le flag, ma in questo caso controlla se la flag corrisponde ad attiva o non.
    Setflag 0x? = "Setta" la flag come attiva
    Clearflag 0x? = "Setta" la flag come non attiva, è poco usato.

    Vediamo un esempio:
    CODICE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    checkflag 0x500
    if 0x1 goto @attiva
    msgbox @sms 0x6
    setflag 0x500
    release
    end

    #org @attiva
    msgbox @msg 0x6

    #org @sms
    = ODIO I TRENI

    #org @msg
    = ANZI LI AMO


    Se tutto va bene lo script sarà così:
    i85nYq5
    Prima, essendo la flag 500 non settata, dirà la frase di @sms e setterà la flag.
    G1MLx4a
    Poi si azionerà di nuovo il checkflag, ed essendo ora la flag attiva repointerà ad @attiva nel quale c'è il msgbox di @msg.


    EH MA CUSA L'E' CHE BISOGNA METTERE DOPO CHECKFLAG? 0x? EH?
    E' essenzialmente l' "ID" della flag che noi vogliamo controllare.


    Per oggi è tutto, prova a fare qualcosina con le flag ;)

    Prossima lezione: approfondimenti e cose PR0!
     
    Top
    .
  6.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    capito professoressa Volca
    possiamo andare avanti!!!!!!!!
     
    Top
    .
  7. Paolo Bianchi 17
        Top   Dislike
     
    .

    User deleted


    Scusa Volca, ci tenevo a farti notare che hai dimenticato due comandi nello Script di esempio, dopo il messaggio della Flag. Lo Script corretto è questo:

    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    checkflag 0x500
    if 0x1 goto @attiva
    msgbox @sms 0x6
    setflag 0x500
    release
    end

    #org @attiva
    msgbox @msg 0x6
    release
    end


    #org @sms
    = ODIO I TRENI

    #org @msg
    = ANZI LI AMO

    - DragonType
     
    Top
    .
  8.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    VOLCAAAA
     
    Top
    .
  9. Volcanion
        Top   Dislike
     
    .

    User deleted


    Rieccomi dopo oltre un mese.

    Oggi ti insegno due cose: prima i SOLDIH e poi un modo per semplificarti la vita.

    - Givemoney
    - Paymoney
    - Showmoney
    - Checkmoney
    - Hidemoney
    - Updatemoney

    Givemoney serve per dare soldi al giocatore.
    Paymoney serve per detrarne.
    Showmoney apre la "barra"
    Hidemoney la nasconde
    Checkmoney controlla se il giocatore ha abbastanza soldi
    Updatemoney modifica i soldi del giocatore

    Vediamoli in azione:
    CODICE
    #dynamic 0x800000
    #org @start
    showmoney 0x00 0x00 0x00
    msgbox @mostra 0x6
    givemoney 0x1F4 0x00
    msgbox @do 0x6
    updatemoney 0x00 0x00 0x00
    msgbox @update 0x6
    checkmoney 0x1F4 0x00
    msgbox @controllo 0x6
    paymoney 0x1F4 0x00
    msgbox @pago 0x6
    updatemoney 0x00 0x00 0x00
    msgbox @update 0x6
    hidemoney 0x00 0x00
    msgbox @nascondo 0x6
    release
    end

    #org @mostra
    = Mostro.

    #org @do
    = Do.

    #org @update
    = Update.

    #org @controllo
    = Controllo.

    #org @pago
    = Pago.

    #org @nascondo
    = Nascondo.


    Quando Showmoney, Hidemoney e Updatemoney ti chiedono delle coordinate, quelle di default per mostrare la barra (in alto a sinistra) si mettono con 0x00 per la X e 0x00 per la Y.
    Inoltre tutti i comandi relativi ai soldi ti chiederanno un "Command execution check", tu metti 0x00 perchè è fisso.

    Non continuiamo però con lo scripting senza poterci semplificare la vita!
    Scopriremo le cosiddette "direttive al preprocessore", una figata di XSE, ma per oggi vediamo solo #alias.

    #alias serve appunto per semplificarci la vita, perchè se mettiamo in un comando prima degli script per esempio
    CODICE
    #alias givemoney sgancia

    significherà che ogni volta che (se l'alias è presente) scriveremo "sgancia" userà il givemoney ma ci risparmierà "tempo e fatica" :D
    Semplice lo scripting ora vero? :D

    Esercitati a usare i vari money in modo da sapere quali sono i parametri che XSE richiede per ogni comando, #alias non è importante nello scripting ma è solo una cosa per semplificare lo scripting su XSE.
     
    Top
    .
  10.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    Domani continuo
     
    Top
    .
  11.     +1   Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    sono peronto per la prossima lezione
     
    Top
    .
  12. Volcanion
        Top   Dislike
     
    .

    User deleted


    Ok, pensavo di farti imparare o l'applymovement o il give item e pokemon, MA...
    Credo che gli special potrebbero essere MOLTO più semplici da fare prima.
    Anche perchè sono molto utili.
    Ecco qui la lista degli special (che ho preso da XSE sennò ci avrei messo GLI ANNI)

    Per Ruby/Sapphire:
    0 = Heals Party Pokémon
    2 = Warp sound + FadeBlack
    3 = Hero Uses Last Used Warp
    8 = Make new Secret Base/Enter Secret Base
    9 = Come out of Coliseum
    A = Come out of Coliseum
    E = Hero Uses Secret Base PC
    F = Something to do with registry in a secret base
    11 = Something to do with Secret Base battling
    18 = Move Player to X01 Y03
    19 = Something to do with secret base battling
    1A = Turning off PC
    1B = Mixing Records
    1F = checks whether game is linked
    20 = Please wait followed by wild battle (Linkup) (VS in coliseum)
    21 = "Please wait link stand by" (Link Feature)
    22 = "Please wait link stand by" (Link Feature)
    23 = Call Save Menu
    29 = Select 3 Pokémon [maybe for Battle tower?]
    2A = Black Screen
    2B = Something to do with Berry Growth
    2C = Opens up berry pocket (Used in berry blender script)
    2D = Something to do with Planted berry (Used with CmdC3)
    2E = Something to do with Berry Growth
    2F = Something to do with Berry Growth
    30 = Maybe activates the watered flag (used first, then special0x5E)
    34 = Open Textbox (Stays Open)
    35 = Open Textbox (Stays Open)
    3B = Trainer battle
    3C = Access Lanette's PC (BOX System)
    5D = Call Save Menu which keeps looping.
    5E = Watering of Berry (used first, then special0x5E)
    5F = You fill your trainer's profile/interview
    60 = Shows what you put for trainer's Profile/interview
    67 = Strange Message with sound (could be Unown speech)
    6C = Trainer Tales (Link Feature)
    6D = Choose Tale
    75 = Secret Base Decoration Item Menu
    7C = Something to do with renaming
    7D = Something to do with renaming
    83 = Poké Slots In Use (Store Command)
    8A = Crashes
    8D = Displays the last message
    8E = Used with Setmaptile to make it work
    91 = setmaptile #206 at X8 YB
    94 = Something to do with Timed events
    98 = Cable Car Ride Cutscene
    9A = Male Clock
    9B = View Clock
    9C = Choose Starters From Birch's Bag
    9D = Wally Catching Ralts
    9E = Nickname's first Pokémon in Party
    9F = Choose a Pokémon in the party (For Nickname)
    A1 = Starts Berry Blender
    A2 = Slot game.
    AF = Gabby and TV's "In serach of Trainers"
    BC = Store a Pokémon For Day Care
    BD = Take back Pokémon From Day Care
    BE = Get Breeding Growth (store)
    BF = Get Price
    C0 = Something to do with Day Cay pay (store)
    C2 = Egg hatch (1st Pokémon in party)
    C4 = Battle results For The Coliseum
    C6 = Something to do with DayCare cost
    C8 = Move to the last sethealingplace/flightspot after some time (faint!!) (Fainted Event)
    D0 = Opens PokéBlock case
    D1 = Stores a random value to LASTRESULT (If the value matches mirage Island will show)
    D4 = Used Before Special 0xF9/FA
    D5 = Catch Pokémon tip, boxset 4 (use closeonkeypress)
    D6 = tile change (in the middle of screen?)(For PC)
    D7 = tile change (flower, in the middle of screen?)
    D9 = Sets some sort of tiles
    DA = Sets some sort of tiles
    DB = Choose Pokémon then Fadescreen
    DC = Opens the First Pokémon's Moves
    E0 = Move tutoring For 1st Pokémon in Party
    E3 = CheckBike (store command) 00 = nobike
    E4 = Set Cycling Road Results (time, collisions)
    E6 = First Pokémon Happy (StoreResult, 4 = Happy),
    EC = Verse a high level trainer, level 100/Random Battle?
    F1 = Restarts Game
    F5 = choose 3 Pokémon(Battle tower)
    F9 = Item Storage Mailbox Decoration
    FA = Item Storage - No Decoration
    FB = World Map
    FE = Used for In-Game Trades - Trades 1st trade Pokémon "Makit" to 1st Pokémon in Party
    103 = Berry Blender results
    106 = PC (menu opens and disappears real fast)
    107 = Hall of Fame, through PC (Will be corrupt if there's no data) (reads)
    108 = Hoenn Pokédex diploma
    10E = Boat sailing for a long time, like Fire Red's speed boat (+Return)
    10F = Restarts
    110 = Hall of Fame "Credits" (Saves data)
    111 = Elevator animation<
    112 = Displays Flutes
    113 = Freezes The Screen/Camera
    114 = Releases The Screen/Camera
    119 = Groudon's Orb followed by earthquake
    11B = Battel Tower Results
    12C = Player Goes to last warp/flightspot used
    12D = Makes special 0x9d work properly
    130 = Is PC Box Full (store command) (0 = full)
    131 = Earthquake for few seconds "Earthquake (stops)"
    132 = Show Floors & Which Floor you're on
    134 = CheckPokerus [0001 = Pokerus]
    136 = Weird Quake
    137 = Lava Battle/with Groudon
    138 = Land Battle/with legendary
    139 = Land Battle2/different song/battle with ledgendary - used with wildbattle
    13B = Small screen shake
    13D = Light/Flash
    13E = Player uses the warp last used (no sound)
    13F = falls in first warp of the first map
    140 = Pokémon Image (UnLZ 199/200)
    142 = Ecard battle Initiate (used in Levelscript at mossdeep, Oldman's house)
    143 = Battle ?(perhaps used for wildbattle)
    147 = Check Pokemon
    14C = Turns Off Background/Map music


    Per FireRed e LeafGreen:
    0 = Heal Party Pokémon
    2 = Warp sound + Black Screen
    3 = Walk to your room
    20 = Weird Fight
    21 = Link Communication Standby
    22 = Link Communication Standby 2
    23 = Call Save Menu
    29 = Select 3 Pokémon for something
    2A = Crashes
    3B = Fight with Team Aqua's Leader
    3C = Access BILL's PC
    5D = Call Save Menu
    5E = Edit "At the battle's start" profile
    5F = Edit "At the battle's start" profile
    60 = Displays "At the battle's start" text
    9D = Old man catching a Weedle
    9E = Nickname
    9F = Choose 3 Pokémon
    BC = Store a Pokémon
    BD = Withdraw a stored Pokémon
    C2 = Egg Hatch
    C4 = Show Battle Results
    C8 = Fainted Event
    D6 = A Turned On PC Appears
    D7 = A Turned Off PC Appears
    DC = Shows Known Moves
    DF = Crashes
    E0 = Crashes
    E1 = Crashes
    E2 = Crashes
    E3 = Crashes
    E4 = Crashes
    E5 = Crashes
    E6 = Crashes
    E7 = Crashes
    E8 = Crashes
    E9 = Crashes
    107 = Reads Hall Of Fame Data
    108 = Diplome For Completing Kanto Dex
    10F = Crashes
    110 = Saves Hall Of Fame Data
    111 = Elevator
    113 = Freezes The Camera
    114 = Releases The Camera
    132 = Select Floor (Elevator)
    136 = Using Strength
    137 = Starts Trainerbattle
    138 = Starts Wild Battle
    139 = Starts Wild Battle
    13D = Warp
    13E = Fall Through A Hole
    143 = Starts Wild Battle
    156 = Starts Battle Against Ghost
    157 = Uses The Bicycle
    15C = Crashes
    161 = Activates Surfing Animation
    163 = See in PokéDex
    166 = Lets You Enter A Nickname
    16B = Establishes A Connection
    16C = Establishes A Connection
    16D = Establishes A Connection
    16E = Shows Wireless Connection Status
    17B = Uses The Ms Aqua
    186 = Crashes
    18D = Learns A Move
    18E = Battletower Lv50
    191 = Departure Of MS Anne
    195 = Shows Jump Records
    19C = Shows Powder Counter
    1A2 = Shows Berry Crush Rankings
    1A5 = Plays Credits On The Current Map
    1A6 = Shows Dodrio Berry Picking Stats
    1AB = Moves The Deoxys-Triangle
    1B2 = Displays A Cursor At The Left Top Corner
    1B5 = Executes Weird Effects on Map Tiles
    1B6 = Executes Weird Effects on Map Tiles

    Ho incluso tutti gli special con una funzione, ovvero la funzione di tutti gli altri è sconosciuta.

    Ma che cos'è uno special?
    Potremmo dire che, nella maggior parte dei casi, lo special è una specie di alias: invece che scrivere, non so...
    *script1*
    *script2*
    *script3*
    (Si parla di script ma anche di script in ASM, attenzione)
    Essi vengono "raggruppati" nello special, ma ci sono anche casi in cui lo special è un comando stesso, come per esempio il 91 di RS.
    Ora, come li integri in uno script?
    Nulla di più semplice!

    #dynamic 0x800000
    #org @start
    special 0x? dove ? è l'ID dello special che vogliamo usare.
    release
    end

    Prova ad esercitarti sull'uso degli special, comandi interessanti e a volte molto utili!
     
    Top
    .
  13. Volcanion
        Top   Dislike
     
    .

    User deleted


    La lezione di oggi prevede i movimenti.
    Cosa intendo con movimenti?
    Intendo non solo il poter far camminare, correre o saltare delle persone o del protagonista, ma anche il movimento della telecamera e le emoticon!

    I comandi che ti serviranno sono:
    - Applymovement, che va inserito "prima"
    - Waitmovement, che va inserito "dopo"

    Come usarli?

    applymovement 0x? @pointer

    applymovement è il comando;
    In ? di 0x? devi inserire l'ID dell'evento che vuoi far muovere, che troverai qua:
    people%20event%20num
    (Thanks diegoisawesome for this image);
    @pointer... beh, è il pointer che reindirizza a @pointer.

    waitmovement 0x0

    waitmovement serve per aspettare che l'evento finisca di muoversi prima di continuare;
    0x? deve essere l'ID (che hai inserito in applymovement) del quale dobbiamo aspettare il movimento prima di continuare

    Esempio:

    CODICE
    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @msg 0x3
    applymovement 0xFF @movimento
    waitmovement 0xFF
    msgbox @sms 0x3
    release
    end

    #org @msg
    = Fammi vedere le \ntue scarpe nuove!

    #org @movimento
    #raw 0x13
    #raw 0x13
    #raw 0x12
    #raw 0xFE


    Oh, ma cosa abbiamo?
    Abbiamo un "applymovement 0xFF". Ma cos'è questo 0xFF? E' l'ID del protagonista (quello che controlliamo noi).
    Abbiamo inoltre questi "#raw" brutti, cosa sono? (Uso come base FRLG per farti un esempio)
    #raw 0x13 <-- SOLO PER FRLG ovvero RossoFuoco/VerdeFoglia (dopo ti darò la lista completa per vedere quali siano i comandi da usare in ogni caso) passo a velocità "normale" verso destra
    #raw 0x13 <-- Ancora passo normale verso destra solo per FRLG
    #raw 0x12 <-- Passo a velocità normale verso sinistra ancora solo per FRLG
    #raw 0xFE <-- AH. E questo? Questo segna la FINE DEI MOVIMENTI. Devi metterlo quando il personaggio deve stare fermo dopo il movimento.

    Ricapitolando,
    applymovement 0x? @pointer dove 0x? in particolare può essere 0xFF ovvero il personaggio, oppure 0x7F per la telecamera come vedremo più avanti.
    waitmovement 0x? aspetta che ? finisca il movimento prima di andare avanti



    Lista RSE (Rubino, Zaffiro, Smeraldo):
    #raw 0x00 = Face Down
    #raw 0x01 = Face Up
    #raw 0x02 = Face Left
    #raw 0x03 = Face Right
    #raw 0x04 = Step Down (Slow)
    #raw 0x05 = Step Up (Slow)
    #raw 0x06 = Step Left (Slow)
    #raw 0x07 = Step Right (Slow)
    #raw 0x08 = Step Down (Normal)
    #raw 0x09 = Step Up (Normal)
    #raw 0x0A = Step Left (Normal)
    #raw 0x0B = Step Right (Normal)
    #raw 0x0C = Jump2 Down
    #raw 0x0D = Jump2 Up
    #raw 0x0E = Jump2 Left
    #raw 0x0F = Jump2 Right
    #raw 0x10 = Delay1
    #raw 0x11 = Delay2
    #raw 0x12 = Delay3
    #raw 0x13 = Delay4
    #raw 0x14 = Delay5
    #raw 0x15 = Step Down (Fast)
    #raw 0x16 = Step Up (Fast)
    #raw 0x17 = Step Left (Fast)
    #raw 0x18 = Step Right (Fast)
    #raw 0x19 = Step on the Spot Down (Slow)
    #raw 0x1A = Step on the Spot Up (Slow)
    #raw 0x1B = Step on the Spot Left (Slow)
    #raw 0x1C = Step on the Spot Right (Slow)
    #raw 0x1D = Step on the Spot Down (Normal)
    #raw 0x1E = Step on the Spot Up (Normal)
    #raw 0x1F = Step on the Spot Left (Normal)
    #raw 0x20 = Step on the Spot Right (Normal)
    #raw 0x21 = Step on the Spot Down (Faster)
    #raw 0x22 = Step on the Spot Up (Faster)
    #raw 0x23 = Step on the Spot Left (Faster)
    #raw 0x24 = Step on the Spot Right (Faster)
    #raw 0x25 = Step on the Spot Down (Fastest)
    #raw 0x26 = Step on the Spot Up (Fastest)
    #raw 0x27 = Step on the Spot Left (Fastest)
    #raw 0x28 = Step on the Spot Right (Fastest)
    #raw 0x29 = Slide Down
    #raw 0x2A = Slide Up
    #raw 0x2B = Slide Left
    #raw 0x2C = Slide Right
    #raw 0x2D = Slide Down
    #raw 0x2E = Slide Up
    #raw 0x2F = Slide Left
    #raw 0x30 = Slide Right
    #raw 0x31 = Slide Down
    #raw 0x32 = Slide Up
    #raw 0x33 = Slide Left
    #raw 0x34 = Slide Right
    #raw 0x35 = Slide Running Down
    #raw 0x36 = Slide Running Up
    #raw 0x37 = Slide Running Left
    #raw 0x38 = Slide Running Right
    #raw 0x3A = Jump Facing Left (Down)
    #raw 0x3B = Jump Facing Down (Up)
    #raw 0x3C = Jump Facing Up (Left)
    #raw 0x3D = Jump Facing Left (Right)
    #raw 0x3E = Face Player
    #raw 0x3F = Face Against Player
    #raw 0x40 = Lock Sprite Facing
    #raw 0x41 = Release Sprite Facing
    #raw 0x42 = Jump Down
    #raw 0x43 = Jump Up
    #raw 0x44 = Jump Left
    #raw 0x45 = Jump Right
    #raw 0x46 = Jump in Place (Facing Down)
    #raw 0x47 = Jump in Place (Facing Up)
    #raw 0x48 = Jump in Place (Facing Left)
    #raw 0x49 = Jump in Place (Facing Right)
    #raw 0x4A = Jump in Place (Facing Down/Up)
    #raw 0x4B = Jump in Place (Facing Up/Down)
    #raw 0x4C = Jump in Place (Facing Left/Right)
    #raw 0x4D = Jump in Place (Facing Right/Left)
    #raw 0x4E = Face Left
    #raw 0x54 = Hide Sprite
    #raw 0x55 = Show Sprite
    #raw 0x56 = Exclamation Mark (!)
    #raw 0x57 = Question Mark (?)
    #raw 0x58 = Love (<3)
    #raw 0x62 = Walk Down
    #raw 0x63 = Walk Down
    #raw 0x64 = Face Down (Delayed)
    #raw 0x65 = Face Up (Delayed)
    #raw 0x66 = Face Left (Delayed)
    #raw 0x67 = Face Right (Delayed)
    #raw 0x70 = Jump in Place (Facing Down)
    #raw 0x71 = Jump in Place (Facing Up)
    #raw 0x72 = Jump in Place (Facing Left)
    #raw 0x73 = Jump in Place (Facing Right)
    #raw 0x74 = Jump Down Running
    #raw 0x75 = Jump Up Running
    #raw 0x76 = Jump Left Running
    #raw 0x77 = Jump Right Running
    #raw 0x78 = Jump2 Down Running
    #raw 0x79 = Jump2 Up Running
    #raw 0x7A = Jump2 Left Running
    #raw 0x7B = Jump2 Right Running
    #raw 0x7C = Walk on the Spot (Down)
    #raw 0x7D = Walk on the Spot (Up)
    #raw 0x7E = Walk on the Spot (Left)
    #raw 0x7F = Walk on the Spot (Right)
    #raw 0x80 = Slide Down Running
    #raw 0x81 = Slide Up Running
    #raw 0x82 = Slide Left Running
    #raw 0x83 = Slide Right Running
    #raw 0x84 = Slide Down
    #raw 0x85 = Slide Up
    #raw 0x86 = Slide Left
    #raw 0x87 = Slide Right
    #raw 0x88 = Slide Down on Left Foot
    #raw 0x89 = Slide Up on Left Foot
    #raw 0x8A = Slide Left on Left Foot
    #raw 0x8B = Slide Right on Left Foot
    #raw 0x8C = Slide Left diagonally (Facing Up)
    #raw 0x8D = Slide Right diagonally (Facing Up)
    #raw 0x8E = Slide Left diagonally (Facing Down)
    #raw 0x8F = Slide Right diagonally (Facing Down)
    #raw 0x90 = Slide2 Left diagonally (Facing Up)
    #raw 0x91 = Slide2 Right diagonally (Facing Up)
    #raw 0x92 = Slide2 Left diagonally (Facing Down)
    #raw 0x93 = Slide2 Right diagonally (Facing Down)
    #raw 0x96 = Walk Left
    #raw 0x97 = Walk Right
    #raw 0x98 = Levitate
    #raw 0x99 = Stop Levitating
    #raw 0x9C = Fly Up Vertically
    #raw 0x9D = Land
    #raw 0xFE = End of Movements


    Lista per FRLG (Rosso Fuoco e Verde Foglia):
    #raw 0x0 = Face Down
    #raw 0x1 = Face Up
    #raw 0x2 = Face Left
    #raw 0x3 = Face Right
    #raw 0x4 = Face Down (Faster)
    #raw 0x5 = Face Up (Faster)
    #raw 0x6 = Face Left (Faster)
    #raw 0x7 = Face Right (Faster)
    #raw 0x8 = Step Down (Very Slow)
    #raw 0x9 = Step Up (Very Slow)
    #raw 0xA = Step Left (Very Slow)
    #raw 0xB = Step Right (Very Slow)
    #raw 0xC = Step Down (Slow)
    #raw 0xD = Step Up (Slow)
    #raw 0xE = Step Left (Slow)
    #raw 0xF = Step Right (Slow)
    #raw 0x10 = Step Down (Normal)
    #raw 0x11 = Step Up (Normal)
    #raw 0x12 = Step Left (Normal)
    #raw 0x13 = Step Right (Normal)
    #raw 0x14 = Jump2 Down
    #raw 0x15 = Jump2 Up
    #raw 0x16 = Jump2 Left
    #raw 0x17 = Jump2 Right
    #raw 0x18 = Delay1
    #raw 0x19 = Delay2
    #raw 0x1A = Delay3
    #raw 0x1B = Delay4
    #raw 0x1C = Delay5
    #raw 0x1D = Step Down (Fast)
    #raw 0x1E = Step Up (Fast)
    #raw 0x1F = Step Left (Fast)
    #raw 0x20 = Step Right (Fast)
    #raw 0x21 = Step on the Spot Down (Normal)
    #raw 0x22 = Step on the Spot Up (Normal)
    #raw 0x23 = Step on the Spot Left (Normal)
    #raw 0x24 = Step on the Spot Right (Normal)
    #raw 0x25 = Step on the Spot Down (Faster)
    #raw 0x26 = Step on the Spot Up (Faster)
    #raw 0x27 = Step on the Spot Left (Faster)
    #raw 0x28 = Step on the Spot Right (Faster)
    #raw 0x29 = Step on the Spot Down (Fastest)
    #raw 0x2A = Step on the Spot Up (Fastest)
    #raw 0x2B = Step on the Spot Left (Fastest)
    #raw 0x2C = Step on the Spot Right (Fastest)
    #raw 0x2D = Face Down (Delayed)
    #raw 0x2E = Face Up (Delayed)
    #raw 0x2F = Face Left (Delayed)
    #raw 0x30 = Face Right (Delayed)
    #raw 0x31 = Slide Down (Slow)
    #raw 0x32 = Slide Up (Slow)
    #raw 0x33 = Slide Left (Slow)
    #raw 0x34 = Slide Right (Slow)
    #raw 0x35 = Slide Down (Normal)
    #raw 0x36 = Slide Up (Normal)
    #raw 0x37 = Slide Left (Normal)
    #raw 0x38 = Slide Right (Normal)
    #raw 0x39 = Slide Down (Fast)
    #raw 0x3A = Slide Up (Fast)
    #raw 0x3B = Slide Left (Fast)
    #raw 0x3C = Slide Right (Fast)
    #raw 0x3D = Slide Running on Right Foot (Down)
    #raw 0x3E = Slide Running on Right Foot (Up)
    #raw 0x3F = Slide Running on Right Foot (Left)
    #raw 0x40 = Slide Running on Right Foot (Right)
    #raw 0x41 = Slide Running on Left Foot (Down)
    #raw 0x42 = Slide Running on Left Foot (Up)
    #raw 0x43 = Slide Running on Left Foot (Left)
    #raw 0x44 = Slide Running on Left Foot (Right)
    #raw 0x46 = Jump Facing Left (Down)
    #raw 0x47 = Jump Facing Down (Up)
    #raw 0x48 = Jump Facing Up (Left)
    #raw 0x49 = Jump Facing Left (Right)
    #raw 0x4A = Face Player
    #raw 0x4B = Face Against Player
    #raw 0x4C = Lock Sprite Facing
    #raw 0x4D = Release Sprite Facing
    #raw 0x4E = Jump Down
    #raw 0x4F = Jump Up
    #raw 0x50 = Jump Left
    #raw 0x51 = Jump Right
    #raw 0x52 = Jump in Place (Facing Down)
    #raw 0x53 = Jump in Place (Facing Up)
    #raw 0x54 = Jump in Place (Facing Left)
    #raw 0x55 = Jump in Place (Facing Right)
    #raw 0x56 = Jump in Place (Facing Down/Up)
    #raw 0x57 = Jump in Place (Facing Up/Down)
    #raw 0x58 = Jump in Place (Facing Left/Right)
    #raw 0x59 = Jump in Place (Facing Right/Left)
    #raw 0x60 = Hide Sprite
    #raw 0x61 = Show Sprite
    #raw 0x62 = Exclamation Mark (!)
    #raw 0x63 = Question Mark (?)
    #raw 0x64 = Cross (X)
    #raw 0x65 = Double Exclamation Mark (!!)
    #raw 0x66 = Happy (^_^)
    #raw 0xFE = End of Movements


    Puoi usare quanti applymovement (e relativi waitmovement) vuoi in un comando, basta che dai loro un pointer diverso :v

    Ora, il movimento della telecamera.
    Prendiamo lo script di prima.

    #dynamic 0x800000
    #org @start
    lock
    faceplayer
    msgbox @msg 0x3
    special 0x113
    applymovement 0x7F @movimento
    waitmovement 0x7F
    special 0x114
    msgbox @sms 0x3
    release
    end

    #org @msg
    = Montagne russe!

    #org @movimento
    #raw 0x13
    #raw 0x13
    #raw 0x12
    #raw 0xFE


    Aspetta ma lo script non è identico.
    Ci sono quattro comandi che sono cambiati!
    "special 0x113"? Serve per "attivare" la telecamera. E' presente sia in RSE che in FRLG.
    "0x7F"? E' l'ID della telecamera.
    "special 0x114"? Serve per "finire di usare" la telecamera. E' presente sia in RSE che in FRLG.
    Poi vabbè è cambiato pure il testo ma chissene.

    E anche questa lezione è andata, forse una delle più complicate!
    Prova a esercitarti, e se hai dubbi dimmelo!

    Edited by Volcanion - 16/5/2016, 17:01
     
    Top
    .
  14.     Top   Dislike
     
    .
    Avatar

    SONO CHI NO SADAME

    Group
    Administrator
    Posts
    7,607
    Reputazione
    +4
    Location
    Aqours

    Status
    Offline
    SONO PRONTO PER LA PROSSIMA LEZIONE
     
    Top
    .
  15. Volcanion
        Top   Dislike
     
    .

    User deleted


    Allora, oggi non impariamo i give perchè mi avevi detto che li sapevi usare già quindi sarebbe inutile.
    E non ho manco voglia di fare una mazza.
    Quindi il comando di oggi è il random.

    CODICE
    random 0x??
    compare 0x800D 0x0
    if 0x1 goto @pointer1
    compare 0x800D 0x1
    if 0x1 goto @pointer2
    compare 0x800D 0x2
    if 0x1 goto @pointer3


    "Analisi grammaticale":
    random = un qualcosa di casuale, nel nostro caso un valore
    0x?? = il numero massimo che può essere il valore, il minimo è 0x0

    compare = controlla se
    0x800D = indirizzo nel quale il numero che è stato randomizzato viene salvato
    0x0= controlla se il valore scelto è 0

    if = se il valore è
    0x1 = "vero"
    goto = vai a
    @pointer = pointer

    Un esempio su come potrebbe essere usato:

    CODICE
    #dynamic 0x800000
    #org @start
    random 0x3
    compare 0x800D 0x0
    if 0x1 goto @terra
    compare 0x800D 0x1
    if 0x1 goto @luna
    compare 0x800D 0x2
    if 0x1 goto @marte
    release
    end

    #org @terra
    msgbox @msg 0x3

    #org @marte
    msgbox @sms 0x3

    #org @luna
    msgbox @msgsms 0x3

    #org @msg
    = Ciao, vengo dalla Terra!

    #org @sms
    = Ciao, vengo da Marte!

    #org @msgsms
    = Ciao, vengo dalla Luna!


    Insomma, è un comando che può permettere di creare molte cose, e non solo dialoghi stupidi come ho fatto io!

    Se ti va prova a fare qualcosa con questo comando e se viene bene prova a mostrarmelo :)
     
    Top
    .
14 replies since 22/12/2015, 21:37   400 views
  Share  
.
Top