Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

RandomEnkounters XP

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP RandomEnkounters XP

Mensaje por kyonides-arkanthos el 2015-11-17, 10:21

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.

Script
Código:
# * RandomEnkounter XP
#   Plug & Play Script & Configurable
#   Scripter : Kyonides-Arkanthos
#   2015-11-22

module RandomEnkounter
  ENEMY_APPEARS = '018-Teleport01'
  WAIT_COUNT = 80
  ANIME_POPUP = {} # No Edite Esta Línea
  # Animación del Enemigo en el Mapa [ID de Tropa] = ID Animación
  ANIME_POPUP[1] = 14
  ANIME_POPUP[2] = 20
  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)
    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
    @jump_count = 0
    @jump_peak = 0
    @through = false
    @transparent = false
    tid = RandomEnkounter::ANIME_POPUP[@troop_id]
    @animation_id = tid ? tid : 0
  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
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      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
    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-arkanthos el 2015-11-23, 04:43, editado 5 veces (Razón : Actualización del Script)
avatar
kyonides-arkanthos
Principiante
Principiante

0/3

Créditos 510

Gracias : 79

Volver arriba Ir abajo

RPG Maker XP Re: RandomEnkounters XP

Mensaje por Lance Amano el 2015-11-17, 20:08

Me sale un error. Dice que la gráfica del monstruo debe estar en la carpeta de Characters y no de Battlers.
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: RandomEnkounters XP

Mensaje por kyonides-arkanthos el 2015-11-18, 02:40

Eso NO ES ERROR, es obvio, necesita un character y no un battler. ¿Qué haría con un battler en el mapa?

EDITO

Actualicé el script para que quepa la posibilidad de ver una animación al surgir el enemigo.
avatar
kyonides-arkanthos
Principiante
Principiante

0/3

Créditos 510

Gracias : 79

Volver arriba Ir abajo

RPG Maker XP Re: RandomEnkounters XP

Mensaje por Lance Amano el 2015-11-18, 12:09

Ya entiendo ahora. Con la descripción, pensé que aparecía una imagen del battler en la pantalla a la hora de la batalla y no solo un chara.

Lo probé y funciona como es debido.
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: RandomEnkounters XP

Mensaje por kyonides-arkanthos el 2015-11-23, 02:45

Como verán, munderos, actualizo el tema porque posteé una nueva versión, el cambio que realicé tiene que ver con colocar al monstruo generado aleatoriamente detrás del héroe cuando se halla un evento justo al frente de ese héroe y que no está relacionado con dicho monstruo. De hecho también se realizará el cambio cuando no haya espacio frente al héroe por llegar a algún extremo del mapa.
avatar
kyonides-arkanthos
Principiante
Principiante

0/3

Créditos 510

Gracias : 79

Volver arriba Ir abajo

RPG Maker XP Re: RandomEnkounters XP

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.