¡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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Hola mucho gusto
por Hk Diamond Hoy a las 13:49

» [AYUDA]Hootshot de moghunter
por Rudy_kinneas Hoy a las 12:03

» Holaaa a tod@s!!!
por nacho Hoy a las 09:47

» SoraDeathss se presenta!
por chronoMxx Hoy a las 07:50

» {AYUDA}Blizz-ABS Script
por chronoMxx Hoy a las 06:45

» las cosas como son...
por Bleuw Hoy a las 04:18

» Busco artistas graficos para proyecto serio
por Rudy_kinneas Ayer a las 20:52

» Duda con música en RPG MV
por Fleabass Ayer a las 20:25

» Recopilación de páginas con recursos RPG Maker
por RiKennedy-Maker Ayer a las 20:00

» [DUDA] Titulo de RPGM XP con varias imagenes
por Wecoc Ayer a las 08:38

Afiliados
Estadísticas
Tenemos 3381 miembros registrados.
El último usuario registrado es Hk Diamond.

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

Topic de los scripts abandonados

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

Topic de los scripts abandonados

Mensaje por Wecoc el 2012-04-17, 15:43

Creo este topic para que los scripters publiquen sus cosas.
Muchos scripters hemos dejado algunos scripts a medias porque eran demasiado difíciles, incluían cosas que desconocemos (WinAPI, clases y módulos ocultos, etc) , nos aburrieron, nos olvidamos de ellos o por lo que sea.

Este topic sirve para que los pongais aquí, así si otro lo ve y quiere remontar luego el script a medias, o le sirve de idea para hacer uno, o conoce de la existencia de uno que hace lo mismo, etc. que lo publique. NO ES UN POST DE PEDIDOS en plan "yo no pude hacerlo, que alguien me lo haga", creo que queda bastante claro.

Se ve que el problema de algunos scripters a veces es la falta de ideas, por eso lo pongo.
Para hacerlo mas facil seguid estas pautas.

- Título: Título del script.
- Información: Qué querías hacer con el script. (Posibles referencias)
- Plataforma: Para qué maker era; XP, VX o Ace.
- Motivo del abandono: Por qué dejaste de lado el script.
- Porcentaje de estado: Si habías hecho mucho o no, en un porcentaje estimado.
- Screen: (opcional) Una screen de lo que llegaste a conseguir.
- Screen referencia: (opcional) Una imagen de referencia de lo que tenía que ser.
- Demo: (opcional) Demo del proyecto donde estabas construyendo el script.

Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Pokepik el 2012-04-17, 18:44

Me parece buena idea.

Que yo recuerde tengo tres, lo que pasa es que soy muy mala con los scripts y me pasé de lista tres pueblos. Especialmente para los dos primeros creo que lo mejor será que baje de las nubes.

##############################################################################

- Título: ¿Nuevos blendtype?
- Información: Quise investigar un poco el funcionamiento del blendtype, sin éxito. Supongo que este es un campo que la mayoría de scripters de RGSS remueven en algún momento. El funcionamiento de los blendtype es un misterio, y sin saberlo dificilmente se puede aplicar mucha cosa. Sí que encontré algunas cosas interesantes, como el RGSS Shader System de JoaoB pero no conseguí nada en especial.
El maker tiene 3 blend_types por defecto: Normal, Additive y Negative. La cumbre utópica y suprema sería lograr los equivalentes a los que tienen los programas de dibujo: Normal, Darken, Lighten, Hue, Saturation, Color, Luminance, Screen, Multiply, Overlay, Hard/Soft Light, Difference, Dodge, Burn, Exclusion.
- Plataforma: XP / VX / Ace, en teoría va igual para todos.
- Motivo del abandono: Falta de conocimiento del funcionamiento de los blend_type.
- Porcentaje: NO.

##############################################################################

- Título: Adaptar VRWinComponent ¿o kernel? al fullscreen del maker
- Información: Me dí cuenta que el maker tiene opción de fullscreen (Alt+Enter) pero en cambio su botón de maximizar de la ventana, que por sentido común debería hacer lo mismo, está desactivado. El script pues haría que al clicar ese botón se activara la fullscreen. Un detallito de nada, vaya, jajajaja.
- Plataforma: XP / VX / Ace, en teoría va igual para todos.
- Motivo del abandono: Es de locos. Seguramente la clave estaría en el Win32 o como se llame, pero es que no tengo ni idea y retocar API es peligroso, no quiero perder el ordenador por una tontería XD
- Porcentaje: NO.
- Demo: No. Total, solo tengo esto, y no lo he hecho yo lo saqué de no se qué carpeta de Windows y no hace nada.
Spoiler:
Código:
=begin block
module Kernel
  alias default_syscall syscall
  def syscall(*args)
    default_syscall(*args)
  end
  alias default_array Array
  def Array(*args)
    default_array(*args)
  end
  alias default_exit exit
  def exit(*args)
    default_exit(*args)
  end
  alias default_abort abort
  def abort(*args)
    $game_system.se_play($data_system.cursor_se)
    default_abort(*args)
  end
end
=end

class VRWinComponent
  def maximizebox
    return self.winstyle.getter(WStyle::WS_MAXIMIZEBOX)
  end
  def maximizebox=(bool)
    self.winstyle.setter(WStyle::WS_MAXIMIZEBOX, bool)
  end
  def minimizebox
    return self.winstyle.getter(WStyle::WS_MINIMIZEBOX)
  end
  def minimizebox=(bool)
    self.winstyle.setter(WStyle::WS_MINIMIZEBOX, bool)
  end
  def sizebox
    return self.winstyle.getter(WStyle::WS_SIZEBOX)
  end
  def sizebox=(bool)
    self.winstyle.setter(WStyle::WS_SIZEBOX, bool)
  end
  def tabstop
    return self.winstyle.getter(WStyle::WS_TABSTOP)
  end
  def tabstop=(bool)
    self.winstyle.setter(WStyle::WS_TABSTOP, bool)
  end
end

##############################################################################

- Título: Menú estilo J2H // CMS GreenBlue Ppik
- Información: Quise hacer un CMS del estilo del juego J2H.
- Plataforma: XP
- Motivo del abandono: Me cansé del proyecto. Sweat
- Porcentaje de estado: 20%
- Screen:
Spoiler:
Claro el aspecto gráfico no importa demasiado aquí.
- Screen referencia:
Spoiler:
- Demo: No. Pero subo el script.
Spoiler:
Código:
#------------------------------------------------------------------------------
# CMS GreenBlue Ppik - version 1.0
#------------------------------------------------------------------------------

