Panmmo


Eniko

Raving Python fangirl
Joined
Sep 29, 2008
Messages
641
Age
40
Location
Netherlands
Website
purplepirates.darksiren.net
So! Apparently you guys have a long memory since people remember me and the MMO I was working on. I figured since there's still an interest in this, I'd make a thread both to update you guys on what's what and also to ask for advice on a few things in preparation of my Pandora arriving (I should be in the first 170 according to a post I found).

First off, I'm giving serious thought to nuking the client and redoing it. It's a kludge which - unlike the server - doesn't follow proper coding conventions aside from the GUI library I made. It has residual stuff left over from when I was still using SDL and Pyglet which makes me wince, and really it's just a thin map displaying layer for interacting with the server. Again, the only really important thing here is the GUI library, which I can keep anyway in a recode.

Benefits of nuking the client are various. First off, to get around the security issues, I'd probably start off doing Python code that can be compiled using Cython. I'm sure it could be decompiled, but this is a layer of security I'm comfortable with; pure Python or even obfuscated Python code is not. It'd also make the client much faster and more lightweight, which is probably a good thing for the actual Pandora.

Second it allows me to revise my plans for a 2D game and make it 3D with retro styling. Viability is up in the air but I'll come back to that later. Plans are to create a top-down view 3D world along the lines of Ragnarok Online, except with cell shaded and outlined, normal mapped 3D characters and enemies. I'd do my best to add some pixel shadery goodness to get that delicious retro styling we all love, so that shouldn't necessarily be a concern.

One practical reason for a switch to 3D is simple workload. It takes a lot of time to animate pixel art. More time than it does to rig and weight a 3D model. And once you have say, the human characters bones animated, you can rig them to anything and hey presto, your work's done. With 2D you have to reanimate every item in the game by hand, which stays a lot of work and the thought of adding in extra animations later in development quite frankly horrifies me in terms of workload. It's just no good.

Another is that I've been programming 2D graphics for a long long time and I'm pretty bored of them. Back when I started PanMMO I didn't really know anything about 3D graphics, but I've since brushed up on it using XNA. I know enough to write my own shaders now and get a game off the ground. It also keeps working on the client's graphics fresh for me since I've been coding 2D graphics forever and I can pretty much do it in my sleep now, but 3D graphics is new, challenging, and interesting.

It also gives me a chance to work on my sorely neglected 3D modelling skills.

Stuff I don't know about; what the Pandora/OpenGL ES can do 3D wise. Can it basically do anything a desktop can do, just...a bit more slowly? Should I hold my breath for normal mapping which would be a great improvement to cell shading quality, or should I be complacent with per-pixel-lighting? How does texture memory work, is it just the device's general RAM? Will I need vertex buffer objects? Where are those kept if I do? If it's all in shared memory space, is there any improvement using VBOs over simply "uploading" everything to "the graphics card" every frame? Can the Pandora render-to-surface? Are pixel/fragment shaders going to be blazing fast like they are on desktops, or am I going to have to spend tons of time optimizing those to make everything run at proper speeds?

I'm also unsure of what 3D library I want to use, having no experience with any of them, just XNA. Ogre has Python bindings, but I have no idea if PyOgre is going to be workable on the Pandora. Working with Ogre or Irrlicht is possible, what with using Cython, but I have no idea how user friendly that'd be. Then again, working with OpenGL from Python wasn't that user friendly to begin with, really. And beyond a cursory knowledge of those two I have no idea about any other engines. Suggestions in this area are very welcome.

Furthermore the server is a problem. I'm not a security programmer and when I left off I had a background saving system set up on the server but I couldn't actually move into persistence because I needed a login server. The problem is that I have no idea how to securely let someone log into one server and password authenticate, then move on to a different - completely unrelated - server that doesn't share memory space with the first. Some help in that area might be nice too.

Mind you that I may start working on Onee-sama Tasukete before PanMMO when I get my Pandora, to get a simpler game finished and become familiar with the Pandora. And after that wall of text I'll leave you all with a random snapshot of the head of the player model I'm (ever so slowly) working on:
3dhead.jpg
 
Last edited by a moderator:
Glad to see one of the most ambitious people is still here.
 
Hi, nice to see more work being done on this quite ambitious looking project.

