RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Zeriab's Anti Event Lag System ~ Version 1.2

0 Members and 1 Guest are viewing this topic.

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Zeriab's Anti Event Lag System
Version: 1.2

Introduction

This system changes the design used for controlling the events on the game map as well as reducing the number of character sprites outside of the visible area.
The new design for the events should in most cases give faster collision detection
In certain situations this system should be slightly slower though I doubt it can make any noticeable difference.
This script only makes event collision detection faster in the case where all the events are visible.
The greatest benefit from this script comes from large maps with sparse population of events. Basically, events do no come together loads at a time.

Version history
Spoiler for For anyone interested:
Version 0.8 -------------------------------------------------- (2007-09-03)
 - First release

Version 0.81 ------------------------------------------------- (2007-09-05)
 - Overwrote Game_Map's passable? method for faster collision detection

Version 0.9 -------------------------------------------------- (2007-09-12)
 - Support for the Non-SDK patch
 - Support for defining whether and event will always be updated or never be updated by defining name patterns.

Version 1.0 -------------------------------------------------- (2007-09-24)
 - Fixed compatibility issue with Blizzard's Caterpillar script
 - Overwrote more methods scanning for events on a specific tile
 - Support for defining whether an event will always be updated or never be updated by specifying the event's id and map_id
 - Some structural changes.
 - Integrated the Non-SDK patch into the main script

Version 1.05 ------------------------------------------------- (2007-11-18)
 - Fixed bug where sprites might not be disposed when changing scene.

Version 1.1 -------------------------------------------------- (2008-04-10)
 - Added declaration to which common events to update

Version 1.15 ------------------------------------------------- (2008-06-19)
 - Added automatic detection of which common events to update (optional)

Version 1.2 -------------------------------------------------- (2008-07-04)
 - Fixed a case where an event could be registered twice causing transparent
   events to look less transparent.

Features

Easy to alter the size of the visible area. (In combination with resolution scripts for example)
Pattern matching on event names to ease determination of events needing special treatment. (Never update and always update)
Specify special update schemes for events by their id and the map they are on.

Screenshots

The screenshot was taking from my test map included as an attachment. There are 662 events on that 500x500 map.



Demo

http://www.sendspace.com/file/0up9up (zip version)

Script

Zeriab's Anti Event Lag System version 1.2
Note: The comments in the script are aimed at other scripters. Don't be scared by it.

Installation

You don't have to do more than copy and paste the script into the script editor BUT where you paste it matters.
If you are using the SDK 2.0+ paste the script just below the SDK.
If you are are not using the SDK then paste the script just below the default scripts

The structure in the script editor should be like this:
default scripts
(SDK)
Zeriab's Anti Event Lag System
(custom scripts)
main


Pasting the script just above main has caused errors!

You can add [A] to the name of an event if you want it always updated. A typical example is that you want an event outside of the screen to move around properly.
You can add [N] to the name of an event and it will never be updated. Great for non-animated decoration events.
Note that if you have both [A] and [N] in the name of the event the event will never be updated.

If you are not satisfied with the default settings or are curious you can look into the customization possibilities
Spoiler for Customization:
A little below the big header there is a customization area (line 265-284) which contains:
Code: [Select]
class Game_Map
  ALWAYS_UPDATE = false
  BUFFER_SIZE = 1
  TILES_VERTICAL = 15
  TILES_HORIZONTAL = 20
  LIMIT_COMMON_EVENTS = true
  SPECIFY_COMMON_EVENTS_MANUALLY = false
  # If you want to specify which common events to update
  COMMON_EVENTS_TO_UPDATE = []
  # If you want the script to automatically read the common events and find
  # out which to update. Must be the path to the CommonEvents.rxdata
  COMMON_EVENT_FILEPATH = 'Data/CommonEvents.rxdata'
end

class Game_Event
  SPECIAL_UPDATE_IDS = {}
  NEVER_UPDATE_NAME_PATTERNS = ['[N]'] # [N] in the event name => not updated
  ALWAYS_UPDATE_NAME_PATTERNS = ['[A]'] # [A] in the event name => always updated