class Window_Base < Window
  def draw_hero(actor, x, y)
    bitmap = RPG::Cache.character($game_actors[actor].character_name,
    $game_actors[actor].character_hue)
    cw = bitmap.width  / 4
    ch = bitmap.height / 4
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  end
  def draw_hpbar(actor, x, y)
    meter = RPG::Cache.picture("menu_pv")   
    cw = meter.width * $game_actors[actor].hp / $game_actors[actor].maxhp
    ch = meter.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y - ch, meter, src_rect)
  end 
  def draw_spbar(actor, x, y)
    meter = RPG::Cache.picture("menu_pm")   
    cw = meter.width * $game_actors[actor].sp / $game_actors[actor].maxsp
    ch = meter.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y - ch, meter, src_rect)
  end 
end

class Window_Charmenu < Window_Base
  def initialize
    super(230, 145, 170, 170)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    refresh
  end
  def refresh
    self.contents.clear
    draw_hero(1, 68, 48)
    draw_hpbar(1, 28, 71)
    draw_spbar(1, 28, 92)
  end
end

class Scene_Menu
  def main
    @back = Sprite.new
    @back.bitmap = RPG::Cache.picture("menu_options")
    @charmenu = Window_Charmenu.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
      Graphics.freeze
      @back.dispose
    end
  end
  def update
    if Input.trigger?(Input::UP) # Equipo
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Equip.new
      @charmenu.dispose
      return
    end
    if Input.trigger?(Input::LEFT) # Estado
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Status.new
      @charmenu.dispose
      return
    end
    if Input.trigger?(Input::RIGHT) # Guardar
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Save.new
      @charmenu.dispose
      return
    end
    if Input.trigger?(Input::DOWN) # Guardar
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_End.new
      @charmenu.dispose
      return
    end
    if Input.trigger?(Input::B) # Cancelar
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      @charmenu.dispose
      return
    end
  end
end

Pokepik
Principiante
Principiante

0/3

Créditos 1834

Gracias : 4

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Wecoc el 2012-04-17, 21:47

Este último sí que se podría acabar, pero los otros dos los veo directamente imposibles.
Un amigo mío me dijo una vez "Con scripts se puede hacer todo", pero de aquí a que sea verdad... xDD
El del menú igual lo intentaré continuar un poco, a ver si me animo.


Pongo alguno de mis desastres yo. Yo tengo muchísimos y cuanto más regire el PC mas encontraré, pero en fin aquí los que recuerdo por ahora:

##################################################################################
(me gusó la rejilla xD)


Título: Plain_Mode7
Información: El aspecto 3D que tiene el Mode7 (o bueno, yo uso el Neo_Mode7) nunca me ha acabado de gustar para un juego de RPG maker, así que quise intentar darle otro aire. En el Neo_M7 como ya sabréis los Vertical Sprites quedan rectos normales, mientra que el plano del suelo es el que queda inclinado. Mi intención era hacerlo al revés. Lo que pasa es que no es tan facil como creía, y bueno, hasta donde llegué, queda FATAL xDD
Plataforma: RMXP
Motivo del abandono: No llegué a lo que quería por mas que lo intenté, el Neo_Mode7 (script usado como punto de partida) no es sencillo. Además, al salir el genial H-Mode7, aunque no era lo que yo andaba buscando, me di por vencido.
Porcentaje de estado: 20~30
Screen:
Spoiler:
Screen referencia: ("Pokemon XD" con ángulo modificado)
Spoiler:
Demo: LINK

##################################################################################

Título: Hextiles
Información: Encontré un link interesante sobre los Hextiles, y pensé que se podría intentar editar completamente el module Tilemap para poder hacer juegos de ese tipo. El problema es que eso no es demasiado factible porque como ya he comprobado mas de una vez, cambiar el módulo tilemap cambia la lectura de los tiles en el juego pero no en el editor. Otra posibilidad sería hacer WPS para el tilemap y editar el movimiento sprite_character para hexagonalizarlo, que es lo que quise intentar.
Plataforma: RMXP
Motivo del abandono: ¿Cómo se hacen 6 direcciones con 4 flechas? ¿Como hago desniveles de manera que la lectura de la coordenada del sprite no quede alterada? ¿De qué tamaño tengo que hacer los hexágonos para encuadrarlos con tiles de 32x32? Me salieron estas dudas y muchas mas y no pude hacer mucho con ello.
Screens referencia:
Spoiler:



##################################################################################

Título: Tienda estilo Fall Out 3
Información: La verdad es que me gustaría un estilo de tienda así para Birdsite, tipo Fall Out 3, Oblivion, Skyrim, Diablo II etc. Tienen estas diferencias en cuanto a la tienda default:
- El mercenario tiene número finito de los ítems que vende.
- El mercenario tiene número definido de dinero.
- Si tu vendes algo al mercenario, luego el mercenario también lo pone a la venta.
- Si tu vendes un número x al mercenario, que luego el mercenario te pueda vender los que tenía de ese ítem + x.
- (opcional) Scene_Buy y Scene_Shop salen en una misma escena, una encima de la otra y se van refreshando conjuntamente.
Creo que solo diciendo estas propiedades ya se ve claro por qué tuve que abandonar el script xD
Plataforma: RMXP
Motivo del abandono: Hay dos problemas principales con este tipo de tienda; 1) Hay que conseguir que cuando salgas de la escena y vuelvas a entrar, siga tal y como estaba y no se reinicie todo (si tu dejas al mercenario con 1 de oro, no puede ser que inmediatamente cuando vuelvas a hablar con él tenga otra vez 1000) 2) Hay que rehacer la lista de ítems del mercenario por completo. Cada mercenario es distinto y único, pero hacer una escena de tienda para cada uno es una tontería.

##################################################################################

Título: Project3 (Sin título)
Información: Quise hacer un nuevo estilo para VX porque el default no me gusta. Era una modificación del "Basic RTP" (no default) del XP para VX.
Plataforma: RMVX
Motivo del abandono: Primero, me quedé sin VX porque se me acabaron los 30 días de prueba xDDD, segundo, me estaba dando demasiados problemas con el pathfinding y con la pasabilidad. Aún así lo que más me frenó es que luego para hacer un juego todo se vuelve extremamente complicado, y eso no interesa en absoluto.
Screen:
Spoiler:


Demo: LINK


Última edición por Wecoc el 2012-04-18, 13:11, editado 1 vez

Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por orochii el 2012-04-18, 02:30

8F me interesan el menú tipo J2H (que no sé cuál será el juego pero yaaa veréee...), la tienda de Fallout (que creo tengo una idea para solucionar eso de los inventarios. Es buscar una forma de darle una ID a cada tienda, y que entonces el llamado de tienda asigne el nuevo inventario SOLO si dicho inventario no ha sido "creado", cosa que sería otro flag... es cuestión de manejar flags e inventarios para cada tienda y guardarlos dentro de los datos de partida, y de esa misma forma se hacen contenedores y cuestiones así).
Y el del "nuevo estilo VX". De hecho ese script me interesaba mucho Wecoc D:, lo habías mostrado más antes en una quedada milagrosa en el chatbox D:. Ahora me apoderaré de éeeel muajajajajaja.

En cuanto a mis scripts fallidos, el que tengo ahora que recuerdo es éste...

##############################################################################

