public

Rpg Maker Developers Group

Simple enough for a child, powerful enough for a developer

2 Followers

[Ace] Adapting Woratana's Fogs with Kread-EX's Parallax Fix

BMM Archive · July 15, 2026

Preserved forum archive. This topic stores the original first post and locally mirrored RPG Maker Web attachments when available. It is posted by the BMMPlay archive account, not by the original creator.

Original Source

  • Original title: [Ace] Adapting Woratana's Fogs with Kread-EX's Parallax Fix
  • Original author: OMGerm
  • Original date: July 10, 2013
  • Source thread: https://forums.rpgmakerweb.com/threads/ace-adapting-woratanas-fogs-with-kread-exs-parallax-fix.15188/
  • Source forum path: Game Development Engines > Ruby Game System (RGSS) Scripts > RGSSx Script Support

Summary

It seems I posted this in the wrong forum originally; apologies.  I'm attempting to use Woratana/Necromus's (or any other) multi-fog script in conjunction with Kread-EX's fairly recent Parallax Plane class rewrite, but am unable to get my fogs to loop.  The fogs show when called via event, and move as intended, but it seems the graphic simply ends once it scrolls through.  Is it possible to rewrite the parallax update in the multi-fog script to use the viewport (similar to Kread-EX's script) instead of game_map.display?  Or is there another solution? Multi-Fog: Spoiler #===============================================================

Archived First Post

It seems I posted this in the wrong forum originally; apologies.  I'm attempting to use Woratana/Necromus's (or any other) multi-fog script in conjunction with Kread-EX's fairly recent Parallax Plane class rewrite, but am unable to get my fogs to loop.  The fogs show when called via event, and move as intended, but it seems the graphic simply ends once it scrolls through.  Is it possible to rewrite the parallax update in the multi-fog script to use the viewport (similar to Kread-EX's script) instead of game_map.display?  Or is there another solution?

Multi-Fog:

#===============================================================
# ● [VX ACE] ◦ Multiple Fogs ◦ □
# * Use unlimited layers of fog *
#--------------------------------------------------------------
# ◦ by Woratana [woratana@hotmail.com]
# ◦ Thaiware RPG Maker Community
# ◦ Released on: 13/05/2008
# ◦ Version: 1.0
# ◦ ported to VX Ace by Necromus 17/03/2012
#--------------------------------------------------------------

#==================================================================
# ** HOW TO USE **
# * use event command 'Script...' for the any script line below~
#-----------------------------------------------------------------
#
#---------------------------------------------------------------
# ** SETUP FOG PROPERTIES & SHOW FOG **
# * You have to setup fog properties, before show fog~
#-------------------------------------------------------------
# * There are 3 ways to setup fog properties:
# >> Setup Fog [Custom]:
# $fog.name = 'image_name' # Image file name, must be in fog image path (setup path below).
# $fog.hue = (integer) # Fog's hue. 0 - 360, 0 for no hue.
# $fog.tone = [red, green, blue, gray] # Fog's tone color.
# $fog.opacity = (integer) # Fog's opacity. 0 - 255, you will not see fog in 0.
# $fog.blend = (0, 1, or 2) # Fog's blend type. 0 for Normal, 1 for Add, 2 for Subtract.
# $fog.zoom = (integer) # Fog's size (in %). 100 for normal size.
# $fog.sx = (+ or - integer) # Fog's horizontal move speed.
# $fog.sy = (+ or - integer) # Fog's vertical move speed.
#
# >> Setup Fog [From Preset]:
# (You can setup fog presets, in part FOG PRESET SETUP below)
# $fog.load_preset(preset_id)
#
# >> Setup Fog [From Fog that showing]:
# $fog.load_fog(fog_id)
#
#--------------------------------------------------------------
# ** SHOW FOG **
#-------------------------------------------------------------
# After setup the fog, show fog by call script:
# $fog.show(fog_id)
#
# In case you want to show new fog on same ox, oy, tone as old fog. Call Script:
# $fog.show(old_fog_id, false)
#
# * fog_id: the ID number you want to put this fog in.
# (It can be any positive number or zero)
#
# After you show fog, the fog properties you've set will replace with default setting.
# (You can setup default setting, in part FOG DEFAULT SETTING below)
#
#--------------------------------------------------------------
# ** DELETE FOG **
#-------------------------------------------------------------
# You can delete 1 or more fog(s) at a time by call script:
# $fog.delete(fog_id, fog_id, fog_id, ...)
#
#---------------------------------------------------------------
# ** OLD FOG CONTROL EVENT COMMANDS **
#-------------------------------------------------------------
# Change Fog Tone:
# $game_map.fogtone(fog_id, [red, green, blue, gray], duration)
# e.g. $game_map.fogtone(1, [100,200,-100,0], 10)