end

There are comments on how to use each constant in the script header. Those comments are aimed at other scripters and can therefore be fairly difficult to understand for non-scripters. The examples in the header can useful even if you are not a scripter.
I will explain each constant in a more humane way. (Using this in unison with the instructions in the header might yield the best result)

I'll start by going through class Game_Map.
ALWAYS_UPDATE
Set this to true if you want all events updated. All events will on the map will be updated just like with the default scripts. This is slow, but you will still get the effects of the changed collision detection and sprite management.
I included this option for compatibility reasons more than anything else. Don't use this if you want a few events outside of the screen to be constantly updated. In that case refer to the stuff in Game_Event

BUFFER_SIZE
The buffer size tells how many tiles outside of the visible area should be updated.
If you have many big sprites (for the events) and get the sprites just disappearing or 'freezing' for a moment near the edge of the screen the solution can be to increase the buffer size.
Be aware that increasing the buffer size makes the game slower.

TILES_VERTICAL
Use this to tell how many tiles there on a vertical line across the game screen.
Only change this value if you change the resolution.

TILES_HORIZONTAL
Use this to tell how many tiles there on a horizontal line across the game screen.
Only change this value if you change the resolution.

LIMIT_COMMON_EVENTS
Set this to false if you do not wish to limit which common events are updated.
If you do not limit the common events the next three constants have no effect. (SPECIFY_COMMON_EVENTS_MANUALLY, COMMON_EVENTS_TO_UPDATE, COMMON_EVENT_FILEPATH)

SPECIFY_COMMON_EVENTS_MANUALLY
Set this to true if you want to specify the common events manually. This is not recommended for beginners.
You will have to fill out COMMON_EVENTS_TO_UPDATE if you set this to true. COMMON_EVENT_FILEPATH will have no effect if this is true.
If this is set to false then COMMON_EVENTS_TO_UPDATE will have no use. The script will automatically detect which common events to update if this is set to false.

COMMON_EVENTS_TO_UPDATE
Fill in the array with the common event ids you want updated. (Look in the database for the numbers)
All other common events will not be updated. They can still be called using the call common event command, but they will not be started if they have the autorun or parallel process triggers.

COMMON_EVENT_FILEPATH
The path to where the common events are stored.
Only touch this if you have changed the filename where the common events are stored. If you don't know what this means then chances are that you should not change what is given.


Next we come to class Game_Event which is a bit more complicated to customize.
Typically you can be fine without modifying the following constants. Id y
SPECIAL_UPDATE_IDS
You can use this to say that specific in specific maps must always be updated or never updated.
If an event is always updated it acts just as it does with the default scripts.
If an event is never updated it not move. Neither with Autonomous Movement nor the event command 'Set Move Route...'. You can still to some degree interact with it but in general use the never update feature for decoration events.

NEVER_UPDATE_NAME_PATTERNS
You can use this to specify new patterns to look for in the names of the events.
If the name of an event matches at least one of the patterns it will never be updated.
A pattern can both be what is called a regular expression and a string. If you don't know what a regular expression is or don't understand them then don't try to use regular expressions.
The string is a piece of text and the name of the event will be checked if that piece of text is anywhere in the name. The text have to be surrounded by either 'text' or "text". There is no practical difference in case of this script.
If an event is never updated it not move. Neither with Autonomous Movement nor the event command 'Set Move Route...'. You can still to some degree interact with it but in general use the never update feature for decoration events.

ALWAYS_UPDATE_NAME_PATTERNS
You can use this to specify new patterns to look for in the names of the events.
If the name of an event matches at least one of the patterns it will always be updated.
A pattern can both be what is called a regular expression and a string. If you don't know what a regular expression is or don't understand them then don't try to use regular expressions.
The string is a piece of text and the name of the event will be checked if that piece of text is anywhere in the name. The text have to be surrounded by either 'text' or "text". There is no practical difference in case of this script.
If an event is always updated it acts just as it does with the default scripts.

Q&A's

How can I make sure that an event outside of the screen moves like I told it to?
Change the name of the event so it always updates.
With the default configurations you can do this by adding [A] anywhere in the name.