- Título: Sistema de batalla tipo Live a Live
- Información: Pues... un sistema de batalla al estilo de ese juego, Live a Live de SNES. Yo amo ese inche juego xD, por sus batallas. Por todo en general, pero me encanta ese sistema de batalla.
Es un sistema que anda como a la mitad entre batalla táctica y RPG por turnos.
Te mueves por una rejilla, cada movimiento gasta un "turno", las acciones tuyas y las de los enemigos gastan también "turnos" (pueden gastar varios para ejecutarse o varios después como "recarga").
Las acciones aparte, como te mueves por una rejilla, tienen rangos muy al estilo de los juegos tácticos. De hecho los rangos casi que tienen cualquier "forma" xD. Todo lo que quepa en una rejilla de 7x7.
- Plataforma: VX. No sé, algunas cosas las empiezo como al random xD?.
- Motivo del abandono: Logré montar la inicialización de la batalla. Posicionar a los enemigos e incluso tenía casi listo una cuestión para armarse "rejillas" (como si fuera mapeado, de hecho iba a montar varias capas con todo y pasabilidad x'D...). Pero después de eso... no sé, lo dejé por mucho tiempo, y habían muchas cosas que no me gustaba cómo me las había hecho siquiera.
- Porcentaje: 1.
- Referencia:
Spoiler:
- Screen:
Spoiler:

##############################################################################

Y eso sería, en cuanto pueda veré si me encuentro la tontería que tenía xD,
Orochii Zouveleki

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Pokepik el 2012-04-26, 18:21

Orochii - JAJAJA me hizo mucha gracia la pose que les diste, como imitando también a los charas de arriba XD
Wecoc - Siento decir eso pero no le veo demasiado futuro ni interés a ninguno de tus scripts, excepto la Tienda estilo Fall Out 3, que sería un sistema de lo mas molón. Eso sí, es complicado.

##############################################################################

Me dejé uno.

- Título: Batalla "diferente"
- Información: Quise darle un nuevo aire a la batalla default, y quería ponerle que se pudiera ir al menú desde ella, pero claro no es tan sencillo como parece XD hay que editar el menú, la batalla, poner algo que diga desde donde ha sido llamado el menú, desactivar guardar y algunas tonterías mas
- Plataforma: XP
- Motivo del abandono: Lo continué pero no sé como, se me estropeó y tuve que volver a intentarlo desde un backup y en este faltaban tantas cosas que ya había logrado, que me desanimé y lo dejé estar. Además es un sistema que estaría bien para un juego en concreto, con su menú concreto y todo, pero para hacerlo como script general y que lo use quien quiera no le veo tanto gancho.
- Porcentaje: ¿40%? No se me da bien contar eso.
- Imagen:
Spoiler:
PROBLEM?
- Scripts:
Spoiler:
Window_Base ---> Cambios de color, barras y otros
Código:
#==============================================================================
# Window_Base
#==============================================================================

class Window_Base < Window
  def normal_color
    return Color.new(255, 255, 255, 255)
  end
  def disabled_color
    return Color.new(128, 128, 128, 255)
  end
  def green_color # HP
    return Color.new(10, 234, 48, 255)
  end
  def cyan_color # MP
    return Color.new(10, 243, 255, 255)
  end
  def system_color
    return Color.new(255, 217, 11, 255)
  end
 
  def draw_actor_face(actor, x, y)
    bitmap = RPG::Cache.picture(actor.character_name)
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  end

  def make_battler_state_text(battler, width, need_normal)
    brackets_width = self.contents.text_size("[]").width
    text = ""
    for i in battler.states
      if $data_states[i].rating >= 1
        if text == ""
          text = $data_states[i].name
        else
          new_text = text + "/" + $data_states[i].name
          text_width = self.contents.text_size(new_text).width
          if text_width > width - brackets_width
            break
          end
          text = new_text
        end
      end
    end
    if text == ""
      if need_normal
        text = "Normal"
      end
    end
    return text
  end

 
  def draw_actor_hp(actor, x, y, width = 144)
    self.contents.font.size = 16
    self.contents.font.bold = true
    self.contents.font.color = green_color
    self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
    self.contents.font.bold = false
    ratio = actor.hp.to_f / actor.maxhp.to_f
    back = RPG::Cache.picture('BarHp_back')
    full = RPG::Cache.picture('BarHp')
    light = RPG::Cache.picture('BarHp_light')
    rect = Rect.new(0, 0, (ratio * full.width).round, full.height)
    rect2 = Rect.new(0, 0, back.width, back.height)
    rect3 = Rect.new((ratio * full.width).round, 0, 1, light.height)
    self.contents.font.size = 25
    self.contents.blt(x, y+24, back, rect2)
    self.contents.blt(x, y+24, full, rect)
    self.contents.blt(x+(ratio * full.width).round, y+24, light, rect3)
  end

  def draw_actor_sp(actor, x, y, width = 144)
    self.contents.font.size = 16
    self.contents.font.bold = true
    self.contents.font.color = cyan_color
    self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
    self.contents.font.bold = false
    ratio = actor.sp.to_f / actor.maxsp.to_f
    back = RPG::Cache.picture('BarSp_back')
    full = RPG::Cache.picture('BarSp')
    light = RPG::Cache.picture('BarSp_light')
    rect = Rect.new(0, 0, (ratio * full.width).round, full.height)
    rect2 = Rect.new(0, 0, back.width, back.height)
    rect3 = Rect.new((ratio * full.width).round, 0, 1, light.height)
    self.contents.font.size = 25
    self.contents.blt(x, y+24, back, rect2)
    self.contents.blt(x, y+24, full, rect)
    self.contents.blt(x+(ratio * full.width).round, y+24, light, rect3)
  end

  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      parameter_name = $data_system.words.atk
      parameter_value = actor.atk
    when 1
      parameter_name = $data_system.words.pdef
      parameter_value = actor.pdef
    when 2
      parameter_name = $data_system.words.mdef
      parameter_value = actor.mdef
    when 3
      parameter_name = $data_system.words.str
      parameter_value = actor.str
    when 4
      parameter_name = $data_system.words.dex
      parameter_value = actor.dex
    when 5
      parameter_name = $data_system.words.agi
      parameter_value = actor.agi
    when 6
      parameter_name = $data_system.words.int
      parameter_value = actor.int
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, 32, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  end
  def draw_item_name2(item, x, y)
    if item == nil
      return
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  end
end

Damage Sprite --> Muestra los números de damage con pictures
Código:
#==============================================================================
# Damage
#==============================================================================

class Sprite_Battler < RPG::Sprite
  attr_accessor :battler
  def update
    super
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    if @battler.battler_name != @battler_name or
      @battler.battler_hue != @battler_hue
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      if @battler.dead? or @battler.hidden
        self.opacity = 0
      end
    end
    if @battler.damage == nil and
      @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    if @battler.is_a?(Game_Actor) and @battler_visible
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    if @battler.blink
      blink_on
    else
      blink_off
    end
    unless @battler_visible
      if not @battler.hidden and not @battler.dead? and
        (@battler.damage == nil or @battler.damage_pop)
        appear
        @battler_visible = true
      end
    end
    if @battler_visible
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      if @battler.damage_pop
        damage(@battler.damage)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      if @battler.damage == nil and @battler.dead?
        if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se)
        else
          $game_system.se_play($data_system.actor_collapse_se)
        end
        collapse
        @battler_visible = false
      end
    end
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
end

