gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

Game Design > Need opinions on playfield boundaries

#11490 - poslundc - Wed Oct 08, 2003 3:19 pm

As several of you know, I'm currently designing a Mode7 action-RPG.

The action takes place on a map that's, well, as large as I want it to be, but I'm having trouble deciding what action to take when the user gets to the edge of the battle field.

You see, I'm rendering the screen as a terrain, with a horizon, so if the player gets far enough away from the middle so that the edge of the map becomes visible, then the player can see the background colour beneath the horizon, which is not cool.

I've been experimenting with how I want to deal with this problem, and have come up with the following options:

1. Wrap the image around to the opposite end of the map, and design my maps so that this does not look too conspicuous.

2. Don't let the player get close enough to the edge for it to become a problem.

3. When the player gets near the edge, adjust the camera angles, rotation, zoom, etc. so that it no longer is a problem.

Here is where I am so far with each of these options:

1. This is currently looking like my most viable option. Its main disadvantage is that players are very likely to realize what is happening at some point or another, which hurts their suspension of disbelief.

2. My main problem with this one is that the horizon always appears at 320 pixels distance. At that range, the zoom factor is 2.5, which means I would have to keep the player at least 300 pixels (120 * 2.5) from the edge of the map at all times (more if I want to take rotation into account). That's a lot of wasted map space... if my map is 2048x2048 then I've basically lost 50% of my map area. If not for the incredible losses there, this would be my first choice as it is relatively unobtrusive.

3. I've fiddled a lot with this and can't really get a sequence of movements that isn't distracting to the player. So far I've tried changing the pitch so that it becomes overhead, zooming in, and rotating the camera. All three seem very intrusive. I'm open to suggestions if anyone has them. Keep in mind that any of these adjustments have to start happening 300 pixels from the edge of the map, so there is a pretty big "huh?" factor for players.

So if you were playing this game, which do you think you would prefer? Or is there another option entirely that I am overlooking?

Thanks,

Dan.

#11494 - tepples - Wed Oct 08, 2003 4:35 pm

poslundc wrote:
You see, I'm rendering the screen as a terrain, with a horizon, so if the player gets far enough away from the middle so that the edge of the map becomes visible, then the player can see the background colour beneath the horizon, which is not cool.

I've been experimenting with how I want to deal with this problem, and have come up with the following options:

1. Wrap the image around to the opposite end of the map, and design my maps so that this does not look too conspicuous.

2. Don't let the player get close enough to the edge for it to become a problem.

3. When the player gets near the edge, adjust the camera angles, rotation, zoom, etc. so that it no longer is a problem.

The Mario Kart games that use rot/scale backgrounds fix this in other ways:

4. Super Mario Kart for Super NES uses a feature of the Super NES Mode 7 hardware such that instead of color 0 being repeated, tile 0 is repeated. The GBA doesn't have exactly the same feature, but one of the demos on gbadev.org fakes it: At your horizon scanline, switch to mode 2 and display your playfield (BG2, prio 0) on top of a repeating 16x16-tile map (BG3, prio 1).

5. Mario Kart Super Circuit for GBA uses the same technique as F-Zero for Super NES: update the edge of the visible map as if it were a 2D scrolling map.

Quote:
2. My main problem with this one is that the horizon always appears at 320 pixels distance.

You could fudge it a bit by playing with the horizon.

Quote:
3. I've fiddled a lot with this and can't really get a sequence of movements that isn't distracting to the player. So far I've tried changing the pitch so that it becomes overhead, zooming in, and rotating the camera. All three seem very intrusive. I'm open to suggestions if anyone has them. Keep in mind that any of these adjustments have to start happening 300 pixels from the edge of the map, so there is a pretty big "huh?" factor for players.

You could minimize the "huh?" factor by using some shaping function with soft edges, so that the change begins after 500 pixels and gradually has more effect until 300 pixels.
_________________
-- Where is he?
-- Who?
-- You know, the human.
-- I think he moved to Tilwick.

#11495 - DekuTree64 - Wed Oct 08, 2003 4:37 pm

Well, logically if you keep running out into nowhere, you'll eventually be too far away for those baddies to matter anymore, so you could just make that how you run away from a fight. Have it pop up a message to ask if you want to run, so you don't accidentally hit the edge when you don't mean to, but I think that would make it the least noticable.
_________________
___________
The best optimization is to do nothing at all.
Therefore a fully optimized program doesn't exist.
-Deku

#11496 - poslundc - Wed Oct 08, 2003 4:53 pm

tepples wrote:
4. Super Mario Kart for Super NES uses a feature of the Super NES Mode 7 hardware such that instead of color 0 being repeated, tile 0 is repeated. The GBA doesn't have exactly the same feature, but one of the demos on gbadev.org fakes it: At your horizon scanline, switch to mode 2 and display your playfield (BG2, prio 0) on top of a repeating 16x16-tile map (BG3, prio 1).


This is a pretty good idea, although I would have to adapt it since I actually have wraparound turned on for the Mode7 background (so that I can update the visible portions of the background when using maps larger than 1024x1024, same as the technique you mention below). I could just make it so that my updating function instead of wrapping around the larger map just substitutes a single tile beyond the larger map's boundaries, though. I like it.

tepples wrote:
5. Mario Kart Super Circuit for GBA uses the same technique as F-Zero for Super NES: update the edge of the visible map as if it were a 2D scrolling map.


I think this is what I was talking about in #1: wrapping around to the opposite end of the map and trying to design the maps inconspicuously. Please correct me if you are suggesting something else.

Quote:
You could fudge it a bit by playing with the horizon.


If there's one thing my experiments have shown me, it's that making the horizon appear significantly closer than it should looks very strange. :P

Quote:
You could minimize the "huh?" factor by using some shaping function with soft edges, so that the change begins after 500 pixels and gradually has more effect until 300 pixels.


This could work, but I like the idea of keeping the majority of the gameplay locked in a single perspective/distance/rotation. If I decided to adjust camera settings for regular gameplay, it would only be at the extremes and not in the general case.

Dan.

#11497 - poslundc - Wed Oct 08, 2003 4:58 pm

DekuTree64 wrote:
Well, logically if you keep running out into nowhere, you'll eventually be too far away for those baddies to matter anymore, so you could just make that how you run away from a fight. Have it pop up a message to ask if you want to run, so you don't accidentally hit the edge when you don't mean to, but I think that would make it the least noticable.


We're on the same wavelength, it would seem, except I was planning on making that a more intrinsic aspect of the gameplay... when you choose to "run" all your characters will beeline for the nearest boundary, and need to reach it in order to escape. If someone can't make it (ie. enemies are blocking them) then you need to either evade the enemies, stand and fight with whomever hasn't already escaped, or just let that character get beaten up.

Dan.