Jump to content
Rpg²S Forum

Apo

Utenti Speciali
  • Posts

    1,404
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Apo

  1. Personalmente non so neppure se è possibile fare quello che chiedi (aprire un secondo programma da rpg maker, inserire un nuovo file a gioco aperto e caricarlo). Oltretutto per quanto riguarda un gioco online con rpg maker non è molto facile: c'erano 1-2 versioni di un RPG Maker XP online, ma andrebbero entrambe riviste.

    Se la tua idea è creare un gioco online, ci sono programmi migliori; mi pare che uno sia Elysium ad esempio :sisi:

  2. Di per sé non è complicato, al di là di come visualizzare il cambio di hp.

    Togliamo questo:

    @face = Sprite.new

    @face.bitmap = RPG::Cache.picture("Sora_face")

    mettiamo nel def update

     

    @face = Sprite

    if @hp != $game_party.actors[0].hp

    if @hp > $game_party.actors[0].hp

    @face.bitmap = RPG::Cache.picture("face che soffre")

    else

    @face.bitmap = RPG::Cache.picture(Sora_face")

    end

    @hp = $game_party.actors[0].hp

    else

    @face.bitmap = RPG::Cache.picture(Sora_face")

    end

    @hp_percentuale = $game_party.actors[0].hp

    @hp_percentuale *= 100

    @hp_percentuale /= $game_party.actors[0].maxhp

    if @hp_percentuale =

    @face.bitmap = RPG::Cache.picture("face sfinito")

    end

     

    Ricorda di mettere nell'initialize

    @hp = 0

    @hp_percentuale = 0

    Dovrebbe funzionare; ti è chiaro all'incirca il procedimento? Ho controllato con una variabile "ausiliaria" se gli hp cambiano nel corso del gioco(controlla ad ogni update); se sì, se sono scesi, faccia sofferente; altrimenti, se salgono o non sono cambiati, faccia normale. Se sono sotto il 15% del totale, faccia sfinita. ; )

    E' scritto un po' di fretta, di' poi se c'è qualche distrazione!

  3. Intanto postaci il metodo che segui nell'update ;)

    Comunque, puoi andare di variabili e if, se le face sono relativamente poche. Per esempio, se tu volessi far 100 face diverse per ogni 1% di vita, puoi far visualizzare un'immagine che si chiami "faceX" dove X è quella percentuale di vita.

    In generale non c'è un metodo solo, dipende da cosa vorresti.

  4. Caldeggio anche io come Guardian il tasto cerca, anche per la prima domanda, già fatta molte volte ; )

     

    Comunque per permettere al giocatore di crearsi un pg personalizzato non sarà necessario utilizzare l'RGSS, di per sé è fattibile anche ad eventi impostando un codice evento (certo un po' lungo) per considerare tutte le possibili scelte grafiche del giocatore.

    Oppure intendevi qualcosa di diverso?

    Ad ogni modo se vuoi mettere a disposizione del giocatore certi elementi grafici (capelli, facce, vestiti), per ovviare al problema delle animazioni di battaglia di un BS laterale ti "basterebbe" crearne tante quante potrebbero essere i pg creabili.

    La cosa negativa è che il peso del gioco lieviterebbe.

    "Assemblare" gli elementi nel momento stesso del gioco credo però che sarebbe possibile, se cerchi dovrebbe esserci uno script che permette di visualizzare gli equipaggiamenti come se facessero parte del character; forse con le opportune modifiche potrebbe servire allo scopo.

    ; )

  5. Yeaaaah!......

    Ok, l'entusiasmo devo dire che è relativo XD

     

    Comunque per il font so che non è il massimo, ma volevo una cosa semplice e leggibile che però fosse sul quadrato.

    Per la disposizione strana, ho pensato ad un triangolo massonicheggiante e al profilo di una piramide maya, o giù di lì. XD

    "Utentibus Apo causa placuit, sed Nullius Jano" (sperando di ricordare correttamente la citazione)

    Sì, Impaled, sono indeclinabile!

  6. Errore mio scusa, dovrebbe essere

    @hudm.bitmap = RPG::Cache.picture("Max_HP1quart"+$game_party.actors[0].hp.to_s)

    quindi senza le virgolette al game_party.actors.

    Comunque ho scaricato il progetto: non puoi mettere una serie di comandi dentro una pagina, così, senza una struttura che la contenga!

    class HUD

    def initialize

    @hud = Sprite.new

    @hud.bitmap = RPG::Cache.picture("nHP")

    @hud_x = 0

    @hud_y = 0

    @hud.z = 4

    @face = Sprite.new

    @face.bitmap = RPG::Cache.picture("Sora_face")

    @face_x = 0

    @face_y = 0

    @face.z = 0

    @hudm = Sprite.new

    @hudm.bitmap = RPG::Cache.picture("Max_HP1quart")

    @hudm_x = 0

    @hudm_y = 0

    @hudm.z = 3

    @n = 0

    update

    end

     

    def update

    @hudm.bitmap = RPG::Cache.picture() #se Sora è il primo personaggio del gruppo

    end

    end

     

    Nel def update dovresti vedere in base a cosa richiamare le immagini: secondo percentuali della vita o altro, vedi tu.

     

    L'avere una struttura ordinata permette di gestire meglio le cose, e di non vedere l'hud partire a casaccio ad inizio gioco ma richiamarlo:

    in un evento per esempio puoi inserire nel Call script il comando "@hud=HUD.new" che richiamerà questo script. Però per far sì che si aggiorni correttamente ti conviene fare fare questo richiamo mettendo un metodo (un def) nella scene_map per richiamare tramite un tasto l'HUD, oppure inserirlo permanentemente lì, richiamandolo nel main della scene_map ed aggiornandolo.

     

    Ora, questo alla fin fine come script è un abozzo, dicci più chiaramente quali sono le tue idee.

    Comunque ho visto che avevi un'altro script per un HUD: come mai ne inseriresti uno ex novo?

    In ogni caso ti consiglio di cercare in sezione una guida iniziale per l'RGSS, per orientartici un pochino meglio :sisi:

  7. Devi anche un po' sforzarti, è chiaro che $switch_quello_che_vuoi è per essere indicativi XD

     

    Comunque, facciamo le cose semplici, ti scrivo più o meno l'idea:

     

    #Test per creare un HUD di Base

    @hud = Sprite.new

    @hud.bitmap = RPG::Cache.picture("nHP")

    @hud_x = 0

    @hud_y = 0

    @hud.z = 0

    @face = Sprite.new

    @face.bitmap = RPG::Cache.picture("Sora_face")

    @face_x = 0

    @face_y = 0

    @face.z = 0

    @hudm = Sprite.new

    @hudm.bitmap = RPG::Cache.picture("Max_HP1quart"+"$game_party.actors[0].hp.to_s") #se Sora è il primo personaggio del gruppo

    @hudm_x = 0

    @hudm_y = 0

    @hudm.z = 0

     

     

     

    In questo modo, aggiornando la picture, il programma caricherà l'immagine chiamata "Max_HP1quartX" dove X è la vita del primo personaggio del gruppo. Nella cartella picture allora dovrai mettere altrettante immagini.

    Se preferisci, come suggeriva guardian, sarebbe molto più comodo gestire la cosa a percentuali(quindi molte meno picture).

     

    Per la switch

     

    if $game_switches[1] == true

    fai il codice precedente

    else

    #niente

    end

     

    In questo caso considera la prima delle normali switch.

     

     

    Ma comunque scusa, questo codice dove lo stai mettendo?

  8. A parte che questo "conflitto" non ha bisogno di una guida, perché si tratta semplicemente di un caso(nello script delle 8 direzioni non è di per sé necessario quel valore 4;infatti l'autore ha solo riportato lo Sprite_Character così com'è normalmente, modificando dove serviva), comunque sii preciso: per avere l'effetto giusto è comunque necessario mantenere le altre modifiche per ottenere la camminata a 9 frame. :sisi:
  9. Intendi ridimensionare proprio la finestra di gioco giusto?

     

    Qua c'è uno script che sembra adatto al tuo caso.

    Io sinceramente non l'ho potuto provare, perché il mio pc non regge i comandi API, ma di per sé funziona.

    Pare ci fosse un bug o due, ma qualcuno potrebbe sempre aggiustarlo, o potresti provarci tu ; )

    Cambiare risoluzione dello schermo

     

     

    #==============================================================================

     

    # ■ Win32API

    #------------------------------------------------------------------------------

    # by Squall squall@loeher.znn.com

    # Change the window size

    # I must thank cybersam for his mouse and keyboard scripts. they were very

    # useful finding some winapi function.

    #

    # Ce script a été modifié par Sunmat pour une gestion fonctionnelle

    # de la supperposition.

    # les valeurs de la taille sont aux lignes 71 et 72

    #==============================================================================

     

    class Win32API

    #--------------------------------------------------------------------------

    # ● define constant

    #--------------------------------------------------------------------------

    GAME_INI_FILE = ".\\Game.ini" # define "Game.ini" file

    HWND_TOPMOST = 0 # window always active

    HWND_TOP = -1 # window active when used only

    SWP_NOMOVE = 0 # window pos and sizes can be changed

    #--------------------------------------------------------------------------

    # ● Win32API.GetPrivateProfileString // check your game title in Game.ini

    #--------------------------------------------------------------------------

    def Win32API.GetPrivateProfileString(section, key)

    val = "\0"*256

    gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')

    gps.call(section, key, "", val, 256, GAME_INI_FILE)

    val.delete!("\0")

    return val

    end

    #--------------------------------------------------------------------------

    # ● Win32API.FindWindow // cherche la fenetre RGSS

    #--------------------------------------------------------------------------

    def Win32API.FindWindow(class_name, title)

    fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')

    hWnd = fw.call(class_name, title)

    return hWnd

    end

    #--------------------------------------------------------------------------

    # ● Win32API.SetWindowPos // change la position et la taille de la fenetre

    #--------------------------------------------------------------------------

    def Win32API.SetWindowPos(w, h)

    title = Win32API.GetPrivateProfileString("Game", "Title")

    hWnd = Win32API.FindWindow("RGSS Player", title)

    swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')

    win = swp.call(hWnd, HWND_TOP, 0, 0, w + 6, h + 32, 0)

     

    #la ligne si dessous correspond à la fenetre supérieur aux autres

    #win = swp.call(hWnd, HWND_TOPMOST, 0, 0, w + 6, h + 32, SWP_NOMOVE)

    return win

    end

    #--------------------------------------------------------------------------

    # ● Win32API.client_size // check the window width and height

    #--------------------------------------------------------------------------

    def Win32API.client_size

    title = Win32API.GetPrivateProfileString("Game", "Title")

    hWnd = Win32API.FindWindow("RGSS Player", title)

    rect = [0, 0, 0, 0].pack('l4')

    Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(hWnd, rect)

    width, height = rect.unpack('l4')[2..3]

    return width, height

    end

    end

     

    #==============================================================================

    # ■ proceed with creation of the window

    #------------------------------------------------------------------------------

    # the width and height variables set the screen size.

    #==============================================================================

    $width = 800

    $height = 600

    win = Win32API.SetWindowPos($width, $height)

    if(win == 0)

    p "Size change has failed!"

    end

     

    #==============================================================================

    # ■ Game_Player

    #------------------------------------------------------------------------------

    #  remade to be compatible with change sreen size scrîpt

    #==============================================================================

     

    class Game_Player

    #--------------------------------------------------------------------------

    # ● define constant

    #--------------------------------------------------------------------------

    CENTER_X = ($width/2 - 16) * 4 # X coordinate in the center of the screen

    CENTER_Y = ($height/2 - 16) * 4 # Y coordinate in the center of the screen

    end

     

    #==============================================================================

    # ■ Spriteset_Map //squall@loeher.zzn.com

    #------------------------------------------------------------------------------

    # remade to be compatible with change sreen size scrîpt

    #==============================================================================

     

    class Spriteset_Map

    #--------------------------------------------------------------------------

    # ● Initialize

    #--------------------------------------------------------------------------

    def initialize

    if $game_map.width >= 25 and $game_map.height >= 19

    $width2 = $width

    $height2 = $height

    elsif $game_map.width >= 25 and $game_map.height

    $width2 = $width

    $height2 = 480

    elsif $game_map.width = 19

    $width2 = 640

    $height2 = $height

    elsif $game_map.width

    $width2 = 640

    $height2 = 480

    else

    $width2 = $width

    $height2 = $height

    end

    @viewport1 = Viewport.new(0, 0, $width2, $height2)

    @viewport2 = Viewport.new(0, 0, $width2, $height2)

    @viewport3 = Viewport.new(0, 0, $width2, $height2)

    @viewport4 = Viewport.new(640, 0, $width2-640, 480)

    @viewport5 = Viewport.new(0, 480, 640, $height2-480)

    @viewport6 = Viewport.new(640, 480, $width2-640, $height2-480)

     

    #@viewport1 = Viewport.new(0, 0, 640, 480)

    @viewport2.z = 200

    @viewport3.z = 5000

     

    @tilemap = Tilemap.new(@viewport1)

    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)

    for i in 0..6

    autotile_name = $game_map.autotile_names

    @tilemap.autotiles = RPG::Cache.autotile(autotile_name)

    end

    @tilemap.map_data = $game_map.data

    @tilemap.priorities = $game_map.priorities

     

    @panorama = Plane.new(@viewport1)

    @panorama.z = -1000

     

    @fog = Plane.new(@viewport1)

    @fog.z = 3000

     

    @character_sprites = []

    for i in $game_map.events.keys.sort

    sprite = Sprite_Character.new(@viewport1, $game_map.events)

    @character_sprites.push(sprite)

    end

    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))

     

    @weather = RPG::Weather.new(@viewport1)

     

    @picture_sprites = []

    for i in 1..50

    @picture_sprites.push(Sprite_Picture.new(@viewport2, $game_screen.pictures))

    end

     

    @timer_sprite = Sprite_Timer.new

     

    @tilemap2 = Tilemap.new(@viewport4)

    @tilemap2.tileset = RPG::Cache.tileset($game_map.tileset_name)

    @tilemap3 = Tilemap.new(@viewport5)

    @tilemap3.tileset = RPG::Cache.tileset($game_map.tileset_name)

    @tilemap4 = Tilemap.new(@viewport6)

    @tilemap4.tileset = RPG::Cache.tileset($game_map.tileset_name)

     

    for i in 0..6

    autotile_name = $game_map.autotile_names

    @tilemap2.autotiles = RPG::Cache.autotile(autotile_name)

    @tilemap3.autotiles = RPG::Cache.autotile(autotile_name)

    @tilemap4.autotiles = RPG::Cache.autotile(autotile_name)

    end

     

    @tilemap2.map_data = $game_map.data

    @tilemap3.map_data = $game_map.data

    @tilemap4.map_data = $game_map.data

     

    update

    end

    #--------------------------------------------------------------------------

    # ● Dispose the sprite

    #--------------------------------------------------------------------------

    def dispose

     

    @tilemap.tileset.dispose

     

    @tilemap2.tileset.dispose

    @tilemap3.tileset.dispose

    @tilemap4.tileset.dispose

     

    for i in 0..6

    @tilemap.autotiles.dispose

     

    @tilemap2.autotiles.dispose

    @tilemap3.autotiles.dispose

    @tilemap4.autotiles.dispose

     

    end

     

    @tilemap.dispose

     

    @tilemap2.dispose

    @tilemap3.dispose

    @tilemap4.dispose

     

    @panorama.dispose

    @fog.dispose

     

    for sprite in @character_sprites

    sprite.dispose

    end

     

    @weather.dispose

     

    for sprite in @picture_sprites

    sprite.dispose

    end

     

    @timer_sprite.dispose

    @viewport1.dispose

    @viewport2.dispose

    @viewport3.dispose

     

    @viewport4.dispose

    @viewport5.dispose

    @viewport6.dispose

     

    end

    #--------------------------------------------------------------------------

    # ● Update the sprite

    #--------------------------------------------------------------------------

    def update

     

    if @panorama_name != $game_map.panorama_name or

    @panorama_hue != $game_map.panorama_hue

    @panorama_name = $game_map.panorama_name

    @panorama_hue = $game_map.panorama_hue

    if @panorama.bitmap != nil

    @panorama.bitmap.dispose

    @panorama.bitmap = nil

    end

    if @panorama_name != ""

    @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)

    end

    Graphics.frame_reset

    end

     

    if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue

    @fog_name = $game_map.fog_name

    @fog_hue = $game_map.fog_hue

    if @fog.bitmap != nil

    @fog.bitmap.dispose

    @fog.bitmap = nil

    end

    if @fog_name != ""

    @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)

    end

    Graphics.frame_reset

    end

     

    @tilemap.ox = $game_map.display_x / 4

    @tilemap.oy = $game_map.display_y / 4

    @tilemap.update

     

    #if @tilemap.ox > $game_map.width * 32 - $width

    #@tilemap.ox = $game_map.width * 32 - $width

    #end

    #if @tilemap.oy > $game_map.width * 32 - $height

    #@tilemap.oy = $game_map.height * 32 - $height

    #end

     

    @tilemap2.ox = @tilemap.ox + 640

    @tilemap2.oy = @tilemap.oy

    @tilemap2.update

     

    @tilemap3.ox = @tilemap.ox

    @tilemap3.oy = @tilemap.oy + 480

    @tilemap3.update

     

    @tilemap4.ox = @tilemap.ox + 640

    @tilemap4.oy = @tilemap.oy + 480

    @tilemap4.update

     

    @panorama.ox = $game_map.display_x / 8

    @panorama.oy = $game_map.display_y / 8

     

    @fog.zoom_x = $game_map.fog_zoom / 100.0

    @fog.zoom_y = $game_map.fog_zoom / 100.0

    @fog.opacity = $game_map.fog_opacity

    @fog.blend_type = $game_map.fog_blend_type

    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox

    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy

    @fog.tone = $game_map.fog_tone

     

    for sprite in @character_sprites

    sprite.update

    end

     

    @weather.type = $game_screen.weather_type

    @weather.max = $game_screen.weather_max

    @weather.ox = $game_map.display_x / 4

    @weather.oy = $game_map.display_y / 4

    @weather.update

     

    for sprite in @picture_sprites

    sprite.update

    end

     

    @timer_sprite.update

     

    @viewport1.tone = $game_screen.tone

    @viewport1.ox = $game_screen.shake

    @viewport3.color = $game_screen.flash_color

    @viewport1.update

    @viewport3.update

    end

    end

    class Game_Map

    #--------------------------------------------------------------------------

    # ● Scroll the map down

    # distance : Distance to scroll in real units (4 = 1 pixel).

    #--------------------------------------------------------------------------

    def scroll_down(distance)

    if $height / 32.0

    @display_y = [@display_y + distance, (self.height - ($height / 32.0)) * 128].min

    else

    @display_y = [@display_y + distance, (self.height - 15) * 128].min

    end

    end

    #--------------------------------------------------------------------------

    # ● Scroll the map left

    # distance : Distance to scroll in real units (4 = 1 pixel).

    #--------------------------------------------------------------------------

    def scroll_left(distance)

    @display_x = [@display_x - distance, 0].max

    end

    #--------------------------------------------------------------------------

    # ● Scroll the map right

    # distance : Distance to scroll in real units (4 = 1 pixel).

    #--------------------------------------------------------------------------

    def scroll_right(distance)

    if $width / 32.0

    @display_x = [@display_x + distance, (self.width - ($width / 32.0)) * 128].min

    else

    @display_x = [@display_x + distance, (self.width - 20) * 128].min

    end

    end

    #--------------------------------------------------------------------------

    # ● Scroll the map up

    # distance : Distance to scroll in real units (4 = 1 pixel).

    #--------------------------------------------------------------------------

    def scroll_up(distance)

    @display_y = [@display_y - distance, 0].max

    end

    end

     

     

     

    EDIT: riscritto, non so per quale ragione ma il colore dava problemi .__.

  10. Per l'HUD penso tu abbia bisogno di uno script apposito, ma penso sia fattibile anche ad eventi circolare; per adesso prova a cercare in sezione, oppure, niente di particolare, per ora puoi farti ad eventi un hud lineare. :sisi:

     

    Ricorda sempre di cercare prima di chiedere: 8 direzioni.

    Prima devi cercare, poi se non trovi niente con una ricerca attenta, chiedi pure, ti si aiuta volentieri. : )

  11. Sì ma per modificare che intendi? Ne hai già una fatta a script?

     

    Per farla ad eventi vediamo...

    Non mi è ancora capitato di farne una barra, ma può andare bene usare due immagini: la barra verde della vita e quella grigia che indica la barra vuota; metti come immagine 3 lo sfondo, con un ritaglio in corrispondenza della barra; l'immagine 1 sarà la barra grigia, che sarà visibile per il ritaglio. Come immagine 2, quindi sopra alla barra grigia ma con priorità inferiore rispetto allo sfondo, mettiamo la barra verde.

    Ora, in base al danno che l'avversario riceve, sposterai la barra verde verso la zona dello sfondo dove non sarà visibile, simulando l'abbassamento degli HP. Per le barre di vita indicate dai quadratini verdi, ti basterà cambiare immagine ogni volta che una barra termina (lo puoi comunicare al gioco con una condizione se), riposizionare la barra nella posizione di partenza(vita piena) e continuare; con una condizione se controlli ogni volta se le barre in totale sono finite; se sì, il nemico è sconfitto.

     

    Sono andato un po' a braccio, ma per me questa era ancora una questione teorica : P

     

    Con l'RGSS comunque non hai bisogno di nascondere la barra, puoi creare un rettangolo con dimensioni legate direttamente agli HP.

  12. Puoi farlo via script o ad eventi.

    Ad eventi devi utilizzare delle immagini controllando tramite conditional branch (condizione SE) le magie che puoi utilizzare, e in un processo parallelo associare il tutto ad uno dei tasti supportati dal programma(per avere tutta la tastiera a disposizione serve uno script apposito) con il controllo tasti oppure con un conditional branch (se tasto è premuto), in questo caso però devi inserire anche almeno un wait da 1 frame.

     

    Che intendi per "modificare" la barra nemico?

×
×
  • Create New...