# Change Fog Opacity:
# $game_map.fogopac(fog_id, new_opacity, duration)
# e.g. $game_map.fogopac(2, 200, 10)
#
#---------------------------------------------------------------
# ** ADDITIONAL SETTINGS **
#-------------------------------------------------------------
# Change Fog Image's Path:
# $game_map.fog_path = 'image_path'
# e.g. $game_map.fog_path = 'Graphics/Pictures/'

# Turn ON/OFF [Automatically clear all fogs when transfer player]:
# $game_map.fog_reset = (true / false)
#
#===============================================================

#==================================================================
# START ** MULTIPLE FOG SETUP **
#==================================================================
class Game_Map
alias wora_mulfog_gammap_ini initialize
def initialize
    wora_mulfog_gammap_ini
    
    #==================================================================
    # ** MULTIPLE FOG SETUP ** SETTINGS
    #--------------------------------------------------------------
    @fog_path = 'Graphics/Pictures/'
    # Fog image's path
    @fog_reset = true # (true or false)
    # Automatically clear all multiple fogs when transfer player
    #==================================================================
    
    @mulfog_name = []
    @mulfog_hue = []
    @mulfog_opacity = []
    @mulfog_blend_type = []
    @mulfog_zoom = []
    @mulfog_sx = []
    @mulfog_sy = []
    @mulfog_ox = []
    @mulfog_oy = []
    @mulfog_tone = []
    @mulfog_tone_target = []
    @mulfog_tone_duration = []
    @mulfog_opacity_duration = []
    @mulfog_opacity_target = []
end
end
class Wora_Multiple_Fog
def set_default
    #==================================================================
    # ** MULTIPLE FOG SETUP ** FOG DEFAULT SETTING
    #--------------------------------------------------------------
    @name = ''
    @hue = 0
    @opacity = 64
    @blend = 0
    @zoom = 200
    @sx = 0
    @sy = 0
    @tone = [0,0,0,0]
    #==================================================================
end

def load_preset(preset_id)
    case preset_id
    #==================================================================
    # ** MULTIPLE FOG SETUP ** FOG PRESET SETUP
    #--------------------------------------------------------------
    when 1 # Preset ID 1
     @name = 'Fog'
     @hue = 0
     @tone = [100,-255,20,0]
     @opacity = 60
     @blend = 0
     @zoom = 200
     @sx = 10
     @sy = 0
    when 2 # Preset ID 2
     @name = 'Cloud2'
     @hue = 0
     @tone = [0,0,0,0]
     @opacity = 60
     @blend = 0
     @zoom = 200
     @sx = 10
     @sy = 0
when 3 # Preset ID 3
     @name = 'Cloud3'
     @hue = 0
     @tone = [0,0,0,-100]
     @opacity = 150
     @blend = 0
     @zoom = 140
     @sx = 2
     @sy = 1
    #==================================================================
    end
end
#==================================================================
# END ** MULTIPLE FOG SETUP **
# * Don't change anything below unless you know what you're doing.
#==================================================================

attr_accessor :name, :hue, pacity, :blend, :zoom, :sx, :sy, :tone
def initialize
    set_default
end

def load_fog(id)
    @name = $game_map.mulfog_name[id].sub($game_map.fog_path, '')
    @hue = $game_map.mulfog_hue[id]
    @opacity = $game_map.mulfog_opacity[id]
    @blend = $game_map.mulfog_blend_type[id]
    @zoom = $game_map.mulfog_zoom[id]
    @sx = $game_map.mulfog_sx[id]
    @sy = $game_map.mulfog_sy[id]
    tn = $game_map.mulfog_tone[id]
    @tone = [tn.red, tn.blue, tn.green, tn.gray]
end

