Creating world maps is a tedious task. Often times large world maps have performance issues and are difficult to manage. Creating a very large map in one layout, and rendering it in one go consumes a lot of memory. Not to mention if you have collision checks thus adding additional processing cycles on the large tilemap. The solution for this is to create small sized tilemaps and generating them on demand, and destroying the tilemap objects when it is not visible in the screen.
Tilemaps is one of the key features of Construct 2, which helps designers build a resource efficient game world. Despite being handy, it still has some flaws and gaps if not properly used specially for large sized map. This is a template on how to manage tilemaps in local storage for Construct 2, Template: Load and Save Large Tilemaps in Localstorage.
Challenges and Solutions
Identifying the challenges in making games with large tilemaps are quite straight forward, and below are a few of those. The solutions to address these challenges are also presented, and the difficulties that comes in dealing with these solutions.
Challenges: Multiple tilemaps in a layout
People tends to create one big map in a single layout. This process is understandable since it is easier to visualize the entire map. The problem with this approach is the loading size, drawing time and the increased collision checks
Challenges: Rendering speed
Large maps are difficult to render, and if the maps are also defined in the json files, it also creates an additional overhead loading and reading the files.
Challenges: Auto-generated maps
Some games try to auto-generate maps, such as rouge games, simulation games and open worlds.
Solution: Storing tilemaps as json
Most people will consider storing their tilemas in json files and loading them when needed, but writing and managing tilemaps on a json is a pain and most of the time doing this approach reduces our productivity.
Solution: Loading tilemaps on demand
Identifying when and what tilemaps to load is also challenging.
Tips and Approach
In the tutorial Template: Load and Save Large Tilemaps in Localstorage, it allows the following to easily manage maps.
-
Perform layout redirection to load target tilemaps
The designer still edits the tilemaps on a single layout but instead of creating a large tilemaps, the tutorial advices to create smaller tilemaps that will be loaded on demand. The sample capx redirects the user the target world map on demand and redirects it back to the game screen, in doing this we maintain one clean game layout.
-
Use localstorage to hold the tilemaps
The sample capx dumps the tilemap definition inside the local storage. If the local storage already contains the map it will use the local copy instead of redirecting the user to the map layout.
-
Use dictionary to improve tilemap access
Upon identifying the selected world, the sample capx would then load the entire world map from the local storage to a dictionary. Placing the map configuration in the dictionary allows faster read access.
-
Render adjacent tilemaps
Tilemaps are generated relative to the player. The tilemaps adjecent to the player will be created, and tilemaps that are not visible to the player will be destroyed. Tilemaps are read from the dictionary thus access is relatively fast compared to local storage.