✅ Tycoon Tile: The terrain solution for your Tycoon game!✅

Are you an aspiring game developer creating their own tycoon game?
Then look no further!
Tycoon Tile is the terrain solution for all your tycoon needs!
Create a classic tycoon game instantly with Tycoon Tile.
Suitable for city builders, theme park tycoon games, transport games etc.
Can be used with a 3D perspective camera or use an orthographic view for your isometric games.

Get Tycoon Tile on the Asset Store now!

What is Tycoon Tile?
Tycoon Tile is a tile based terrain asset that allows you to create tycoon and city builder games quickly. It can be used in perspective or isometric camera view. Supports intuitive terraforming tools that recreate the classic tycoon game terrain mechanics. Adjust tile height per corner, create rolling hills or steep cliffs. Paint terrain with up to 65536 unique materials. Create water bodies with the click of a button.


Features:

  • High performance jobified code, compatible with the unity job system
  • Low memory footprint
  • Easily extendible with custom operations
  • Ready to use out of the box
  • Water support included
  • Tested for terrain up to 2048x2048
  • Supports up to 65536 unique materials
  • Includes example runtime terrain generator
  • Includes example user interface & terraforming tools
  • Create custom terrain operations to adapt to your game’s needs.

Get Tycoon Tile on the Asset Store now!

or try the

Web Demo

4 Likes

Hey everyone!

I updated the store page with new screenshot and images.

I would also like to point out that with the version that is on the asset store right now, the focus of this release was on the terrain itself: easy terraforming and painting terrain textures while also adding support for water bodies. This will provide a solid foundation for the further expansion of Tycoon Tile.

I am planning on adding more features and improvements. While I cannot guarantee or promise anything in the near- or long-term (and thus any purchases should not rely on these plans), I would still like to share a roadmap with some of the features I want to add to later versions of Tycoon Tile:

  • Callbacks for terrain attached GameObjects. A perfect example for this would be trees, rocks and bushes that can update their vertical position when tiles are modified, or objects that get destroyed on terrain modification.
  • Locking and unlocking tile heights in position. This will be useful for the next feature in the list.
  • Support for terrain-attached structures and buildings. Included operations for checking terrain clearance such that multi-tile structures can be placed as well as restricting terrain modification around buildings.
  • Cost calculations and preview of terrain modifcations (when terraforming should cost $ in your game).
  • Advanced object placements. Think tile edge snapping, corner snapping, offsetting etc.
  • Road integration. Think paths and roads similar to Rollercoaster Tycoon or Transport Tycoon.
  • Support for custom cliff edge decorations. These can include grass blades at the bottom of cliffs or surface overhangs at the top.
  • Collider-less raytracing. Remove the need for mesh colliders to raytrace the terrain, which is required for terrain tools etc.
  • Custom water shader with water depth and foam rendering.
  • More optimizations and improvements.

In short, the goal of Tycoon Tile is to provide an out-of-the-box tycoon game experience to headstart your game development workflow.

Please let me know what you think and what features you deem important to you! If you have any other feature suggestions or ideas, feel free to discuss them in this thread!

1 Like

I just released version 1.0.1 which should fix some issues regarding the Unity job system in newer ECS package versions. If you are still experiencing any problems after this patch, please let me know!

1 Like

Yo super nice package! nice that it uses the job system to :slight_smile:
I have some questions before I buy:
Can one supply it’s own tiles? Is the system built out of tiles or is it generating the geometry?
I’m intending to build my own tiles,
perhaps even quite detailed ones, do you think that it’s possible with this system?

1 Like

Thank you!

Can you elaborate on what you mean by ‘supply my own tiles’? Do you mean inserting your own mesh geometry?

Tycoon Tile generates the mesh geometry based on the height data of each tile corner. You can adjust the step height of these corners (eg. How many real world units each step differs) and specify your own textures.

I suppose I could add a feature to ‘skip’ geometry generation for specific tiles if that is what you’re asking. I’m interested to hear what your usecase is!

I’m making an RTS (really just started on a server) to make things easy I want to have a tile base for the world so that I can say that on tile x22 and y55 there is grassland. I browsed around and found this system and it looks like a real gem!

One way to make it easy for an artist to define what grassland means is to make a 3D tile(mesh geometry) for grassland, I think cliffs would especially benefit from this.
Grass, cliffs etc could also be done with a shader that has surface displacement and scattering of objects on top, maybe this would be easier.

what would you recommend if one wanted to make a Age of Empires style tile based game?

@StrogaBeef I see.

So custom tile types are supported in Tycoon Tile, you can use a custom material for each tile type surface and tile type cliff.

For other decorations such as grass blades, scattered rocks and the like, you can implement an IChunkListener interface and register it to Tycoon Tile. That will allow you to receive a callback whenever a part of the terrain geometry updates, so you can instantiate objects or kick off your own geometry generation logic/jobs.

Combining these two techniques allows you to do a lot of interesting visuals. I think that should suffice for your use case?

