Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs

GMRoomPack

Package GameMaker rooms and load them as you please · By YellowAfterlife

Need help with tilemaps and layers

A topic by Zuurix created Jun 10, 2019 Views: 94 Replies: 4
Viewing posts 1 to 5

Hello, I have just bought your product, and I'm trying to implement it.

I've run  into problems with layers and tilemaps.

Problem 1:

How do I get correct tilemap ID's for tile collision checking?

For example, this code:

I created a tilemap list - global.tilemap_list - using room_pack_store_tilemaps() , and m_pos_collisions is equal to 2. This works until I try to load another room because I assume tilemap_list changes.

How do I always get correct tilemap for my collision checking and other purposes?

Problem 2:

I need layers for depth sorting and loading rooms seem to mess this up - it doesn't work anymore.



So the main problem is that I don't know what room loading does to layers.

Developer(+1)

GMRoomPack tries to find room's each layer by name (via layer_get_id), and, if there isn't one, creates it at the original depth.

Needless to say, this makes issue #2 a bit mysterious - perhaps you are loading a room with another controller object and GM declines to create duplicate layers? I'd suggest to try logging IDs of your grid layers.

As of issue #1, are you loading multiple tilesets into the same room? You might need to store the actual tilesets into a separate list (and loop over them) but it's hard to tell with this little context.

"GMRoomPack tries to find room's each layer by name (via layer_get_id), and, if there isn't one, creates it at the original depth."

So if I made sure that packed room and room in which packed room is loaded to have layers with same names, the "layer_get_id" would work properly?

Currently instance layers have different names - "Instances" and "sort_begin".

"As of issue #1, are you loading multiple tilesets into the same room? You might need to store the actual tilesets into a separate list (and loop over them) but it's hard to tell with this little context."

Yes, I'm loading 2 tilesets. What else do you need to know?

"Needless to say, this makes issue #2 a bit mysterious - perhaps you are loading a room with another controller object and GM declines to create duplicate layers? I'd suggest to try logging IDs of your grid layers."

Okay, I'll do that the next day.

Developer(+1)

Of #1, I feel like the issue could be either that or that GM declines to make several layers at the same depth - so you'd want to either match the layer names, or adjust their depths to not clash. However, adding multiple tilemaps to the same layer is still OK

(1 edit)

EDIT:

It works!

Problem 1:

I finally got to logging layers (+DS list with tilemaps stored with room_pack_store_tilemaps) -



This cleared up some confusion: Tilemaps don't have to be assigned to layers.
So I figured out how to get tilemap names and came up with this code:



It runs whenever room is loaded and stores correct tilemap positions in tilemap_list.

Now I need to create two tilemap lists, because I need two rooms loaded, and whenever room is loaded, it creates new tilemaps - currently I store just the last loaded room's tilemaps - the other room's collisions stop working.

If two tilemap lists will work, it'll be done. I hope I'm not doing something horribly wrong.

This is the code I use to log layers, just in case:



Problem 2:

I managed to fix it - the problem was that loaded room object create events fails to set layers, probably because of how room loading works.