RPG Maker VX Help
March 28, 2024, 04:12:52 am
Welcome, Guest. Please login or register.

Login with username, password and session length
News: welcome to rpg maker vx help get registered now and enjoy the excitement Cheesy
 
  Home Help Search Arcade Gallery Staff List Calendar Login Register  

Super Simple Anti-Lag

Pages: [1]
  Print  
Author Topic: Super Simple Anti-Lag  (Read 621 times)
0 Members and 1 Guest are viewing this topic.
danny3153
Administrator
Full Member
*****

pic rating: 1
Gender: Male
Posts: 151



View Profile
« on: September 01, 2009, 03:56:11 pm »

Code:
#####################################################
#Super Simple Anti-Lag System 2.0 By Amaranth
#Last updated March 22, 2009
#####################################################
# Additional Credits:
# Angelix, Shaz, Near Fantastica
####################################################
# Usage: Free for all to use.
####################################################

#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# SET YOUR ANTI-LAG PERAMETERS
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------

# 1. Set anti-lag for drawing events
# -----------------------
# Only draw event GRAPHIC if within this horizontal # of tiles from player
# Note: if event is outside of this range, and this range is within screen
#       width, the event will appear to "drag" across the screen because the
#       game is not updating the graphic.
PLAYER_RANGE_WIDTH = 20     

# Only draw event GRAPHIC if within this vertical # of tiles from player
# Note: if event is outside of this range, and this range is within screen
#       height, the event will appear to "drag" across the screen because the
#       game is not updating the graphic.
PLAYER_RANGE_HEIGHT = 15   


# 2. Set anti-lag for moving events
# -----------------------
# Only process event movement if within this horizontal # of tiles from player
# Note: if event is outside of this range, and this range is within screen
#       width, the event will stop moving.
MAP_RANGE_WIDTH = 20       

# Only process event movement if within this vertical # of tiles from player
# Note: if event is outside of this range, and this range is within screen
#       height, the event will stop moving.
MAP_RANGE_HEIGHT = 15

# 3. Set anti-lag movement for specific events
# -----------------------
# You can stop the game from updating specific events. This is
# helpful if you have several events on screen. Only use this on events
# that are invisible or don't move around.
# To Use: Create an event on a map and change the name of the event to the
#         value below (by default, this is IGNORE). The name of an event
#         is in the upper-left side of the event dialog box)
ANTI_LAG_EVENT_NAME = "IGNORE"


# 4. Turn anti-lag on and off in the game while playing the game
# ------------------------
# On some maps in your game, you may not want to use the anti-lag system,
# or you may want to turn it off during some scenes in your game.
# To Use: Use a switch to turn anti-lag off and on. (by default this is Switch 1)
ANTI_LAG_SWITCH = 1



#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Character
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
  attr_accessor :inrange_char                  # event near player? (stop draw)
  attr_accessor :inrange_map                   # event on map? (stop movement)
  attr_reader :event
end

#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Map
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Refresh map if necessary
    if $game_map.need_refresh
      refresh
    end
    # If scrolling
    if @scroll_rest > 0
      # Change from scroll speed to distance in map coordinates
      distance = 2 ** @scroll_speed
      # Execute scrolling
      case @scroll_direction
      when 2  # Down
        scroll_down(distance)
      when 4  # Left
        scroll_left(distance)
      when 6  # Right
        scroll_right(distance)
      when 8  # Up
        scroll_up(distance)
      end
      # Subtract distance scrolled
      @scroll_rest -= distance
    end
   
    # Update map event
    for event in @events.values
      # ANTI LAG CHECK START---------------------------------------------
      if ((event.inrange_map == 1) && (event.event.name != ANTI_LAG_EVENT_NAME)) or [3,4].include?event.trigger
        event.update
      end
      # ANTI LAG CHECK END-----------------------------------------------
    end
   
    # Update common event
    for common_event in @common_events.values
      common_event.update
    end
   
    # Manage fog scrolling
    @fog_ox -= @fog_sx / 8.0
    @fog_oy -= @fog_sy / 8.0
   
    # Manage change in fog color tone
    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
   
    # Manage change in fog opacity level
    if @fog_opacity_duration >= 1
      d = @fog_opacity_duration
      @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
      @fog_opacity_duration -= 1
    end
  end
 
