ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker XPУлучшающие или добавляющее новое скриптыDeadlyDan_MapFog, Enables RMXP style fog in RMVX
Войти на сайт
×
ТЕМА: DeadlyDan_MapFog, Enables RMXP style fog in RMVX
DeadlyDan_MapFog, Enables RMXP style fog in RMVX 16 года 3 мес. назад #22419
|
Автор: DeadlyDan
Описание: Добавляет в мейкер ВХ утерянную фичу из ХП - туманы на карте Скрипт: [cut=Скрипт] #==============================================================================
# ? DeadlyDan_MapFog by DeadlyDan
#------------------------------------------------------------------------------
# Allows maps to have fogs like in RPG Maker XP
#==============================================================================
# Usage:
=begin
To initialize a fog for a current map you must:
1) Create a map event and set it to only come on when Self Switch A is on.
2) Rename it to FOG. (Case sensitive, so it has to be FOG)
3) Set it to a Parallel Process.
4) Add for example, the following code into a Script Code event command:
$game_map.fog_name = fog # Filename of fog image located in the Pictures folder
$game_map.fog_zoom = 300 # How much to zoom into the fog image
$game_map.fog_sx = 1 # The scrolling speed across the x axis
$game_map.fog_sy = 1 # The scrolling speed across the y axis
$game_map.fog_target_opacity = 80 # The opacity of the fog
$game_map.fog_show # Always call this after changing fog variables
5) Then, add a Control Self Switch after that Script Code, and set it to turn A off.
(Note)
It is absolutely vital that you put the event name to FOG and set it to a Parallel Proccess and also set it to
only run when Self-Switch A is on.
Make sure you place this script after all other scripts except for Main.
(Extras)
You can also use extra commands to change the fog settings, such as the following example:
$game_map.fog_tone = Tone.new ( 100, 0, 0, 0 )
$game_map.fog_blend_type = 1 # ( 0 = NONE, 1 = ADD, 2 = SUBTRACT )
(Important!)
When you want to have a map with no fog, do all of the above but instead of seting the fog options and then
calling $game_map.fog_show, just add a Script Code event command and place in it $game_map.fog_clear.
This will clear the fog settings and the fog will dissapear, every map has to have a fog event in it, else maps
will keep all other maps fog settings that might be unintentional on the users side.
=end
class Game_Temp
attr_accessor :fog_name
attr_accessor :fog_opacity
attr_accessor :fog_target_opacity
attr_accessor :fog_blend_type
attr_accessor :fog_zoom
attr_accessor :fog_sx
attr_accessor :fog_sy
attr_accessor :fog_tone
alias original_initialize initialize
def initialize
original_initialize
@fog_name =
@fog_tone = Tone.new ( 0, 0, 0, 0 )
@fog_opacity = 0
@fog_target_opacity = 0
@fog_blend_type = 0
@fog_zoom = 100
@fog_sx = 0
@fog_sy = 0
end
end
class Game_Map
attr_accessor :fog_name
attr_accessor :fog_opacity
attr_accessor :fog_target_opacity
attr_accessor :fog_blend_type
attr_accessor :fog_zoom
attr_accessor :fog_sx
attr_accessor :fog_sy
attr_accessor :fog_ox
attr_accessor :fog_oy
attr_accessor :fog_tone
attr_accessor :fog_start_loop
attr_accessor :fog_eventid
attr_accessor :fog_visible
attr_accessor :fog
alias original_initialize initialize
def initialize
original_initialize
@fog = Plane.new ( @viewport1 )
@fog_ox = 0
@fog_oy = 0
end
alias original_setup setup
def setup ( map_id )
original_setup ( map_id )
fog_event
end
alias original_update update
def update
original_update
if ( @fog_visible and @fog )
fog_update
end
end
def fog_init
@fog_name = $game_temp.fog_name
@fog_tone = $game_temp.fog_tone
@fog_opacity = $game_temp.fog_opacity
@fog_target_opacity = $game_temp.fog_target_opacity
@fog_blend_type = $game_temp.fog_blend_type
@fog_zoom = $game_temp.fog_zoom
@fog_sx = $game_temp.fog_sx
@fog_sy = $game_temp.fog_sy
@fog_tone_target = Tone.new ( 0, 0, 0, 0 )
@fog_tone_duration = 0
@fog_opacity_duration = 0
@fog_opacity_target = 0
@fog_previous_name =
fog_setup
end
def fog_setup
fog_hide
if ( ( @fog_previous_name != @fog_name ) and ( @fog_name != ) )
@fog.bitmap = Cache.picture ( @fog_name )
@fog_name_previous = @fog_name
@fog_opacity = @fog_target_opacity
@fog.opacity = @fog_opacity
@fog.blend_type = @fog_blend_type
@fog.zoom_x = @fog_zoom / 100
@fog.zoom_y = @fog_zoom / 100
@fog.ox = @fog_ox
@fog.oy = @fog_oy
@fog.tone = @fog_tone
@fog.z = 99
@fog_visible = true
else
fog_hide
end
end
def fog_update
@fog_ox -= @fog_sx / 8.0
@fog_oy -= @fog_sy / 8.0
if ( @fog_tone_duration = 1 )
d = @fog_tone_duration
target = @fog_tone_target
@fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
@fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
@fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
@fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
@fog_tone_duration -= 1
end
if ( @fog_opacity_duration = 1 )
d = @fog_opacity_duration
@fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
@fog_opacity_duration -= 1
end
@fog.opacity = @fog_opacity
@fog.blend_type = @fog_blend_type
@fog.zoom_x = @fog_zoom / 100
@fog.zoom_y = @fog_zoom / 100
@fog.ox = @fog_ox
@fog.oy = @fog_oy
@fog.tone = @fog_tone
end
def fog_show
fog_init
end
def fog_hide
@fog_visible = false
@fog_opacity = 0
$game_temp.fog_opacity = 0
end
def fog_clear
@fog_visible = false
@fog_opacity = 0
$game_temp.fog_opacity = 0
@fog_target_opacity = 0
$game_temp.fog_target_opacity = 0
fog_show
end
def scroll_up ( distance )
if ( loop_vertical? )
@display_y += @map.height * 256 - distance
@display_y %= @map.height * 256
@parallax_y -= distance
@fog_oy -= distance / 8.0
else
last_y = @display_y
@display_y = [@display_y - distance, 0].max
@parallax_y += @display_y - last_y
@fog_oy += ( @display_y - last_y ) / 8.0
end
end
def scroll_down ( distance )
if ( loop_vertical? )
@display_y += distance
@display_y %= @map.height * 256
@parallax_y += distance
@fog_oy += distance / 8.0
else
last_y = @display_y
@display_y = [@display_y + distance, (height - 13) * 256].min
@parallax_y += @display_y - last_y
@fog_oy += ( @display_y - last_y ) / 8.0
end
end
def scroll_left ( distance )
if ( loop_horizontal? )
@display_x += @map.width * 256 - distance
@display_x %= @map.width * 256
@parallax_x -= distance
@fog_ox -= distance / 8.0
else
last_x = @display_x
@display_x = [@display_x - distance, 0].max
@parallax_x += @display_x - last_x
@fog_ox += ( @display_x - last_x ) / 8.0
end
end
def scroll_right ( distance )
if ( loop_horizontal? )
@display_x += distance
@display_x %= @map.width * 256
@parallax_x += distance
@fog_ox += distance / 8.0
else
last_x = @display_x
@display_x = [@display_x + distance, (width - 17) * 256].min
@parallax_x += @display_x - last_x
@fog_ox += ( @display_x - last_x ) / 8.0
end
end
def setup_events
@fog_eventid = 0
@events = {}
for i in @map.events.keys
@events[i] = Game_Event.new(@map_id, @map.events[i])
if ( @events[i].name == FOG )
@fog_eventid = i
end
end
@common_events = {}
for i in 1...$data_common_events.size
@common_events[i] = Game_CommonEvent.new(i)
end
end
def fog_event
if ( @fog_eventid != 0 )
key = @events[@fog_eventid].selfswitch
$game_self_switches[key] = true
end
end
end
class Scene_Map Scene_Base
alias original_start start
def start
original_start
$game_map.fog_show
$game_map.fog_event
end
alias original_terminate terminate
def terminate
original_terminate
$game_map.fog_hide
end
end
class Game_Player Game_Character
alias original_perform_transfer perform_transfer
def perform_transfer
original_perform_transfer
$game_map.setup_events
$game_map.fog_event
$game_map.fog_show
end
end
class Game_Event Game_Character
def name
return @event.name
end
def selfswitch
key = [@map_id, @event.id, A ]
return key
end
end Демо: нет Сайт: www.rpgmakervx.net/ СкринШоты: [cut=СкринШоты][/cut] Вопросы по скрипту: [cut=Вопросы по скрипту] [glow=red,2,300]Q[/glow]: Как его использовать? [glow=green,2,300]A[/glow]: Создайте эвент и в команде Выполнить скрипт напишите следующие $game_map.fog_name = fog # Название файла (в папке Pictures) $game_map.fog_zoom = 300 # Зум тумана $game_map.fog_sx = 1 # Скорость прокрутки - х $game_map.fog_sy = 1 # Скорость прокрутки - у $game_map.fog_target_opacity = 80 # Прозрачность $game_map.fog_show # Всегда пишите это для активации тумана [/cut] |
Администратор запретил публиковать записи гостям.
|
Модераторы: NeKotZima
Время создания страницы: 0.247 секунд