Outpost Universe Forums

Projects & Development => Outpost 2 Programming & Development => Topic started by: pente on April 15, 2019, 04:29:34 PM

Title: Gameplay differences of tile types
Post by: pente on April 15, 2019, 04:29:34 PM
I have yet another question (and there will probably be more to come), this time about the tile types. The .map files use 11 different tile types, which I have copied below:

Code: [Select]
0 (0x0)         Fast Passible 1         - rock vegetation
1 (0x1)         Impassible 2            - meteor craters, cracks/crevasses
2 (0x2)         Slow Passible 1         - lava rock (dark)
3 (0x3)         Slow Passible 2         - rippled dirt/lava rock bumps
4 (0x4)         Medium Passible 1       - dirt
5 (0x5)         Medium Passible 2       - lava rock
6 (0x6)         Impassible 1            - dirt/rock/lava rock mound/ice cap/volcano
7 (0x7)         Fast Passable 2         - rock
8 (0x8)         North Cliffs            -
9 (0x9)         Cliffs - High side      -
10 (0xA)        Cliffs - Low Side       - cliffs, low side (and middle too)

There are five impassable types (including the cliffs), two slow types, two medium types, and two fast types. I am wondering if there are any gameplay effects of how the game engine treats these tile types. The difference between the various speeds is obvious, but is that it? Are both fast types the same as each other? Are cliffs different from plain impassable? etc.

Below I made an image of eden05.map where tiles are color coded by tile type. Since it was hard to tell apart 11 colors I also added a binary code on each tile with its tile type. Notice how tile type 1 is used mostly, but not exclusively, for tiles that are unreachable (presumably this is a path finding optimization). I have also noticed that the bottom row of every map is always type 6.
Title: Re: Gameplay differences of tile types
Post by: Vagabond on April 15, 2019, 07:51:54 PM

As I recall, the bottom row of a map must be impassible or there will be problems when it is played.

I haven't noticed a difference in the different impassible choices when making my own maps. I tend to just follow the convention of previous maps for consistency. Sorry if you were looking for a more informed answer.

That is a pretty sweet image. You have really put the mapImager that took me a month or more with Hooman's help to shame by writing all this in essentially a weekend. :)

Title: Re: Gameplay differences of tile types
Post by: lordpalandus on April 16, 2019, 11:18:52 AM
The difference between fast and slow types, that I've observed (my perceptions may be false, and it was simply pre-programmed to behave in a specific manner, rather than is dynamic):

1. Determines movement speed when unpaved. When paved, movement speed seems consistent.

2. Determines build speed when unpaved. When paved, rock builds the fastest and lava rock the slowest.

3. It appears that certain types of lava-rock will more easily allow the flow of Lava. I know that Lava is pre-programmed to flow in a specific path, but it appears that when lava tries to expand upon a pre-programmed tile, some tiles fill with Lava faster than others.

4. It appears that speed of terrain affects the spread of the Blight. I've noticed that on rock, Blight moves super fast during the daytime, but fairly slowly on lava-rock. So I've found in campaign missions when I've been a bit slow on getting conditions filled, I'll evacuate the colony to lava rock to avoid losing vehicles. 

5. Certain disasters appear to be more frequent in different terrain zones. Earthquakes occur more frequently in lava-rock, Vortices in dirt, and Electrical Storms in standard rock. Can see each disaster occur in other areas, but more often in these zones. Plymouth Colony provides great examples of each of these, if you want to observe them in action.
Title: Re: Gameplay differences of tile types
Post by: Hooman on April 17, 2019, 05:19:26 AM
I rather like what you did with the map there. That's pretty cool looking.

The different terrain types all have different movement characteristics, which affects units differently based on their track types (wheeled, tracked, legged). It also affects blight spread speed. Blight spreads slower on lava rock. Day/night also affects blight spread speed, where is spreads slower at night, though that is independent of the terrain type. Each cell type has an array of speed/spread values for each movement type. The range of values is quite large, and varied between similar cell types, though the observed effect in game may be small and hard to notice between similar cell types.

There are some unknowns in the data. It seems to consist of 32 terrain types, each with 8 track type movement values. A hex dump of the movement values exists in the SVN in OllyDbg/InternalData/Data CellTypes.txt:
Code: [Select]

Terrain type data
Note: There are 32 terrain types.
Note: The following Track Types are found in vehicles.txt
T - tracked
W - wheeled
M - ? (GeoCon and RoboMiner) - type 3
L - legged
  - blight - type 7?