end

#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# ��€”� Spriteset_Map
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
class Spriteset_Map
 
  #--------------------------------------------------------------------------
  # ��€”� Frame Update
  #--------------------------------------------------------------------------
  def update
    # If panorama is different from current one
    if @panorama_name != $game_map.panorama_name or
       @panorama_hue != $game_map.panorama_hue
      @panorama_name = $game_map.panorama_name
      @panorama_hue = $game_map.panorama_hue
      if @panorama.bitmap != nil
        @panorama.bitmap.dispose
        @panorama.bitmap = nil
      end
      if @panorama_name != ""
        @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
      end
      Graphics.frame_reset
    end
    # If fog is different than current fog
    if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
      @fog_name = $game_map.fog_name
      @fog_hue = $game_map.fog_hue
      if @fog.bitmap != nil
        @fog.bitmap.dispose
        @fog.bitmap = nil
      end
      if @fog_name != ""
        @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
      end
      Graphics.frame_reset
    end
    # Update tilemap
    @tilemap.ox = $game_map.display_x / 4
    @tilemap.oy = $game_map.display_y / 4
    @tilemap.update
    # Update panorama plane
    @panorama.ox = $game_map.display_x / 8
    @panorama.oy = $game_map.display_y / 8
    # Update fog plane
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
    @fog.tone = $game_map.fog_tone
   
    # Update character sprites
    for sprite in @character_sprites
      # ANTI LAG CHECK START---------------------------------------------     
      if in_range?(sprite.character)
        sprite.update
      end
      # ANTI LAG CHECK END---------------------------------------------     
    end   
   
    # Update weather graphic
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = $game_map.display_x / 4
    @weather.oy = $game_map.display_y / 4
    @weather.update
    # Update picture sprites
    for sprite in @picture_sprites
      sprite.update
    end
    # Update timer sprite
    @timer_sprite.update
    # Set screen color tone and shake position
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # Set screen flash color
    @viewport3.color = $game_screen.flash_color
    # Update viewports
    @viewport1.update
    @viewport3.update
  end
 
 
  #--------------------------------------------------------------------------
  # ��€”� Check if events are in range (ANTI-LAG)
  #--------------------------------------------------------------------------
  def in_range?(event)
   
    diff_x = ($game_player.real_x - event.real_x).abs  # absolute value
    diff_y = ($game_player.real_y - event.real_y).abs  # absolute value
     
    # update the graphic for the event in this range
    player_width = 128 * PLAYER_RANGE_WIDTH
    player_height = 128 * PLAYER_RANGE_HEIGHT
   
    # update actions being performed by the event in this range
    screen_width = 128 * MAP_RANGE_WIDTH
    screen_height = 128 * MAP_RANGE_HEIGHT

    # stop an event from performing actions if outside of this range on the map
    # note: if range is small, event will stop moving and performing tasks on screen
    if ((diff_x < screen_width && diff_y < screen_height) or $game_switches[ANTI_LAG_SWITCH])
        event.inrange_map = 1
      else
        event.inrange_map = 0
    end   
   
    # stop an event's graphic from updating if outside of the range around player
    # note: if range is small, event graphic will appear to "drag" across screen
    #       this happens because the graphic is not updating.
    if ((diff_x < player_width && diff_y < player_height) or $game_switches[ANTI_LAG_SWITCH])
        event.inrange_char = 1
        return true
      else
        event.inrange_char = 0
        return false
    end
   
  end 
end   
Report Spam   Logged

Share on Facebook Share on Twitter



Pages: [1]
  Print  
 
Jump to:  

Powered by EzPortal
Friends Of RPG Maker VX Help
RPG Maker VX's
explosivegfx.com banner Revolution X

Bookmark this site! | Upgrade This Forum
SMF For Free - Create your own Forum

Powered by SMF | SMF © 2016, Simple Machines
Privacy Policy