class RPG::Sprite
  def initialize(viewport = nil)
    super(viewport)
    @_whiten_duration = 0
    @_appear_duration = 0
    @_escape_duration = 0
    @_collapse_duration = 0
    @_damage_sprites = []
    @_damage_durations = []
    @_animation_duration = 0
    @_blink = false
  end
  def dispose
    @_damage_sprites.each {|spr| dispose_damage(spr)}
    dispose_animation
    dispose_loop_animation
    super
  end
  def effect?
    @_whiten_duration > 0 ||
    @_appear_duration > 0 ||
    @_escape_duration > 0 ||
    @_collapse_duration > 0 ||
    @_animation_duration > 0
  end
  def dispose_damage(sprite)
    if sprite != nil
      sprite.dispose
      @_damage_durations.delete_at(@_damage_sprites.index(sprite))
      @_damage_durations.compact!
      @_damage_sprites.delete(sprite)
      @_damage_sprites.compact!
    end
  end
  def damage(value)
    bitmap = Bitmap.new(519, 124)
    bitmap.draw_damage(value) unless value == ''
    @_damage_sprites.push(::Sprite.new(self.viewport))
    @_damage_sprites[-1].bitmap = bitmap
    @_damage_sprites[-1].ox = 47 + self.viewport.ox
    @_damage_sprites[-1].oy = 32
    @_damage_sprites[-1].x = self.x + self.viewport.rect.x
    @_damage_sprites[-1].y = self.y - self.oy / 2 + self.viewport.rect.y
    @_damage_sprites[-1].z = 3000
    @_damage_durations[@_damage_sprites.index(@_damage_sprites[-1])] = 40
  end
  def update
    super
    if @_whiten_duration > 0
      @_whiten_duration -= 1
      self.color.alpha = 128 - (16 - @_whiten_duration) * 10
    end
    if @_appear_duration > 0
      @_appear_duration -= 1
      self.opacity = (16 - @_appear_duration) * 16
    end
    if @_escape_duration > 0
      @_escape_duration -= 1
      self.opacity = 256 - (32 - @_escape_duration) * 10
    end
    if @_collapse_duration > 0
      @_collapse_duration -= 1
      self.opacity = 256 - (48 - @_collapse_duration) * 6
    end
    @_damage_sprites.each {|sprite|
      if @_damage_durations[@_damage_sprites.index(sprite)] > 0
        @_damage_durations[@_damage_sprites.index(sprite)] -= 1
        sprite.y -= 2
        sprite.opacity -= 16
        if @_damage_durations[@_damage_sprites.index(sprite)] == 0
          dispose_damage(sprite)
        end
      end
    }
    if @_animation != nil && (Graphics.frame_count % 2 == 0)
      @_animation_duration -= 1
      update_animation
    end
    if @_loop_animation != nil && (Graphics.frame_count % 2 == 0)
      update_loop_animation
      @_loop_animation_index += 1
      @_loop_animation_index %= @_loop_animation.frame_max
    end
    if @_blink
      @_blink_count = (@_blink_count + 1) % 32
      if @_blink_count < 16
        alpha = (16 - @_blink_count) * 6
      else
        alpha = (@_blink_count - 16) * 6
      end
      self.color.set(alpha, alpha, alpha*2, 100)
    end
    @@_animations.clear
  end
end

class Bitmap
  alias draw_old_text draw_text unless $@
  def draw_text(x, y, width, height, string, align = 0, outline_color = Color.new(0, 0, 0))
    old_color = self.font.color.dup
    self.font.color = outline_color
    self.draw_old_text(x - 1, y - 1, width, height, string, align)
    self.draw_old_text(x - 1, y + 1, width, height, string, align)
    self.draw_old_text(x + 1, y - 1, width, height, string, align)
    self.draw_old_text(x + 1, y + 1, width, height, string, align)
    self.font.color = old_color
    self.draw_old_text(x, y, width, height, string, align)
  end
  def draw_damage(value)
    if value.is_a?(Numeric)
      if value != 0
        digit = Math.log10(value.abs).to_i
      else
        digit = 0
      end
      if value < 0
        filename = 'Damage_Heal'
      else
        filename = 'Damage'
      end
      value = value.abs
      bmp = RPG::Cache.picture(filename)
      x = 0
      while digit >= 0
        self.blt(x, 0, bmp, Rect.new((value / (10 ** digit)) * 47, 0, 47, 62))
        x += 14
        value %= 10 ** digit
        digit -= 1
      end
    else
      bmp = RPG::Cache.picture("Damage_#{value}")
      self.blt(0, 0, bmp, bmp.rect)
    end
  end
end

Window_BattleStatus --> Muestra la ventana de estado tal y como se ve en la screen

Código:
#==============================================================================
# Window_BattleStatus
#==============================================================================

class Window_BattleStatus < Window_Base
  def initialize
    super(0, 320, 640, 112)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 300 + 4
      actor_x2 = i * 520 + 4
     
      draw_actor_name(actor, actor_x2, -8)
      draw_actor_hp(actor, actor_x+96, 16, 120)
      draw_actor_sp(actor, actor_x+96, 48, 120)
    end
  end
  def update
    super
    if $game_temp.battle_main_phase
      self.contents_opacity -= 4 if self.contents_opacity > 191
    else
      self.contents_opacity += 4 if self.contents_opacity < 255
    end
  end
end

class Window_BattleStatusMenu < Window_Base
  def initialize
    super(0, 432, 640, 48)
    self.contents = Bitmap.new(width - 32, height-32)
    refresh
  end
  def refresh
    self.contents.draw_text(40, -7, 100, 32, "Cancel")
    self.contents.draw_text(500, -7, 100, 32, "Menu")
   
    @battlestatusmenu_command = Sprite.new
    @battlestatusmenu_command.bitmap = Bitmap.new("Graphics/Pictures/battlemenustatus")
    @battlestatusmenu_command.x = 0
    @battlestatusmenu_command.y = 442
    @battlestatusmenu_command.z = 9900
  end
  def dispose
    super
    @battlestatusmenu_command.dispose
  end
end

Batalla --> Cambia algunos aspectos en la batalla (como la posibilidad de menú)
Código:
#==============================================================================
# Coordenadas (Game_Actor / Game_Enemy)
#==============================================================================

class Game_Actor < Game_Battler
  def screen_x
    if self.index != nil
      return self.index * 510 + 60
    else
      return 0
    end
  end
  def screen_y
    return 430
  end