004DEBA8  004DEB98  ASCII "Fast Passible 1"
004DEBAC  00000E00
004DEBB0  00001000
004DEBB4  00001000
004DEBB8  00001000
004DEBBC  00000000
004DEBC0  00000000
004DEBC4  00000020 ; Blight spread speed
004DEBC8  00001666
004DEBCC  004DF190  ASCII "Impassible 2"
004DEBD0  00000000
004DEBD4  00000000
004DEBD8  00000000
004DEBDC  00000000
004DEBE0  00000000
004DEBE4  00000000
004DEBE8  00000010
004DEBEC  00003D86
004DEBF0  004DF180  ASCII "Slow Passible 1"
004DEBF4  00001600
004DEBF8  00001A00
004DEBFC  00001A00
004DEC00  00001A00
004DEC04  00000000
004DEC08  00000000
004DEC0C  00000010
004DEC10  00000000
004DEC14  004DF170  ASCII "Slow Passible 2"
004DEC18  00001A00
004DEC1C  00001800
004DEC20  00001800
004DEC24  00001600
004DEC28  00000000
004DEC2C  00000000
004DEC30  00000018
004DEC34  00004A46
004DEC38  004DF15C  ASCII "Medium Passible 1"
004DEC3C  00001400
004DEC40  00001400
004DEC44  00001400
004DEC48  00001200
004DEC4C  00000000
004DEC50  00000000
004DEC54  00000018
004DEC58  00007BC5
004DEC5C  004DF148  ASCII "Medium Passible 2"
004DEC60  00001200
004DEC64  00001600
004DEC68  00001600
004DEC6C  00001400
004DEC70  00000000
004DEC74  00000000
004DEC78  00000018
004DEC7C  000056B5
004DEC80  004DF138  ASCII "Impassible 1"
004DEC84  00000000
004DEC88  00000000
004DEC8C  00000000
004DEC90  00000000
004DEC94  00000000
004DEC98  00000001 ; lava speed control?
004DEC9C  00000010
004DECA0  00002D6B
004DECA4  004DF128  ASCII "Fast Passible 2"
004DECA8  00001000
004DECAC  00001000
004DECB0  00001000
004DECB4  00001000
004DECB8  00000000
004DECBC  00000000
004DECC0  00000020
004DECC4  00003B6A
004DECC8  004DF118  ASCII "North Cliffs"
004DECCC  00000000
004DECD0  00000000
004DECD4  00000000
004DECD8  00000000
004DECDC  00000000
004DECE0  00000001
004DECE4  00000010
004DECE8  00007640
004DECEC  004DF104  ASCII "Cliffs - High side"
004DECF0  00000000
004DECF4  00000000
004DECF8  00000000
004DECFC  00000000
004DED00  00000000
004DED04  00000001
004DED08  00000010
004DED0C  00007640
004DED10  004DF0F0  ASCII "Cliffs - Low Side"
004DED14  00000000
004DED18  00000000
004DED1C  00000000
004DED20  00000000
004DED24  00000000
004DED28  00000000
004DED2C  00000010
004DED30  00007640
004DED34  004DF0DC  ASCII "Vents and Fumaroles"
004DED38  00000000
004DED3C  00000000
004DED40  00001A00
004DED44  00000000
004DED48  00000000
004DED4C  00000001
004DED50  00000010
004DED54  00001B19
004DED58  004DF0D4  ASCII "zPad 12"
004DED5C  00000200
004DED60  00000200
004DED64  00000200
004DED68  00000200
004DED6C  00000200
004DED70  00000000
004DED74  00000020
004DED78  00006000
004DED7C  004DF0CC  ASCII "zPad 13"
004DED80  00000155
004DED84  00000200
004DED88  00000200
004DED8C  00000200
004DED90  00000200
004DED94  00000000
004DED98  00000010
004DED9C  00004000
004DEDA0  004DF0C4  ASCII "zPad 14"
004DEDA4  00000400
004DEDA8  00000000
004DEDAC  00000000
004DEDB0  00000400
004DEDB4  00000000
004DEDB8  00000001
004DEDBC  00000010
004DEDC0  00000200
004DEDC4  004DF0BC  ASCII "zPad 15"
004DEDC8  00000000
004DEDCC  00000000
004DEDD0  00000000
004DEDD4  00000000
004DEDD8  00000000
004DEDDC  00000001
004DEDE0  00000000
004DEDE4  00004210
004DEDE8  004DF0B4  ASCII "zPad 16"
004DEDEC  00000200
004DEDF0  00000200
004DEDF4  00000200
004DEDF8  00000200
004DEDFC  00000200
004DEE00  00000000
004DEE04  00000020
004DEE08  00006000
004DEE0C  004DF0AC  ASCII "zPad 17"
004DEE10  00000200
004DEE14  00000200
004DEE18  00000200
004DEE1C  00000200
004DEE20  00000200
004DEE24  00000000
004DEE28  00000020
004DEE2C  00006000
004DEE30  004DF0A4  ASCII "zPad 18"
004DEE34  00000200
004DEE38  00000200
004DEE3C  00000200
004DEE40  00000200
004DEE44  00000200
004DEE48  00000000
004DEE4C  00000020
004DEE50  00006000
004DEE54  004DF09C  ASCII "zPad 19"
004DEE58  00000200
004DEE5C  00000200
004DEE60  00000200
004DEE64  00000200
004DEE68  00000200
004DEE6C  00000000
004DEE70  00000020
004DEE74  00006000
004DEE78  004DF094  ASCII "zPad 20"
004DEE7C  00000200
004DEE80  00000200
004DEE84  00000200
004DEE88  00000200
004DEE8C  00000200
004DEE90  00000000
004DEE94  00000020
004DEE98  00006000
004DEE9C  004DF088  ASCII "Dozed Area"
004DEEA0  00000C00
004DEEA4  00000C00
004DEEA8  00000C00
004DEEAC  00000C00
004DEEB0  00000C00
004DEEB4  00000000
004DEEB8  00000020
004DEEBC  00007FE0
004DEEC0  004DF080  ASCII "Rubble"
004DEEC4  00001000
004DEEC8  00001000
004DEECC  00001000
004DEED0  00001000
004DEED4  00001000
004DEED8  00000001
004DEEDC  00000020
004DEEE0  00004200
004DEEE4  004DF074  ASCII "Normal Wall"
004DEEE8  00000000
004DEEEC  00000000
004DEEF0  00000000
004DEEF4  00000000
004DEEF8  00000000
004DEEFC  00000001
004DEF00  00000020
004DEF04  00006000
004DEF08  004DF064  ASCII "Microbe Wall"
004DEF0C  00000000
004DEF10  00000000
004DEF14  00000000
004DEF18  00000000
004DEF1C  00000000
004DEF20  00000001
004DEF24  00000010
004DEF28  00006000
004DEF2C  004DF058  ASCII "Lava Wall"
004DEF30  00000000
004DEF34  00000000
004DEF38  00000000
004DEF3C  00000000
004DEF40  00000000
004DEF44  00000001
004DEF48  00000020
004DEF4C  00006000
004DEF50  004DF050  ASCII "Tube0"
004DEF54  00001000
004DEF58  00001000
004DEF5C  00001000
004DEF60  00001000
004DEF64  00001000
004DEF68  00000000
004DEF6C  00000020
004DEF70  00000210
004DEF74  004DF048  ASCII "Tube1"
004DEF78  00001000
004DEF7C  00001000
004DEF80  00001000
004DEF84  00001000
004DEF88  00001000
004DEF8C  00000000
004DEF90  00000020
004DEF94  00000210
004DEF98  004DF040  ASCII "Tube2"
004DEF9C  00001000
004DEFA0  00001000
004DEFA4  00001000
004DEFA8  00001000
004DEFAC  00001000
004DEFB0  00000000
004DEFB4  00000020
004DEFB8  00000210
004DEFBC  004DF038  ASCII "Tube3"
004DEFC0  00001000
004DEFC4  00001000
004DEFC8  00001000
004DEFCC  00001000
004DEFD0  00001000
004DEFD4  00000000
004DEFD8  00000020
004DEFDC  00000210
004DEFE0  004DF030  ASCII "Tube4"
004DEFE4  00001000
004DEFE8  00001000
004DEFEC  00001000
004DEFF0  00001000
004DEFF4  00001000
004DEFF8  00000000
004DEFFC  00000020
004DF000  00000210
004DF004  004DF028  ASCII "Tube5"
004DF008  00001000
004DF00C  00001000
004DF010  00001000
004DF014  00001000
004DF018  00001000
004DF01C  00000000
004DF020  00000020
004DF024  00000210

Disaster occurrence is independent of cell type. That is set separately from the level DLL using Triggers. Though the level designers do tend to associate certain disasters with certain areas of the maps / types of terrain.

I believe cliffs are supposed to have a noticeable effect on blight spread speed.

The bottom row of the map is always marked as impassible. I suspect that was to cover over potential bounds checking bugs with unit movement. Additionally, the map's clip Rect will also reflect the bottom row being impassible.

As for the tops of plateaus being marked as impassible, that may have been a custom modification to the levels done in one of the OPU releases. I suspect if you go back to a stock Sierra release, that won't be the case. I think it was modified to prevent units from spawning on top of plateaus by accident. That could happen if a vehicle factory is completely surrounded by units, and still pumping out units. The units spawn in a spiral pattern around the vehicle factory. Eventually they may spawn far enough away to appear on a plateau, where they would be stuck. If you drove the unit into the middle of a plateau, out of weapons range, it might deadlock a match, as there could be no way for an opponent to kill the unit.