Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Cambiar Hue de un Battler durante la batalla

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Kprojects el 2018-01-31, 10:02

Sé que yo siempre pido los scripts mas raros e inutiles jeje pero queria saber si era posible a través de un script o un comando hace que un Battler/Enemigo esté cambiando continuamente de Hue
Por ejemplo, la grafica comienza con un Hue de 0, luego va avanzando continuamente en uno en uno hasta 360, y despues vuelve a 0, para seguir el ciclo y continuar hacia 360.
Perdonen por estas ridiculeces jeje espero sea posible, muchas gracias por sus respuestas!
avatar
Kprojects
Iniciado
Iniciado

0/3

Créditos 35

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Wecoc el 2018-02-06, 20:50

No hay ningún modo de hacerlo directamente pero puedes hacer un script que haga algo así. En verdad es interesante, porque es curioso al menos... pero claro depende de como quieras plantearlo pues varía.

Creo que el caso mejor para plantearlo es que un battler concreto tenga siempre esa particularidad en su gráfico (por ID de actor o enemigo). Luego a partir de aquí se pueden hacer modificaciones para que vaya por estado o cosas más raras.

Código:
#==============================================================================
# ** [XP] Battler Hue Spin - La Hue del Battler cambia constantemente
#==============================================================================

class Game_Battler
  attr_accessor :hue_spin
  alias hue_spin_ini initialize unless $@
  def initialize(*args)
    hue_spin_ini(*args)
    @hue_spin = false
  end
 
  # IDs de los actores cuyo gráfico cambia la hue
  HUE_SPIN_ACTOR_IDS = [1]
 
  # IDs de los enemigos cuyo gráfico cambia la hue
  HUE_SPIN_ENEMY_IDS = [2]
 
  def default_hue_spin
    if self.is_a?(Game_Actor)
      @hue_spin = true if HUE_SPIN_ACTOR_IDS.include?(@actor_id)
    elsif self.is_a?(Game_Enemy)
      @hue_spin = true if HUE_SPIN_ENEMY_IDS.include?(@enemy_id)
    end
  end
end

class Game_Actor < Game_Battler
  alias hue_spin_actor_ini initialize unless $@
  def initialize(*args)
    hue_spin_actor_ini(*args)
    default_hue_spin
  end
end

class Game_Enemy < Game_Battler
  alias hue_spin_enemy_ini initialize unless $@
  def initialize(*args)
    hue_spin_enemy_ini(*args)
    default_hue_spin
  end
end

class Sprite_Battler
  alias hue_spin_ini initialize unless $@
  def initialize(*args)
    hue_spin_ini(*args)
    @hue_spin = false
  end
 
  def update
    super
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    if @hue_spin != @battler.hue_spin
      update_battler
      @hue_spin = @battler.hue_spin
    end
    if @hue_spin == false && @battler.battler_hue != @battler_hue
      update_battler
    end
    if @battler.battler_name != @battler_name
      update_battler
    end
    if @hue_spin == true
      @battler_hue = (@battler_hue + 2) % 360
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
    end
    # If animation ID is different than current one
    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 actor which should be displayed
    if @battler.is_a?(Game_Actor) and @battler_visible
      # Bring opacity level down a bit when not in main phase
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    # Blink
    if @battler.blink
      blink_on
    else
      blink_off
    end
    # If invisible
    unless @battler_visible
      # Appear
      if not @battler.hidden and not @battler.dead? and
        (@battler.damage == nil or @battler.damage_pop)
        appear
        @battler_visible = true
      end
    end
    # If visible
    if @battler_visible
      # Escape
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      # White flash
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      # Animation
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      # Damage
      if @battler.damage_pop
        damage(@battler.damage, @battler.critical)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      # Collapse
      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
    # Set sprite coordinates
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
 
  def update_battler
    @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
end

Aquí está. Por desgracia no hay otra que reescribir Sprite_Battler :update así que no es del todo compatible con otros scripts similares.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Kprojects el 2018-02-06, 23:52

Hey Wecoc muchas gracias por responder!
Se ve genial jaja parece que si entendiste mi vision, y esta bien lo de tener que reescrbirlo para cada battler por que esto se utilizaria unicamente para ciertos enemigos en especifico.

Por cierto, crees que me puedas explicar unas cosas del script por mensaje? me gustaria saber mejor como funciona.

Gracias otra vez
avatar
Kprojects
Iniciado
Iniciado

0/3

Créditos 35

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Wecoc el 2018-02-07, 00:02

Claro, no es un script difícil, puedes preguntarme lo que no entiendas.

Una de las líneas más importantes a tener en cuenta es esta

[line]@battler_hue = (@battler_hue + 2) % 360[/line]

