Creating Intermediate Levels - Questions?

Started by
4 comments, last by EDI 18 years, 8 months ago
I'm putting together an MMORPG that uses, so far, a simple 2D tileset. I want to do some slightly more interesting things than my previous tileset effort, so looking for feedback on some questions. I'd appreciate any help. :-) Firstly, I'm using Tile Studio as my editor, but I'm willing to switch if need be. Here we go: 1) I have some objects which aren't matching the 32x32 tile size. How do you usually handle this? Break it up into 32x32 chunks and add them individually, or somehow support dropping in a large item all at once? 2) The rooms have doors which lead to other rooms. I have 4 door graphics, one for each direction. The question is, how do I specify which room and starting location each door leads to? Right now, I'm using Tile Studio's data feature, but you can only specify a number from 0-255, so i've had to be restrictive in how i dole out the numbers. Also, I'd like to use the data number to specify that certain dynamic objects should be generated in their place. Is there a better way to handle the door issue?
Advertisement
Quote:Original post by ZaBlanc
I'm putting together an MMORPG that uses, so far, a simple 2D tileset. I want to do some slightly more interesting things than my previous tileset effort, so looking for feedback on some questions. I'd appreciate any help. :-)

Firstly, I'm using Tile Studio as my editor, but I'm willing to switch if need be. Here we go:

1) I have some objects which aren't matching the 32x32 tile size. How do you usually handle this? Break it up into 32x32 chunks and add them individually, or somehow support dropping in a large item all at once?

2) The rooms have doors which lead to other rooms. I have 4 door graphics, one for each direction. The question is, how do I specify which room and starting location each door leads to? Right now, I'm using Tile Studio's data feature, but you can only specify a number from 0-255, so i've had to be restrictive in how i dole out the numbers. Also, I'd like to use the data number to specify that certain dynamic objects should be generated in their place. Is there a better way to handle the door issue?


1) My personal recommendation is let map objects be as large or as small as they need to be. Don't make them tiled, because they really don't need to be. In my game sprites are typically 1x2 tiles and I don't break them up into two pieces; That just doesn't make sense. Instead what I do is specify the bottom left tile coordinates of the object in question and draw them from there. You also need to add some object collision detection, obviously :)


2) I think this really depends on your implementation. I don't know much about TileStudio so I can't help you there. I guess what you need to ask yourself is: are these rooms all on the same map, or do you want each room to be seen (to the code) as a seperate map? I do the former in my game, and the way we do something like that is to mark tiles as "event tiles". Whenever a player steps on an event tile, we look though our list of map events and find the one that corresponds to that tile. Then we call a function in the map's data file that serves as a script and changes the game state accordingly.

If you're thinking about doing the latter, well again I would flag those "connector" tiles in the map and do an event/script lookup that knows that we need to move to a new map.


I hope that answers your questions. If not feel free to ask for more clarrification. [smile]

Hero of Allacrost - A free, open-source 2D RPG in development.
Latest release June, 2015 - GameDev annoucement

we encountered these problems in the development of Morning's Wrath, and here are some solutions we used.

1. this is an issue of trade off.
Make Art easier: keep the images as larger than 32x32, but you need to code a system that can allow for images as large as you need. This can mean a pretty complex drawing system.

Make Programing easier: cut the image into properly sized tiles, the downside is it's a pain to do so unless you have a special tool; this is especially hard for isometric games.

2. we ran into this as well. if i tile needs to 'warp' somone somewhere, we specify an 'actionid' of 4 (which means change maps) and we have a 'data field' which is a string, wherein we can specify action specific data, such as: map2_tile1, this would mean you go to a map named 'map2' and are placed on a tile named 'tile1'.

For doors and other such objects, we tell a door what script it should use (this is assuming you have scripting facilities) and when the door is opened the script executes it's "OnOpened" function, you can then write code to switch maps and re-position the character.

Just some food for thought =D

Raymond Jacobs, Owner - Ethereal Darkness Interactive
www.EDIGames.com - EDIGamesCompany - @EDIGames


Quote:
2) I think this really depends on your implementation. I don't know much about TileStudio so I can't help you there. I guess what you need to ask yourself is: are these rooms all on the same map, or do you want each room to be seen (to the code) as a seperate map? I do the former in my game, and the way we do something like that is to mark tiles as "event tiles". Whenever a player steps on an event tile, we look though our list of map events and find the one that corresponds to that tile. Then we call a function in the map's data file that serves as a script and changes the game state accordingly.


Well, when you collide with a door, I determine what "room" they're moving to, I sent that new tile data down, and then the client screen starts showing the new room with the character repositioned.

So, you put the lookup tables in the code, or I guess, in a separate location than the tile map? That would be easier for me, but managing the tile map and then the room relocation table in two different places irked me. Is that how you're doing it?
Quote:Original post by EDI
2. we ran into this as well. if i tile needs to 'warp' somone somewhere, we specify an 'actionid' of 4 (which means change maps) and we have a 'data field' which is a string, wherein we can specify action specific data, such as: map2_tile1, this would mean you go to a map named 'map2' and are placed on a tile named 'tile1'.

For doors and other such objects, we tell a door what script it should use (this is assuming you have scripting facilities) and when the door is opened the script executes it's "OnOpened" function, you can then write code to switch maps and re-position the character.

Just some food for thought =D


I'll take that as "Tile Studio ain't gonna do it for ya!" If I had an extra data field, I'd be happy. :-) So i guess, this is a tool problem, not a know-how thing, cause your solution would be my solution. The non-scripting one anyway.

I am suprised they only give you a byte, that is really slim pickins =/

A robust system (like I plan on using for subsequent games)

would provide a 'property list', which would be attached to the tile/object/etc

they would be key/value pairs, such as


This could be an example of using a named tile for transport(the value 100 would signify that to the engine):

name="door1"
actionID=100
gotoMap="map2"
gotoTile="tile1"

If you would rather use coord you could also have:


name="door1"
actionID=101
gotoMap="map2"
gotoTileX=38
gotoTileY=10

Raymond Jacobs, Owner - Ethereal Darkness Interactive
www.EDIGames.com - EDIGamesCompany - @EDIGames

This topic is closed to new replies.

Advertisement