Últimos temas
» ayuda con fondos de batalla diferentes en el mismo mapa
por Muzgar Hoy a las 10:30 pm

» Maker MV: Ayuda convertir proyecto android en APK
por Muzgar Hoy a las 3:38 pm

» Mi juego: CREEPYPASTA LAND 3
por Muzgar Hoy a las 3:37 pm

» Error al exportar el juego
por Jamope Hoy a las 2:32 pm

» RandomEnkounters XP
por kyonides Hoy a las 7:31 am

» KyoDiscounts XP
por kyonides Vie Ene 18, 2019 6:32 am

» Ayuda para la pantalla completa
por Narsil40 Jue Ene 17, 2019 8:08 pm

» Chronicles from the Past
por fran0090 Jue Ene 17, 2019 6:38 pm

» The Town of The Lost Witch - Horror - ¡Ya puedes descargarlo!
por rstudios Jue Ene 17, 2019 3:41 pm

» Laminación [VXACE]
por Pocari Jue Ene 17, 2019 1:36 pm

» Ayuda en sistemas de batalla rpg maker mv
por efero Miér Ene 16, 2019 9:11 pm

» [VXACE] LAS ESFERAS DE CAPRICORNIA - JUEGO COMPLETO -
por Pocari Miér Ene 16, 2019 1:41 pm


RandomEnkounters XP

Ir abajo

RandomEnkounters XP

Mensaje por kyonides el Vie Jul 14, 2017 1:42 am

RandomEnkounters XP
por Kyonides-Arkanthos
 
Este sencillo script lo que ofrece es el visualizar el monstruo que surge para luchar contra los héroes por solo caminar a lo loco por el mapa actual (sea el que sea). De forma aleatoria escogerá a uno de los monstruos de la tropa de enemigos y lo desplegará en pantalla mientras suena un efecto de sonido que indica que este recién apareció frente al héroe, el líder del equipo. Este a lo sumo podrá girar sobre su eje en el poco tiempo que le queda antes de que la batalla aleatoria dé comienzo. Una vez que la batalla termine, el héroe podrá moverse tranquilamente, bueno, si es que este sobrevivió...

En la primera Constante del módulo pueden definir el nombre del archivo de efecto de sonido, mientras que en la segunda definen cuántos cuadros o frames esperarán antes de que inicie la batalla.

Y en la más reciente versión podrán hacer que los enemigos se muevan en su sitio luego de aparecer con una animacińo como teletransporte. Incluso podrán hacerlos gritarles improperios o amenazas a los héroes de forma sistematizada, aunque no es obligatorio.

Versión Moderna
Código:
# * RandomEnkounter XP
#  Plug & Play Script & Configurable
#  Scripter : Kyonides-Arkanthes
#  2019-01-20

module RandomEnkounter
  ENEMY_APPEARS = '018-Teleport01'
  WAIT_COUNT = Graphics.frame_rate * 3
  ANIME_POPUP = {} # Do Not Edit This Line
  # Animation on Enemy Trooper on Map [Troop ID] = Animation ID
  ANIME_POPUP.default = 0
  ANIME_POPUP[1] = 14
  ANIME_POPUP[2] = 20
  MESSAGE = {} # Do Not Edit This Line
  # Options: "Any text" or nil if you don't want to show any message if that
  # Troop ID is randomly picked by the system. Include \n for line breaks to
  # be displayed on the dialogue window.
  MESSAGE.default = "Default Message"
  MESSAGE[1] = "Enjoy the cold embrace of death!"
  MESSAGE[2] = "Halt right there, you pathetic fools!"
  def self.enemy() @enemy end
  def self.enemy=(new_enemy) @enemy = new_enemy end
  def self.enemy_appears() RPG::AudioFile.new(ENEMY_APPEARS,100,350) end
end

