----- Original Message -----
From: Peter Donald <***@mad.scientist.com>
To: <crystal-***@sourceforge.net>
Sent: Sunday, December 19, 1999 12:16 PM
Subject: Re: [CsMain] Using really, really, really big maps
Post by Peter DonaldHiya,
Post by Jim TorelliHey guys...
We are currently considering using CrystalSpace to implement a
Cyberpunk style RPG we are developing (http://www.evestale.com). The
What would be the best way to implement a super-large area, such as a
city, in CrystalSpace?
My first thought was to segment the city into separate "world"
files. That way, say each skyscraper could be it's own world. This is
why I originally brought up the question about cut scenes. As the player
moves from say the city street into a building, a cut scene could role as
the building's world file is rendered.
Has anyone given this subject any thought? How big is too big
for a world? What's the best way to handle this?
I don't believe a world can ever be "too big" In fact I believe that's what
people are demanding in modern games, large worlds with great scope then
before for interaction. The key to working this is chopping it up into
digestible chunks...
Post by Peter DonaldThe main problem I encountered when doing this was the amount of memory
used and the cost of moving between worlds.
Memory requirements can be lowered by using poor-quality versions of scenery
for areas the player isn't directly in - for a city scape loading up only
the outside of the buildings for all buildings not in the current zone would
be the key.... you could even seperate the buildings out into "height"
zones, only loading the bottom few floors of the building untill the player
goes up a few floors... as far as developing this goes, building the world
as a single huge map to start with and then building a utility to chop the
map up into a number of cubes with pointers to surrounding cubes etc. (This
is how my game is currently being built). The utility for chopping the
large world into blocks however can be extremely memory intensive (I've
written one that can end up using over a gigabyte of swap-space ... ) but it
works well...
Post by Peter DonaldThe way I had planned to handle
it was create a whole group of mini-world files. Each of these mini-world
files were loaded on demand and then unloaded again when the user was far
enough away from them. SO basically you end up with a completely continuous
world.
That's the way Asheron's Call works - I've done a few tests (I'm working on
an open-source RPG game using a similar concept) the key is to make sure
each "chunk" of the world your loading in is around 128K in size or less.
For a game based on the cyberpunk world using extremely tall/large buildings
you could use the method I outlined above... but it's a lot of work..
Post by Peter DonaldThe 3 problems I encountered involved
1> the texture manager. (Currently all textures have to be loaded up at
start time).
The texture manager's pretty simple - just have a list of textures required
per zone calculated - load the textures that aren't already loaded, unload
any that aren't needed any more (using a reference count system not unlike
the SCF interface setup)
Post by Peter Donald2> It only works on fairly powerful computers (it was running okay on a
400) but anything less and you had freezes when moving between the mini-maps.
You just have to make sure your not loading too much from disk, and
precalcing anything that needs it - I'm not sure how well Crystal Space
would handle geometry being pulled in/out of the display tree as well...
working the portal system into the buildings outside/interriors could also
be an interesting idea...
Post by Peter Donald3> There was a crash-bug somewhere in code that happened when unloading
sectors. Not sure where exactly.
Hmm.. was your code written in CS, it could be interesting to write an
example "Large/dynamic level" demo using CS to give people a feel for a
possible way of doing this...
- Alex. H