¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1RandomEnkounters XP Empty RandomEnkounters XP el Dom Ene 20, 2019 7:39 am

kyonides

kyonides
RandomEnkounters XP


por Kyonides Arkanthes


Introducción

Este script les permite ver a los enemigos aleatorios justo antes de que comience la batalla. Además podrán observar cómo una animación personalizable los precede (como una teletransportación) y luego estos se mueven un poco mientras les gritan improperios o amenazas a sus héroes (en una ventana de diálogo). Estas características son opcionales, pero me parecen muy convenientes, ya que les ahorrarían crear muchos eventos o eventos comunes.

Ópalo Troll ¡Yo lo aprovecharé para machacar a Alexis! Ese tipo es un imbécil de primera.

¡Te apoyamos, mi estimado Ópalo! Ópalo Sonrisa Grande


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

Términos de Uso

Son libres de usar mi script en cualquier tipo de juego, pero espero aparecer en los créditos y obtener una compensación monetaria si lo incluyen en proyectos comerciales.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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