News | Forum | People | FAQ | Links | Search | Register | Log in
Game Programming Thread
#15608 posted by megaman [] on 2008/11/07 12:06:10

I was thinking about starting a game programming thread, where we could discuss and post links like or less rendering related stuff ;)

basically some way to boookmark things and have others comment on them. Interest?

So, yeah, discuss game programming, people. Word.
You could have put some effort into this thread, this is pathetic. 
woshh: headshot :P 
wow. seriously, Megaman suggestion a decent topic, and already Speedy is a dickbag and ruins it. 
sex thread was better... :| 
What does func think of SDL ? My opinion is, it has overhead compared to OpenGL, and bugs on platforms other than Linux, but it's not too bad. I'm a pretty shit C programmer though.

Trinca - don't enough people tell you you're an **** and should shut up a bit more ? 
Ressource Pools 
Only ever use ressource pools for really expensive objects in languages with garbage collection. The GC is much better optimised to free / remove / reuse instances than your code could ever be.

Negative example:

I tried a pool some weeks ago on Vector3fs (i was using / creating / releasing lots of em each iteration), and it was way slower than the Java GC.

Positive example: native buffers in java are very slow to create. It's worth saving e.g. one float buffer that you fill with rotation matrices each frame and hand to ogl. 
Oh Yeah 
and if you aren't careful enough (very careful) - instead of the crashes when you use destroyed objects in c++ - you get weird bugs where one object gets used in multiple places... 
In Java, it also depends on the VM you are running on. Some VMs might be better than your code at pooling instances, others might not. I'm not sure whether the Java Spec has rules about how a GC must perform its duties. 
stevenaaus go **** you ****

yeah, that's probably right. but for a game.. i'd guess the majority of your players will use the Sun VM.

trinca, take your trolling to GA, or something. or maybe the drunk thread ;) 
Still, there may be differences across different platforms even for the Sun VMs for those platforms. You simply cannot make any assumptions if there is no spec. 
school of thought leads nowhere. How do you optimise your code then? 
LH told me that SDL keeps out of the way as much as possible when it comes to drawing stuff. That sounds good, but personally I'll take a non-SDL engine over a SDL one any day. It's clear that there is *some* overhead, even if it's managed intelligently.

I'm still grateful for stuff like PRBoom etc that uses SDL. SDL is snakeoil, but it kinda works. Someone else, it might have been Qudos, said once that SDL was nice to work with.

Bottom line, if I can have an SDL engine or no engine, I'd take SDL...

There are bugs in Linux SDL, too, for example mouse issues where you get "locked" inside a narrow angle, or where you'll suddenly look straight down and start turning uncontrollably. It sometimes goes away when you pause and unpause the game a few times, in PRBoom at least. SDLQuake2 was pretty bad though. 
megaman u�re right ;)

big hug my german friend :)

me quit this thread!!! 
cube and sauerbraten use SDL, they seem pretty solid in terms of mouse input. 
... off-topic, but i'm going to update my howto shortly i hope. Here's a draft.

Suggestions ? GB.. Can't find your HexenII mapping suggestion anymore. What was it ? And have included a link to bjptools. Correct?? Sorry if the links are f-ed. 

bjptools link is correct, should probably go on shubhub or something... Don't know if those compile hexen2 stuff!

The FTE engine also runs NQ stuff and even Nehahra... even in software. That could be a valuable tip for many. Amazing engine, seems to have evdev mouse issues for me though.

Nothing about QC coding, modelling and texture making? I'll see if I can help you there, good FAQ! 
You simply cannot optimize Java code for all platforms by making assumptions about the VM. You can only really optimize by reading the specs carefully and by good programming. The VM does a lot of optimization for you anyway, so whenever you think you've done something clever, the VM might just remove it ;-). Java is not a language for tasks that need a lot of clever optimization IMO.

Look at LWJGL for example, namely their math package. They use a clumsy design for mutable / immutable objects and direct field access, thus breaking some design principles because they measured the performance of dfa against property accessors and came to the result that the former is faster. We tested this on different platforms and had entirely different results. There's just no point in this. 
I don't really know about the lwjgl math lib, but the JME guys were doing stuff in their math libs that looked questionable to me.

Turns out my profiling shows they're right, on both linux and windows, on two entirely different machines. (both sun vm though, but i guess 99% of my users will use that.)

The changes i made after profiling sped up my game a LOT. Again, on both machines.

Your POV just doesn't seem very 'real world' (at least in the games world) to me. 
to clear things up: of course i'm coding all stuff up first (with performance in mind, but not doing any low level optimisations) and then check where the bottle necks are. Imho you get a pretty good idea of what parts you can optimise (and how you do it) that way. And it's the 'real world' way, especially if you test on several systems.