def show(id, reset_all = true)
    $game_map.mulfog_name[id] = $game_map.fog_path + @name
    $game_map.mulfog_hue[id] = @hue
    $game_map.mulfog_opacity[id] = @opacity
    $game_map.mulfog_blend_type[id] = @blend
    $game_map.mulfog_zoom[id] = @zoom
    $game_map.mulfog_sx[id] = @sx
    $game_map.mulfog_sy[id] = @sy
    $game_map.mulfog_tone[id] = Tone.new(@tone[0], @tone[1], @tone[2], @tone[3])
    if $game_map.mulfog_ox[id].nil? or reset_all
     $game_map.mulfog_ox[id] = 0
     $game_map.mulfog_oy[id] = 0
     $game_map.mulfog_tone_target[id] = Tone.new(0, 0, 0, 0)
     $game_map.mulfog_tone_duration[id] = 0
     $game_map.mulfog_opacity_duration[id] = 0
     $game_map.mulfog_opacity_target[id] = 0
    end
    set_default
end

def delete(*args)
    args.each do |id|
     $game_map.mulfog_name[id] = ''
    end
end
end

class Game_Interpreter
alias wora_mulfog_interpret_com201 command_201
#--------------------------------------------------------------------------
# * Transfer Player
#--------------------------------------------------------------------------
def command_201
    if $game_map.fog_reset
     if @params[0] == 0; id_map = @params[1]
     else; id_map = $game_variables[@params[1]]
     end
     $game_map.clear_mulfog if id_map != @map_id
    end
    wora_mulfog_interpret_com201
end
end

class Game_Map
attr_accessor :mulfog_name, :mulfog_hue, :mulfog_opacity, :mulfog_blend_type,
:mulfog_zoom, :mulfog_sx, :mulfog_sy, :mulfog_ox, :mulfog_oy, :mulfog_tone,
:mulfog_tone_target, :mulfog_tone_duration, :mulfog_opacity_duration,
:mulfog_opacity_target, :fog_reset, :fog_path
alias wora_mulfog_gammap_upd update
def update(main)    
    wora_mulfog_gammap_upd(main)
    @mulfog_name.each_index do |i|
     next if @mulfog_name.nil? or @mulfog_name == ''
     # Manage fog scrolling
     @mulfog_ox -= @mulfog_sx / 8.0
     @mulfog_oy -= @mulfog_sy / 8.0
     # Manage change in fog color tone
     if @mulfog_tone_duration >= 1
        d = @mulfog_tone_duration
        target = @mulfog_tone_target
        @mulfog_tone.red = (@mulfog_tone.red * (d - 1) + target.red) / d
        @mulfog_tone.green = (@mulfog_tone.green * (d - 1) + target.green) / d
        @mulfog_tone.blue = (@mulfog_tone.blue * (d - 1) + target.blue) / d
        @mulfog_tone.gray = (@mulfog_tone.gray * (d - 1) + target.gray) / d
        @mulfog_tone_duration -= 1
     end
     # Manage change in fog opacity level
     if @mulfog_opacity_duration >= 1
        d = @mulfog_opacity_duration
        @mulfog_opacity = (@mulfog_opacity * (d - 1) + @mulfog_opacity_target) / d
        @mulfog_opacity_duration -= 1
     end
    end
end
#--------------------------------------------------------------------------
# * Start Changing Fog Color Tone
#--------------------------------------------------------------------------
def fogtone(i, tone, duration)
    duration = duration * 2
    tone = Tone.new(tone[0], tone[1], tone[2], tone[3])
    @mulfog_tone_target = tone.clone
    @mulfog_tone_duration = duration
    if @mulfog_tone_duration == 0
     @mulfog_tone = @mulfog_tone_target.clone
    end
end
#--------------------------------------------------------------------------
# * Start Changing Fog Opacity Level
#--------------------------------------------------------------------------
def fogopac(i, opacity, duration)
    duration = duration * 2
    @mulfog_opacity_target = opacity * 1.0
    @mulfog_opacity_duration = duration
    if @mulfog_opacity_duration == 0
     @mulfog_opacity = @mulfog_opacity_target
    end
end

def clear_mulfog
    @mulfog_name.each_index {|i| @mulfog_name = '' }
end
end
$worale = {} if !$worale
$worale['MutipleFog'] = true
$fog = Wora_Multiple_Fog.new

class Spriteset_Map
alias wora_mulfog_sprmap_crepal create_parallax
alias wora_mulfog_sprmap_updpal update_parallax
alias wora_mulfog_sprmap_dispal dispose_parallax

