1. Are you planning to upload your awesome tool to Hive? Please review the rules here.
    July 9, 2018: The rules for the Tool Section have been revised. Please be sure to read the revisions.
    Dismiss Notice
  2. And she's bought a stairway to heaven. The 6th Special Effect Contest Results are here.
    Dismiss Notice
  3. Seek unity between the elements in the 22nd Terraining Contest Poll.
    Dismiss Notice
  4. Seize the moment! The 18th Mini Mapping Contest has commenced.
    Dismiss Notice
  5. The heavens smile on the old faithful. The 16th Techtree Contest has begun.
    Dismiss Notice
  6. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

W3X Tools

Submitted by IcemanBo
This bundle is marked as pending. It has not been reviewed by a staff member yet.
W3X Tools

Motivation

W3X Tools is a tool to generate code based on a map's preplaced world information like terrain, units, items, destructables and rects.
The goal is to copy a map's layout in its entirety and store it into code.

The benefit of having a map's layout (terrain, units, doodads, ... ) stored as code is being able to load it dynamially in game. It makes it easier to make a map with an easy, middle, or hard world terrain, for example.

One could also parse though preplaced information, like Destructable -variation, -scale, or -facing, to generate code to fill a table an map start. Data, which isn't accessible dynamically in game.

Supported Formats

Format
Read Write
war3map.i (map information)
✔️
✔️
war3mapUnits.doo (units/items)
✔️
✔️
war3map.doo (doodads/destructables)
✔️
✔️
war3map.w3e (terrain)
✔️
✖️
Other files from mpq can be extraxted, but not be modified. Right click on file structure -> show all files -> drag & drop wanted file on desktop.

Data Table

Data from supported file formats are shown in a data table, and can be also altered there. An example of some fields of the preplaced units file:

[​IMG]

It's a regular table with fields and some data. Also, above each table there are two checkboxes:
  • "Readonly" controls if you can write the fields
  • "Show all fields" will also show fields you won't need for code generation
Code Generation

Based on the table data one can generate code. Actually just plain text is created, but depending on the generator input, it can result in valid code. The generator can loop over all table entities or also only over selected ones to create the code.

Example to generate code based on some preplaced units:

[​IMG]

In the example above:
  • 2 entities of the unit table are selected
  • As generate option we choose "Generate Only Selected"
  • Some input is defined and UnitType and CreationNumber of our 2 selected entities are being generated as output
The output isn't ready to use code, as it's just an example. But the goal is to create an output ready to copy & paste to our code of any map, being able to restore the 2 selected units. Or just any other information.

Here is the list of functionalites that can be used for the input:

  • The
    $
    operator allows to refer to the values of a table's field. Example:
    Code (Text):
    unit gg_$Type$_$CreationNumber$
    $Type$ will be replaced with the Type -value of the current entitiy.
    $CreationNumber$ will be replaced with the CreationNumber -value field value of the current entitiy.

    Example output could be:
    Code (vJASS):
    unit gg_hpea_0001
    unit gg_Hpal_0002
  • The
    #
    operator written alone in a line indicates a new batch for code generation. Example:
    Code (Text):
    $X$
    #
    $Y$
    At first, it will generate the X-data for all entities, and when finished, it will generate the Y-data for all entities. Example output could be:
    Code (vJASS):
    1 // X
    2 // X
    3 // X
    1 // Y
    2 // Y
    3 // Y
    It's technically the same as you would generate the code first only with X, and then with Y.
  • The
    #if
    expression helps to filter for specific field values. Example:
    Code (Text):
    #if ( $Type$ == "ngol" )
    call SetResourceAmount(gg_$Type$_$CreationNumber$, $GoldAmount$)
    #end
    The function call will only be generated if the unit type is 'ngol', a gold mine.

    There are some rules for the #if expression:
    • ==, !=, <, > <=, >=, && are supported symbols (there is no "OR")
    • brackets are needed around the expression
    • for non-integer literals "" are needed around the value
    • ifs can't be nested
    • # operator does not work inside an if statement
    • must be closed with #end
  • It might be that only a certain region is wanted to be generated instead of the whole map. Then, you need very similar
    #if
    conditions for all formats
    . With using global coordinates you have to define them only once and can always refer to them from all files, like variables. It makes the generator input more dynamic.

    The global coordinates are defined in the war3map.w3e file:

    [​IMG]

    .. and they can be used in the generation input with using the
    $
    operator, like a normal field:

    [​IMG]

    So the same input can be used, and just the globals need to be changed if an other region should be generated.


Templates

Templates can be used instead of writing the same generation patterns repetitively. There are default ones for JASS. You just can navigate to the "Templates" directory and add custom templates in .txt files, or modify current ones.

Requirements
  • .NET 4.6.1
  • 64 Bit
Credits

Changelog

v 1.1.0
  • Fixed parsing units.doo file.
v 1.0.0
  • Initial release.
Previews
Contents

W3X Tools (Binary)

