#==============================================================================
# MelekTaus' ScrollingTeleport
# Version: 0.7
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
SCROLLING_TELEPORT_SWITCH_ID = 1
SCROLLING_MAP_X_SPEED = 8
SCROLLING_MAP_Y_SPEED = 6
#--------------------------------------------------------------------------
end
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
attr_reader :scrolling_teleport_direction
#--------------------------------------------------------------------------
def get_display_x(x = $game_player.x)
return 0 if x < 9
return width - 17 if x > width - 9
return x - 8
end
#--------------------------------------------------------------------------
def get_display_y(y = $game_player.y)
return 0 if y < 7
return height - 13 if y > height - 7
return y - 6
end
#--------------------------------------------------------------------------
def get_screen_x(x = $game_player.x)
return adjust_x(x * 256) / 256
end
#--------------------------------------------------------------------------
def get_screen_y(y = $game_player.y)
return adjust_y(y * 256) / 256
end
#--------------------------------------------------------------------------
def setup(map_id, scrolling_teleport_direction = 0, x = nil, y = nil)
@old_map_id = @map_id
@old_map = @map
@old_map_x = get_display_x
@old_map_y = get_display_y
@map_id = map_id
@map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
if scrolling_teleport_direction > 0
@map_x = get_display_x(x)
@map_y = get_display_y(y)
build_scroll_map(scrolling_teleport_direction)
else
@display_x = 0
@display_y = 0
@passages = $data_system.passages
referesh_vehicles
setup_events
setup_scroll
setup_parallax
@need_refresh = false
end
end
#--------------------------------------------------------------------------
def build_scroll_map(scrolling_teleport_direction)
if scrolling_teleport_direction > 2 and scrolling_teleport_direction < 8
new_map = RPG::Map.new(34, 13)
new_map.data = Table.new(34, 13, 3)
for x in 0...17
for y in 0...13
for z in 0...3
if scrolling_teleport_direction == 6
new_map.data[x, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
else
new_map.data[x, y, z] = @map.data[@map_x+x, @map_y+y, z]
end
end
end
end
for x in 0...17
for y in 0...13
for z in 0...3
if scrolling_teleport_direction == 6
new_map.data[x + 17, y, z] = @map.data[@map_x+x, @map_y+y, z]
else
new_map.data[x + 17, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
end
end
end
end
else
new_map = RPG::Map.new(17, 26)
new_map.data = Table.new(17, 26, 3)
for x in 0...17
for y in 0...13
for z in 0...3
if scrolling_teleport_direction == 2
new_map.data[x, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
else
new_map.data[x, y, z] = @map.data[@map_x+x, @map_y+y, z]
end
end
end
end
for x in 0...17
for y in 0...13
for z in 0...3
if scrolling_teleport_direction == 2
new_map.data[x, y + 13, z] = @map.data[@map_x+x, @map_y+y, z]
else
new_map.data[x, y + 13, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
end
end
end
end
end
temp_map = @map
@map = new_map
new_events = {}
index = 0
for i in @events.keys
if @events[i].x >= @old_map_x and @events[i].x < @old_map_x + 17
if @events[i].y >= @old_map_y and @events[i].y < @old_map_y + 13
@events[i].event.x = @events[i].x - @old_map_x
@events[i].event.x += 17 if scrolling_teleport_direction == 4
@events[i].event.y = @events[i].y - @old_map_y
@events[i].event.y += 13 if scrolling_teleport_direction == 8
new_events[index += 1] = Game_Event.new(@map_id, @events[i].event)
new_events[index].set_direction(@events[i].direction)
new_events[index].wait_count = 800
end; end
end
for i in temp_map.events.keys
if temp_map.events[i].x >= @map_x and temp_map.events[i].x < @map_x + 17
if temp_map.events[i].y >= @map_y and temp_map.events[i].y < @map_y + 13
temp_map.events[i].x -= @map_x
temp_map.events[i].x += 17 if scrolling_teleport_direction == 6
temp_map.events[i].y -= @map_y
temp_map.events[i].y += 13 if scrolling_teleport_direction == 2
new_events[index += 1] = Game_Event.new(@map_id, temp_map.events[i])
new_events[index].wait_count = 800
end; end
end
@events = new_events
end
#--------------------------------------------------------------------------
end
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
attr_reader :event
attr_accessor :wait_count
#--------------------------------------------------------------------------
end
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
def perform_transfer(scrolling_teleport_direction = 0)
if scrolling_teleport_direction > 0 and $game_map.map_id == @new_map_id
$game_map.setup(@new_map_id)
@new_x = 0 if scrolling_teleport_direction == 6
@new_x = $game_map.width - 1 if scrolling_teleport_direction == 4
@new_y = 0 if scrolling_teleport_direction == 2
@new_y = $game_map.height - 1 if scrolling_teleport_direction == 8
moveto(@new_x, @new_y)
else
return unless @transferring
@transferring = false
set_direction(@new_direction)
x = @new_x
y = @new_y
s_dir = scrolling_teleport_direction
if $game_map.map_id != @new_map_id
$game_map.setup(@new_map_id, s_dir, x, y)
end
case s_dir
when 2
x = $game_map.get_screen_x
y = 12
when 4
x = 17
y = $game_map.get_screen_y
when 6
x = 16
y = $game_map.get_screen_y
when 8
x = $game_map.get_screen_x
y = 13
end
moveto(x, y)
end
end
#--------------------------------------------------------------------------
def move_slowly_forward(scrolling_teleport_direction)
case scrolling_teleport_direction
when 2; s_dir = 16
when 4; s_dir = 17
when 6; s_dir = 18
when 8; s_dir = 19
end
move_route = RPG::MoveRoute.new
move_route.repeat = false
move_route.list[0] = RPG::MoveCommand.new(s_dir)
move_route.list[1] = RPG::MoveCommand.new(29, [2])
move_route.list[2] = RPG::MoveCommand.new(12)
move_route.list[3] = RPG::MoveCommand.new(15, [100])
move_route.list[4] = RPG::MoveCommand.new(0)
force_move_route(move_route)
end
#--------------------------------------------------------------------------
def share_input
move_route = RPG::MoveRoute.new
move_route.repeat = false
move_route.list[0] = RPG::MoveCommand.new(29, [4])
move_route.list[1] = RPG::MoveCommand.new(0)
force_move_route(move_route)
end
#--------------------------------------------------------------------------
end
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
def update_viewports
@viewport1.tone = $game_map.screen.tone
@viewport2.color = $game_map.screen.flash_color
@viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
@viewport1.update
@viewport2.update
@viewport3.update
end
#--------------------------------------------------------------------------
def x; return @viewport1.ox; end
#--------------------------------------------------------------------------
def x=(value); @viewport1.ox = value; end
#--------------------------------------------------------------------------
def y; return @viewport1.oy; end
#--------------------------------------------------------------------------
def y=(value); @viewport1.oy = value; end
#--------------------------------------------------------------------------
end
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
attr_accessor :scrolling_teleport_direction
#--------------------------------------------------------------------------
def initialize
@scrolling_teleport_direction = 0
@update_scrolling_teleport = 0
end
#--------------------------------------------------------------------------
alias melektaus_scene_map_update update
def update
melektaus_scene_map_update
update_scrolling_teleport
end
#--------------------------------------------------------------------------
def update_transfer_player
return unless $game_player.transfer?
s_dir = 0
if $game_switches[SCROLLING_TELEPORT_SWITCH_ID]
p = $game_player
s_dir = 4 if p.x == 0
s_dir = 6 if p.x == $game_map.width - 1
s_dir = 8 if p.y == 0
s_dir = 2 if p.y == $game_map.height - 1
end
@scrolling_teleport_direction = s_dir
if s_dir > 0
@spriteset.dispose
$game_player.perform_transfer(s_dir)
@spriteset = Spriteset_Map.new
case s_dir
when 2; @spriteset.y = -192
when 4; @spriteset.x = 256
when 6; @spriteset.x = -256
when 8; @spriteset.y = 192
end
$game_player.move_slowly_forward(s_dir)
@update_scrolling_teleport = 1
else
fade = (Graphics.brightness > 0)
fadeout(30) if fade
@spriteset.dispose
$game_player.perform_transfer
$game_map.autoplay
$game_map.update
Graphics.wait(15)
@spriteset = Spriteset_Map.new
fadein(30) if fade
Input.update
end
end
#--------------------------------------------------------------------------
def update_scrolling_teleport
s_dir = @scrolling_teleport_direction
if @update_scrolling_teleport == 1
case s_dir
when 2
@spriteset.y += SCROLLING_MAP_Y_SPEED
@spriteset.y = 192 if @spriteset.y > 192
@update_scrolling_teleport = 2 if @spriteset.y == 192
when 4
@spriteset.x -= SCROLLING_MAP_X_SPEED
@spriteset.x = -256 if @spriteset.x < -256
@update_scrolling_teleport = 2 if @spriteset.x == -256
when 6
@spriteset.x += SCROLLING_MAP_X_SPEED
@spriteset.x = 256 if @spriteset.x > 256
@update_scrolling_teleport = 2 if @spriteset.x == 256
when 8
@spriteset.y -= SCROLLING_MAP_Y_SPEED
@spriteset.y = -192 if @spriteset.y < -192
@update_scrolling_teleport = 2 if @spriteset.y == -192
end
end
if @update_scrolling_teleport == 2
@spriteset.dispose
$game_player.perform_transfer(s_dir)
$game_map.autoplay
$game_map.update
@spriteset = Spriteset_Map.new
Input.update
$game_player.share_input
@scrolling_teleport_direction = 0
@update_scrolling_teleport = 0
end
end
#--------------------------------------------------------------------------
end
#==============================================================================