Sounds like an interesting project btw!

Hello again, so now I have experimented some and read the documentation, There are two things that I feel is missing:

Some kind of save functionality like save terrain to json or xml
Shadows on the terrain

Another thing that would be useful would be if this whole thing ran in the editor as well, so one could edit the
“start terrain” in edit mode before runtime. I understand if this would be a tall order though, if there was a save function one could edit in runtime and save it down as well.

I will definitely use the IChunkListener that’s neat man.

@StrogaBeef

Shadows can be enabled with the ReceiveShadows boolean and ShadowCastingMode dropdown on the TycoonTileRenderer component.

Saving and editor functionality are indeed valid points, which is why they dominate the top of my todo list. I know that these features are important for many usecases, so this is definitely something I want to implement in the future.

For now, you could serialize the data yourself if you want, all data is neatly packaged into a few arrays. Namely the TerrainGrid and TerrainTypeTable classes. Together with the terrain size, reconstructing the terrain from these arrays should be relatively straightforward.

1 Like

Nice with the shadows, it was just me that was blind, sorry.
I’m writing save load functionality and when I wrote the save I saved dwon all tiles with the respective slopes and water height just like I saw them in the TerrainGrid and LandTile NativeArray.
But when I came to implement loading the map I notice that you have a job called CopyHeightMapOperation to feed the terrain its heights. Before I write a new job that feeds it with slope data/gets hight instead, I would like to check if I have understood the system correct. Is there already is a job for getting the terrain data in single heights? or a way to feed it corner\slope data?
I feel like translating the slopes back into heights would be the best approach right?

No problem, glad it works for you :slight_smile:

I’m not sure whether I understand your question exactly, but there is a CopyHeightMapOperation that copies a nativeArray of bytes to the terrain grid. Note that this will not preserve any cliffs. I would therefore suggest to simply initialize the internal arrays yourself in an overloaded constructor during the initialization instead of doing it with terrain operations. That way you extract the terraingrid corner heights on terrain save, and load the corner height back into the arrays on terrain load.

Got save load working. I made jobs for it in the end, so one can sit and edit the map and save\load the result.
Now I have another probably disturbing question hehe
How can I change the size of the tiles?

Looking good! I like your water shader! :slight_smile:

Here is me hoping that changing the scale of the TycoonTileMap’s gameobject will work fine. If you encounter any issues with this (tools not taking scaling into account etc.), then please let me know and I will fix such problems. It should basically just workTM.

Just wanting to see how the progress on the updates are going? Read that you were working on some really cool features for this and would like to see if you have progressed at all, which is the reason I bought this to support you?

Hi RaptorRaptures!

First of all, thank you for your purchase! I am currently in the process of fixing a few odd behaviours in the example water tool that is included in the package. After that I will submit a new version to the asset store that will have builtin support for serialization and deserialization of all the terrain data based on the .net BinaryReader/BinaryWriter API. This was the feature that got most requested through my support email or other channels, so that is what got the highest priority now.

I will post here when the package is approved by the asset store team.

EDIT:
I would like to add: Although I greatly appreciate people buying the asset for the future potential and to support the development of the asset (I really do), please consider the product as-is at the moment of purchase and whether that is worth it for you (I think it is, if you are looking for this type of product). The reason I say this is that, quite frankly, further development of the asset is totally dependent on the feasibility of development time with respect to the sales volume. That is not something that is completely within my control. I want to prevent anyone being unsatisfied with their purchase because of their expectation that the product will develop over time. I would love to develop it further, but I cant make any promises on it. I just want that to be clear and transparent with that :). So please purchase solely for the state of the product at the moment of purchase. Of course, I will always provide support for questions and the like while the product is sold on the store.

1 Like

Thank you very much. That is the part I am wanting the most so cant wait :smile:.

Thank you for this asset though, its really great and is meeting every expectation that I had when buying it.

That is great to hear, thank you! :slight_smile:

I just submitted a new version for review to the asset store. I will post here when it has been approved.

Hello, I am interested in the asset, but I have some questions,
This generation of the terrain, is based on a mesh, or based on a terrain component, it is possible to create my own tile rules to paint each quadrant.
Thank you

Hello again, I have been testing a bit with the documentation and the code, but I see that I cannot rotate a tile by surface, would this be possible, is there any method? Another question, is there the possibility of obtaining the type of Terrain type that it is used by tile. I want to make rules based tiles. to generate paths on the terrain surface and further stylize the terrain.

The generation is based on a standard unity Mesh, not the unity terrain. This gives full control over the output and visual look of the mesh.

I am not entirely sure what you mean. Do you want to ‘rotate a tile’ in the following way:
Say you have a tile that is slanted upwards towards the north and you ‘rotate it to the right’, the slant now faces eastwards? You can create a terrain operation that operates on a single tile position and swaps the corner heights. You can do this fairly easily with the builtin corner and cardinal direction helper classes/methods.

Yes this is supported. If you create a terrain operation you can read from the terrain type table.