# * RandomEnkounter XP #   Scripter : Kyonides-Arkanthos #   2016-11-30 # Script Call # # RandomEnkounter.hide_monsters = true o nil # true - Esconde monstruos de la Lista aleatoria, nil - Lista completa # El valor inicial lo encuentran an la línea 23. module RandomEnkounter ENEMY_APPEARS = '018-Teleport01' WAIT_COUNT = 80 ANIME_POPUP = {} # No Edite Esta Línea ANIME_POPUP.default = 21 # Animación del Enemigo en el Mapa [ID de Tropa] = ID Animación ANIME_POPUP[1] = 14 ANIME_POPUP[2] = 20 MONSTERLIST_ITEMIDS = { 33 => 1, 34 => 2, 35 => 3 } # Restarle Cantidad a la Lista de Monstruos de Mapas No Predefinidos # [Sin Objetos, Objeto Nv 1, Objeto Nv 2, Objeto Nv 3] REDUCE_MONSTERLIST = [6, 4, 2, 0] @hide_monsters = true class << self attr_accessor :enemy, :hide_monsters def enemy_appears() RPG::AudioFile.new(ENEMY_APPEARS,80,350) end 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 - dir @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 @animation_id = RandomEnkounter::ANIME_POPUP[@troop_id] 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 high_count = (@jump_count >= @jump_peak) n = high_count ? @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_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 unless @character 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 update loop do $game_map.update $game_system.map_interpreter.update $game_player.update $game_system.update $game_screen.update break unless $game_temp.player_transferring transfer_player break if $game_temp.transition_processing end @spriteset.update @message_window.update if $game_temp.gameover $scene = Scene_Gameover.new return end if $game_temp.to_title $scene = Scene_Title.new return end 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 return if $game_temp.message_window_showing update_encounter unless $game_temp.battle_calling if Input.trigger?(Input::B) unless $game_system.map_interpreter.running? or $game_system.menu_disabled $game_temp.menu_calling = true $game_temp.menu_beep = true end end if $DEBUG and Input.press?(Input::F9) $game_temp.debug_calling = true end return if $game_player.moving? if $game_temp.battle_calling call_battle elsif $game_temp.shop_calling call_shop elsif $game_temp.name_calling call_name elsif $game_temp.menu_calling call_menu elsif $game_temp.save_calling call_save elsif $game_temp.debug_calling call_debug end end def update_encounter list = $game_map.encounter_list if $game_player.encounter_count == 0 and list != [] unless $game_system.map_interpreter.running? or $game_system.encounter_disabled size = list.size if RandomEnkounter.hide_monsters new_pos = 0 ids = RandomEnkounter::MONSTERLIST_ITEMIDS.keys.reverse ids.each {|id, pos| next if $game_party.item_number(id) == 0 new_pos = pos break } size -= RandomEnkounter::REDUCE_MONSTERLIST[new_pos] size = 1 if size < 1 end troop_id = list[rand(size)] return unless $data_troops[troop_id] $game_temp.battle_calling = true $game_temp.battle_troop_id = troop_id $game_temp.battle_can_escape = true $game_temp.battle_can_lose = false $game_temp.battle_proc = nil end end end def call_battle if $game_player.encounter_count == 0 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 @wait_count = nil 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