Ese 2 indica cuanto hue cambia en cada frame, por lo tanto es la velocidad a la que los colores dan la vuelta. Si quieres que vaya aún más lento que sumando 1 puedes cambiar la línea anterior, que es [line]if @hue_spin == true[/line] por esto [line]if @hue_spin == true && Graphics.frame_count % 2 == 0[/line] y entonces solo se sumará cada 2 frames (ese 2 también puedes cambiarlo ahí). Todos los battlers con ese efecto giran los colores a la misma velocidad, si se quiere cambiar eso hay que complicar más el script.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Kprojects el 2018-02-07, 00:32

Tengo una pequeña duda (aun no pruebo el script) en el primer parrafo esta "@hue_spin = false" ese debe de permanecer false por default o es el que me acabas de explicar?
avatar
Kprojects
Iniciado
Iniciado

0/3

Créditos 35

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Wecoc el 2018-02-07, 04:40

Sí, es ese es el valor por defecto. Si lo pusieras a true todos los battlers tendrían el efecto

Técnicamente lo único que debes tocar son las dos globales HUE_SPIN_ACTOR_IDS y HUE_SPIN_ENEMY_IDS, cada una para definir la lista de IDs cuyos actores o enemigos tendrán el efecto. Puedes dejar la de actores vacía si solo quieres el efecto en enemigos.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Kprojects el 2018-02-07, 08:05

Funciona perfectamente jeje gracias por tus grandes aportes!

Una ultima dudita jejeje seria posible hacer lo mismo, pero con un panorama?
(Si, no un battleback, un panorama jeje)
avatar
Kprojects
Iniciado
Iniciado

0/3

Créditos 35

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Wecoc el 2018-02-08, 00:58

El concepto es parecido, pero cuanto más grande es el gráfico más le cuesta hacer el cambio de hue así que hay vigilar con el lag.
Eso sí, al intentar montar scripts que hagan ese tipo de efectos hay que tener en cuenta 2 cuestiones:

1:
Los battlers tienen una clase propia donde puedes aplicar cómodamente el giro de hue en su propio update (Sprite_Battler) así que es fácil añadirlo ahí sin apenas tocar nada más, que es lo que hice. Lo mismo con los eventos (Sprite_Character), y las pictures (Sprite_Picture) pero con los demás gráficos hay que buscar mejor donde hacerlo, ya sea en la Scene, en el Spriteset o en Game_Map.

2:
La clase RPG::Cache (ver en la ayuda del maker) no da la opción de cargar con hue cualquier tipo de gráfico, solo algunos, pero es fácil de añadir, solo mirando el código lo ves.
Los que sí tienen opción de hue son: animation, battler, character, fog, panorama, tile (chara).
Los que no son: autotile, battleback, gameover, icon, picture, tileset, title, windowskin.

Te pongo el panorama de ejemplo, usando un interruptor porque me pareció más cómodo en ese caso xD
En verdad me suena mucho que ya había un script así, pero bueno.

Código:
#==============================================================================
# ** [XP] Panorama/Fog Hue Spin - La Hue del Panorama/Fog cambia constantemente
#==============================================================================

class Game_Map
  # Id del interruptor que hace que la Hue del panorama gire
  HUE_SPIN_PAN_VAR_ID = 1
  # Id del interruptor que hace que la Hue de la fog gire
  HUE_SPIN_FOG_VAR_ID = 0
 
  alias hue_spin_upd update unless $@
  def update
    hue_spin_upd
    if $game_switches[HUE_SPIN_PAN_VAR_ID]
      @panorama_hue = (@panorama_hue + 2) % 360
    end
    if $game_switches[HUE_SPIN_FOG_VAR_ID]
      @fog_hue = (@fog_hue + 2) % 360
    end
  end
end

A ver si te sirve.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Kprojects el 2018-08-17, 05:42

Disculpa que vuelva a esto Wecoc, hasta este momento en mi proyecto tuve que hacer el uso del Hue spin para el panorama, pero por algun motivo no logro que funcione.
¿Crees que haya algo que deba de saber?
(Obvio que lo puse encima del Main, y moví los IDs de los switchs al 99 y 100)
avatar
Kprojects
Iniciado
Iniciado

0/3

Créditos 35

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Wecoc el 2018-08-17, 13:35

No tengo mucho qué decir sobre un script de 14 líneas... Si el interruptor 99 está activo debería funcionar.

- Por si acaso ten en cuenta que en el script 99 y 099 no son lo mismo, si empieza por 0 lo entiende como hexadecimal.
- Solo va en mapa, no en batalla porque ahí no hay panorama/fog por defecto.
- Si estás definiendo el panorama en un proceso paralelo seguro que el fallo está ahí, debes definirlo solo una vez.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Cambiar Hue de un Battler durante la batalla

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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