Eniko said:
Stuff I don't know about; what the Pandora/OpenGL ES can do 3D wise. Can it basically do anything a desktop can do, just...a bit more slowly? Should I hold my breath for normal mapping which would be a great improvement to cell shading quality, or should I be complacent with per-pixel-lighting? How does texture memory work, is it just the device's general RAM? Will I need vertex buffer objects? Where are those kept if I do? If it's all in shared memory space, is there any improvement using VBOs over simply "uploading" everything to "the graphics card" every frame? Can the Pandora render-to-surface? Are pixel/fragment shaders going to be blazing fast like they are on desktops, or am I going to have to spend tons of time optimizing those to make everything run at proper speeds?
In pure functionality the basic capabilities should be the same - but when you start doing things with shaders you'll be running on a cycle budget. Desktop graphic cards are in a whole different league. If you want to do serious 3D you'll probably spend some time hunting down bottlenecks that hurt performance. I'm not sure about normal maps - a random search yields http://www.pocketgamer.biz/r/PG.Biz/Warpgate/news.asp?c=16724 for a game which uses normal maps on the iPhone 3GS, so I think it might be possible, especially if you limit it to e.g. only characters.

Texture memory AFAIK uses a small on-chip texture cache, with the rest stored in RAM in a preprocessed format for effective lookup. Keeping textures small helps make good use of the cache, and saves texture bandwidth.

Render-to-surface using framebuffers is part of the OpenGL ES 2.0 specs, and should work.

VBOs lets the driver store data somewhere it knows won't be edited without its consent, which can save it a fair bit of unnecessary copying even when most of it is kept in RAM. I've been advised to use them whenever possible, as "they never make things worse".
 
Last edited by a moderator:
Gruso said:
Eniko! Glad to see you back.
Wow, same here! :D
This MMO sounds awesome, I'm sorry, I haven't been here this long, care to fill me in on a couple things, like, what sort of MMO, gameplay, etc.? That head is very impressive, nice work!
 
Last edited by a moderator:
Jourdy288 said:
Gruso said:
Eniko! Glad to see you back.
Wow, same here! :D
This MMO sounds awesome, I'm sorry, I haven't been here this long, care to fill me in on a couple things, like, what sort of MMO, gameplay, etc.? That head is very impressive, nice work!

Original Topic: http://www.gp32x.de/board/index.php?/topic/44997-makin-mah-mmo/page__hl__MMORPG

That should answer a lot of your questions.

-God Ginrai
 
Last edited by a moderator:
Gruso said:
Eniko! Glad to see you back.

Yeah, I'm going to repeat this!

Also, just a bit of advice regarding 3D: everything takes 4 times longer and is 4 times harder than 2D. Especially for an MMO. I just don't want to see you burn out when you suddenly realize UV'ing is the worst task in the world - and takes forever.
 
Last edited by a moderator:
Hey Eniko! Welcome back.

I was afraid you had disappeared. Still looking forward to your games. I remember the work on Onee-sama Tasukete, looked great. I think it's a good idea to focus on that one first and only afterwards tackle the larger mmo project.
 
God Ginrai said:
Jourdy288 said:
Gruso said:
Eniko! Glad to see you back.
Wow, same here! :D
This MMO sounds awesome, I'm sorry, I haven't been here this long, care to fill me in on a couple things, like, what sort of MMO, gameplay, etc.? That head is very impressive, nice work!

Original Topic: http://www.gp32x.de/board/index.php?/topic/44997-makin-mah-mmo/page__hl__MMORPG

That should answer a lot of your questions.

-God Ginrai
Cool, thanks, perhaps we should put this stuff in the Wiki?
 
Last edited by a moderator:
Consider me excited too! It was this project that got me to finally stop lurking and make an account. 100+ posts later...

Regarding obfuscating: if you run python with the -O (optimize) switch, you'll get a bunch of .pyo files. These can be shipped in place of .py files. They provide a certain amount of obfuscation; it's probably less than with Cython, but it's also probably easier to do.

Regarding animation: ever played Aquaria? It uses 2D vector art and seems to use a form of rigging much like 3D models. Each limb on a character is a separate image that can be posed with the rest of the body. This should make for easier animation than with pixel art, and easier content creation than with 3D.

Regarding 3D with Python: there are a few Python-specific engines I've seen - PySoy and Panda3D come to mind - but I really can't say if they'll work on Pandora. I think that Ogre and Irrlicht should work, but I've heard that PyOgre has some quirks that make it irritating to port. I can't back that up with any actual experience though. In conclusion: it's a real toss-up! If I had to choose, though, I'd probably go with PyOgre; I feel like it's closest to being usable.