end

class Game_Enemy < Game_Battler
  def screen_y
    return ($data_troops[@troop_id].members[@member_index].y) - 40
  end
end

#==============================================================================
# Batalla
#==============================================================================

class Spriteset_Battle
  attr_reader  :viewport1                # enemy viewport
  attr_reader  :viewport2                # actor viewport
  def initialize
    @viewport1 = Viewport.new(0, 0, 640, 320)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 101
    @viewport3.z = 200
    @viewport4.z = 5000
    @fog = Plane.new(@viewport1)
    @fog.z = 3000

    @battleback_sprite = Sprite.new(@viewport1)
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures[i]))
    end
    @timer_sprite = Sprite_Timer.new
    update
  end
  def dispose
    if @battleback_sprite.bitmap != nil
      @battleback_sprite.bitmap.dispose
    end
    @battleback_sprite.dispose
    for sprite in @enemy_sprites + @actor_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
    @fog.dispose
  end
  def effect?
    for sprite in @enemy_sprites + @actor_sprites
      return true if sprite.effect?
    end
    return false
  end
  def update
    @actor_sprites[0].battler = $game_party.actors[0]
    @actor_sprites[1].battler = $game_party.actors[1]
    @actor_sprites[2].battler = $game_party.actors[2]
    @actor_sprites[3].battler = $game_party.actors[3]
    if @battleback_name != $game_temp.battleback_name
      @battleback_name = $game_temp.battleback_name
      if @battleback_sprite.bitmap != nil
        @battleback_sprite.bitmap.dispose
      end
      @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
      @battleback_sprite.src_rect.set(0, 0, 640, 320)
    end
    for sprite in @enemy_sprites + @actor_sprites
      sprite.update
    end
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.update
    for sprite in @picture_sprites
      sprite.update
    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
   
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity / 2
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox += 1#($game_map.fog_ox/100).round
    @fog.oy += 0#($game_map.fog_oy/100).round
    @fog.tone = $game_map.fog_tone

    @timer_sprite.update
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    @viewport4.color = $game_screen.flash_color
    @viewport1.update
    @viewport2.update
    @viewport4.update
  end
end

class Scene_Battle
  def main
    $game_temp.in_battle = true
   
    $scene_battle = 0
   
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    $game_system.battle_interpreter.setup(nil, 0)
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.x = 0
    @help_window.width = 640
    #@help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @statusmenu_window = Window_BattleStatusMenu.new
    @message_window = Window_Message.new
   
    @actor_command = Sprite.new
    @actor_command.bitmap = Bitmap.new("Graphics/Pictures/Command")
    @actor_command.x = 240
    @actor_command.y = 310
    @actor_command.z = 9900

    @spriteset = Spriteset_Battle.new
    @wait_count = 0
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    start_phase1
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @actor_command.dispose
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @statusmenu_window.dispose
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end

    @spriteset.dispose
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end

  def update
    if $game_system.battle_interpreter.running?
      $game_system.battle_interpreter.update
      if $game_temp.forcing_battler == nil
        unless $game_system.battle_interpreter.running?
          unless judge
            setup_battle_event
          end
        end
        if @phase != 5
          @status_window.refresh
        end
      end
    end
    $game_system.update
    $game_screen.update
    if $game_system.timer_working and $game_system.timer == 0
      $game_temp.battle_abort = true
    end
    @help_window.update
    @party_command_window.update
    @actor_command.update
    @status_window.update
    @message_window.update
    @spriteset.update
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    if $game_temp.message_window_showing
      return
    end
    if @spriteset.effect?
      return
    end
    if $game_temp.gameover
      $scene = Scene_Gameover.new
      return
    end
    if $game_temp.to_title
      $scene = Scene_Title.new
      return
    end
    if $game_temp.battle_abort
      $game_system.bgm_play($game_temp.map_bgm)
      battle_end(1)
      return
    end
    if @wait_count > 0
      @wait_count -= 1
      return
    end
    if $game_temp.forcing_battler == nil and
      $game_system.battle_interpreter.running?
      return
    end
    case @phase
    when 1
      update_phase1
    when 2
      update_phase2
    when 3
      update_phase3
    when 4
      update_phase4
    when 5
      update_phase5
    end
  end

  def start_phase1
    @phase = 1
    $game_party.clear_actions
    setup_battle_event
  end
  def update_phase1
    if judge
      return
    end
    start_phase3
  end

  def update_phase3_escape
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    actors_agi = 0
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_agi += actor.agi
        actors_number += 1
      end
    end
    if actors_number > 0
      actors_agi /= actors_number
    end
    success = rand(100) < 50 * actors_agi / enemies_agi
    if success
      $game_system.se_play($data_system.escape_se)
      $game_system.bgm_play($game_temp.map_bgm)
      battle_end(1)
    else
      $game_party.clear_actions
      start_phase4
    end
  end
 
  def phase3_setup_command_window
  end

  def update_phase3
    if @enemy_arrow != nil
      update_phase3_enemy_select
    else
      update_phase3_basic_command
    end
  end

  def update_phase3_basic_command
    if Input.trigger?(Input::X) and $scene_battle == 0 # Menu
      $game_system.se_play($data_system.decision_se)
      $scene_battle = 1
      start_menu
      return
    end
    if Input.trigger?(Input::B) and $scene_battle == 0
      $game_system.se_play($data_system.cancel_se)
      if @actor_index == 0
        return
      end
      phase3_prior_actor
      return
    end

    if Input.trigger?(Input::UP) and $scene_battle == 0# Atacar
      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.kind = 0
      @active_battler.current_action.basic = 0
      start_enemy_select
      return
    end
    if Input.trigger?(Input::LEFT) and $scene_battle == 0 # Defensa
      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.kind = 0
      @active_battler.current_action.basic = 1
      phase3_next_actor
      return
    end   
    if Input.trigger?(Input::RIGHT) and $scene_battle == 0 # Esperar
      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.kind = 0
      @active_battler.current_action.basic = 2
      phase3_next_actor
      return
    end
    if Input.trigger?(Input::DOWN) and $scene_battle == 0 # Huir
      if $game_temp.battle_can_escape == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      update_phase3_escape
      return
    end
  end

  def start_enemy_select
    @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
    @enemy_arrow.help_window = @help_window
  end

  def end_enemy_select
    @enemy_arrow.dispose
    @enemy_arrow = nil
    @help_window.visible = false
  end

  def start_actor_select
    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
    @actor_arrow.index = @actor_index
    @actor_arrow.help_window = @help_window
  end

  def start_skill_select
    @skill_window = Window_Skill.new(@active_battler)
    @skill_window.help_window = @help_window
  end

  def end_skill_select
    @skill_window.dispose
    @skill_window = nil
    @help_window.visible = false
  end
  def start_item_select
    @item_window = Window_Item.new
    @item_window.help_window = @help_window
  end
  def end_item_select
    @item_window.dispose
    @item_window = nil
    @help_window.visible = false
  end 
 
  def start_phase4
    @phase = 4
    $game_temp.battle_turn += 1
    for index in 0...$data_troops[@troop_id].pages.size
      page = $data_troops[@troop_id].pages[index]
      if page.span == 1
        $game_temp.battle_event_flags[index] = false
      end
    end
    @actor_index = -1
    @active_battler = nil
    @party_command_window.active = false
    @party_command_window.visible = false
    $game_temp.battle_main_phase = true
    for enemy in $game_troop.enemies
      enemy.make_action
    end
    make_action_orders
    @phase4_step = 1
  end

  def update_phase4
    case @phase4_step
    when 1
      update_phase4_step1
    when 2
      update_phase4_step2
    when 3
      update_phase4_step3
    when 4
      update_phase4_step4
    when 5
      update_phase4_step5
    when 6
      update_phase4_step6
    end
  end

  def update_phase4_step1
    @help_window.visible = false
    if judge
      return
    end
    if $game_temp.forcing_battler == nil
      setup_battle_event
      if $game_system.battle_interpreter.running?
        return
      end
    end
    if $game_temp.forcing_battler != nil
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    if @action_battlers.size == 0
      start_phase3
      return
    end
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    @active_battler = @action_battlers.shift
    if @active_battler.index == nil
      return
    end
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    @active_battler.remove_states_auto
    @status_window.refresh
    @phase4_step = 2
  end 