Btw, your argument "cannot optimize ... code for all platforms" is true for ALL languages, and still it's pretty.. common to optimise c++, isn't it? that's with even MORE variety in the underlying architectures, etc. 
Npr Quake 
Someone should fix up NPRQuake. It's pretty cool. For me.. mileage with the different renderers varies. I used to have "ainpr" working, but it's busted now. ... might do it one day. 
it was a cool idea, but didn't have the long-term maintenance and polish of some other engines. I think it was just a proof of concept made for a university class or something. 
NPR Source 
It's actually pretty easy to create the dlls that create new renderers for NPR, so I encourage people to check it out. I managed to modify the blueprint renderer so that the randomly selected edges to be arrowed/numbered weren't randomly reselected each frame, which got rid of so much flicker. The actual code I used was an enormous hack, but the result seemed better to me, and I can see how someone would code it correctly now... 
FTE has some modes like this. And I think some other engine too (QMB?). 
I tried compiling FTE from CVS yesterday...
Maybe i'm doing something wrong, but "make gl-rel" needed plenty of niggles fixed. At linking i got bored and gave up when it spewed
./release/gl_linux/pr_csqc.o: In function CSQC_StartSound':
pr_csqc.c:(.text+0x30e7): undefined reference o `PR_TempString
pr_csqc.c:(.text+0x3174): undefined reference to `PR_TempString
etc x 100 
i dunno, can we please not make this into a 'q engine support thread'? ;) 
Free RPG Rules 
AI - Steering Behaviours 
Hmm Description 
first one is a student's library iirc building on the second.

which is some guy who worked on dungeon keeper2 and used the steering behaviours there. The paper is very practical and describes what they did to get the system working nicely and how they combined it. worth a read if you're interested in actually using #4

3 is the course overview page where that guy held a talk

4 is the original reynolds paper.

i was using this in my project/paper i just completed a few days ago. 
Loads Of Stuff 
Mostly not read yet.

Lightweight Procedural Animation with Believable Physical Interactions Ian Horswill 2008

Artificial Intelligence and the Future of Games as an Expressive Medium

GLee GLee (GL Easy Extension library) is a free cross-platform extension loading library for OpenGL

Real-time Shadow Algorithms and Techniques

Modernizing the Quake2 renderer wiat, that's from jdolan.

Order your graphics draw calls around! (normally don't like the guy)

Ray Tracing News "Light Makes Right" November 8, 2008 
Hmm Networking 
i skimmed through the q3 networking article in class some days ago. one thing i didn't get was how they transmit events. They need to make sure SOMETHING reaches the client, so instead of doing some sophisticated system that handles events seperately from throwaway data (like tribes2 does), they just check that every packet reaches it? someone enlighten me, or i need to reread the description ;) 
Can you do skeletal animation with QuakeC?
Within the standard engine limits?
Somebody figure out how to do it!!! :-) 
RickyT23 ask madfox he might now something about it!!! 
Only In Horrible Ways 
To do skeletal animation in standard qc you'd first have to make each bone a seperate entity, as they need to be able to move individually. Once you've done that, each bone has to have it's own model assigned, so you can't have any triangles which span joints on the bones. This severely restricts what you can do to make realistic organic models. You could do a robot a little more easily. You're also going to be expending a lot of entities on each model, so you'll hit the 600 mark in no time.

Once you've got over that, you have to actually program it in qc, which is bound to be painful considering qc has no support for arrays to store animation sequences in. You also have to battle with the engine, which by default only uses an 8 bit integer for sending rotation angles. This means any rotation you do will show up with a level of precision worse than 1 degree.

Basically, it won't work all that well. Someone did create a quake ragdoll style mod called "Sagdoll" which did pretty much follow this idea, I think there's a link to it on the qexpo site.

Things aren't much better in custom engines. Darkplaces supports some model formats with skeletal animation. But there's currently no facility to control the bones individually from qc, it's still just frame selection. The benefit of bones is to read orientations and attach other entities to them(plus smaller file sizes). 
Skeletal Animation 
When i worked on the Bones model, I converted the 3d model to 3dfx. Having an animation studio, which imports dfx I need only a standard model to create all animation frames from this base model.
These can be imported to QMLE and then rearanged to qc scripting.

An easier way can be, like I did with the ZDoom models, to open them in QMLE, and then copy some frames. THe copied frame you can change by moving the vertexes, so sugesting a moving patern.

I believe Milkshape has a way to use skeleton animation, but I never succeeded in finding out how. 
Has a thread at i3d 
don't get it. 
first there has to be something before you can or can't get it? 
sorry, it's programming. I didn't see. 
Just Saw This And Thought It Might Be A Good Link 
Very Interesting

Many different interesting and thoughtful bits in this. Highly recommended to anyone with a remote interest in game design. 
Did you know that Michael Abrash's Graphics Programming Black Book was available for free? I did not and I like it (I understand about 5%!). 
Hmm Yeah I Knew 
Even if it's full of general optimization tips I'd not recommend reading all of it unless you find the antique examples terrible exciting.

10+ years ago I had a bad habit of reading programming books without actually writing much code myself (I think understand what I just read so I'll just keep on reading!) and I still have the paper copy around somewhere. I did pick it up to look at his bresenham's line drawing algo when doing a simple drawing program on the nintendo ds. 
Yeah, it's a good book but very out dated now. However, it DOES contain a bunch of Quake development tidbits and stories that I re-read from time to time. Like Carmack coming up with the BSP idea, the VIS break through, all the things they tried to get the best renderer, etc. 
Abrash's Black Book... 
was very interesting when i borrowed it from a friend a few years ago. Great to see it's online for free now, but that page seems to just give an ASP error right now... 
More Books 
You must be logged in to post in this thread.
Website copyright © 2002-2020 John Fitzgibbons. All posts are copyright their respective authors.