Jump to content
Rpg²S Forum

Keroro

Utenti
  • Posts

    646
  • Joined

  • Last visited

Posts posted by Keroro

  1. Per portare le risorse grafiche del 2000 su altre piattaforme anni fa mi ero creato un batch con hq2x e mi sono trovato benissimo, adesso lo incorporano quasi tutti gli emulatori come filtro real-time.

    Unica pecca: L'implementazione dell'algoritmo disponibile come stand-alone lavora solo su bmp a 24 bit o tga.

    Uso: hq2x immagine.bmp immagine_scalata.bmp

     

    Di conseguenza poi bisogna riconvertire in png. Probabilmente come diceva flame si fa prima ma l'effetto di hq2x mi piace molto.

  2. Se vuoi sfogarti dicendo parolacce puoi benissimo farlo con un tuo amico, almeno lui può evitarti o picchiarti.

    Qui siamo su un forum, tutti leggono tutto ed è sconveniente dover leggere parolacce gratuite, soprattutto dall'ultimo arrivato :)

     

    Bravo Unamuno, sei riuscito a fare da interprete XD quando vedo dei post così densi e senza l'uso di INVIO non ce la faccio a leggere per intero.

     

    Per l'evento che compare hai bisogno di due pagine

    Prima pagina evento:

    • Grafica: Nessuna
    • Contenuto: Vuoto
    • Condizioni: Nessuna

    Seconda pagina evento:

    • Grafica: La grafica dell'npc
    • Contenuto: Le azioni dell'npc
    • Condizioni: Switch 0015 ON

    Per mostrarlo hai bisogno di un altro evento, una leva o quel che hai in mente tu

    • Grafica: La leva
    • Contenuto: Controllo Switch 0015 ON
    • Condizioni: Nessuna
    • Inizio: Tasto Azione

    Il numero della switch è arbitrario, potevi scegliere una switch qualunque.

    Ti consiglio di scaricare la traduzione in Italiano presente nell'altro topic

  3. No, non sono io

     

    Un evento è formato da più pagine

    Viene eseguito solo il contenuto di una pagina.

    Per scegliere quale pagina eseguire si impostano le condizioni.

     

    Una switch è un interruttore che può andare ON-OFF, una switch locale (loc.) è un interruttore visibile solo all'interno dell'evento.

     

    Quindi:

    1. Crea una Nuova Pagina Evento cliccando sul pulsante in alto
    2. In questa seconda pagina sulla sinistra selezioni Switch loc. - A è ON.
    3. Torni sulla prima pagina
    4. Inserisci in fondo alle istruzioni: Controllo Switch Locali, A = ON

    In questo modo dopo tutte le istruzioni il personaggio diventerà trasparente.

    Se vuoi cambiare cosa succede, modifica la seconda pagina degli eventi.

    Per capire meglio sperimenta e leggi guide

  4. Via script sarebbe semplicissimo, se vuoi farlo con gli eventi puoi estrarre i valori con:

    Controllo Variabili -> Dati di gioco -> Eroe -> PV

    Poi usare un po' di matematica per ottenere le singole cifre, come mostrato a pagina 6 di questo topic!

     

    Tipo specifica il comportamento degli autotiles, se provi le diverse scelte cambiano gli autotiles a sfondo trasparente (disegnati sopra lo sfondo in parallasse, se specificato), non sono a conoscenza di ulteriori motivi

  5. Lusianl ti confondi con TGF

     

    Gamemaker è ottimo per creare rpg, si può mappare i tile su più livelli (infiniti livelli a profondità personalizzabile), si possono avere 10 background/foreground diversi che si muovono a velocità diversa, ottimo per effetti di parallasse (cosa che in rpgmaker vx ace mi sono dovuto creare a mano), si ha accesso a strutture dati complesse.

    Quali sono le criticità?

    1. Il GML (Game Maker Language) non è un linguaggio ad oggetti come il ruby, ma solo orientato agli oggetti, si possono creare istanze via codice ma creare un oggetto (inteso come class) è macchinoso da fare, quindi si finisce per richiamare il codice all'interno della gui. Questo implica che nel 99% dei casi non basta copiare e incollare il codice ma bisogna creare oggetti a mano. Questo è un bene all'inizio perché costringe l'utente a sporcarsi le mani, dopo però diventa un male perché per analizzare un oggetto è necessario guardare in più parti.
    2. Manca di una libreria grafica, mancano funzionalità prefatte come la windowskin e l'autotile, quindi seppur realizzare un menù, una mappa, un battle system sia o facile, non lo è altrettanto crearsi delle Windows di dimensione personalizzata e bisogna lavorare molto sui tile per mappare bene perché è come avere solo la matita (mancano flood fill, rettangolo e ellisse), un buon mapper che viene dal mondo di rpgmaker non ha problemi a mappare su GM, tutti gli altri si trovano male.
    3. Mancano le schede eventi prefatte, si possono programmare, per il movimento dell'eroe o di un npc bisogna aver cura di usare strutture dati piuttosto che affidarsi al punta e clicca, ogni piccola cosa diventa faticosa.
    4. Proprio perché ogni piccola cosa è impegnativa, l'utente tipo di gamemaker non ha una visione di insieme e non è abituato a pensare in grande.
    5. Game Maker mi ha lasciato l'impressione di essere cresciuto male, ho acquistato una licenza per la versione 6.0 quando il programma era al suo apice (credo nel 2005/2006). Con l'abbandono di Mark Overmars a favore della yoyogames ho avuto la certezza che la magia era svanita, che l'obiettivo era diventato guadagnare soldi.

    Quando usare Game Maker?

    Quando si ha un team numeroso e con esperienza nello sviluppo di rpg.

  6. Clyde riporta le opinioni della comunità internazionale, con le quali sono parzialmente d'accordo.

    Visto che è molto distante dal tool è più difficile da modificare e di conseguenza prolificano utenti che lo usano nella versione base o copia incollando script.

    Questo dà l'effetto fotocopia ai giochi che lo implementano e chi ha già giocato a giochi con lo stesso bs finisce per annoiarsi: considerando che una fetta rilevante di giocatori sono gli utenti delle community amatoriali finisci per bruciarti questo pubblico.

    Sono però dell'idea che non sia male come programmazione, non giudico i notetag una caratteristica essenziale in un bs perché potrei voler usare un altro modo per configurare.

    Dei bs elencati ho visto quello di victor e non trovo la sua programmazione "pulita", per tanto ci ho messo una croce sopra :).

     

    Se vi piace Enu usatelo!

    Ma se vi incagliate con la programmazione è difficile che riceviate supporto! (sicuramente non da me XD ho rinunciato ad usarlo)

  7. A me i png occupano 200kb l'uno, non mi sembra eccessivo per un desktop (c'erano giochi che creavano bitmap da 2 mb), anche considerando che dovrebbero immortalare i momenti più belli (e non essere generati in continuazione).

    Inoltre è l'unico formato accettato dallo screen contest :3

  8. Maxy se aggiungi questo codice in cima dovrebbe funzionare anche con rpg maker xp :)

    (l'ho provato con l'ace e funziona come alternativa al metodo predefinito)

    Fammi sapere!

    module Graphics
     RtlMoveMemory		  = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
     BitBlt				 = Win32API.new('gdi32', 'BitBlt', 'iiiiiiiii', 'i')
     CreateCompatibleBitmap = Win32API.new('gdi32', 'CreateCompatibleBitmap', 'iii', 'i')
     CreateCompatibleDC	 = Win32API.new('gdi32', 'CreateCompatibleDC', 'i', 'i')
     DeleteObject		   = Win32API.new('gdi32', 'DeleteObject', 'i', 'i')
     GetDIBits			  = Win32API.new('gdi32', 'GetDIBits', 'iiiiipi', 'i')
     SelectObject		   = Win32API.new('gdi32', 'SelectObject', 'ii', 'i')
     SetDIBits			  = Win32API.new('gdi32', 'SetDIBits', 'iiiiipi', 'i')
     hWnd = Win32API.new('user32', 'FindWindow', 'pp', 'i').call('RGSS Player', 0)
     DC   = Win32API.new('user32', 'GetDC', 'i', 'i').call(hWnd)
     def self.snap_to_bitmap
    bitmap = Bitmap.new(width=640, height=480)
    RtlMoveMemory.call(address="\0"*4, bitmap.__id__*2+16, 4)
    RtlMoveMemory.call(address, address.unpack('L')[0]+8, 4)
    RtlMoveMemory.call(address, address.unpack('L')[0]+16, 4)
    address = address.unpack('L')[0]
    info = [40,width,height,1,32,0,0,0,0,0,0].pack('LllSSLLllLL')
    hDC = CreateCompatibleDC.call(DC)
    hBM = CreateCompatibleBitmap.call(DC, width, height)
    DeleteObject.call(SelectObject.call(hDC, hBM))
    SetDIBits.call(hDC, hBM, 0, height, address, info, 0)
    BitBlt.call(hDC, 0, 0, width, height, DC, 0, 0, 0xCC0020)
    GetDIBits.call(hDC, hBM, 0, height, address, info, 0)
    DeleteObject.call(hBM)
    DeleteObject.call(hDC)
    bitmap
     end
    end

  9. Ahahaha :)

    Ho fatto dei test e ti devo le mie scuse!

    Pare che per creare un metodo visibile all'esterno del modulo vadano bene tutte queste formule:

    module Ciao
     def self.m
     end
     def Ciao.m
     end
     def Ciao::m
     end
     def self::m
     end
    end
    

    Per chiamare il metodo invece è possibile usare queste:

    Ciao.m
    Ciao::m

    Discorso diverso invece per le costanti, le costanti per essere visibili all'esterno del modulo devono avere nome tutto in maiuscolo

    module Ciao
     SALUTO = "BLABLA!"
    end

    E l'unico modo per accedervi è tramite

    Ciao::SALUTO

     

    Ma potrebbero esserci altri modi nascosti chissà dove ;O

  10. Il formato jpg è visto con disgusto dai pixel artist quindi evitiamo ^^

    In che senso Testament sarà contento? Non pensavo usasse il VX Ace!

     

    PS: Mettendo il codice che ho scritto nel messaggio precedente in un Evento Comune (sempre in processo parallelo), con la pressione di F5 si può catturare la schermata in tutte le fasi di gioco ;)

  11. Salva Schermata

     

    Descrizione

    E' un semplice sistema per salvare la schermata di gioco in un file png.

    Il sistema è basato su uno script che salva un RGSS Bitmap in un file png, senza bisogno di dll.

    Questo script era parte di uno script enorme (e poco utile) di XP, non mi stupisco sia passato inosservato ^^

     

    Istruzioni

    Mettere lo script in una nuova scheda sotto Materiali

    Per salvare la schermata basta usare questo codice in un evento:

    salva_schermata("Meraviglia")

    => Salva l'immagine in Screens/Meraviglia,png

    (Se la cartella Screens non esiste, verrà creata)

    Nello script potete specificare la cartella in cui le immagini saranno salvate.

     

    Versione 2.0:

    Aggiunta la possibilità di un suffisso composto da data ed orario attuali.

    salva_schermata("Meraviglia",true)

    => Salva l'immagine in Screens/Meraviglia2012-04-03_17-20-01.png

    Per modifiche guardare la documentazione dell'oggetto Time - metodo strftime

    (Presto in italiano :) )

     

     

    Script

    #==============================================================================
    # Salva Schermata
    # Autore: Keroro - cris87@gmail.com
    # Versione 2.0
    # Ultimo aggiornamento 03.04.2012
    #==============================================================================
    # Salva la schermata in un'immagine png nella cartella specificata
    #
    # Esempio d'uso da evento:
    # salva_schermata("Meraviglia")
    # Se si desiderano giorno ed orario come suffisso:
    # salva_schermata("Meraviglia",true)
    #
    #==============================================================================
    module Schermata
     #Ricordati di lasciare / alla fine
     CARTELLA = "Screens/"
    
     #Formato Orario
     #Guarda documentazione oggetto Time - metodo strftime
     FORMATO = "%Y-%m-%d_%H-%M-%S"
    
     def self.salva(nome,tempo)
       bitmap = Graphics.snap_to_bitmap
       unless tempo
         bitmap.make_png(nome,CARTELLA)
       else
         bitmap.make_png(nome+Time.now.strftime(FORMATO),CARTELLA)
       end
       bitmap.dispose
     end
    end
    
    class Game_Interpreter
     def salva_schermata(nome,tempo=false)
       Schermata::salva(nome,tempo)
     end
    end
    
    #==============================================================================
    #                        Bitmap to PNG By Cycleby
    #==============================================================================
    #
    # Direct use of the Bitmap object.
    #    bitmap_obj.make_png(name[, path])
    # 
    # Name: Save the file name
    # Path: path to save the
    #
    # Thanks 66, Shana, gold Guizi reminder and help!
    #==============================================================================
    module Zlib
     class Png_File < GzipWriter
       #--------------------------------------------------------------------------
       # ? Main
       #-------------------------------------------------------------------------- 
       def make_png(bitmap_Fx,mode)
         @mode = mode
         @bitmap_Fx = bitmap_Fx
         self.write(make_header)
         self.write(make_ihdr)
         self.write(make_idat)
         self.write(make_iend)
       end
       #--------------------------------------------------------------------------
       # ? PNG file header block
       #--------------------------------------------------------------------------
       def make_header
         return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
       end
       #--------------------------------------------------------------------------
       # ? PNG file data block header information (IHDR)
       #-------------------------------------------------------------------------- 
       def make_ihdr
         ih_size = [13].pack("N")
         ih_sign = "IHDR"
         ih_width = [@bitmap_Fx.width].pack("N")
         ih_height = [@bitmap_Fx.height].pack("N")
         ih_bit_depth = [8].pack("C")
         ih_color_type = [6].pack("C")
         ih_compression_method = [0].pack("C")
         ih_filter_method = [0].pack("C")
         ih_interlace_method = [0].pack("C")
         string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
                 ih_compression_method + ih_filter_method + ih_interlace_method
         ih_crc = [Zlib.crc32(string)].pack("N")
         return ih_size + string + ih_crc
       end
       #--------------------------------------------------------------------------
       # ? Generated image data (IDAT)
       #-------------------------------------------------------------------------- 
       def make_idat
         header = "\x49\x44\x41\x54"
         case @mode # please 54 ~
         when 1
           data = make_bitmap_data # 1
         else
           data = make_bitmap_data
         end
         data = Zlib::Deflate.deflate(data, 8)
         crc = [Zlib.crc32(header + data)].pack("N")
         size = [data.length].pack("N")
         return size + header + data + crc
       end
       #--------------------------------------------------------------------------
       # ? Requests from the Bitmap object 54 to generate image data in mode 1 
       # (please 54 ~)
       #-------------------------------------------------------------------------- 
       def make_bitmap_data1
         w = @bitmap_Fx.width
         h = @bitmap_Fx.height
         data = []
         for y in 0...h
           data.push(0)
           for x in 0...w
             color = @bitmap_Fx.get_pixel(x, y)
             red = color.red
             green = color.green
             blue = color.blue
             alpha = color.alpha
             data.push(red)
             data.push(green)
             data.push(blue)
             data.push(alpha)
           end
         end
         return data.pack("C*")
       end
       #--------------------------------------------------------------------------
       # ? Bitmap object from the image data generated in mode 0
       #-------------------------------------------------------------------------- 
       def make_bitmap_data
         gz = Zlib::GzipWriter.open('hoge.gz')
         t_Fx = 0
         w = @bitmap_Fx.width
         h = @bitmap_Fx.height
         data = []
         for y in 0...h
           data.push(0)
           for x in 0...w
             t_Fx += 1
             if t_Fx % 10000 == 0
               Graphics.update
             end
             if t_Fx % 100000 == 0
               s = data.pack("C*")
               gz.write(s)
               data.clear
               #GC.start
             end
             color = @bitmap_Fx.get_pixel(x, y)
             red = color.red
             green = color.green
             blue = color.blue
             alpha = color.alpha
             data.push(red)
             data.push(green)
             data.push(blue)
             data.push(alpha)
           end
         end
         s = data.pack("C*")
         gz.write(s)
         gz.close    
         data.clear
         gz = Zlib::GzipReader.open('hoge.gz')
         data = gz.read
         gz.close
         File.delete('hoge.gz') 
         return data
       end
       #--------------------------------------------------------------------------
       # ? PNG end of the file data blocks (IEND)
       #-------------------------------------------------------------------------- 
       def make_iend
         ie_size = [0].pack("N")
         ie_sign = "IEND"
         ie_crc = [Zlib.crc32(ie_sign)].pack("N")
         return ie_size + ie_sign + ie_crc
       end
     end
    end
    #==============================================================================
    # ¦ Bitmap
    #------------------------------------------------------------------------------
    # Related to the Bitmap.
    #==============================================================================
    class Bitmap
     #--------------------------------------------------------------------------
     # ? Related
     #-------------------------------------------------------------------------- 
     def make_png(name="like", path="",mode=0)
       make_dir(path) if path != ""
       Zlib::Png_File.open("temp.gz") {|gz|
         gz.make_png(self,mode)
       }
       Zlib::GzipReader.open("temp.gz") {|gz|
         $read = gz.read
       }
       f = File.open(path + name + ".png","wb")
       f.write($read)
       f.close
       File.delete('temp.gz') 
       end
     #--------------------------------------------------------------------------
     # ? Save the path generated
     #-------------------------------------------------------------------------- 
     def make_dir(path)
       dir = path.split("/")
       for i in 0...dir.size
         unless dir == "."
           add_dir = dir[0..i].join("/")
           begin
             Dir.mkdir(add_dir)
           rescue
           end
         end
       end
     end
    end

  12. Prego :)

    Il codice è giusto così

    module Awesome
     def self.attack(actor_id,skill_id)
     end
    end
    

    equivale a

    module Awesome
     def Awesome.attack(actor_id,skill_id)
     end
    end
    

    La sintassi con il doppio punto va usata solo per l'accesso, cioè per chiamare il metodo attack all'interno del modulo Awesome

    Awesome::attack(actor_id,skill_id)

     

    Se poi intendevi altro non ho capito XD

×
×
  • Create New...