end

Menú de batallas --> Este es el que da problemas
Código:
#==============================================================================
# Menú (Ventanas)
#==============================================================================

#==============================================================================
# Window_Item
#==============================================================================

class Window_Item < Window_Selectable
  def initialize
    super(160, 64, 480, 256)
    @column_max = 2
    refresh
    self.index = 0
  end
 
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
      $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (240)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 150, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 166, y, 24, 32, number.to_s, 2)
  end
 
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#==============================================================================
# Menú (Batalla)
# $scene_battle index: 0 = battle, 1 = menu, 2 = item
#==============================================================================

#==============================================================================
# Menú
#==============================================================================

class Scene_Battle
  def start_menu
    @menu_index = 0
    s1 = "Objeto"
    s2 = "Habilidad"
    s3 = "Especial"
    s4 = "Equipo"
    s5 = "Posición"
    s6 = "Héroes"
    s7 = "Enemigos"
    s8 = "Ir a título"
    s9 = "Salir"
    @command_window = Window_Command.new(160,[s1,s2,s3,s4,s5,s6,s7,s8,s9])
    @command_window.index = @menu_index
    @empty_window = Window_Base.new(160,0,480,320)
    start_menu_B
  end
 
  def start_menu_B
    @command_window.active = true
    @empty_window.visible = true
    loop do
      Graphics.update
      Input.update
      update_menu
      if $scene_battle != 1
        break
      end
    end
    if $scene_battle == 0
      @command_window.dispose
      @empty_window.dispose
    end
  end
 
  def update_menu
    @command_window.update
    @empty_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene_battle = 0
      #return
    end
    if Input.trigger?(Input::X)
      $game_system.se_play($data_system.decision_se)
      $scene_battle = 0
      #return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # Objeto
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @empty_window.visible = false
        $scene_battle = 2
        start_item
        return
      when 1  # Habilidad
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        start_skill_sel
      when 2  # Especial
        $game_system.se_play($data_system.decision_se)
        # Pon algo especial aquí :)
      when 3  # Equipo
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        start_equip_sel
      when 4  # Posición
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        start_position_sel
      when 5  # Héroes
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        start_heroes(0)
      when 6  # Enemigos
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        start_enemies(0)
      when 7 # Ir a título
        $game_system.se_play($data_system.decision_se)
        Audio.bgm_fade(800)
        Audio.bgs_fade(800)
        Audio.me_fade(800)
        $scene_battle = 0
        $scene = Scene_Title.new
      when 8 # Salir
        $game_system.se_play($data_system.decision_se)
        Audio.bgm_fade(800)
        Audio.bgs_fade(800)
        Audio.me_fade(800)
        $scene_battle = 0
        $scene = nil
      end
      return
    end
  end
end

#==============================================================================
# Item
#==============================================================================

