Trigger causes FPS drop

Zealot

Member
Reaction score
11
This trigger causes a short FPS drop, I guess it's because it has to do with the large amount of trees present on the map, any way to make this not cause FPS drops, without using regions though?
Trigger:
  • Unit - Create 1 Rabbit for Neutral Passive at ((Position of (Random destructible in (Entire map) matching (((Destructible-type of (Matching destructible)) Equal to Summer Tree Wall)))
 

KaerfNomekop

Swim, fishies. Swim through the veil of steel.
Reaction score
613
http://world-editor-tutorials.thehelper.net/cat_usersubmit.php?view=27219
Basically, you're referencing a point, then leaving it in the game's memory without any more pointers to it.

Trigger:
  • Spawn Rabbit
    • Events
    • Conditions
    • Actions
    • Set TempPoint = ((Position of (Random destructible in (Playable map area) matching (((Destructible-type of (Matching destructible)) Equal to Summer Tree Wall)))
    • Unit - Create 1 Rabbit for Neutral Passive at TempPoint facing Default building degrees
    • Custom script: call RemoveLocation (udg_TempPoint)
 

Zealot

Member
Reaction score
11
Trigger:
  • Set Temperate_Spawn_Point = (Position of (Random destructible in (Playable map area) matching ((Destructible-type of (Matching destructible)) Equal to Summer Tree Wall)))
    • Set Creature_Spawn_Event = (Random integer number between 1 and 100)
    • -------- Rabbit Spawn --------
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • Creature_Spawn_Event Less than or equal to 100
      • Then - Actions
        • Unit - Create 1 Rabbit for Neutral Passive at (Temperate_Spawn_Point offset by ((Random real number between -50.00 and 50.00), (Random real number between -50.00 and 50.00))) facing Default building facing degrees
        • Custom script: call RemoveLocation (udg_Temperate_Spawn_Point)
      • Else - Actions


The FPS drop is still present.
 

thorhunter

You can change this now in User CP.
Reaction score
32
Set your point variable already with offset so your 'create unit' function uses that point only.
 

Dameon

"All the power in the world resides in the eyes"
Reaction score
127
does the drop happen every time or only the first time?
 

afisakov

You can change this now in User CP.
Reaction score
37
Set your point variable already with offset so your 'create unit' function uses that point only.
Wait, wouldn't this still leak?
I always thought setting a point offset still as a temp point still leaks because the original never gets cleaned up, aka "create unit at location GetUnitLoc(TriggerUnit())) offset by 50" actually leaks 2 points, the get unit location, and the offset point.
Therefore, the correct way to do it is t:
set temppoint1=position of your destructible
set temppoint2=temppoint1 with offset
call RemoveLocation(temppoint1)
do something at temppoint2
call RemoveLocation(temppoint1)

Naturally if I am mistaken please let me know and it will save me a hell of alot of time in the future to not have to do this anymore, but I was under the impression that it is needed to avoid leaks.
 

Dameon

"All the power in the world resides in the eyes"
Reaction score
127
it don't really matter, even if you don't bother cleaning the leaks in most maps you will never even notice them. Most people don't seem to understand just how many leaks you need to get a visible effect from them and the main thing leaks effect is actually at the end of the map, the more leaks you have the longer it takes to close.
 

dracolich

TH.net Regular
Reaction score
15
in fact, there are nothing to do, except reduce searching area or remove tons of destructible objects. No way to speed up this, cause no any option to work with trees (destructible in common)
 

Imp Midna

Active Member
Reaction score
52
Who got the idea that leaks would cause a temporary fps drop anyways? damn, leaking them makes it even quicker.
Well, the FPS drop, as you allready mentioned, mostlikely comes from the function enumerating the trees over and over again. If you have like 8000 trees on ur map, that takes some time.
If its the trees:
consider saving them into a destructible array at the start and use yourArray[randomNumber] instead. So you dont have to go trought the trees all the time. (note that max array size is around 8000 afaik, consider splitting them just in case)
 

Imp Midna

Active Member
Reaction score
52
^ show to us any variable which can hold destructible. pleeeeease!

From the header:
JASS:
    destructable array      udg_Destructable
    integer                 udg_DestructableSize       = 0


Writes all the destructables (i only had a few trees on this testmap, so "destructables" means "trees" in this one) into an array:
Trigger:
  • OnInit
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • Destructible - Pick every destructible in (Playable map area) and do (Actions)
        • Loop - Actions
          • Set Destructable[DestructableSize] = (Picked destructible)
          • Set DestructableSize = (DestructableSize + 1)


Spawns a Greifenreiter (not a clue how that one's called in english, you'll want to spawn your rabbit anyways) at the position of a random destructible (== tree) (i know it leaks like the titanic but who cares, its just for the purpose of showing that it works)
Trigger:
  • SpawnUnit
    • Events
      • Player - Spieler 1 (Rot) types a chat message containing -hurray as Exakte Ãœbereinstimmung
    • Conditions
    • Actions
      • Unit - Create 1 Greifenreiter for Spieler 1 (Rot) at (Position of Destructable[(Random integer number between 0 and (DestructableSize - 1))]) facing Vorgabe für Gebäude-Ausrichtung degrees


works like a charm for me. Wheres the problem?
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top