Войти на сайт

Авторизация, ждите ...
×

ТЕМА: DeadlyDan_MapFog, Enables RMXP style fog in RMVX

DeadlyDan_MapFog, Enables RMXP style fog in RMVX 16 года 3 мес. назад #22419

  • Enyo
  • Enyo аватар
  • Вне сайта
  • Просветлённый
  • Скриптер
  • Сообщений: 251
  • Спасибо получено: 4
Автор: 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
[/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]
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.247 секунд