¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3686 miembros registrados.
El último usuario registrado es Derinne.

Nuestros miembros han publicado un total de 82020 mensajes en 11608 argumentos.
Navega con Google Chrome
[DESCARGA]

[RMXP/VX] Sistema de Posiciones Visual

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP/VX] Sistema de Posiciones Visual

Mensaje por Wecoc el 2012-07-04, 03:25

He decidido hacer una ventana de cambio de posiciones mas visual usando el Soporte para posiciones
(Se abre desde el Menú --> Posiciones)
Sigue siendo muy sencilla pero mas "bonita" que una simple Window_Command, creo yo xDD

Screen:
Spoiler:


Imagen usada:

(VPos_Squares)

Script (XP):

Código:
#=============================================================
# Sistema de Posiciones Visual by Wecoc (versión para XP)
# Este script incluye la herramienta para scripters
# "Soporte para posiciones" posteada en Mundo Maker
#=============================================================

#=============================================================
# SOPORTE PARA POSICIONES by Orochii Zouveleki & Pokepik
#=============================================================

#-------------------------------------------------------------
# Game_Actor
#-------------------------------------------------------------

class Game_Actor
  attr_accessor :position
 
  alias ozrow_setup setup
  def setup(actor_id)
    ozrow_setup(actor_id)
    @position = $data_classes[@class_id].position
  end
 
  def position
    return @position
  end
 
  def change_position
    @position = @position==0 ? 2 : 0
  end
  def change_position(pos) # ((pos va de 0 a 2))
    @position = pos
  end
end

#-------------------------------------------------------------
# Game_Party
#-------------------------------------------------------------

class Game_Party
  def random_target_actor(hp0 = false)
    roulette = []
    for actor in @actors
      if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
        position = actor.position
        n = 4 - position
        n.times do
          roulette.push(actor)
        end
      end
    end
    if roulette.size == 0
      return nil
    end
    return roulette[rand(roulette.size)]
  end
end

#-------------------------------------------------------------
# Scene_Menu (Modificado)
#-------------------------------------------------------------

class Scene_Menu
  def main
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Posiciones"
    s5 = "Guardar"
    s6 = "Salir"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_system.save_disabled
      @command_window.disable_item(4)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.actors.size == 0 and @command_window.index < 4
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @command_window.index
      when 0  # item
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Item.new
      when 1  # skill
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # position
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Position.new
      when 4  # save
        if $game_system.save_disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when 5  # end game
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end
end

#=============================================================
# SISTEMA DE POSICIONES VISUAL by Wecoc
#=============================================================

#-------------------------------------------------------------
# Window_Base
#-------------------------------------------------------------

class Window_Base < Window
  def draw_actor_backgraphic(actor, x, y)
    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
    cw = bitmap.width / 4
    ch = bitmap.height / 4
    src_rect = Rect.new(0, ch*3, cw, ch)
    #self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
    self.contents.blt(x, y - ch / 2, bitmap, src_rect)
  end
end

#-------------------------------------------------------------
# Window_Position
#-------------------------------------------------------------

class Window_Position < Window_Base
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  def refresh
    self.contents.clear
    squares = RPG::Cache.picture("VPos_Squares")
    src_rect = Rect.new(0, 0, squares.width, squares.height)
    self.contents.blt(208, 148, squares, src_rect)
    #self.contents.draw_text(100,100,32,32,@index.to_s)
    self.contents.draw_text(380,152,128,32,"Delante")
    self.contents.draw_text(380,152+42,128,32,"Medio")
    self.contents.draw_text(380,152+42*2,128,32,"Atrás")
 
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = 210 + i / 4 / 3 * 24 + i % 4 * 42
      case actor.position
        when 0 then actor_y = 150
        when 1 then actor_y = 150+42
        when 2 then actor_y = 150+42*2
      end
      draw_actor_backgraphic(actor, actor_x, actor_y)
    end
  end
  def update_cursor_rect
    x = 210 + @index / 4 / 3 * 24 + @index % 4 * 42
    y = 150 + @index / 4 % 3 * 42
    self.cursor_rect.set(x, y, 32, 32)
  end
  def update
    super
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      if @index % 4 < 3
        @index += 1
      else
        @index -= 3
      end
      refresh
    end
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      if @index % 4 > 0
        @index -= 1
      else
        @index += 3
      end
      refresh
    end
    if Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      if @index < 8
        @index += 4
      else
        @index -= 8
      end
      refresh
    end
    if Input.repeat?(Input::UP)
      $game_system.se_play($data_system.cursor_se)
      if @index > 3
        @index -= 4
      else
        @index += 8
      end
      refresh
    end
    if Input.trigger?(Input::C)
      case @index
      when 0
        $game_party.actors[0].change_position(0)
        $game_system.se_play($data_system.equip_se)
      when 1
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 2
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 3
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end     
       
      when 4
        $game_party.actors[0].change_position(1)
        $game_system.se_play($data_system.equip_se)
      when 5
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 6
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 7
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end       
     
      when 8
        $game_party.actors[0].change_position(2)
        $game_system.se_play($data_system.equip_se)
      when 9
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 10
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 11
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end   
      end
      refresh
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(3)
    end
    update_cursor_rect
  end