Compatibility
Spoiler for Technical Details:
This is SDK compliant. It is written for SDK version 2.3.
It has not been tested with older versions.
Requires SDK Part 2 or the Non-SDK patch version 1.1

The following methods has been overwritten:
  • Game_Character.passable?
  • Game_Map.passable?
  • Game_Map.update_events
  • Game_Player.check_event_trigger_here
  • Game_Player.check_event_trigger_there
  • Game_Player.check_event_trigger_touch
  • Spriteset_Map.init_characters
  • Spriteset_Map.update_character_sprites
The following methods have been aliased:
  • Game_Event.jump
  • Game_Event.moveto
  • Game_Event.move_down
  • Game_Event.move_left
  • Game_Event.move_right
  • Game_Event.move_up
  • Game_Event.move_lower_left
  • Game_Event.move_lower_right
  • Game_Event.move_upper_left
  • Game_Event.move_upper_right
  • Game_Map.setup

Spoiler for Rataime's Sun Effect:
Paste this code in a new section anywhere below Rataime's Sun Effect and above main. (use can press Insert to create a new section)
Code: [Select]
alias Zantilag_XPML_read XPML_read
def XPML_read(markup,event_id,max_param_number=0)
  return if $game_map.events[event_id].nil?
  Zantilag_XPML_read(markup,event_id,max_param_number=0)
end

Spoiler for Near Fantastica's Particle Engine v2:
Paste this code in a new section anywhere below Near Fantastica's Particle Engine v2 and above main. (use can press Insert to create a new section)
Code: [Select]
class Spriteset_Map
  def update_character_sprites
    nf_particles_spriteset_map_update_character_sprites
    for sprite in @character_event_sprites
      next unless sprite.character.is_a?(Game_Event)
      if sprite.character.pe_refresh == true
        sprite.character.pe_refresh = false
        @particle_engine.remove_effect(sprite.character)
        @particle_engine.add_effect(sprite.character)
      end
    end
  end
end


Credits and Thanks

Thanks goes to Enterbrain for making this possible.
Special thanks to Blizzard for many suggestions, help and support :3
Special thanks to:
Eilei
Shadow Wolf
Untravaersil
darksora

I would like to thank everyone using their time to try and use my system.
I would like to thank everyone reading this topic.
Thanks.

Terms and Conditions
Spoiler for License:
Copyright (C) 2007  Zeriab

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser Public License for more details.

For the full license see <http://www.gnu.org/licenses/>
The GNU General Public License: http://www.gnu.org/licenses/gpl.txt
The GNU Lesser General Public License: http://www.gnu.org/licenses/lgpl.txt

Author's Notes

I would be delighted if you report any bug, errors or issues you find.
In fact I would be delighted if you took the time and replied even if you have nothing to report.
Suggestions are more than welcome

And finally: ENJOY!

 - Zeriab
« Last Edit: July 05, 2008, 10:59:37 AM by Zeriab »

******
Revolution is not a bed of roses.
Rep:
Level 91
Project of the Month winner for July 2009
Every game should have an anti-lag script. Well done Zeriab.

******
Resource Maker
Rep:
Level 91
I have the Original RPG Maker XP purchased from Enterbrain, but I get a shed load of errors....
 


My RMRK Wikki:- http://wiki.rmrk.net/index.php/Landofshadows
Make a Donation for my Resource making:- https://www.paypal.me/landofshadows

*
A Random Custom Title
Rep:
Level 96
wah
Maybe incompatibility issues? With other scripts, I mean.

******
Resource Maker
Rep:
Level 91
Could be... I was after an Anti lag script some time ago, I found one Blizzard made but it messed up all my events that run on auto start off the screen...

Zeriabs has VERY good structure and I like the Buffer feature and the fact is so easy to adapt...

It's a very nicely laid out script... Saddly it's not compatible with my version of RPG Maker XP.
 


My RMRK Wikki:- http://wiki.rmrk.net/index.php/Landofshadows
Make a Donation for my Resource making:- https://www.paypal.me/landofshadows

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
*hugs Falcon*

