Terrain deformation not working.

cr4xzZz

Also known as azwraith_ftL.
Reaction score
51
I tried to make a trigger that periodically changes the terrain on the map, but for some reason it's not working at all... What have I done wrong? :\
EDIT: Answered and fixed.
JASS:
scope Deform initializer Init

globals
    private constant real PERIOD = 60.
    
    private constant integer SNOW1 = 'Nsnw'
    private constant integer SNOW2 = 'Nice'
    private constant integer SNOW3 = 'Ngrs'
    private constant integer SNOW4 = 'Nrck'
    
    private constant integer FALL1 = 'Fdrg'
    private constant integer FALL2 = 'Fgrs'
    private constant integer FALL3 = 'Fgrd'
    private constant integer FALL4 = 'Fdro'
    
    private constant integer GRASS1 = 'Vgrs'
    private constant integer GRASS2 = 'Lgrs'
    private constant integer GRASS3 = 'Lgrd'
    private constant integer GRASS4 = 'Vgrt'
endglobals

private function Actions takes nothing returns nothing
    local integer i1 = GetRandomInt(1, 3)
    local integer i2 = 0
    local integer i3 = GetRandomInt(1,3)
    local real x 
    local real y
    if i3 == 1 then
        loop
            exitwhen i2 > 1000
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, SNOW1, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, SNOW2, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, SNOW3, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, SNOW4, -1, i1, 0)
            set i2 = i2 + 1
            set i1 = GetRandomInt(1, 3)
        endloop
    elseif i3 == 2 then
        loop
            exitwhen i2 > 1000
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, FALL1, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, FALL2, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, FALL3, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, FALL4, -1, i1, 0)
            set i2 = i2 + 1
            set i1 = GetRandomInt(1, 3)
        endloop
    elseif i3 == 3 then
        loop
            exitwhen i2 > 1000
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, GRASS1, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, GRASS2, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, GRASS3, -1, i1, 0)
            set x = GetRandomReal(GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea))
            set y = GetRandomReal(GetRectMinY(bj_mapInitialPlayableArea), GetRectMaxY(bj_mapInitialPlayableArea))
            call SetTerrainType(x, y, GRASS4, -1, i1, 0)
            set i2 = i2 + 1
            set i1 = GetRandomInt(1, 3)
        endloop
    endif
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    local trigger trig = CreateTrigger()
    //call DisableTrigger(trig) // for a game mode
    call TriggerRegisterTimerEvent(trig, PERIOD, true)
    call TriggerAddAction(trig, function Actions)
endfunction

endscope
 

Artificial

Without Intelligence
Reaction score
326
I find a couple of things a bit weird.
1) You're never increasing i2.
2) Why are you using a location instead of x and y?
3) You're setting the terrain type at that one specific point several times. You should always take new random values for x and y after you've set the terrain at one point, in case you want to change the terrain at several different points.
3) Why are you using textmacros?
4) Why are you using TriggerRegisterTimerEventPeriodic?
 

cr4xzZz

Also known as azwraith_ftL.
Reaction score
51
Lol, I'm a lot sleepy and I've made noobish mistakes... -.-

1) Sleepy...
2) Locations are faster. Plus, I'm used to using locations instead of x and y.
3) Sleepy... Forgot to make it random.
4) For better readability - I like things that I want to configure on top.
5) Sleepy...

Anyway, I fixed everything. It's working now.
 
Reaction score
332
Lol, I'm a lot sleepy and I've made noobish mistakes... -.-

1) Sleepy...
2) Locations are faster. Plus, I'm used to using locations instead of x and y.
3) Sleepy... Forgot to make it random.
4) For better readability - I like things that I want to configure on top.
5) Sleepy...

Anyway, I fixed everything. It's working now.

Locations are not "faster" and textmacro abuse rarely improves code readability. Try to replace the textmacros with functions or something instead.
 

Viikuna

No Marlo no game.
Reaction score
265
I believe that locations are pretty fast to use, if you dont have to create+destroy+null them. I might be wrong, plus I have no idea how fast MoveLocation is. Anyways, reals are nice, since they dont leak and most of fuctions take or return reals.
 
Reaction score
332
Using the coordinates is faster than using the locations. Look at all the extra function calls in that trigger. There is no advantage to using a location in that situation.
 

cr4xzZz

Also known as azwraith_ftL.
Reaction score
51
Don't worry, I've replaced all my stupid things. It works good now, but only problem is that my handles reached 12k in 13 minutes. -.- I'm absolutely sure there are no leaks. Does terrain creation leak anyway?
 

cr4xzZz

Also known as azwraith_ftL.
Reaction score
51
> It could be the result of something else in the map.
Hmm, yes. I have one massive spell (like 600-700 lines of code) with absolutely no leaks but it keeps increasing handles by 1k with each cast.

Actually, when I just made a fast movement from locations to reals and waited 10 minutes without any action, the handles did not get more than 1500 (jumping from 1000 to 1500). So the terrain code is finally fixed. Anyway, +rep to all of you....
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top