Всё-таки иногда я скучаю по "красивостям" старого доброго RM2k3. Например, там было множество возможностей красиво перенестись с карты на карту - а иногда и не только красиво, но ещё и со смыслом. Например - показать, что "земля развёрзлась под ногами", разломив карту на четыре части.
В RMVXA такого, к сожалению, не предусмотрено. Но - мы и сами с усами!
=begin
Скрипт перемещения с анимацией "деления карты на четыре части"
Автор: Cerberus
=end
module Division
@map_bitmap = nil
@trans_sprite = nil
@trans_viewport = nil
@turn = -1
@tr_rect = Rect.new
@black = Color.new(0, 0, 0, 255)
@divided = false
def self.start
@map_bitmap = Graphics.snap_to_bitmap
@trans_viewport = Viewport.new(0, 0, 544, 416)
@trans_sprite = Sprite.new(@trans_viewport)
@turn = 52
@trans_sprite.bitmap = Bitmap.new(544, 416)
@trans_sprite.bitmap.blt(0, 0, @map_bitmap, @tr_rect);
@trans_sprite.x = 0
@trans_sprite.y = 0
@trans_sprite.z = 1000
@trans_viewport.z = 1000
@trans_sprite.visible = true
@trans_viewport.visible = true
end
def self.turn
@turn
end
def self.divided
@divided
end
def self.divided= (val)
@divided=val
end
def self.update
print "Updating division... ", @turn, " "
stop if (turn==0)
shift if (turn>0)
end
def self.shift
print "Shifting... "
@tr_rect.set(@trans_viewport.rect.width / 2 - 4, 0, 8, @trans_viewport.rect.height)
@map_bitmap.fill_rect(@tr_rect, @black);
@tr_rect.set(0, @trans_viewport.rect.height / 2 - 4, @trans_viewport.rect.width, 8)
@map_bitmap.fill_rect(@tr_rect, @black);
@tr_rect.set(4, 4, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
@map_bitmap.blt(0, 0, @trans_sprite.bitmap, @tr_rect)
@tr_rect.set(@trans_viewport.rect.width / 2, 4, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
@map_bitmap.blt(@trans_viewport.rect.width / 2 + 4, 0, @trans_sprite.bitmap, @tr_rect)
@tr_rect.set(4, @trans_viewport.rect.height / 2, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
@map_bitmap.blt(0, @trans_viewport.rect.height / 2 + 4, @trans_sprite.bitmap, @tr_rect)
@tr_rect.set(@trans_viewport.rect.width / 2, @trans_viewport.rect.height / 2, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
@map_bitmap.blt(@trans_viewport.rect.width / 2 + 4, @trans_viewport.rect.height / 2 + 4, @trans_sprite.bitmap, @tr_rect)
@tr_rect.set(0, 0, @trans_viewport.rect.width, @trans_viewport.rect.height)
@trans_sprite.bitmap.blt(0, 0, @map_bitmap, @tr_rect)
@turn-=1
end
def self.stop
@turn = -1
@divided = true
end
def self.dispose
@map_bitmap.dispose
@trans_sprite.bitmap.dispose
@trans_sprite.dispose
@trans_viewport.dispose
@divided = false
end
end
class Scene_Base
alias divis_update update
def update
if Division.turn>=0
Division.update
print "Divis.upd ", Division.turn, "\n"
end
divis_update
end
end
class Game_Interpreter
def run
wait_for_message
while @list[@index] do
Fiber.yield while Division.turn>=0
execute_command
@index += 1
end
Fiber.yield
@fiber = nil
end
alias divis_fadeout command_221
def command_221
if Division.divided
screen.start_fadeout (1)
Division.dispose
else
divis_fadeout
end
end
end
class Scene_Map < Scene_Base
alias divis_pre_transfer pre_transfer
def pre_transfer
if Division.divided
@map_name_window.close
Graphics.brightness = 0
$game_temp.fade_type = 0
Division.dispose
else
divis_pre_transfer
end
end
end
Запускается короткой и простой командой - Division.start.
Демо
Жду критики от матёрых скриптеров, ибо наверняка сделал не оптимально. Но, по крайней мере, пока мне этот скрипт сломать не удалось