class Scene_Battle
  def start_item
    @help_window2 = Window_Help.new
    @help_window2.x = 160
    @help_window2.width = 480
    @item_window = Window_Item.new
    @item_window.help_window = @help_window2
    @item_window.active = true
    loop do
      Graphics.update
      Input.update
      update_item
      if $scene_battle != 2
        break
      end
    end
    @item_window.dispose
    @help_window2.dispose
  end
 
  def update_item
    @item_window.update
    @help_window2.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.dispose
      @help_window2.dispose
      $scene_battle = 1
      start_menu_B
      return
    end
    if Input.trigger?(Input::X)
      $game_system.se_play($data_system.decision_se)
      $scene_battle = 0
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless @item.is_a?(RPG::Item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @item.scope
      when 0 # none
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $game_system.se_play(@item.menu_se)
          if @item.consumable
            $game_party.lose_item(@item.id, 1)
            @item_window.draw_item(@item_window.index)
          end
          $scene_battle = 1
          start_menu_B
          return
        end
        $game_system.se_play($data_system.buzzer_se)
        return
      when 1 # 1 enemy
      when 2 # all enemies
      when 3 # 1 ally
        $battle_item_sel = true ; start_item_sel
        return
      when 4 # all allies
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        if $game_party.all_dead?
          $scene_battle = 0
          $scene = Scene_Gameover.new
          return
        end
        return
      when 5 # 1 ally (HP 0)
        $battle_item_sel = true ; start_item_sel
        $battle_item = false
        return
      when 6 # all allies (HP 0)
        # No tiene sentido en una party de 2 miembros
      when 7 # user
        $battle_item_sel = true ; start_item_sel
        $battle_item = false
        return
      end
    end
  end
 
  def start_item_sel
    @item_sel_index = 0
    @sprite_cursor = Sprite.new
    @sprite_cursor.bitmap = RPG::Cache.picture("cursor")
    @sprite_cursor.z = 2500
    loop do
      Graphics.update
      Input.update
      update_item_sel
      if $battle_item_sel != true
        break
      end
    end
    @sprite_cursor.dispose
  end
 
  def update_item_sel
    @sprite_cursor.x = 40 + @item_sel_index * 510
    @sprite_cursor.y = 310
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $battle_item= true ; start_item
      $battle_item_sel = false
      return
    end
    if Input.trigger?(Input::X)
      $game_system.se_play($data_system.decision_se)
      $scene_battle = 0
      return
    end
   
    if Input.trigger?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      @item_sel_index = 1
      return
    end
    if Input.trigger?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @item_sel_index = 0
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      target = $game_party.actors[@item_sel_index]
      used = target.item_effect(@item)
      unless used
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play(@item.menu_se)
      if @item.consumable
        $game_party.lose_item(@item.id, 1)
        @item_window.draw_item(@item_window.index)
        unless $game_party.all_dead?
          $battle_item = true ; start_item
        end
      end
      if $game_party.all_dead?
        $scene_battle = 0
        $scene = Scene_Gameover.new
        return
      end
      if @item.common_event_id > 0
        $game_temp.common_event_id = @item.common_event_id
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        $battle_item = true ; start_item
        $battle_item_sel = false
        return
      else
        $battle_item_sel = false
      end
    end
  end
end


Última edición por Pokepik el 2012-06-07, 15:11, editado 1 vez

Pokepik
Principiante
Principiante

0/3

Créditos 1834

Gracias : 4

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por gerrtunk el 2012-04-26, 22:44

Mi script de tienda mejorada 3.0 hace algunas de esas cosas y para la 4 las hara todas, eso si, tardara lo suyo, aunque la 3 no tanto.

gerrtunk
Principiante
Principiante

0/3

Créditos 364

Gracias : 22

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Pokepik el 2012-06-09, 18:55

Pues a ver cuando sale, estoy impaciente.
Pongo dos mas, espero que no lo consideréis necro, no me he pasado de tanto.
A ver si postea mas gente y solucionamos el de alguno.
Encontré/Me acordé de algun proyecto abandonado mas, os los pongo.

##############################################################################

- Título: Skill Preview
Edito: Ya fue realizado
Skill Preview


Última edición por Pokepik el 2012-06-27, 21:18, editado 1 vez

Pokepik
Principiante
Principiante

0/3

Créditos 1834

Gracias : 4

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por orochii el 2012-06-10, 01:37

Para el skill preview, la cuestión es que para mostrar una animación se necesita crear un sprite. Acá hice una prueba, y puse esto en un llamar script.
Código:
spr = RPG::Sprite.new
spr.x,spr.y=320,240
anim = $data_animations[1]
spr.animation(anim, true)
Lo que faltaría entonces sería hacerle update al sprite, y teóricamente entonces se mostraría la animación correctamente C:.

Espero que sirva, salut,
Orochii Zouveleki

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Pokepik el 2012-07-24, 09:57

Lo de la Skill Preview al final lo pudimos hacer mas o menos pero tengo otro que también he tenido que abandonar, así que siento revivir esto pero así son las cosas.
Sweat

- Título: Scene_Equip ordenado distinto.
- Información: Quise hacer un concepto nuevo de la escena "Equipo" pero me encontré con algunos problemas. Yo lo que quería era que se mostraran todos los objetos en una lista horizontal, y luego allí pudieras seleccionar el que quisieras y se viera en todo momento qué equipo tienen los demás. Lo que pasa es que al poner la @data, o ponía los $data_weapons de la party primero y los actor.weapon_id al final o al revés pero mezclado como quería no pude, ni siquiera con insert en vez de push.
- Plataforma: XP
- Motivo del abandono: Problemas de índices de datos y de ordenación.
- Porcentaje de estado: 40% mas o menos.
- Screen: Solo se ven las armas porque no llegué a mas.

Spoiler:


- Código:
Código:
#===============================================================================
# Window_Base
#===============================================================================

class Window_Base < Window
  def draw_actor_miniface(actor, x, y)
    bitmap = RPG::Cache.picture("f_0"+actor.to_s)
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y, bitmap, src_rect)
  end
end

#==============================================================================
# Window_EquipLeft
#==============================================================================

class Window_EquipLeft < Window_Base
  def initialize(actor)
    super(0, 64, 150, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end

  def actor
    return @actor
  end
 
  def actor=(actor)
    @actor = actor
    refresh
  end
 
  def refresh
    self.contents.clear
    if @actor == -1
      return
    end

    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 100, 32, "Ataque")
    self.contents.draw_text(0, 48, 100, 32, "Def. Fís.")
    self.contents.draw_text(0, 96, 100, 32, "Def. Mág.")
   
    self.contents.font.color = normal_color
    self.contents.draw_text(10, 24, 100, 32, @actor.atk.to_s)
    if @new_atk != nil
      if @new_atk > @actor.atk
        @diff = @new_atk - @actor.atk
        self.contents.font.color = Color.new(0,255,0)
        self.contents.draw_text(10, 24, 100, 32, "+"+@diff.to_s,2)
      elsif @new_atk < @actor.atk
        @diff = @actor.atk - @new_atk
        self.contents.font.color = Color.new(255,0,0)
        self.contents.draw_text(10, 24, 100, 32, "-"+@diff.to_s,2) 
      end
    end
   
    self.contents.font.color = normal_color
    self.contents.draw_text(10, 72, 100, 32, @actor.pdef.to_s)
    if @new_pdef != nil
      if @new_pdef > @actor.pdef
        @diff = @new_pdef - @actor.pdef
        self.contents.font.color = Color.new(0,255,0)
        self.contents.draw_text(10, 72, 100, 32, "+"+@diff.to_s,2)
      elsif @new_pdef < @actor.pdef
        @diff = @actor.pdef - @new_pdef
        self.contents.font.color = Color.new(255,0,0)
        self.contents.draw_text(10, 72, 100, 32, "-"+@diff.to_s,2) 
      end
    end
   
    self.contents.font.color = normal_color
    self.contents.draw_text(10, 120, 100, 32, @actor.mdef.to_s)
    if @new_mdef != nil
      if @new_mdef > @actor.mdef
        @diff = @new_mdef - @actor.mdef
        self.contents.font.color = Color.new(0,255,0)
        self.contents.draw_text(10, 120, 100, 32, "+"+@diff.to_s,2)
      elsif @new_mdef < @actor.mdef
        @diff = @actor.mdef - @new_mdef
        self.contents.font.color = Color.new(255,0,0)
        self.contents.draw_text(10, 120, 100, 32, "-"+@diff.to_s,2) 
      end
    end
  end

  def set_new_parameters(new_atk, new_pdef, new_mdef)
    if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
      @new_atk = new_atk
      @new_pdef = new_pdef
      @new_mdef = new_mdef
      refresh
    end
  end
end

#==============================================================================
# [Birdsite] Window_Selectable
#==============================================================================

