MMORPG World Loading

Hello,

Up to this point I have seen examples of loading a full environment.
A friend and I want to make a free mmorpg and make it as realistic as possible. The world is going to be vast and we would like to obvious loading. In wow, the someone load the world without showing you they do this?

Does anyone have any suggestions on world creation and loading?
I’ve wanted to try the Pirates game (honestly ever since i saw it on tv before I knew about panda) however it doesn’t run on linux… :’(

thanks,
nomb

REALLY bad idea if you want to start game-development.

even worse if you are new to game develpment.

not to discourage you. but creating a MMORPG takes a LOT, including, LOTS of time, LOTS of knowledge, LOTS of experience, LOTS of people working on it and most of all… quite some money.

back to your questions. since they are quite easy to answer.
in an mmorpg you wont load the netire environment as you already guessed right.
this concludes that only the parts around the player gets loaded. usualy you would divide your world into smaller-sized pieces, areas,chunks,tiles… whatever you like to call it. only those aorund the player get loaded, if the player moves away far enough, the already loaded pieces will get unloaded again.

implementation can differ. usualy this is refered as “pageing” depending on your “chunk”-size and how you actually code it it’s possible to create near-infinite world without any noticeable load-times for the user.
this is comparebly easy to do with panda. panda’s native binary file format BAM loads insanely fast anything more decent than a cellphone. so loading objects while the game runs is no big deal. if i remember correctly there even is an asyncronous loader for stuff like this,

oh… and just to let you know. panda3d is powerfull. 2 mmorpg’s has been build with it. but it doesnt mean it’s easy to build mmorpg’s with panda. the most difficult part, the server, is not available to public. so i highly recommend you start with something smaller. like a “normal” RPG , or an online RPG. you can easily have a few dozen of players on a server. even a common RPG will be enough work to keep you and your friend busy for many month. once you actually “know” you can do an MMO-version of your game feel free to do it. after you got in touch with general game-design and basic networking, security and such things.

sry about the “mmorpg are not for starters” but its simply the truth.
have a nice day. there are lots more things than MMORPG which dont get RolePlayed by people. hope i could be of help

greetings
thomas e

No problem. I already knew mmorpgs aren’t for starters and that was more like the final goal. I’m actually doing exactly what ur saying and trying to learn all the fundamentals first. Working with a friend can definitely be a bad idea. He is more of a modeler and I’m more of a programmer. Both rather new lol. Right now I’m just trying to get and tutorials I can find finished and as much knowledge in my head as possible.

:smiley:

I was going to try and use twisted for networking because I’ve used that a bunch of times before. But I really want to learn how to load parts of the world at a time like you said and how you would model that.

Thanks,
nomb

in simplest imaginable case. you pre-model your entire world in blender/maya/max or whatever. and save it into many small files, and name the files so you know which model goes where (for example “_x13_y54.egg”)
when in panda, just take the players position, a getPos is totaly fine. then divide the position by your “chunk”-size. and you’ll get the “chunk”-number your player is standing on. for example x=5 and y=42. then load the file named _x5_y42.egg, and the 9 files which surround this one. then you try to unload the 16 chunks surrounding the 9 chunks you just loaded,
if you keep your viewing distance smaller than the “chunk”-size the wont notice the loading and unloading process.

of course one would want to improve this basic system. but it works quite well as it is. there are many many ways to improve it, especially when using outdoor-scenes. adding LOD systems and all, using advanced terrain algorithms.
but if you are fine with lots of “in-editor-work” and small viewing distances it’s the easiest thing you can do :slight_smile:

of course… you can also create your entire world the way you want, and write a small programm which ripps the world into small chunks and automatically saves it to disk as egg or bam files. just wanted to cover the most basics.
btw. dungeon siege is using such a system. i also experimented with it in combination with panda, works great :slight_smile:

really awsome tips, as soon as i get good enought I’ll give it a shot :smiley:

nomb

sorry to reopen your post but IF your looking into an mmorpg i would suggest, and only if you have money, to look into big world mmorpg technologies here is the link http://www.corp.bigworldtech.com/index/index.php

I was actually just recently trying to decide how to best accomplish this asyncronous loading… I suppose you could spawn a new thread with python and tell it to do things, but do i understand from your post that there’s a method built into panda for this kind of task?

Yes. loader.loadModel(‘model.egg’, callback = func) will return immediately, and then sometime later when the model is available, it will call func(model).

Note that in order for this to work as advertised, Panda has to be compiled with thread support. The default Panda distribution isn’t compiled with thread support, so you’ll have to get Panda and compile it yourself to use this. (Turning on thread support will slow down everything a bit.)

You have to turn on thread support in order to do things in multiple threads at once with Panda, even if you were to spawn your own Python threads and do it yourself. Otherwise, reference counts are going to get all screwed up, and memory will become corrupted.

David

ooo… alrighty, then.

Thank you muchly for that reply. I suppose I’ll be trying to compile panda myself then…

While I figure that out, does anybody know (by experience or by word of mouth) how much this multi-threaded way slows things down?