W3X Tools Source (Binary)

  1. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,537
    Resources:
    23
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    5
    JASS:
    3
    Resources:
    23
    Usage Example
    Our clan wanted a map to test skills for ice escape, so a map with different difficulties. At our example we have following difficulties:
    • peon ( easy )
    • grunt
    • headhunter
    • raider
    • tauren
    • blademaster ( hard )
    So how we make 6 levels in one map?

    Common approach:
    Create a big map, and create all 6 levels statically in the map. (there's not essentially something bad with it)

    W3X Tools approach:
    Having a map, which is initially empty, but holds code to re-create all 6 levels dynamicaly in game. Only the level which is currently needed, does exist on map.

    Process:

    For each difficulty I have a seperate map, where I maintain only one level. So I end up having 6 maps, one for each difficutly. Only I as developer need these maps for maintenance.

    For public, there's still only one map. In this map I enter the generated code, which I got from w3x tools, after parsing my 6 maps.

    Demo:

    One can play the attached demo "Ice Escape Ranks", write "-rank 0" to play difficutly 0 upto "-rank 5" to play difficutly 5. The levels are only for demo.
    The generated code is in folder "Levels". Here is one example of the result how I create one difficulty.
    Peon Difficutly
    Code (vJASS):

    struct Peon extends Level
        method createRegions takes nothing returns nothing
            local rect rect_0 = Rect(-1120, 2048, -864, 2336)
            local rect rect_1 = Rect(-3296, -32, 0, 3360)
            local rect rect_2 = Rect(-1376, 544, -672, 1248)
            set udg_Spawn = Location(GetRectCenterX(rect_0), GetRectCenterY(rect_0))
            call RemoveRect(rect_0)
            set rect_0 = null
            set udg_LevelBounds = rect_1
            set rect_1 = null
            set udg_RankRegion = rect_2
            set rect_2 = null
        endmethod

        method createUnits takes nothing returns nothing
            set UnitCounter = UnitCounter + 1
            set Units[UnitCounter] = CreateUnit(Player(23), 'n005', -1024, 896, 4.712389*bj_RADTODEG)
            set finish = Units[UnitCounter]
        endmethod
     
        method createDestructables takes nothing returns nothing
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B00A', -576, 1216, 0, 4.712389*bj_RADTODEG, 0.9, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B002', -768, 896, 0, 3.141593*bj_RADTODEG, 0.9, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B00A', -576, 576, 0, 2.356194*bj_RADTODEG, 0.9, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B00C', -704, 1856, 0, 2.164208*bj_RADTODEG, 0.9, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B00C', -704, 2496, 0, 3.647738*bj_RADTODEG, 0.9, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -1568, 1440, 0, 4.712389*bj_RADTODEG, 1.415586, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -224, 1952, 0, 4.712389*bj_RADTODEG, 1.40054, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -864, 1440, 0, 4.712389*bj_RADTODEG, 1.197378, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -288, 2592, 0, 4.712389*bj_RADTODEG, 1.476821, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -416, 1568, 0, 4.712389*bj_RADTODEG, 1.353359, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 416, 2528, 0, 4.712389*bj_RADTODEG, 1.427915, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1536, 2816, 0, 4.712389*bj_RADTODEG, 1.437849, 6)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1088, 3136, 0, 4.712389*bj_RADTODEG, 1.114246, 3)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1216, 2816, 0, 4.712389*bj_RADTODEG, 1.043748, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -768, 3008, 0, 4.712389*bj_RADTODEG, 1.114521, 9)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2176, 2752, 0, 4.712389*bj_RADTODEG, 1.174841, 7)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1920, 3072, 0, 4.712389*bj_RADTODEG, 1.407376, 3)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2496, 3072, 0, 4.712389*bj_RADTODEG, 1.302393, 8)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2944, 2752, 0, 4.712389*bj_RADTODEG, 1.289163, 4)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3072, 3136, 0, 4.712389*bj_RADTODEG, 1.469604, 4)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3200, 2368, 0, 4.712389*bj_RADTODEG, 1.324992, 5)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3072, 1856, 0, 4.712389*bj_RADTODEG, 1.000244, 5)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3264, 1344, 0, 4.712389*bj_RADTODEG, 1.334391, 9)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2944, 1152, 0, 4.712389*bj_RADTODEG, 1.443159, 9)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3200, 768, 0, 4.712389*bj_RADTODEG, 1.438871, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2944, 512, 0, 4.712389*bj_RADTODEG, 1.102557, 7)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -3200, 320, 0, 4.712389*bj_RADTODEG, 1.013047, 3)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2688, 128, 0, 4.712389*bj_RADTODEG, 1.237709, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -2304, 256, 0, 4.712389*bj_RADTODEG, 1.013855, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1280, 0, 0, 4.712389*bj_RADTODEG, 1.247002, 6)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -160, 32, 0, 4.712389*bj_RADTODEG, 1.162374, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 224, 1504, 0, 4.712389*bj_RADTODEG, 1.252449, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 416, 2016, 0, 4.712389*bj_RADTODEG, 1.258614, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1536, 128, 0, 4.712389*bj_RADTODEG, 1.348216, 1)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -960, 192, 0, 4.712389*bj_RADTODEG, 1.262307, 6)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1984, -64, 0, 4.712389*bj_RADTODEG, 1.197348, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 160, 3040, 0, 4.712389*bj_RADTODEG, 1.302576, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1856, 192, 0, 4.712389*bj_RADTODEG, 1.028443, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1664, -128, 0, 4.712389*bj_RADTODEG, 1.009858, 3)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B004', -1024, -192, 0, 4.712389*bj_RADTODEG, 1.224342, 9)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 288, 96, 0, 4.712389*bj_RADTODEG, 1.061769, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', 480, 864, 0, 4.712389*bj_RADTODEG, 1.395901, 0)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -160, 736, 0, 4.712389*bj_RADTODEG, 1.142933, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -288, -352, 0, 4.712389*bj_RADTODEG, 1.086978, 2)
            set DestructableCounter = DestructableCounter + 1
            set Destructables[DestructableCounter] = CreateDestructableZ('B007', -608, 96, 0, 4.712389*bj_RADTODEG, 1.356487, 1)
        endmethod
     
        method createTerrain takes nothing returns nothing
            call SetTerrainType(-3200, 0, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3072, 0, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2944, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 0, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2688, 0, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2560, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2432, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2304, 0, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2176, 0, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2048, 0, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1920, 0, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1792, 0, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1664, 0, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1536, 0, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1408, 0, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1280, 0, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1152, 0, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1024, 0, 'Nsnw', 13, 1, 1)
            call SetTerrainType(-896, 0, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-768, 0, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-640, 0, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-512, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 0, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-256, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 0, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 0, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3200, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3072, 128, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2944, 128, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2688, 128, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2432, 128, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2304, 128, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2176, 128, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2048, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1920, 128, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1792, 128, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1664, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 128, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1408, 128, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1280, 128, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1152, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1024, 128, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-896, 128, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-768, 128, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-640, 128, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-512, 128, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-384, 128, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 128, 'Nsnw', 9, 1, 1)
            call SetTerrainType(-128, 128, 'Nsnw', 16, 1, 1)
            call SetTerrainType(0, 128, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3200, 256, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3072, 256, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2944, 256, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2688, 256, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-2560, 256, 'Nsnw', 6, 1, 1)
            call SetTerrainType(-2432, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2304, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2176, 256, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2048, 256, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-1920, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1792, 256, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1664, 256, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 256, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1408, 256, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1280, 256, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1152, 256, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-1024, 256, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-896, 256, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-768, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-640, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 256, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-384, 256, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-256, 256, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 256, 'Nsnw', 4, 1, 1)
            call SetTerrainType(0, 256, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3200, 384, 'Nsnw', 9, 1, 1)
            call SetTerrainType(-3072, 384, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2944, 384, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2816, 384, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2688, 384, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2560, 384, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2432, 384, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2304, 384, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2176, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2048, 384, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1920, 384, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1792, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1664, 384, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1536, 384, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1408, 384, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1280, 384, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1152, 384, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1024, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-896, 384, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-768, 384, 'Nsnw', 13, 1, 1)
            call SetTerrainType(-640, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-512, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 384, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 384, 'Nsnw', 9, 1, 1)
            call SetTerrainType(-128, 384, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 384, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 512, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3072, 512, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-2944, 512, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2816, 512, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2688, 512, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 512, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2432, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2304, 512, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2176, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2048, 512, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1920, 512, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1792, 512, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1664, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1536, 512, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1408, 512, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1280, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1152, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1024, 512, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-896, 512, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-768, 512, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-640, 512, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-512, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 512, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-128, 512, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 512, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 640, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 640, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2944, 640, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 640, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2688, 640, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2560, 640, 'Nice', 12, 1, 1)
            call SetTerrainType(-2432, 640, 'Nice', 8, 1, 1)
            call SetTerrainType(-2304, 640, 'Nice', 8, 1, 1)
            call SetTerrainType(-2176, 640, 'Nice', 0, 1, 1)
            call SetTerrainType(-2048, 640, 'Nice', 8, 1, 1)
            call SetTerrainType(-1920, 640, 'Nice', 16, 1, 1)
            call SetTerrainType(-1792, 640, 'Nice', 0, 1, 1)
            call SetTerrainType(-1664, 640, 'Nice', 4, 1, 1)
            call SetTerrainType(-1536, 640, 'Nice', 0, 1, 1)
            call SetTerrainType(-1408, 640, 'Nice', 8, 1, 1)
            call SetTerrainType(-1280, 640, 'Itbk', 8, 1, 1)
            call SetTerrainType(-1152, 640, 'Itbk', 12, 1, 1)
            call SetTerrainType(-1024, 640, 'Itbk', 4, 1, 1)
            call SetTerrainType(-896, 640, 'Itbk', 13, 1, 1)
            call SetTerrainType(-768, 640, 'Itbk', 17, 1, 1)
            call SetTerrainType(-640, 640, 'Itbk', 15, 1, 1)
            call SetTerrainType(-512, 640, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 640, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 640, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 640, 'Nsnw', 16, 1, 1)
            call SetTerrainType(0, 640, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 768, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 768, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2944, 768, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 768, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2688, 768, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2560, 768, 'Nice', 4, 1, 1)
            call SetTerrainType(-2432, 768, 'Nice', 16, 1, 1)
            call SetTerrainType(-2304, 768, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 768, 'Nice', 8, 1, 1)
            call SetTerrainType(-2048, 768, 'Nice', 16, 1, 1)
            call SetTerrainType(-1920, 768, 'Nice', 12, 1, 1)
            call SetTerrainType(-1792, 768, 'Nice', 16, 1, 1)
            call SetTerrainType(-1664, 768, 'Nice', 16, 1, 1)
            call SetTerrainType(-1536, 768, 'Nice', 4, 1, 1)
            call SetTerrainType(-1408, 768, 'Nice', 17, 1, 1)
            call SetTerrainType(-1280, 768, 'Itbk', 8, 1, 1)
            call SetTerrainType(-1152, 768, 'Itbk', 16, 1, 1)
            call SetTerrainType(-1024, 768, 'Itbk', 12, 1, 1)
            call SetTerrainType(-896, 768, 'Itbk', 4, 1, 1)
            call SetTerrainType(-768, 768, 'Itbk', 1, 1, 1)
            call SetTerrainType(-640, 768, 'Itbk', 16, 1, 1)
            call SetTerrainType(-512, 768, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-384, 768, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 768, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-128, 768, 'Nsnw', 0, 1, 1)
            call SetTerrainType(0, 768, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3200, 896, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 896, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2944, 896, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 896, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2688, 896, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 896, 'Nice', 17, 1, 1)
            call SetTerrainType(-2432, 896, 'Nice', 16, 1, 1)
            call SetTerrainType(-2304, 896, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 896, 'Nice', 8, 1, 1)
            call SetTerrainType(-2048, 896, 'Nice', 16, 1, 1)
            call SetTerrainType(-1920, 896, 'Nice', 8, 1, 1)
            call SetTerrainType(-1792, 896, 'Nice', 8, 1, 1)
            call SetTerrainType(-1664, 896, 'Nice', 8, 1, 1)
            call SetTerrainType(-1536, 896, 'Nice', 17, 1, 1)
            call SetTerrainType(-1408, 896, 'Nice', 8, 1, 1)
            call SetTerrainType(-1280, 896, 'Itbk', 9, 1, 1)
            call SetTerrainType(-1152, 896, 'Itbk', 8, 1, 1)
            call SetTerrainType(-1024, 896, 'Itbk', 4, 1, 1)
            call SetTerrainType(-896, 896, 'Itbk', 6, 1, 1)
            call SetTerrainType(-768, 896, 'Itbk', 16, 1, 1)
            call SetTerrainType(-640, 896, 'Itbk', 12, 1, 1)
            call SetTerrainType(-512, 896, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-384, 896, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-256, 896, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-128, 896, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 896, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3200, 1024, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3072, 1024, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2944, 1024, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 1024, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2688, 1024, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 1024, 'Nice', 16, 1, 1)
            call SetTerrainType(-2432, 1024, 'Nice', 0, 1, 1)
            call SetTerrainType(-2304, 1024, 'Nice', 12, 1, 1)
            call SetTerrainType(-2176, 1024, 'Nice', 8, 1, 1)
            call SetTerrainType(-2048, 1024, 'Nice', 16, 1, 1)
            call SetTerrainType(-1920, 1024, 'Nice', 12, 1, 1)
            call SetTerrainType(-1792, 1024, 'Nice', 0, 1, 1)
            call SetTerrainType(-1664, 1024, 'Nice', 12, 1, 1)
            call SetTerrainType(-1536, 1024, 'Nice', 8, 1, 1)
            call SetTerrainType(-1408, 1024, 'Nice', 17, 1, 1)
            call SetTerrainType(-1280, 1024, 'Itbk', 17, 1, 1)
            call SetTerrainType(-1152, 1024, 'Itbk', 12, 1, 1)
            call SetTerrainType(-1024, 1024, 'Itbk', 12, 1, 1)
            call SetTerrainType(-896, 1024, 'Itbk', 0, 1, 1)
            call SetTerrainType(-768, 1024, 'Itbk', 12, 1, 1)
            call SetTerrainType(-640, 1024, 'Itbk', 8, 1, 1)
            call SetTerrainType(-512, 1024, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 1024, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-256, 1024, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 1024, 'Nsnw', 4, 1, 1)
            call SetTerrainType(0, 1024, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3200, 1152, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3072, 1152, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2944, 1152, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 1152, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-2688, 1152, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 1152, 'Nice', 17, 1, 1)
            call SetTerrainType(-2432, 1152, 'Nice', 4, 1, 1)
            call SetTerrainType(-2304, 1152, 'Nice', 0, 1, 1)
            call SetTerrainType(-2176, 1152, 'Nice', 16, 1, 1)
            call SetTerrainType(-2048, 1152, 'Nice', 0, 1, 1)
            call SetTerrainType(-1920, 1152, 'Nice', 8, 1, 1)
            call SetTerrainType(-1792, 1152, 'Nice', 4, 1, 1)
            call SetTerrainType(-1664, 1152, 'Nice', 17, 1, 1)
            call SetTerrainType(-1536, 1152, 'Nice', 0, 1, 1)
            call SetTerrainType(-1408, 1152, 'Nice', 0, 1, 1)
            call SetTerrainType(-1280, 1152, 'Itbk', 8, 1, 1)
            call SetTerrainType(-1152, 1152, 'Itbk', 15, 1, 1)
            call SetTerrainType(-1024, 1152, 'Itbk', 4, 1, 1)
            call SetTerrainType(-896, 1152, 'Itbk', 16, 1, 1)
            call SetTerrainType(-768, 1152, 'Itbk', 17, 1, 1)
            call SetTerrainType(-640, 1152, 'Itbk', 8, 1, 1)
            call SetTerrainType(-512, 1152, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 1152, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-256, 1152, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 1152, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 1152, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 1280, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3072, 1280, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2944, 1280, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2816, 1280, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2688, 1280, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2560, 1280, 'Nice', 4, 1, 1)
            call SetTerrainType(-2432, 1280, 'Nice', 4, 1, 1)
            call SetTerrainType(-2304, 1280, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 1280, 'Nice', 8, 1, 1)
            call SetTerrainType(-2048, 1280, 'Nice', 17, 1, 1)
            call SetTerrainType(-1920, 1280, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1792, 1280, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1664, 1280, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1536, 1280, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1408, 1280, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1280, 1280, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1152, 1280, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1024, 1280, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-896, 1280, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-768, 1280, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-640, 1280, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 1280, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-384, 1280, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-256, 1280, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 1280, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 1280, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3200, 1408, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3072, 1408, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2944, 1408, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2816, 1408, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2688, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2560, 1408, 'Nice', 17, 1, 1)
            call SetTerrainType(-2432, 1408, 'Nice', 0, 1, 1)
            call SetTerrainType(-2304, 1408, 'Nice', 12, 1, 1)
            call SetTerrainType(-2176, 1408, 'Nice', 8, 1, 1)
            call SetTerrainType(-2048, 1408, 'Nice', 8, 1, 1)
            call SetTerrainType(-1920, 1408, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1792, 1408, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-1664, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1536, 1408, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1408, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1280, 1408, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1152, 1408, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1024, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-896, 1408, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-768, 1408, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-640, 1408, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 1408, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 1408, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-128, 1408, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 1408, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3200, 1536, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3072, 1536, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2944, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 1536, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-2688, 1536, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 1536, 'Nice', 4, 1, 1)
            call SetTerrainType(-2432, 1536, 'Nice', 8, 1, 1)
            call SetTerrainType(-2304, 1536, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 1536, 'Nice', 17, 1, 1)
            call SetTerrainType(-2048, 1536, 'Nice', 16, 1, 1)
            call SetTerrainType(-1920, 1536, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1792, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1664, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1408, 1536, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1280, 1536, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1152, 1536, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1024, 1536, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-896, 1536, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-768, 1536, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-640, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-512, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 1536, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-128, 1536, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 1536, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3200, 1664, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3072, 1664, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2944, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2816, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2688, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2560, 1664, 'Nice', 0, 1, 1)
            call SetTerrainType(-2432, 1664, 'Nice', 8, 1, 1)
            call SetTerrainType(-2304, 1664, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 1664, 'Nice', 16, 1, 1)
            call SetTerrainType(-2048, 1664, 'Nice', 12, 1, 1)
            call SetTerrainType(-1920, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1792, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1664, 1664, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1536, 1664, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1408, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1280, 1664, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1152, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1024, 1664, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-896, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-768, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-640, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-512, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 1664, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-256, 1664, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(0, 1664, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3200, 1792, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3072, 1792, 'Nsnw', 9, 1, 1)
            call SetTerrainType(-2944, 1792, 'Nsnw', 10, 1, 1)
            call SetTerrainType(-2816, 1792, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2688, 1792, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2560, 1792, 'Nice', 17, 1, 1)
            call SetTerrainType(-2432, 1792, 'Nice', 16, 1, 1)
            call SetTerrainType(-2304, 1792, 'Nice', 17, 1, 1)
            call SetTerrainType(-2176, 1792, 'Nice', 16, 1, 1)
            call SetTerrainType(-2048, 1792, 'Nice', 17, 1, 1)
            call SetTerrainType(-1920, 1792, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1792, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1664, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1536, 1792, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1408, 1792, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1280, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1152, 1792, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1024, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-896, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-768, 1792, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-640, 1792, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 1792, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 1792, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-256, 1792, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-128, 1792, 'Nsnw', 16, 1, 1)
            call SetTerrainType(0, 1792, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3200, 1920, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3072, 1920, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2944, 1920, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2816, 1920, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2688, 1920, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2560, 1920, 'Nice', 12, 1, 1)
            call SetTerrainType(-2432, 1920, 'Nice', 8, 1, 1)
            call SetTerrainType(-2304, 1920, 'Nice', 8, 1, 1)
            call SetTerrainType(-2176, 1920, 'Nice', 16, 1, 1)
            call SetTerrainType(-2048, 1920, 'Nice', 16, 1, 1)
            call SetTerrainType(-1920, 1920, 'Nice', 0, 1, 1)
            call SetTerrainType(-1792, 1920, 'Nice', 8, 1, 1)
            call SetTerrainType(-1664, 1920, 'Nice', 8, 1, 1)
            call SetTerrainType(-1536, 1920, 'Nice', 4, 1, 1)
            call SetTerrainType(-1408, 1920, 'Nice', 16, 1, 1)
            call SetTerrainType(-1280, 1920, 'Ibkb', 0, 1, 1)
            call SetTerrainType(-1152, 1920, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-1024, 1920, 'Ibkb', 17, 1, 1)
            call SetTerrainType(-896, 1920, 'Ibkb', 4, 1, 1)
            call SetTerrainType(-768, 1920, 'Ibkb', 4, 1, 1)
            call SetTerrainType(-640, 1920, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-512, 1920, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-384, 1920, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 1920, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-128, 1920, 'Nsnw', 12, 1, 1)
            call SetTerrainType(0, 1920, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3200, 2048, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3072, 2048, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2944, 2048, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2816, 2048, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2688, 2048, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2560, 2048, 'Nice', 0, 1, 1)
            call SetTerrainType(-2432, 2048, 'Nice', 4, 1, 1)
            call SetTerrainType(-2304, 2048, 'Nice', 8, 1, 1)
            call SetTerrainType(-2176, 2048, 'Nice', 12, 1, 1)
            call SetTerrainType(-2048, 2048, 'Nice', 8, 1, 1)
            call SetTerrainType(-1920, 2048, 'Nice', 12, 1, 1)
            call SetTerrainType(-1792, 2048, 'Nice', 4, 1, 1)
            call SetTerrainType(-1664, 2048, 'Nice', 8, 1, 1)
            call SetTerrainType(-1536, 2048, 'Nice', 12, 1, 1)
            call SetTerrainType(-1408, 2048, 'Nice', 16, 1, 1)
            call SetTerrainType(-1280, 2048, 'Ibkb', 4, 1, 1)
            call SetTerrainType(-1152, 2048, 'Ibkb', 8, 1, 1)
            call SetTerrainType(-1024, 2048, 'Ibkb', 9, 1, 1)
            call SetTerrainType(-896, 2048, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-768, 2048, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-640, 2048, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-512, 2048, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 2048, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-256, 2048, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 2048, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 2048, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3200, 2176, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3072, 2176, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2944, 2176, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-2816, 2176, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2688, 2176, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2560, 2176, 'Nice', 0, 1, 1)
            call SetTerrainType(-2432, 2176, 'Nice', 0, 1, 1)
            call SetTerrainType(-2304, 2176, 'Nice', 16, 1, 1)
            call SetTerrainType(-2176, 2176, 'Nice', 17, 1, 1)
            call SetTerrainType(-2048, 2176, 'Nice', 0, 1, 1)
            call SetTerrainType(-1920, 2176, 'Nice', 12, 1, 1)
            call SetTerrainType(-1792, 2176, 'Nice', 17, 1, 1)
            call SetTerrainType(-1664, 2176, 'Nice', 4, 1, 1)
            call SetTerrainType(-1536, 2176, 'Nice', 8, 1, 1)
            call SetTerrainType(-1408, 2176, 'Nice', 8, 1, 1)
            call SetTerrainType(-1280, 2176, 'Ibkb', 12, 1, 1)
            call SetTerrainType(-1152, 2176, 'Ibkb', 17, 1, 1)
            call SetTerrainType(-1024, 2176, 'Ibkb', 12, 1, 1)
            call SetTerrainType(-896, 2176, 'Ibkb', 1, 1, 1)
            call SetTerrainType(-768, 2176, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-640, 2176, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 2176, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-384, 2176, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 2176, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 2176, 'Nsnw', 16, 1, 1)
            call SetTerrainType(0, 2176, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3200, 2304, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3072, 2304, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2944, 2304, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2816, 2304, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2688, 2304, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2560, 2304, 'Nice', 16, 1, 1)
            call SetTerrainType(-2432, 2304, 'Nice', 12, 1, 1)
            call SetTerrainType(-2304, 2304, 'Nice', 4, 1, 1)
            call SetTerrainType(-2176, 2304, 'Nice', 16, 1, 1)
            call SetTerrainType(-2048, 2304, 'Nice', 4, 1, 1)
            call SetTerrainType(-1920, 2304, 'Nice', 12, 1, 1)
            call SetTerrainType(-1792, 2304, 'Nice', 8, 1, 1)
            call SetTerrainType(-1664, 2304, 'Nice', 8, 1, 1)
            call SetTerrainType(-1536, 2304, 'Nice', 16, 1, 1)
            call SetTerrainType(-1408, 2304, 'Nice', 14, 1, 1)
            call SetTerrainType(-1280, 2304, 'Ibkb', 17, 1, 1)
            call SetTerrainType(-1152, 2304, 'Ibkb', 17, 1, 1)
            call SetTerrainType(-1024, 2304, 'Ibkb', 8, 1, 1)
            call SetTerrainType(-896, 2304, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-768, 2304, 'Ibkb', 5, 1, 1)
            call SetTerrainType(-640, 2304, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 2304, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 2304, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-256, 2304, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 2304, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 2304, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-3200, 2432, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3072, 2432, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-2944, 2432, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2816, 2432, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2688, 2432, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2560, 2432, 'Nice', 0, 1, 1)
            call SetTerrainType(-2432, 2432, 'Nice', 8, 1, 1)
            call SetTerrainType(-2304, 2432, 'Nice', 8, 1, 1)
            call SetTerrainType(-2176, 2432, 'Nice', 4, 1, 1)
            call SetTerrainType(-2048, 2432, 'Nice', 17, 1, 1)
            call SetTerrainType(-1920, 2432, 'Nice', 17, 1, 1)
            call SetTerrainType(-1792, 2432, 'Nice', 0, 1, 1)
            call SetTerrainType(-1664, 2432, 'Nice', 0, 1, 1)
            call SetTerrainType(-1536, 2432, 'Nice', 12, 1, 1)
            call SetTerrainType(-1408, 2432, 'Nice', 16, 1, 1)
            call SetTerrainType(-1280, 2432, 'Ibkb', 8, 1, 1)
            call SetTerrainType(-1152, 2432, 'Ibkb', 9, 1, 1)
            call SetTerrainType(-1024, 2432, 'Ibkb', 16, 1, 1)
            call SetTerrainType(-896, 2432, 'Ibkb', 17, 1, 1)
            call SetTerrainType(-768, 2432, 'Ibkb', 8, 1, 1)
            call SetTerrainType(-640, 2432, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-512, 2432, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-384, 2432, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 2432, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 2432, 'Nsnw', 12, 1, 1)
            call SetTerrainType(0, 2432, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 2560, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 2560, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2944, 2560, 'Nsnw', 11, 1, 1)
            call SetTerrainType(-2816, 2560, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2688, 2560, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-2560, 2560, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2432, 2560, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2304, 2560, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2176, 2560, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2048, 2560, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1920, 2560, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1792, 2560, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1664, 2560, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1536, 2560, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1408, 2560, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1280, 2560, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1152, 2560, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1024, 2560, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-896, 2560, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-768, 2560, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-640, 2560, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-512, 2560, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-384, 2560, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-256, 2560, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-128, 2560, 'Nsnw', 17, 1, 1)
            call SetTerrainType(0, 2560, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3200, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-3072, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2944, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 2688, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2688, 2688, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2560, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2432, 2688, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-2304, 2688, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2176, 2688, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2048, 2688, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1920, 2688, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1792, 2688, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1664, 2688, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1536, 2688, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1408, 2688, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1280, 2688, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1152, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1024, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-896, 2688, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-768, 2688, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-640, 2688, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-512, 2688, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 2688, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-256, 2688, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-128, 2688, 'Nsnw', 16, 1, 1)
            call SetTerrainType(0, 2688, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-3200, 2816, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3072, 2816, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2944, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2688, 2816, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2560, 2816, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2432, 2816, 'Nsnw', 14, 1, 1)
            call SetTerrainType(-2304, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2176, 2816, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2048, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1920, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1792, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1664, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1408, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1280, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1152, 2816, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1024, 2816, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-896, 2816, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-768, 2816, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-640, 2816, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-512, 2816, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 2816, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-256, 2816, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-128, 2816, 'Nsnw', 12, 1, 1)
            call SetTerrainType(0, 2816, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3200, 2944, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 2944, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-2944, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2816, 2944, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2688, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2560, 2944, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2432, 2944, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2304, 2944, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2176, 2944, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2048, 2944, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1920, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1792, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1664, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 2944, 'Nsnw', 9, 1, 1)
            call SetTerrainType(-1408, 2944, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-1280, 2944, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-1152, 2944, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1024, 2944, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-896, 2944, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-768, 2944, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-640, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-512, 2944, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-384, 2944, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-256, 2944, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-128, 2944, 'Nsnw', 12, 1, 1)
            call SetTerrainType(0, 2944, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3200, 3072, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-3072, 3072, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2944, 3072, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2816, 3072, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2688, 3072, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-2560, 3072, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2432, 3072, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-2304, 3072, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2176, 3072, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2048, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1920, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1792, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1664, 3072, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1536, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1408, 3072, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1280, 3072, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1152, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1024, 3072, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-896, 3072, 'Nsnw', 13, 1, 1)
            call SetTerrainType(-768, 3072, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-640, 3072, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-512, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 3072, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 3072, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-128, 3072, 'Nsnw', 8, 1, 1)
            call SetTerrainType(0, 3072, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3200, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3072, 3200, 'Nsnw', 2, 1, 1)
            call SetTerrainType(-2944, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2816, 3200, 'Nsnw', 10, 1, 1)
            call SetTerrainType(-2688, 3200, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2560, 3200, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2432, 3200, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2304, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2176, 3200, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2048, 3200, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1920, 3200, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-1792, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1664, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1536, 3200, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-1408, 3200, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1280, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1152, 3200, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-1024, 3200, 'Nsnw', 1, 1, 1)
            call SetTerrainType(-896, 3200, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-768, 3200, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-640, 3200, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-512, 3200, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-384, 3200, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-256, 3200, 'Nsnw', 13, 1, 1)
            call SetTerrainType(-128, 3200, 'Nsnw', 1, 1, 1)
            call SetTerrainType(0, 3200, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-3200, 3328, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-3072, 3328, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2944, 3328, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-2816, 3328, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2688, 3328, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2560, 3328, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-2432, 3328, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2304, 3328, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-2176, 3328, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-2048, 3328, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1920, 3328, 'Nsnw', 10, 1, 1)
            call SetTerrainType(-1792, 3328, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1664, 3328, 'Nsnw', 16, 1, 1)
            call SetTerrainType(-1536, 3328, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1408, 3328, 'Nsnw', 0, 1, 1)
            call SetTerrainType(-1280, 3328, 'Nsnw', 4, 1, 1)
            call SetTerrainType(-1152, 3328, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-1024, 3328, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-896, 3328, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-768, 3328, 'Nsnw', 17, 1, 1)
            call SetTerrainType(-640, 3328, 'Nsnw', 5, 1, 1)
            call SetTerrainType(-512, 3328, 'Nsnw', 12, 1, 1)
            call SetTerrainType(-384, 3328, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-256, 3328, 'Nsnw', 8, 1, 1)
            call SetTerrainType(-128, 3328, 'Nsnw', 14, 1, 1)
            call SetTerrainType(0, 3328, 'Nsnw', 17, 1, 1)
        endmethod
     
        method getLevelName takes nothing returns string
            return "Peon"
        endmethod
     
        method getLevelRank takes nothing returns integer
            return 0
        endmethod
     
        method onDestroy takes nothing returns nothing
            call RemoveUnit(finish)
            call DestroyTrigger(finishHandler)
            set finishHandler = null
            set finish = null
         
            call RemoveRect(.rankRegion)
            call DestroyTrigger(rankHandler)
            set .rankRegion = null
            set .rankHandler = null
        endmethod
     
        static method create takes nothing returns thistype
            local thistype this = .allocate()
            call .createLevel()
         
            set .finishHandler = CreateTrigger()
            call TriggerRegisterUnitInRange(.finishHandler, .finish, 105, Filter(function Level.onFinishFilter))
            call TriggerAddAction(.finishHandler, function Level.enterFinish)
         
            set .rankHandler = CreateTrigger()
            call TriggerRegisterEnterRectSimple(.rankHandler, .rankRegion)
            call TriggerAddAction(.rankHandler, function Level.enterRankRegion)
         
            return this
        endmethod
    endstruct

     

    Attached Files:

    Last edited: Jun 4, 2020
  2. Daffa

    Daffa

    Joined:
    Jan 30, 2013
    Messages:
    8,201
    Resources:
    31
    Packs:
    1
    Maps:
    9
    Spells:
    18
    Tutorials:
    3
    Resources:
    31
    So, let me get this straight, we can have three form of maps in one map file?
     
  3. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,537
    Resources:
    23
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    5
    JASS:
    3
    Resources:
    23
    One can develop a map with variations, and store the state into code (terrain, units, destructables... ).
    Any map can run this code, re-creating your state. You end up having multiple terrain states of your map in code, changing it dynamically.

    I attached a demo in first post.
     
  4. Daffa

    Daffa

    Joined:
    Jan 30, 2013
    Messages:
    8,201
    Resources:
    31
    Packs:
    1
    Maps:
    9
    Spells:
    18
    Tutorials:
    3
    Resources:
    31
    Ah, that's a pretty amazing approach. This is interesting.
     
  5. yxq1122

    yxq1122

    Joined:
    Jun 5, 2018
    Messages:
    159
    Resources:
    1
    Tools:
    1
    Resources:
    1
    Awesome tool!
    Very useful for those who want to make a dynamic map and to reduce the map size. I am especially interested in loading dynamic terrains using this tool.
     
  6. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,537
    Resources:
    23
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    5
    JASS:
    3
    Resources:
    23
    Thanks! I now saw your posted tool, too. It's some ltitle bit related! It gave motiviation for a new feature, being able to config a file for some batch creation. When user changes a map, he for now would neeed to re-egenrate the map on his own, as code in base map need to be updated to match new terrain. The goal of new feature would be to have one config file for his base map, where he defines what maps layouts should be included in whih position of code, and w3x tools parses all target maps in row, and injects generated code in the base map automatically. At least it's the idea.
     
  7. Macadamia

    Macadamia

    Joined:
    Jan 30, 2020
    Messages:
    876
    Resources:
    0
    Resources:
    0
    Another godsend tool that I missed !

    This is great, previous tools I tried to use on my Reforged map to retrieve doodads and destructs failed.
    The code generator script is very well thought.

    I would love to see this tool extended to other object files, it would just be wonderful.
    Especially as I used my old patch 1.24 map to rebuild it from scratch progressively, so I have some corrupted hidden settings (I can't find the custom configuration SLKs I was using back in 2004) on some objects, and this has unexpected issues, like the impossibility to use weather effects in my map.

    I thought of recreating from scratch, but honestly thats a titan's work considering the amount of custom object data implied.

    I would advise anyone to use this tool to regain control of the creation of preplaced objects on their maps !!!
     
  8. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,537
    Resources:
    23
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    5
    JASS:
    3
    Resources:
    23
    Thanks much! ObjectData, next to preplaced things, will come on to-do list!
     
  9. Macadamia

    Macadamia

    Joined:
    Jan 30, 2020
    Messages:
    876
    Resources:
    0
    Resources:
    0
    Yes that would be really nice.
    I currently have no use of the preplaced unit data (thus did not experiment the issues) because one can simply retrieve that from the map script, but not everyone likes to dig in war3map.Lua (or .j).
    Besides units, there is so much data we can't access directly and if you make the tool evolve, it would be so awesome for everyone !
     
  10. Tyler Gleditsch

    Tyler Gleditsch

    Joined:
    Sep 9, 2019
    Messages:
    9
    Resources:
    0
    Resources:
    0
    +1 vote for loading ObjectData into your Data Table at some point in time

    Would be 10/10 brilliant if there was an option to export to .csv

    Nice work
     
  11. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,537
    Resources:
    23
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    5
    JASS:
    3
    Resources:
    23
    Thank you. These weeks are busy, but the object data, next to some other cool feature that is in plan, will come!

    You can just copy & paste wanted data into excel and save as .csv.
     
    Last edited: Jun 17, 2020
  12. yxq1122

    yxq1122

    Joined:
    Jun 5, 2018
    Messages:
    159
    Resources:
    1
    Tools:
    1
    Resources:
    1
    As far as I know, karaulov's custom w3e injector can write data into terrain. Thus I guess your tool could also write into terrain like that.
    Custom w3e injector
     
    Last edited: Oct 25, 2020
  13. grimgrents

    grimgrents

    Joined:
    Dec 7, 2018
    Messages:
    15
    Resources:
    0
    Resources:
    0
    Thanks man! great tool, is it possible to change the Angle value to be in 360 degrees format just like inside WE?

    Can u please make it possible to drag & drop a single war3map file without having to import the entire map?
     
    Last edited: Nov 29, 2020 at 6:58 AM