Quote
Does not work without the SDK ~

Do you have the SDK?

Either way I would be very interested in the error(s) you get.
Could you post a pic of the error message(s)?

Edit: Forgot to change the collision method in Game_Map >_<
« Last Edit: September 05, 2007, 03:19:43 PM by Zeriab »

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
*updates to version 0.9*

MOAR features ^_^

******
Resource Maker
Rep:
Level 91
You my friend are a Genius... Well done...!!!

I will be adding you to the credits in my games from now on, that Script is Wicked !!!
 


My RMRK Wikki:- http://wiki.rmrk.net/index.php/Landofshadows
Make a Donation for my Resource making:- https://www.paypal.me/landofshadows

*
House of Nostalgia
Rep:
Level 87
You loved it.
Very nice Zeriab,

 :Applaud:

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Thanks for the nice comments  ;D
They are the reason I do stuff like this.
I <3 you

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Updated to version 1.0

Version 1.0 -------------------------------------------------- (2007-09-24)
 - Fixed compatibility issue with Blizzard's Caterpillar script
 - Overwrote more methods scanning for events on a specific tile
 - Support for defining whether an event will always be updated or never be updated by specifying the event's id and map_id
 - Some structural changes.
 - Integrated the Non-SDK patch into the main script

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best RPG Maker User (Scripting)2011 Best Use of Avatar and Signature Space2010 Best RPG Maker User (Scripting)2010 Best Use Of Avatar And Signature Space
Cool. It's a really good idea, and I'm glad it's completed.  :police:

I will use this one in my game for sure. The idea behind it is a lot better than any other Anti-lag scripts I've encountered.

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
This is alien-ware after all. (Couldn't resist the pun)

It is my best finished script so far ^_^
Do tell if you encounter any problems.

****
Rep:
Level 90
I just wanted to give kudos as to how fantastic this script is. For those who have played my games. Even in a town that is 87x70... there are over 600 events. Slowing it down to a slug's pace. Well this script is exceptional and has sped everything up to a great frame rate :-)
community project for RPG Maker VX: http://rmrk.net/index.php/topic,33789.0.html

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Thanks for the praise!
I really appreciate it ^_^

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Updated to version 1.2. Major improvements on the topic as well

Version 1.05 ------------------------------------------------- (2007-11-18)
 - Fixed bug where sprites might not be disposed when changing scene.

Version 1.1 -------------------------------------------------- (2008-04-10)
 - Added declaration to which common events to update

Version 1.15 ------------------------------------------------- (2008-06-19)
 - Added automatic detection of which common events to update (optional)

Version 1.2 -------------------------------------------------- (2008-07-04)
 - Fixed a case where an event could be registered twice causing transparent
   events to look less transparent.

**
Rep:
Level 84
you rock i can actually play my game now !!!! ;8 ;8 ;8


your the best i went from 1 frame per minit to no lagg at all
http://www.seskaa.webs.com

i love to piss you off go ahead get mad....:D

*
Rep:
Level 98
2010 Best Veteran2014 Best Use of Avatar and Signature Space2014 King of RMRK2014 Favorite Staff Member2014 Best Counsel2014 Best Writer2014 Most Mature Member2014 Best IRC Chatterbox2013 Favorite Staff MemberSecret Santa 2013 ParticipantFor the great victory in the Breakfast War.Secret Santa 2012 Participant2011 Best Counsel2011 Best Writer2010 Best Writer2010 Funniest Member
Please refrain from bumping old topics.
you awoke in a burning paperhouse
from the infinite fields of dreamless sleep

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best RPG Maker User (Scripting)2011 Best Use of Avatar and Signature Space2010 Best RPG Maker User (Scripting)2010 Best Use Of Avatar And Signature Space
If it's in a database, it's usually okay Anski.

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
I would never have thought it could help so much. I am glad you can now play your game without lag seskaa ^^

**
Rep:
Level 85
The worlds ends on 21/12/12, where will you be?
A very useful script i find that the events lag all the time, even when i've just got a few events on the map. ;D