class Game_RandomEnemy < Game_Enemy
  attr_reader :character_name, :character_hue, :tile_id, :pattern, :direction
  attr_reader :opacity, :blend_type, :x, :y, :through, :step_anime
  attr_accessor :transparent
  def refresh
    @character_name = @battler_name
    @character_hue = @battler_hue
    dir = $game_player.direction
    @x = $game_player.x + (dir == 6 ? 1 : dir == 4 ? -1 : 0)
    @y = $game_player.y + (dir == 2 ? 1 : dir == 8 ? -1 : 0)
    @direction = 10 - dir
    valid_coord = $game_map.valid?(@x, @y)
    result = false
    if valid_coord
      $game_map.events.values.each {|event| through = event.through
        (result = true; break) if event.x == @x and event.y == @y and !through }
    end
    if !valid_coord or result
      @x = $game_player.x + (dir == 6 ? -1 : dir == 4 ? 1 : 0)
      @y = $game_player.y + (dir == 2 ? -1 : dir == 8 ? 1 : 0)
      @direction = dir
    end
    @real_x = @x * 128
    @real_y = @y * 128
    @opacity = 255
    @blend_type = 0
    @tile_id = 0
    @pattern = 0
    @anime_count = 0
    @stop_count = 0
    @through = false
    @transparent = false
    @move_speed = 4
    @move_frequency = 6
    @step_anime = true
    @animation_id = RandomEnkounter::ANIME_POPUP[@troop_id]
  end

  def screen_x() (@real_x - $game_map.display_x + 3) / 4 + 16 end
  def screen_y() (@real_y - $game_map.display_y + 3) / 4 + 32 end

  def screen_z(height = 0)
    return 999 if @always_on_top
    z = (@real_y - $game_map.display_y + 3) / 4 + 32
    return z + ((height > 32) ? 31 : 0) # If height exceeds 32, then add 31
  end

  def bush_depth
    return 0 if @tile_id > 0 or @always_on_top
    (@jump_count == 0 and $game_map.bush?(@x, @y))? 12 : 0
  end

  def update
    @anime_count += 1# if @step_anime
    if @anime_count > 18 - @move_speed * 2
      if !@step_anime and @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
      @anime_count = 0
    end#@stop_count += 1
  end
end

class Game_Player
  alias kyon_enkounters_gm_player_up update
  attr_writer :halt
  def update
    return if @halt
    kyon_enkounters_gm_player_up
  end
end

class Game_Map
  alias kyon_enkounters_gm_map_setup setup
  alias kyon_enkounters_gm_map_passable? passable?
  def setup(map_id)
    kyon_enkounters_gm_map_setup(map_id)
    RandomEnkounter.enemy = nil
  end

  def passable?(x, y, d, self_event=nil)
    enemy = RandomEnkounter.enemy
    return false if enemy != nil and !enemy.through
    kyon_enkounters_gm_map_passable?(x, y, d, self_event)
  end
end

class Sprite_RandomCharacter < Sprite_Character
  def update
    return if @character == nil
    super
  end
end

class Spriteset_Map
  alias kyon_enkounters_sprite_map_init initialize
  alias kyon_enkounters_sprite_map_up update
  alias kyon_enkounters_sprite_map_dispose dispose
  def initialize
    character = Game_Character.new
    character.transparent = true
    @random_sprite = Sprite_RandomCharacter.new(nil, character)
    kyon_enkounters_sprite_map_init
    @random_sprite = Sprite_RandomCharacter.new(@viewport1, character)
  end

  def random_enemy=(new_enemy)
    new_enemy.transparent = false
    @random_sprite.character = new_enemy
  end

  def update
    kyon_enkounters_sprite_map_up
    @random_sprite.update
  end

  def dispose
    kyon_enkounters_sprite_map_dispose
    @random_sprite.dispose
  end
end

class Scene_Map
  @@wait_count = 0
  alias kyon_enkounters_scn_map_up update
  alias kyon_enkounters_scn_map_call_battle call_battle
  def call_battle
    $game_temp.battle_calling = false
    if $game_player.encounter_count == 0 and $game_map.encounter_list.size > 0
      @wait_for_battle = true
      $game_system.se_play(RandomEnkounter.enemy_appears)
      $game_player.halt = true
      $game_player.straighten
      tid = $game_temp.battle_troop_id
      enemies_size = $data_troops[tid].members.size
      enemy = Game_RandomEnemy.new(tid, rand(enemies_size))
      RandomEnkounter.enemy = enemy
      RandomEnkounter.enemy.refresh
      @spriteset.random_enemy = enemy
      @spriteset.update
      if (message = RandomEnkounter::MESSAGE[tid])
        $game_temp.message_text = message.dup
        @last_message_position = $game_system.message_position
        $game_system.message_position = $game_player.screen_y > 320 ? 0 : 2
      end
      @@wait_count = RandomEnkounter::WAIT_COUNT
    end
  end

  def update
    if @wait_for_battle
      RandomEnkounter.enemy.update
      @spriteset.update
      @message_window.update
      @@wait_count -= 1
      return if @@wait_count > 0
      @wait_for_battle = nil
      $game_system.message_position = @last_message_position
      return kyon_enkounters_scn_map_call_battle
    end
    kyon_enkounters_scn_map_up
  end
end

class Scene_Battle
  alias kyon_enkounters_scn_battle_battle_end battle_end
  def battle_end(result)
    $game_player.halt = false
    RandomEnkounter.enemy = nil
    kyon_enkounters_scn_battle_battle_end(result)
  end
end