class Window_Selectable2 < Window_Base
  attr_reader  :index                    # cursor position
  attr_reader  :help_window              # help window
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @item_max = 1
    @row_max = 1
    @index = -1
  end
  def index=(index)
    @index = index
    if self.active and @help_window != nil
      update_help
    end
    update_cursor_rect
  end
  def column_max
    return (@item_max + @row_max - 1) / @row_max
  end
  def top_column
    return self.ox / 32
  end
  def top_column=(column)
    if column < 0
      column = 0
    end
    if column > column_max - 1
      column = column_max - 1
    end
    self.ox = column * 32
  end
  def page_column_max
    return (self.width - 32) / 32
  end
  def page_item_max
    return page_column_max * @row_max
  end
  def help_window=(help_window)
    @help_window = help_window
    if self.active and @help_window != nil
      update_help
    end
  end
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    column = @index / @row_max
    if column < self.top_column
      self.top_column = column
    end
    if column > self.top_column + (self.page_column_max - 1)
      self.top_column = column - (self.page_column_max - 1)
    end   
    cursor_width = self.height / @row_max - 32
    x = @index / @row_max * 32 - self.ox
    y = @index % @row_max * 32
    self.cursor_rect.set(x, y, cursor_width, 32)
  end
  def update
    super
    if self.active and @item_max > 0 and @index >= 0
      if Input.repeat?(Input::RIGHT)
        if (@row_max == 1 and Input.trigger?(Input::RIGHT)) or
          @index < @item_max - @row_max
          $game_system.se_play($data_system.cursor_se)
          @index = (@index + @row_max) % @item_max
        end
      end
      if Input.repeat?(Input::LEFT)
        if (@row_max == 1 and Input.trigger?(Input::LEFT)) or
          @index >= @row_max
          $game_system.se_play($data_system.cursor_se)
          @index = (@index - @row_max + @item_max) % @item_max
        end
      end
      if Input.repeat?(Input::DOWN)
        if @row_max >= 2 and @index < @item_max - 1
          $game_system.se_play($data_system.cursor_se)
          @index += 1
        end
      end
      if Input.repeat?(Input::UP)
        if @row_max >= 2 and @index > 0
          $game_system.se_play($data_system.cursor_se)
          @index -= 1
        end
      end
    end
    if self.active and @help_window != nil
      update_help
    end
    update_cursor_rect
  end
end

#==============================================================================
# Window_EquipWeapon
#==============================================================================

class Window_EquipWeapon < Window_Selectable2
  def initialize(actor)
    super(150,128,490,72)
    @row_max = 1
    @actor = actor
    self.contents = Bitmap.new(width-32, height-32)
    self.opacity = 0
    refresh
    self.index = 0
  end
  def item
    return @data[self.index]
  end
  def item_actor
    return @data_actor[self.index]
  end
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    @data_actor = []
    @data_number = []
    total_number = 0
    for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0# and i != @actor.weapon_id
        number = $game_party.weapon_number(i)
        number.times{@data.push($data_weapons[i])}
        number.times{@data_actor.push(-1)}
        total_number += number-1
        @data_number.push(total_number)
      end
    end
    for i in 1..$game_party.actors.size
      @pactor = $game_party.actors[i-1]
      if @pactor.weapon_id != 0
        #@data.insert $data_weapons[@pactor.weapon_id].id, $data_weapons[@pactor.weapon_id]
        #@data.compact!
        #@data_actor.insert $data_weapons[@pactor.weapon_id].id, @pactor.id
        #@data_actor.compact!
        position = $data_weapons[@pactor.weapon_id].id+@pactor.id-1
        p @data_number[@pactor.id-1]
        @data.insert position, $data_weapons[@pactor.weapon_id]
        @data_actor.insert position, @pactor.id
        @data.compact!
        @data_actor.compact!
      end
    end         

    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(column_max * 32+3, 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  def draw_item(index)
    item = @data[index]
    item_actor = @data_actor[index]
    number = $game_party.item_number(item.id)
   
    self.contents.font.color = normal_color
   
    if @actor == -1
      self.contents.font.color = disabled_color
    else
      if @actor.equippable?(item)
        self.contents.font.color = normal_color
      else
        self.contents.font.color = disabled_color
      end
    end
   
    x = 4+index * 32
    y = 0
    rect = Rect.new(x, y, 32, self.height / @row_max - 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y+4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.font.color = normal_color
   
    if item_actor == -1 or item_actor == nil
      return
    else
      draw_actor_miniface(item_actor,x+16,y+20)
    end
  end
 
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end


#==============================================================================
# Scene_Equip
#==============================================================================

class Scene_Equip
  def main
    @help_window = Window_Help.new
    @dummy_window = Window_Base.new(150,64,490,416)
   
    if $game_party.actors.size == 1
      s1 = $game_party.actors[0].name
      @command_window = Window_Command.new(150, [s1])
    end
    if $game_party.actors.size == 2
      s1 = $game_party.actors[0].name
      s2 = $game_party.actors[1].name
      @command_window = Window_Command.new(150, [s1,s2])
    end   
    if $game_party.actors.size == 3
      s1 = $game_party.actors[0].name
      s2 = $game_party.actors[1].name
      s3 = $game_party.actors[2].name
      @command_window = Window_Command.new(150, [s1,s2,s3])
    end     
    if $game_party.actors.size == 4
      s1 = $game_party.actors[0].name
      s2 = $game_party.actors[1].name
      s3 = $game_party.actors[2].name
      s4 = $game_party.actors[3].name
      @command_window = Window_Command.new(150, [s1,s2,s3,s4])
    end 
    @command_window.x = 0
    @command_window.y = 256
    @command_window.height = 224
    @command_window.active = true
   
    @equip_left = Window_EquipLeft.new(-1)
    @equip_weapon = Window_EquipWeapon.new(-1)
    @equip_weapon.active = false
   
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @equip_left.dispose
    @equip_weapon.dispose
    @help_window.dispose
    @dummy_window.dispose
  end
 
  def refresh
    if @equip_weapon.active
      new_atk = @equip_weapon.item.atk
      new_pdef = nil
      new_mdef = nil
      @equip_left.set_new_parameters(new_atk, new_pdef, new_mdef)
    end
  end
 
  def update
    if @command_window.active == true
      update_command
    end
    if @equip_weapon.active == true
      update_weapon
    end
  end
 
  def update_command
    @command_window.update
    @help_window.set_text("")
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(2)
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @actor = $game_party.actors[@command_window.index]
      @equip_left.actor = @actor
      @equip_weapon.dispose
      @equip_weapon = Window_EquipWeapon.new(@actor)
      @command_window.active = false
      @equip_weapon.active = true
    end
  end
  def update_weapon
    @equip_weapon.update
    @equip_weapon.help_window = @help_window
   
    if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
      refresh
    end
   
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @equip_left.actor = -1
      @equip_weapon.dispose
      @equip_weapon = Window_EquipWeapon.new(-1)
      @equip_weapon.active = false
      @command_window.active = true
      return
    end
    if Input.trigger?(Input::C)
      @actor = $game_party.actors[@command_window.index]
      item = @equip_weapon.item
      unless @actor.equippable?(item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @equip_weapon.item_actor == -1 or @equip_weapon.item_actor == @actor
        $game_system.se_play($data_system.equip_se)
        @actor.equip(0, item == nil ? 0 : item.id)
      else
        $game_system.se_play($data_system.buzzer_se)
      end
      @equip_weapon.refresh
      @equip_left.refresh
      refresh
    end
  end
end

Pokepik
Principiante
Principiante

0/3

Créditos 1834

Gracias : 4

Volver arriba Ir abajo

Re: Topic de los scripts abandonados

Mensaje por Contenido patrocinado Hoy a las 15:36


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.