Edit for posterity: PyOgre was the first attempt at making Python bindings for Ogre; it has since been succeeded by Python-Ogre. In the preceding paragraph, pretend all instances of "PyOgre" actually say "Python-Ogre".
 
Multiplex said:
In pure functionality the basic capabilities should be the same - but when you start doing things with shaders you'll be running on a cycle budget. Desktop graphic cards are in a whole different league. If you want to do serious 3D you'll probably spend some time hunting down bottlenecks that hurt performance. I'm not sure about normal maps - a random search yields http://www.pocketgamer.biz/r/PG.Biz/Warpgate/news.asp?c=16724 for a game which uses normal maps on the iPhone 3GS, so I think it might be possible, especially if you limit it to e.g. only characters.

Texture memory AFAIK uses a small on-chip texture cache, with the rest stored in RAM in a preprocessed format for effective lookup. Keeping textures small helps make good use of the cache, and saves texture bandwidth.

Render-to-surface using framebuffers is part of the OpenGL ES 2.0 specs, and should work.

VBOs lets the driver store data somewhere it knows won't be edited without its consent, which can save it a fair bit of unnecessary copying even when most of it is kept in RAM. I've been advised to use them whenever possible, as "they never make things worse".
This sounds encouraging, but of course I won't know for sure about any of this stuff until I get down and dirty and start writing actual code. There's always the possibility of switching back to sprites, pixel art or prerendered if I just can't seem to make it work.

Also this sounds like I'll probably want to make two sets of textures. One HD set for desktops and one lower resolution one for the Pandora to conserve memory. Fortunately cell shading should mean less texture space used on mobiles, so that's a good thing.

traylorpark said:
Also, just a bit of advice regarding 3D: everything takes 4 times longer and is 4 times harder than 2D. Especially for an MMO. I just don't want to see you burn out when you suddenly realize UV'ing is the worst task in the world - and takes forever.
Oh I know 3D can be a pain. UV-hell is hellish. Fortunately with cell shading I can probably avoid a lot of that, so it shouldn't be too bad on that front. The rest is vertex weighting which is a horrible task but you only have to do that once per model (thank god) and animating. Personally I find animating a 3D model a lot easier, less finicky and all around more fun than animating pixel art.

The problem in this case is the complexity of pixel art. Say there's 50 wearable sprites. I add an animation that contains 6 frames. That means now I have to animate, by hand, 50 sprites * 6 frames * 2 directions = 600 frames of animation. That's insane for a single person. If all these wearables are 3D models which are already rigged to character bones all I need to do is add the animation to the bones and all the wearables will animate with it.

It's like O(1) versus O(n).

Caine said:
I was afraid you had disappeared. Still looking forward to your games. I remember the work on Onee-sama Tasukete, looked great. I think it's a good idea to focus on that one first and only afterwards tackle the larger mmo project.
Yeah. It'll be good motivation to get one relatively simple game behind me before jumping in the deep end. Or is that going off the deep end? ;)

Tempel said:
Regarding obfuscating: if you run python with the -O (optimize) switch, you'll get a bunch of .pyo files. These can be shipped in place of .py files. They provide a certain amount of obfuscation; it's probably less than with Cython, but it's also probably easier to do.
Still too easy to decompile and change, I'm afraid. Cython is really the only level I'm comfortable with. If I'm going to actually pull this off I'd rather not the game be ruined by people who effortlessly decompiled the sourcecode and created a bot to play the game for them.

Tempel said:
Regarding animation: ever played Aquaria? It uses 2D vector art and seems to use a form of rigging much like 3D models. Each limb on a character is a separate image that can be posed with the rest of the body. This should make for easier animation than with pixel art, and easier content creation than with 3D.
Actually got that with the Humble Indie Bundle a while ago. :) That sort of approach only really works for sidescrolling games though, so it's not really appropriate here. That's aside from the fact that - even though it's a good way to solve workload problems - I think it's tacky and generally looks horrible. In fact it's one of the few things that bug me about Aquaria!

