DeadlyDan_MapFog, Enables RMXP style fog in RMVX

Больше
17 года 9 мес. назад #22419 от Enyo
Автор: DeadlyDan
Описание: Добавляет в мейкер ВХ утерянную фичу из ХП - туманы на карте
Скрипт:
[cut=Скрипт]
Code:
#============================================================================== # ? 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
[/cut]
Демо: нет
Сайт: 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]

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.087 секунд
Работает на Kunena форум