Creating full isometric environments (eg: Simcity)

Time for a tricky but intriguing question. I recently checked the basic isometric game example, and was happy to hear the basics of isometry are supported and appear to work well.

However this example doesn’t offer any of the features we’re used to having in practical isometric games. Particularly ones like Tycoon, Simcity, or for an open-source example Simutrans. Out of curiosity I wanted to ask whether there are tutorials or even finished examples on how to do a feature complete isometric world with at least the following base capabilities:

  • 4 camera angles: The basis of most 2.5D games is the an ability to rotate the camera in any of four directions. Every item in the world has sprites for 4 or 8 angles so each structure can be seen from all of the four sides. Depth sorting must also be handled accordingly so objects and buildings (often made of multiple tiles stretching upward) always render in the right order from any direction. How would functional perspective shift be implemented in GDevelop?
  • Terrain: Most isometric games have a height system which understands and manages the representation of vertical depth. Terrains for instance have tiles for slopes and corners, the proper “lego pieces” are then used to simulate every hill or valley and hole or a bump. I believe some games even had multiple slope angles, terraforming and / or roads on terrain aside… we can leave those out as to not overly complicate the question though I’m interesting how far it can go.
  • Procedural generation: This goes back to a question I asked separately, though my previous thread was for top-down RPG worlds (no isometry): For isometric environments it would be an entirely different process past interpreting noise to know the height of a terrain tile or where to place stuff. Such games generate their own terrains at start, and for the genre I’m basing my question off cities are also created. What can be said in regards to procedural isometric terrains, and if we can even go that far, drawing random cities with roads on top of them?

There would be more questions to list here, like object physics or character path finding with understanding of slopes and slowing down / speeding up based on the effort to walk up or down an angled surface, but for now the basics above are the essential requirements. What has been done in this regard and is available in terms of examples? How much is at least in theory possible? Are easier builtin support or default behaviors planned for future GDevelop versions to achieve those functions?

I can only provide a potential answer for the camera angles one:
You would need to implement it the same way they did in SimCity 2000. I can’t find the talk from Wil Wright anymore, but if I remember correctly in SC2000 each tile had an ID, a “Type of terrain” (dirt/water/building) variable, a “tile of terrain” (so if it was water but had pattern X on it instead of pattern Z) variable, and a “cardinal direction facing” variable.

They tracked what “North” was in the main view, and then if the view was rotated, the cardinal direction of each tile was used to change it to the appropriate sprite for that rotated view. As far as I remember, the actual sprite itself wasn’t rotated, a different sprite was just displayed. In GDevelop this would probably be easiest done by having a sprite object with animations for each type of tile, and each type of rotation of that type of tile.

1 Like