Tempel said:
Regarding 3D with Python: there are a few Python-specific engines I've seen - PySoy and Panda3D come to mind - but I really can't say if they'll work on Pandora. I think that Ogre and Irrlicht should work, but I've heard that PyOgre has some quirks that make it irritating to port. I can't back that up with any actual experience though. In conclusion: it's a real toss-up! If I had to choose, though, I'd probably go with PyOgre; I feel like it's closest to being usable.
Well without a port of PyOgre on the horizon I'll just use Cython to interact with Ogre directly. It's probably better that way anyway, since PyOgre isn't the most complete - or even fastest - thing ever. Though honestly I have no idea how to decide between Ogre and Irrlicht. I suppose it'll require some research... whichever is the most user friendly I suppose, considering I'm used to XNA.

And thanks for the big welcome back guys. :) It's really nice to see that my projects had an impact.
 
Last edited by a moderator:
One note: If you completely focus on Onee-sama Tasukete, you might feel that your code seems foreign when you come back to it for working on the MMO. I would suggest that even while working on Onee-sama Tasukete that you still give a little time to the MMO to make sure that you don't lose familiarity with it. (If you decide to focus on Onee-sama Tasukete)

-God Ginrai
 
Eniko said:
Butterman said:
What's the plan for networking?
I'm not sure I understand the question? I'll be using Twisted Framework for networking and running the game over TCP?

You are going to use TCP protocol? Good luck with that.. I guess only popular (massive)MO doing that is WoW.
 
Last edited by a moderator:
Eniko said:
Tempel said:
Regarding animation: ever played Aquaria? It uses 2D vector art and seems to use a form of rigging much like 3D models. Each limb on a character is a separate image that can be posed with the rest of the body. This should make for easier animation than with pixel art, and easier content creation than with 3D.
Actually got that with the Humble Indie Bundle a while ago. :) That sort of approach only really works for sidescrolling games though, so it's not really appropriate here. That's aside from the fact that - even though it's a good way to solve workload problems - I think it's tacky and generally looks horrible. In fact it's one of the few things that bug me about Aquaria!
And now I just remembered that 3D models can be rendered to spritesheets (Monk's been doing it for PanJoust, and I see it all the time at OpenGameArt). So if you want easy animations and 2D programming, this could work. Though I'm sure you're already aware of this :p .
 
Last edited by a moderator:
Cloudef said:
You are going to use TCP protocol? Good luck with that.. I guess only popular (massive)MO doing that is WoW.
And we all know how badly that worked out for them. :rolleyes:
I assume you mean TCP as opposed to UDP packets? TCP should work fine, and hardly requires a "Good luck with that". It's also easier on people behind routers. Assuming http://portforward.com/cports.htm is correct, at least Lineage also used TCP exclusively.

Not to say that considering a loss-tolerant UDP protocol is a bad idea, but it'd have to be designed by someone who knew what they were doing, and it's not a requirement.
 
Last edited by a moderator:
Cloudef said:
You are going to use TCP protocol? Good luck with that.. I guess only popular (massive)MO doing that is WoW.
There's tons of MMOs that use TCP. Ultima Online, World of Warcraft, Dark Age of Camelot (with some UDP for movement I believe), Mabinogi, Lineage 1, Ragnarok Online, Guild Wars, Anarchy Online, Age of Conan, Phantasy Star Online/Universe and a whole slough of smaller, older and lesser known MMOs and online games.

I don't know why so many people seem to think that online gaming and TCP means instant lag, because it's basically false, so it's a moot problem to begin with; you pick the tool you need for the job at hand. I won't be making a supertwitchy MMO anyway, so I don't need the small amount of extra oomph UDP would give me.

I am however only a single person doing all this, so I don't have the time to write extra features (that are already built into TCP) onto an UDP layer to gaurantee the game won't break and everything is secure. And even if I did have the time to do that there is no reason to believe that I could somehow write a better mini-implementation of TCP (since that's what I'd basically be doing) than the professional network engineers who wrote TCP in the first place.
 
Last edited by a moderator:
I don't know why so many people seem to think that online gaming and TCP means instant lag
It doesn't, but it depends a bit on the quality of your connection. Usually that's quite good and TCP barely causes trouble. If it is flaky though then TCP will start retransmitting and delaying all other traffic to guarantee in order delivery of packets (which might by then not even be relevant any more).

It shouldn't be that hard to isolate the differences between TCP and UDP though. You could easily develop a TCP based protocol and swap it out later if the need arises.
 
Back
Top