def create_parallax
    @mulfog = []
    @mulfog_name = []
    @mulfog_hue = []
    wora_mulfog_sprmap_crepal
end

def update_parallax
#~     wora_mulfog_sprmap_updpal
    $game_map.mulfog_name.each_index do |i|
     next if $game_map.mulfog_name.nil?
     # If fog is different than current fog
     if @mulfog_name != $game_map.mulfog_name or @mulfog_hue != $game_map.mulfog_hue
        @mulfog_name = $game_map.mulfog_name
        @mulfog_hue = $game_map.mulfog_hue
        if @mulfog.nil?
         @mulfog = Plane.new(@viewport3)
         @mulfog.z = 3000
        end
        if @mulfog.bitmap != nil
         @mulfog.bitmap.dispose
         @mulfog.bitmap = nil
        end
        if @mulfog_name != ''
         @mulfog.bitmap = Cache.load_bitmap('', @mulfog_name, @mulfog_hue)
        end
        Graphics.frame_reset
     end
     next if @mulfog.bitmap.nil?
     # Update fog plane
     @mulfog.zoom_x = ($game_map.mulfog_zoom / 100.0) if @mulfog.zoom_x != ($game_map.mulfog_zoom / 100.0)
     @mulfog.zoom_y = ($game_map.mulfog_zoom / 100.0) if @mulfog.zoom_y != ($game_map.mulfog_zoom / 100.0)
     @mulfog.opacity = $game_map.mulfog_opacity if @mulfog.opacity != $game_map.mulfog_opacity
     @mulfog.blend_type = $game_map.mulfog_blend_type if @mulfog.blend_type != $game_map.mulfog_blend_type
     @mulfog.ox = $game_map.mulfog_ox + $game_map.display_x * 32 if @mulfog.ox != $game_map.mulfog_ox + $game_map.display_x * 32
     @mulfog.oy = $game_map.mulfog_oy + $game_map.display_y * 32 if @mulfog.oy != $game_map.mulfog_oy + $game_map.display_y * 32
     @mulfog.tone = $game_map.mulfog_tone if @mulfog.tone != $game_map.mulfog_tone
    end
end

def dispose_parallax
    @mulfog.each_index do |i|
     next if @mulfog.nil?
     @mulfog.bitmap.dispose if !@mulfog.bitmap.nil?
     @mulfog.dispose
    end
    wora_mulfog_sprmap_dispal
end
end
#==================================================================
# [END] VX Multiple Fog by Woratana [woratana@hotmail.com]
#==================================================================
 

Plane Class:

#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# ▼ Plane
# Author: Kread-EX
# Version 1.01
# Release date: 08/01/2013
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

#------------------------------------------------------------------------------
# ▼ UPDATES
#------------------------------------------------------------------------------
# # 11/04/2013. Added compatibility with Yanfly's Parallax Lock.
#------------------------------------------------------------------------------
# ▼ TERMS OF USAGE
#------------------------------------------------------------------------------
# # You are free to adapt this work to suit your needs.
# # You can use this work for commercial purposes if you like it.
# #
# # For support:
# # grimoirecastle.wordpress.com
# # rpgmakerweb.com
#------------------------------------------------------------------------------
# ▼ INTRODUCTION
#------------------------------------------------------------------------------
# # Rewrite the Plane class to work with Esrever's hacked DLL. Plug-and-play.
#------------------------------------------------------------------------------

#==============================================================================
# ■ Plane
#==============================================================================