end

#-------------------------------------------------------------
# Scene_Position
#-------------------------------------------------------------

class Scene_Position
  def main
    @pos_window = Window_Position.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      @pos_window.update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @pos_window.dispose
  end
end

Edito: Me han pedido por MP que si lo podía hacer para VX, así que también os lo pongo, no es un arreglo demasiado complicado xDD

Script (VX):

Código:
#=============================================================
# Sistema de Posiciones Visual by Wecoc (versión para VX)
# Este script incluye la herramienta para scripters
# "Soporte para posiciones" posteada en Mundo Maker
#=============================================================

#=============================================================
# SOPORTE PARA POSICIONES by Orochii Zouveleki & Pokepik
#=============================================================

#-------------------------------------------------------------
# Game_Actor
#-------------------------------------------------------------

class Game_Actor
  attr_accessor :position
 
  alias ozrow_setup setup
  def setup(actor_id)
    ozrow_setup(actor_id)
    @position = $data_classes[@class_id].position
  end
 
  def position
    return @position
  end
 
  def change_position
    @position = @position==0 ? 2 : 0
  end
  def change_position(pos) # ((pos va de 0 a 2))
    @position = pos
  end
end

#-------------------------------------------------------------
# Game_Party
#-------------------------------------------------------------

class Game_Party
  def random_target_actor(hp0 = false)
    roulette = []
    for actor in @actors
      if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
        position = actor.position
        n = 4 - position
        n.times do
          roulette.push(actor)
        end
      end
    end
    if roulette.size == 0
      return nil
    end
    return roulette[rand(roulette.size)]
  end
end

#-------------------------------------------------------------
# Scene_Menu (Modificado)
#-------------------------------------------------------------

class Scene_Menu
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = "Posiciones"#Vocab::status
    s5 = Vocab::save
    s6 = Vocab::game_end
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    if $game_party.members.size == 0          # If number of party members is 0
      @command_window.draw_item(0, false)    # Disable item
      @command_window.draw_item(1, false)    # Disable skill
      @command_window.draw_item(2, false)    # Disable equipment
      @command_window.draw_item(3, false)    # Disable Posiciones
    end
    if $game_system.save_disabled            # If save is forbidden
      @command_window.draw_item(4, false)    # Disable save
    end
  end
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2    # Skill, equipment
        start_actor_selection
      when 3      # Posiciones
        $scene = Scene_Position.new
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end
end

#=============================================================
# SISTEMA DE POSICIONES VISUAL by Wecoc
#=============================================================

#-------------------------------------------------------------
# Window_Base
#-------------------------------------------------------------

class Window_Base < Window
  def draw_character_back(character_name, character_index, x, y)
    return if character_name == nil
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$]./]
    if sign != nil and sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    n = character_index
    src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
    self.contents.blt(x, y - ch / 2, bitmap, src_rect)
  end
end

#-------------------------------------------------------------
# Window_Position
#-------------------------------------------------------------

