WolfwoodSama
Member
Hey all, I'm using this script to show a map in place of a battleback:
It works great, but not without its issues. The problem is that it doesn't work so great in narrow corridors, crowded towns, etc. What I'd like to do is have it teleport the players to a new location for the battle, and then back when the fight's over. Ideally the map they'd be sent to would be based eithe on a parent map or a terrain ID. This doesn't sound too terribly hard, thanks in advance!
Code:
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class contains the set of sprites used in the Scene_Battle class, such
# as the enemies, actors, battle background, and any pictures being displayed
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
@battleback_sprite = Tilemap.new(@viewport1)
@battleback_sprite.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@battleback_sprite.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@battleback_sprite.map_data = $game_map.data
@battleback_sprite.ox = $game_map.display_x / 4
@battleback_sprite.oy = $game_map.display_y / 4
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
#--------------------------------------------------------------------------
# * Dispose the battle spriteset
#--------------------------------------------------------------------------
def dispose
@battleback_sprite.tileset.dispose
for i in 0..6
@battleback_sprite.autotiles[i].dispose
end
@battleback_sprite.dispose
for sprite in @enemy_sprites + @actor_sprites
sprite.dispose
end
@weather.dispose
for sprite in @picture_sprites
sprite.dispose
end
@timer_sprite.dispose
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
@viewport4.dispose
end
#--------------------------------------------------------------------------
# * Update the battleset sprite
#--------------------------------------------------------------------------
def update
@battleback_sprite.update
@actor_sprites[0].battler = $game_party.actors[0]
@actor_sprites[1].battler = $game_party.actors[1]
@actor_sprites[2].battler = $game_party.actors[2]
@actor_sprites[3].battler = $game_party.actors[3]
for sprite in @enemy_sprites + @actor_sprites
sprite.update
end
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.update
for sprite in @picture_sprites
sprite.update
end
@timer_sprite.update
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
@viewport4.color = $game_screen.flash_color
@viewport1.update
@viewport2.update
@viewport4.update
end
end
It works great, but not without its issues. The problem is that it doesn't work so great in narrow corridors, crowded towns, etc. What I'd like to do is have it teleport the players to a new location for the battle, and then back when the fight's over. Ideally the map they'd be sent to would be based eithe on a parent map or a terrain ID. This doesn't sound too terribly hard, thanks in advance!