class Plane
#--------------------------------------------------------------------------
# ● Object initialize
#--------------------------------------------------------------------------
def initialize(view = nil)
@viewport = view
@sprite = Sprite.new(@viewport)
end
#--------------------------------------------------------------------------
# ● Free
#--------------------------------------------------------------------------
def dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● Get freed
#--------------------------------------------------------------------------
def disposed?
@sprite.disposed?
end
#--------------------------------------------------------------------------
# ● Get visible
#--------------------------------------------------------------------------
def visible
@sprite.visible
end
#--------------------------------------------------------------------------
# ● Set visible
#--------------------------------------------------------------------------
def visible=(value)
@sprite.visible = value
end
#--------------------------------------------------------------------------
# ● Get zoom x
#--------------------------------------------------------------------------
def zoom_x
@sprite.zoom_x
end
#--------------------------------------------------------------------------
# ● Set zoom x
#--------------------------------------------------------------------------
def zoom_x=(value)
@sprite.zoom_x = value
end
#--------------------------------------------------------------------------
# ● Get zoom y
#--------------------------------------------------------------------------
def zoom_y
@sprite.zoom_y
end
#--------------------------------------------------------------------------
# ● Set zoom y
#--------------------------------------------------------------------------
def zoom_y=(value)
@sprite.zoom_y = value
end
#--------------------------------------------------------------------------
# ● Get opacity
#--------------------------------------------------------------------------
def opacity
@sprite.opacity
end
#--------------------------------------------------------------------------
# ● Set opacity
#--------------------------------------------------------------------------
def opacity=(value)
@sprite.opacity = value
end
#--------------------------------------------------------------------------
# ● Get blend type
#--------------------------------------------------------------------------
def blend_type
@sprite.blend_type
end
#--------------------------------------------------------------------------
# ● Set blend type
#--------------------------------------------------------------------------
def blend_type=(value)
@sprite.blend_type = value
end
#--------------------------------------------------------------------------
# ● Get color
#--------------------------------------------------------------------------
def color
@sprite.color
end
#--------------------------------------------------------------------------
# ● Set color
#--------------------------------------------------------------------------
def color=(value)
@sprite.color = value
end
#--------------------------------------------------------------------------
# ● Get tone
#--------------------------------------------------------------------------
def tone
@sprite.tone
end
#--------------------------------------------------------------------------
# ● Set tone
#--------------------------------------------------------------------------
def tone=(value)
@sprite.tone = value
end
#--------------------------------------------------------------------------
# ● Frame update
#--------------------------------------------------------------------------
def update
@sprite.update
end
#--------------------------------------------------------------------------
# ● Get viewport
#--------------------------------------------------------------------------
def viewport
@viewport
end
#--------------------------------------------------------------------------
# ● Set viewport
#--------------------------------------------------------------------------
def viewport=(value)
@viewport = value
@sprite.viewport = viewport
end
#--------------------------------------------------------------------------
# ● Get bitmap
#--------------------------------------------------------------------------
def bitmap
@sprite.bitmap
end
#--------------------------------------------------------------------------
# ● Set bitmap
#--------------------------------------------------------------------------
def bitmap=(value)
if value.nil?
@sprite.bitmap = value
return
end
bw = @viewport ? @viewport.rect.width : Graphics.width
bh = @viewport ? @viewport.rect.height : Graphics.height
if SceneManager.scene.is_a?(Scene_Map) && $game_map.parallax_tile_lock?
bw = $game_map.width * 32
bh = $game_map.height * 32
end
rw = bw.fdiv(value.width).ceil
rh = bh.fdiv(value.height).ceil
new_bmp = Bitmap.new(bw, bh)
0.upto(rw).each do |x|
0.upto(rh).each do |y|
new_bmp.blt(x * value.width, y * value.height, value, value.rect)
end
end
@sprite.bitmap = new_bmp
end
#--------------------------------------------------------------------------
# ● Get ox
#--------------------------------------------------------------------------
def ox
@sprite.ox
end
#--------------------------------------------------------------------------
# ● Set ox
#--------------------------------------------------------------------------
def ox=(nox)
@sprite.ox = nox
end
#--------------------------------------------------------------------------
# ● Get oy
#--------------------------------------------------------------------------
def oy
@sprite.oy
end
#--------------------------------------------------------------------------
# ● Set oy
#--------------------------------------------------------------------------
def oy=(noy)
@sprite.oy = noy
end
#--------------------------------------------------------------------------
# ● Get z
#--------------------------------------------------------------------------
def z
@sprite.z
end
#--------------------------------------------------------------------------
# ● Set z
#--------------------------------------------------------------------------
def z=(z)
@sprite.z = z
end
end

Downloads / Referenced Files

Log in to download

Log in, then follow the RPG Maker Developers Group to see these download links.

Log in to download

License / Terms Note

# # You can use this work for commercial purposes if you like it. # # # # For support: # # grimoirecastle.wordpress.com

Creator Claims / Removal

If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.

#039#rpg-maker-archive#rgss-support

Replies (0)

No replies yet.

0 replies 1 view

Log in to reply.

User Avatar