Versión Original (Sin Soporte)
Código:
# * RandomEnkounter XP
#   Plug & Play Script & Configurable
#   Scripter : Kyonides-Arkanthos
#   2015-11-17

 module RandomEnkounter
  ENEMY_APPEARS = '018-Teleport01'
  WAIT_COUNT = 80
  def self.enemy() @enemy end
  def self.enemy=(new_enemy) @enemy = new_enemy end
  def self.enemy_appears() RPG::AudioFile.new(ENEMY_APPEARS,100,350) end
end

 class Game_RandomEnemy < Game_Enemy
  attr_reader :character_name, :character_hue, :tile_id, :pattern, :transparent
  attr_reader :direction, :opacity, :blend_type, :x, :y, :through
  def refresh
    @character_name = @battler_name
    @character_hue = @battler_hue
    dir = $game_player.direction
    @direction = 10 - $game_player.direction
    @x = $game_player.x + (dir == 6 ? 1 : dir == 4 ? -1 : 0)
    @y = $game_player.y + (dir == 2 ? 1 : dir == 8 ? -1 : 0)
    @real_x = @x * 128
    @real_y = @y * 128
    @opacity = 255
    @blend_type = 0
    @tile_id = 0
    @pattern = 0
    @jump_count = 0
    @jump_peak = 0
    @through = false
    @transparent = false
  end

   def screen_x() (@real_x - $game_map.display_x + 3) / 4 + 16 end  def screen_y
    y = (@real_y - $game_map.display_y + 3) / 4 + 32
    n = (@jump_count >= @jump_peak)? @jump_count - @jump_peak :
        @jump_peak - @jump_count
    return y - (@jump_peak * @jump_peak - n * n) / 2
  end

   def screen_z(height = 0)
    return 999 if @always_on_top
    z = (@real_y - $game_map.display_y + 3) / 4 + 32
    return z + ((height > 32) ? 31 : 0) # If height exceeds 32, then add 31
  end

   def bush_depth
    return 0 if @tile_id > 0 or @always_on_top
    (@jump_count == 0 and $game_map.bush?(@x, @y))? 12 : 0
  end
end

 class Game_Map
  alias kyon_enkounters_gm_map_passable? passable?
  def passable?(x, y, d, self_event=nil)
    enemy = RandomEnkounter.enemy
    return false if enemy != nil and !enemy.through
    kyon_enkounters_gm_map_passable?(x, y, d, self_event)
  end
end

 class Sprite_RandomCharacter < Sprite_Character
  def update
    return if @character == nil
    super
  end
end

 class Spriteset_Map
  alias kyon_enkounters_sprite_map_init initialize
  def initialize
    kyon_enkounters_sprite_map_init
    character = Game_Character.new
    character.transparent = true
    @character_sprites << Sprite_RandomCharacter.new(@viewport1, character)
  end

   def random_enemy=(new_enemy) @character_sprites[-1].character = new_enemy end  def dispose_random_enemy
    @character_sprites.dispose
    @character_sprites.pop
  end
end

 class Scene_Map
  alias kyon_enkounters_scn_map_call_battle call_battle
  def call_battle
    unless @wait_count
      $game_system.se_play(RandomEnkounter.enemy_appears)
      tid = $game_temp.battle_troop_id
      enemies_size = $data_troops[tid].members.size
      RandomEnkounter.enemy = Game_RandomEnemy.new(tid, rand(enemies_size))
      RandomEnkounter.enemy.refresh
      @spriteset.random_enemy = RandomEnkounter.enemy
      @wait_count = RandomEnkounter::WAIT_COUNT
      return
    else
      @wait_count -= 1
      return if @wait_count > 0
    end
    kyon_enkounters_scn_map_call_battle
  end
end

 class Scene_Battle
  alias kyon_enkounters_scn_battle_battle_end battle_end
  def battle_end(result)
    RandomEnkounter.enemy = nil
    kyon_enkounters_scn_battle_battle_end(result)
  end
end



Última edición por kyonides el Dom Ene 20, 2019 7:51 am, editado 2 veces (Razón : Actualización del Script)

kyonides
PJ Recurrente
PJ Recurrente

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 90
Monedas : 235
Reputación : 1

Volver arriba Ir abajo

Re: RandomEnkounters XP

Mensaje por kyonides Hoy a las 7:31 am

Actualización

En la nueva versiń podrán disfrutar de más animación y hasta un mensaje de insultos o amenazas que los monstruos podrán lanzarles a los héroes antes de que comience la batalla, si fue aleatoria.

kyonides
PJ Recurrente
PJ Recurrente

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 90
Monedas : 235
Reputación : 1

Volver arriba Ir abajo

Volver arriba


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