class Window_Position < Window_Base
  def initialize
    super(0, 0, 544, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  def refresh
    self.contents.clear
    squares = Cache.picture("VPos_Squares")
    src_rect = Rect.new(0, 0, squares.width, squares.height)
    self.contents.blt(208, 148, squares, src_rect)
    #self.contents.draw_text(100,100,32,32,@index.to_s)
    self.contents.draw_text(380,152,128,32,"Delante")
    self.contents.draw_text(380,152+42,128,32,"Medio")
    self.contents.draw_text(380,152+42*2,128,32,"Atrás")
 
    for i in 0...$game_party.members.size
      actor = $game_party.members[i]
      ax = 210 + i / 4 / 3 * 24 + i % 4 * 42
      case actor.position
        when 0 then ay = 150
        when 1 then ay = 150+42
        when 2 then ay = 150+42*2
      end
      draw_character_back(actor.character_name, actor.character_index, ax, ay)
    end
  end
  def update_cursor_rect
    x = 210 + @index / 4 / 3 * 24 + @index % 4 * 42
    y = 150 + @index / 4 % 3 * 42
    self.cursor_rect.set(x, y, 32, 32)
  end
  def update
    super
    if Input.repeat?(Input::RIGHT)
      Sound.play_cursor
      if @index % 4 < 3
        @index += 1
      else
        @index -= 3
      end
      refresh
    end
    if Input.repeat?(Input::LEFT)
      Sound.play_cursor
      if @index % 4 > 0
        @index -= 1
      else
        @index += 3
      end
      refresh
    end
    if Input.repeat?(Input::DOWN)
      Sound.play_cursor
      if @index < 8
        @index += 4
      else
        @index -= 8
      end
      refresh
    end
    if Input.repeat?(Input::UP)
      Sound.play_cursor
      if @index > 3
        @index -= 4
      else
        @index += 8
      end
      refresh
    end
    if Input.trigger?(Input::C)
      case @index
      when 0
        $game_party.members[0].change_position(0)
        Sound.play_equip
      when 1
        if $game_party.members.size > 1
          $game_party.members[1].change_position(0)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 2
        if $game_party.members.size > 2
          $game_party.members[2].change_position(0)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 3
        if $game_party.members.size > 3
          $game_party.members[3].change_position(0)
          Sound.play_equip
        else
          Sound.play_buzzer
        end   
     
      when 4
        $game_party.members[0].change_position(1)
        Sound.play_equip
      when 5
        if $game_party.members.size > 1
          $game_party.members[1].change_position(1)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 6
        if $game_party.members.size > 2
          $game_party.members[2].change_position(1)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 7
        if $game_party.members.size > 3
          $game_party.members[3].change_position(1)
          Sound.play_equip
        else
          Sound.play_buzzer
        end     
   
      when 8
        $game_party.members[0].change_position(2)
        Sound.play_equip
      when 9
        if $game_party.members.size > 1
          $game_party.members[1].change_position(2)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 10
        if $game_party.members.size > 2
          $game_party.members[2].change_position(2)
          Sound.play_equip
        else
          Sound.play_buzzer
        end
      when 11
        if $game_party.members.size > 3
          $game_party.members[3].change_position(2)
          Sound.play_equip
        else
          Sound.play_buzzer
        end 
      end
      refresh
    end
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Menu.new(3)
    end
    update_cursor_rect
  end
end

#-------------------------------------------------------------
# Scene_Position
#-------------------------------------------------------------

class Scene_Position
  def main
    @pos_window = Window_Position.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      @pos_window.update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @pos_window.dispose
  end
end

Créditos: Wecoc, Orochii y Pokepik


Última edición por Wecoc el 2012-07-04, 04:39, editado 2 veces (Razón : bug solucionado + versión vx)
avatar
Wecoc
Administrador
Administrador



Créditos 8776

Gracias : 412

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por orochii el 2012-07-04, 03:35

Me recuerda un poco a cosas como el Melody... ¿o era los menúes de OriginalWij? xD no me acuerdo, pero en fin, está bonita, y creo que un poco más cómoda. Digo, es más fácil tener el acomodamiento de posiciones en un sólo lado, y aparte de manera visual.

Creo que va a mi proyecto de pruebas C:!, sólo que tengo que ver qué tal le va si lo integro con la versión del sistema de posiciones que había hecho Gerkt (es que tengo un montón de código que tiré en ese script x'DDDDD -código referente a cosas como daño y eso -algún día les muestro mi prueba, que ya tiene más o menos una forma -otra vez me está entrando ganas de pasar mi Ragnarökr a XP, ¡¡¡¡¡¡NOOOOOOOOOOOO!!!!!! -otra vez Orochii pensando reiniciar el juego -¿no crees que ya son muchos forks de tema Orochii? -no =D------).

En fin, que me gusta C:!!!,
Orochii Zouveleki
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6164

Gracias : 293

http://ragnarokrproject.com/

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por gerrtunk el 2012-07-04, 09:09

Yo tb lo uso xo modificado y a mi estilo, para un proyecto pequeño.

Aunque tengo un sistema de tacticas completo para el grande. Es una matriz tactica en la cual se ponen enemigos y personajes.
avatar
gerrtunk
Principiante
Principiante

0/3

Créditos 364

Gracias : 22

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por Wecoc el 2012-07-06, 01:33

La verdad es que no usé el script de gerrtunk para nada así que no lo soporta supongo. Grave error el mío D:

Un amigo mío le ha hecho un edit del script de XP, os lo pongo por si os interesa mas así. Ahora usa dos imagenes y no una: VPos_SquaresOn y VPos_SquaresOff



Screen:
Spoiler:


Código:
#=============================================================
# Sistema de Posiciones Visual by Wecoc 1.1
# Este script incluye la herramienta para scripters
# "Soporte para posiciones" posteada en Mundo Maker
#=============================================================

#=============================================================
# SOPORTE PARA POSICIONES by Orochii Zouveleki & Pokepik
#=============================================================

#-------------------------------------------------------------
# Game_Actor
#-------------------------------------------------------------

class Game_Actor
  attr_accessor :position
 
  alias ozrow_setup setup
  def setup(actor_id)
    ozrow_setup(actor_id)
    @position = $data_classes[@class_id].position
  end
 
  def position
    return @position
  end
 
  def change_position
    @position = @position==0 ? 2 : 0
  end
  def change_position(pos) # ((pos va de 0 a 2))
    @position = pos
  end
end

#-------------------------------------------------------------
# Game_Party
#-------------------------------------------------------------

class Game_Party
  def random_target_actor(hp0 = false)
    roulette = []
    for actor in @actors
      if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
        position = actor.position
        n = 4 - position
        n.times do
          roulette.push(actor)
        end
      end
    end
    if roulette.size == 0
      return nil
    end
    return roulette[rand(roulette.size)]
  end
end

#-------------------------------------------------------------
# Scene_Menu (Modificado)
#-------------------------------------------------------------

class Scene_Menu
  def main
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Posiciones"
    s5 = "Guardar"
    s6 = "Salir"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_system.save_disabled
      @command_window.disable_item(4)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.actors.size == 0 and @command_window.index < 4
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @command_window.index
      when 0  # item
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Item.new
      when 1  # skill
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # position
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Position.new
      when 4  # save
        if $game_system.save_disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when 5  # end game
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end
end

#=============================================================
# SISTEMA DE POSICIONES VISUAL by Wecoc
#=============================================================

#-------------------------------------------------------------
# Window_Base
#-------------------------------------------------------------

class Window_Base < Window
  def draw_actor_backgraphic(actor, x, y)
    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
    cw = bitmap.width / 4
    ch = bitmap.height / 4
    src_rect = Rect.new(0, ch*3, cw, ch)
    #self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
    self.contents.blt(x, y - ch / 2, bitmap, src_rect)
  end
end

#-------------------------------------------------------------
# Window_Position
#-------------------------------------------------------------

class Window_Position < Window_Base
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  def refresh
    self.contents.clear
    # Pequeño edit de Eron
    squares1 = RPG::Cache.picture("VPos_SquaresOn")
    if $game_party.actors.size > 1
      squares2 = RPG::Cache.picture("VPos_SquaresOn")
    else
      squares2 = RPG::Cache.picture("VPos_SquaresOff")
    end
    if $game_party.actors.size > 2
      squares3 = RPG::Cache.picture("VPos_SquaresOn")
    else
      squares3 = RPG::Cache.picture("VPos_SquaresOff")
    end   
    if $game_party.actors.size > 3
      squares4 = RPG::Cache.picture("VPos_SquaresOn")
    else
      squares4 = RPG::Cache.picture("VPos_SquaresOff")
    end       
    src_rect = Rect.new(0, 0, squares1.width, squares1.height)
   
    self.contents.blt(208, 148, squares1, src_rect)
    self.contents.blt(208+42, 148, squares2, src_rect)
    self.contents.blt(208+42*2, 148, squares3, src_rect)
    self.contents.blt(208+42*3, 148, squares4, src_rect)
    #self.contents.draw_text(100,100,32,32,@index.to_s)
    self.contents.draw_text(380,152,128,32,"Delante")
    self.contents.draw_text(380,152+42,128,32,"Medio")
    self.contents.draw_text(380,152+42*2,128,32,"Atrás")
 
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = 210 + i / 4 / 3 * 24 + i % 4 * 42
      case actor.position
        when 0 then actor_y = 150
        when 1 then actor_y = 150+42
        when 2 then actor_y = 150+42*2
      end
      draw_actor_backgraphic(actor, actor_x, actor_y)
    end
  end
  def update_cursor_rect
    x = 210 + @index / 4 / 3 * 24 + @index % 4 * 42
    y = 150 + @index / 4 % 3 * 42
    self.cursor_rect.set(x, y, 32, 32)
  end
  def update
    super
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      if @index % 4 < 3
        @index += 1
      else
        @index -= 3
      end
      refresh
    end
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      if @index % 4 > 0
        @index -= 1
      else
        @index += 3
      end
      refresh
    end
    if Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      if @index < 8
        @index += 4
      else
        @index -= 8
      end
      refresh
    end
    if Input.repeat?(Input::UP)
      $game_system.se_play($data_system.cursor_se)
      if @index > 3
        @index -= 4
      else
        @index += 8
      end
      refresh
    end
    if Input.trigger?(Input::C)
      case @index
      when 0
        $game_party.actors[0].change_position(0)
        $game_system.se_play($data_system.equip_se)
      when 1
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 2
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 3
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(0)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end     
       
      when 4
        $game_party.actors[0].change_position(1)
        $game_system.se_play($data_system.equip_se)
      when 5
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 6
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 7
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(1)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end       
     
      when 8
        $game_party.actors[0].change_position(2)
        $game_system.se_play($data_system.equip_se)
      when 9
        if $game_party.actors.size > 1
          $game_party.actors[1].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 10
        if $game_party.actors.size > 2
          $game_party.actors[2].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      when 11
        if $game_party.actors.size > 3
          $game_party.actors[3].change_position(2)
          $game_system.se_play($data_system.equip_se)
        else
          $game_system.se_play($data_system.buzzer_se)
        end   
      end
      refresh
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(3)
    end
    update_cursor_rect
  end
end

#-------------------------------------------------------------
# Scene_Position
#-------------------------------------------------------------

class Scene_Position
  def main
    @pos_window = Window_Position.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      @pos_window.update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @pos_window.dispose
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 8776

Gracias : 412

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por exellomenos el 2012-07-06, 15:01

Wecoc perdona pero no entiendo mucho el script... osea

¿Sirve para cambiar de posición a los jugadores?
avatar
exellomenos
Veterano
Veterano

1/3

Créditos 190

Gracias : 1

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por Dorvin el 2012-07-06, 15:05

Lo que hace es que puedas elegir la posición como vien dices para que en la batalla unos ataquen antes y otros ataquen despues... XD
avatar
Dorvin
Veterano
Veterano

0/3

Créditos 325

Gracias : 22

http://thesexydeath.webnode.es/

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por Wecoc el 2012-07-06, 16:26

Dorvin escribió:Lo que hace es que puedas elegir la posición como vien dices para que en la batalla unos ataquen antes y otros ataquen despues... XD

Bueno, a medias xD Sirve para cambiar la posición, eso es verdad, pero no altera el orden de ataque.
Está todo explicado aquí:
http://www.mundo-maker.com/t6170-herramienta-de-scripter-soporte-para-posiciones

Ejemplo de uso de las posiciones:
- Los que estan Delante hacen mas daño a los enemigos pero les hacen mas daño a ellos y/o hay mas probabilidad de que los ataquen a ellos.
- Los que estan en el Medio tienen sus características default.
- Los que estan Atrás hacen menos daño y también les hacen menos daño.

Pero el script lo único que hace es permitir cambiar de posición en medio del juego de esta manera visual, no juega con ésas características, para eso ya está el script de gertrunk.
avatar
Wecoc
Administrador
Administrador



Créditos 8776

Gracias : 412

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Sistema de Posiciones Visual

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

Permisos de este foro:
No puedes responder a temas en este foro.