The light post is part of the level background, the spotlight is an object placed at runtime. I didn't place either, but I could place the light. So not those two.
But yes, there are many pre-fab object that bring along their own sub-objects. The player, for example, brings along 4 particle jets. You can see in the first screenshot, the HUD box that previews the projectile shows just the base sprite of the player. But when you spawn it, it comes in with all the proper jets (which use additive blending, just like the lights). And that's no special code in the actual spawning, the player object does that on its own.
Alright, I sorted my choppy capture issues out and I've got a video. It shows of many things, including Visti's great dynamic music, new levels, a more finished factory boss, and more. The video is uncut, so the loading times are what they are. I wanted to eliminate them entirely, but multithreading was more trouble than it's worth. The game takes about 10 seconds to pre-cache 3 maps on my system. It's even faster the more repeating tiles you use, of which these maps use them only for backgrounds. So for now, that's acceptable.
The factory level here is definitely unfinished, but it shows promise.
I also made a video of debug stuff, similar to the screenshots above. It shows invincibility, flying, and spawning stuff, including a giant tower of factory bosses. I'll post it later.
Spent today getting the 3D setup a little better. Before I had it set so that in the frustum, one gl unit = one pixel at z=0. Other than that, z values didn't mean much of anything and the FOV was all screwed up, nearly 170 degrees. It was fine for parallax layers but any meaningful zooming or rotation made things look insane. I redid it so that the the 1 unit = 1 pixel at z=0, but the FOV is locked at 90 degrees. Now I can rotate sprites onscreen about the X and Y axes with no trouble. I've even taken to making minimally 3D backgrounds. I might as well, it's not like it impacts performance.
Hmm.. I may not be experienced enough to put this forward, but could you render the 3D display and then render the 2D display using GLU's orthographic projection matrix, I think it's gluOrtho2D or something.
Setting up an Orthographic projection matrix and specifying normal screen sizes (like 640x480) essentially gives you a 2D vector graphics system. ... if this isn't what you're doing already at any rate.
robotbebop on
Do not feel trapped by the need to achieve anything, this way you achieve everything.
Oh, hey I'm making a game! Check it out: Dr. Weirdo!
I'm using frustrum because I want 3D effects, I just never set it up properly for anything other than 2D until now. I should also note that I've disabled the depth buffer and sort my objects before drawing because every single sprite uses transparency (minimally for smooth edges).
Hmm.. I may not be experienced enough to put this forward, but could you render the 3D display and then render the 2D display using GLU's orthographic projection matrix, I think it's gluOrtho2D or something.
Setting up an Orthographic projection matrix and specifying normal screen sizes (like 640x480) essentially gives you a 2D vector graphics system. ... if this isn't what you're doing already at any rate.
Be wary about this, it might work if you do turn off the Z buffer (as Zach mentioned he did) but as a general rule, post projection Z values will vary non-linearly with your projection matrix, with the two matricies, a ortho Z value should look like:
which does not give a linear distribution of depth, meaning depth comparisons will be off in Z buffering while using an orthographic projection matrix and a perspective projection matrix, or even two perspective matrices with different near planes.
after watching that video, one of the best ideas looks like spawning enemies to get past those pillars. are you going to work something like that into the base gameplay? maybe the character can absorb the parts of defeated enemies then respawn them if he needs to?
Yes, there are medallions that you collect that give the player various powers. Some medallions increase your life bar, some let you jump higher and even fly. One that I'm making now, lets you seize control of certain enemies.
There's one here to spawn those little walking guys.
I'd like to award them for defeating a boss rather than just leaving them around. For now, I guess it'll have to do. It's easy enough to move around various puzzles and collectables from one level to another later. Once I play with them enough, I'll whittle them down to the powerups that are most fun and offer the best gameplay possibilities.
This is pretty cool, I like how fluid the engine seems to be. :^:
So Zack, if someone else were to Let's Make a Game, should it warrant it's own thread or would it be better to join forces with this one? :winky: It's the same topic and having otherwise independent games sharing a thread community may be neat and create kind of a PA game thinktank.
This is pretty cool, I like how fluid the engine seems to be. :^:
So Zack, if someone else were to Let's Make a Game, should it warrant it's own thread or would it be better to join forces with this one? :winky: It's the same topic and having otherwise independent games sharing a thread community may be neat and create kind of a PA game thinktank.
If you have stuff you want to show, feel free. Keep in mind that there's also a programming thread and an XNA thread, so if you want to post more general questions, those would be good places too. If this turns into a more general game development thread, I'll just change the title.
This is pretty cool, I like how fluid the engine seems to be. :^:
So Zack, if someone else were to Let's Make a Game, should it warrant it's own thread or would it be better to join forces with this one? :winky: It's the same topic and having otherwise independent games sharing a thread community may be neat and create kind of a PA game thinktank.
If you have stuff you want to show, feel free. Keep in mind that there's also a programming thread and an XNA thread, so if you want to post more general questions, those would be good places too. If this turns into a more general game development thread, I'll just change the title.
Yeah, I'm meaning specifically the "lifecycle of a game demo" that is going on here and not just general game coding.
Instructions:
Unzip the folder wherever and double click on Platformer.app (Mac OS X) or run_game.bat (Windows), The included read me contains a listing of controls and debug options.
Config options are in the data folder under "conf.txt" and "controls.txt". Please edit these with WordPad on Windows. TextEdit is fine for Mac OS X. Everything should be commented and self-explanatory. For best results, stick with game resolutions that are 16:10.
The Controls Default Keyboard Controls
Start/Pause/Select - Enter (Return on Macs)
Move - Left/Right arrows
Jump - Up arrow
Duck/Look Down - Down arrow
Drop Down (from moving platform) - Down arrow (double tap)
Walk/Run - Left Shift
Punch - Z
Stomp - X
Throw Projectile - S
Choose Projectile - C
Debug/Cheats
Pause the game. Press and hold return to resume the game. While holding return, hold left shift, and down. With all three of these held, tap a fourth key to invoke a cheat.
Fourth keys:
Z - Full Infinite health
X - Flight
C - Spawn any object
Up arrow (jump) - Jump to next checkpoint
Moving the camera:
Pause the game. Press and hold return to resume the game. While holding return, use any of these keys to move the camera:
X - Zoom Out
A - Zoom In
Z - Rotate X axis
S - Rotate Y axis
I resolved the issues with the Windows binary release. It now contains no installers and will run right after you extract the zip, just like the Mac version. I've also included the data folders in both downloads, so there's no second file to get or folders to move. The posts above have been updated to reflect the change.
I know a lot of people have downloaded the files, but no one has posted if there were problems or anything. I'd like to know if these binaries are solid since this is how I plan on distributing the final product.
Sorry, I've been busy, it worked great! I didn't know how to access my other weapons, but what I played was quite fun. Is there a fullscreen option? Overall pretty enjoyable, just need content, and probably some sort of tutorial level or something.
C switches projectiles. There's a list of controls 2 posts up. You can go fullscreen. Open the data folder and edit conf.txt
# Unnamed Game Conf File.
# The graphics may slow down or look crazy larger than 800x600.
# Feel free to use any aspect ratio, however. 16:10 is default.
# If the game is running ABSURDLY slowly, try disabling doublebuffer
# and/or fullscreen.
width=800
height=500
[b]fullscreen=0[/b]
doublebuffer=1
debug=1
# Included levels are vida, testbig, palevel, and giant.
# Look at the pngs and make your own.
levels=factory,factory2,factory3,vida,mountaintop,cityentrance,bignfast,palevel
level=factory
# 60 FPS is full speed. Setting lower will make the whole game run slower.
framerate=60
No problems here getting it to run and play (Mac OS 10.5). However, I did encounter a small problem. If you choose the quit option from the main menu, the game exits fine. If you choose Platformer > Quit from the menu bar though, the game crashes back to the desktop.
As an aside, would it be possible to make the dude immune to damage a little longer after getting hit? Jumping between all those spikes in factory 2 was frustrating, especially since there only seems to be like a pixel of tolerance on each side of you before getting hit by a spike (when standing in between two of them). :P
Oh, also, I noticed that when I started a new game (after loosing all my lives on a previous game), I started off with the projectile I was carrying from my previous game. Is that supposed to happen, or are you supposed to start fresh with a new game?
Crash when using the menu to quit:
I know about it but I can't figure out what the deal is. I handle quit events from the menubar menu and in-game menu similarly but one likes to crash. I consider it not too pressing a concern since the user wanted to quit anyway.
Invincibility frames:
You get a full 60 frames of invincibility after every hit and only maybe 20 stun frames. I might increase it more but you shouldn't need more. The time you get is plenty long enough to escape any hazard you might have fallen on. In that long run in Factory2 with the alternating spikes and guys, you're supposed to jump on them and hold jump to bounce to the next guy (just like in Mario). Landing and jumping again would be really dicey (but doable). I should formally introduce that mechanic somehow. It feels like platformer canon to me but maybe it's not so obvious to everyone.
Persistence of projectiles
Starting fresh with the projectiles you had? Yeah, that happens. The idea of continuity and progress isn't really coded in yet. The "lives" system is likely to go away and get replaced with something more modern and less annoying. I got tired of losing my projectiles every time I died so I hard-coded a system to keep them persistent. That code doesn't check for game overs, so it just sort of hangs on to them until you quit.
Running at 1fps under Windows 7 64bit:
That is worrying but I suppose not entirely unexpected. I haven't done any testing in Vista of Win 7. It's probably some issue with OpenGL using a legacy software renderer because the frameworks don't conform to this or that. As the frameworks that I use modernize to better support 64 bit and Windows 7, I'll switch over to them. I suspect the frame rate will improve then. I hope it does. One of the big worries writing an action-style game in python is always performance. I'm developing the game on a laptop with a Core2Duo 2.4GHz processor and an nVidia GeForce 8600M GT. I don't allow the frame rate to stutter from 60FPS on my machine, that's my only real performance target.
Getting an error and crashing when starting the game:
Traceback (most recent call last):
File "Platformer.py", line 33, in <module>
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 354, in
gameinfo = GameInfo()
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 73, in
glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION,atten)
File "OpenGL\platform\baseplatform.pyc", line 299, in __call__
OpenGL.error.NullFunctionError: Attempt to call an undefined fun
ameterfv, check for bool(glPointParameterfv) before calling
Getting an error and crashing when starting the game:
Traceback (most recent call last):
File "Platformer.py", line 33, in <module>
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 354, in
gameinfo = GameInfo()
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 73, in
glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION,atten)
File "OpenGL\platform\baseplatform.pyc", line 299, in __call__
OpenGL.error.NullFunctionError: Attempt to call an undefined fun
ameterfv, check for bool(glPointParameterfv) before calling
Different versions of OpenGL seem to choke on the line. I thought I had fixed it for all machines before posting. The easiest thing to do is to disable glPoint distance attenuation. Open up the "lib" folder and find "main.py". Open it in a text editor and search for the following code segment and comment it out by adding pound signs before each line like so:
# Setup particles to resize properly in this frustum:
#atten = array([0.002,0.002,0],'f')
#glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION,atten)
#glPointParameterf(GL_POINT_SIZE_MAX,256.0)
#glPointParameterf(GL_POINT_SIZE_MIN,0.0)
Is there anything special about your setup that I should know? Do you have Python installed already, including an older version of the PyOpenGL library that the game is somehow finding and using? Win XP / Vista / 7? 32/64? Do you have a particularly low-end graphics card, like an integrated setup? I'd like to put a nail in the coffin of that bug if possible.
Any thoughts on how it to not do software rendering, Zack? Is there any info I can get for you to help sort it out?
What I should really do is find a machine with Windows 7 64 bit and try to reproduce the issue. There's nothing like 1st hand debugging to spot a problem.
But if you want to try to help, I'd really appreciate it. In Mac OS X, you can press a button in the Activity Monitor to analyze a task and see where an app is spending all of its time and how much CPU time is used by individual function calls. I know Windows 7 has the "Resource and Performance Monitor", but I don't know anything about it. Is there a similar function to pick a process and monitor it? If so, launch the game, load a level, monitor the performance, save the results in a file. Then I could look through it and try to see where the issue is. If the app isn't using more than 20% of the CPU, it's likely something is wrong with the frame rate regulation, which is handled by SDL. If it's using 100% or close to that, some function could be hanging up or emulated in some way. The performance monitor logs might held me identify that.
I tried this and it mostly ran pretty well. Unfortunately had some pretty significant slow down in all three of the factory levels. Seemed to happen whenever the white spikes were on screen. I didn't have any trouble with any other enemies / hazards in those levels or any others.
Other than that though, this is a great start. The music and the background art are great.
Getting an error and crashing when starting the game:
Traceback (most recent call last):
File "Platformer.py", line 33, in <module>
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 354, in
gameinfo = GameInfo()
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 73, in
glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION,atten)
File "OpenGL\platform\baseplatform.pyc", line 299, in __call__
OpenGL.error.NullFunctionError: Attempt to call an undefined fun
ameterfv, check for bool(glPointParameterfv) before calling
Different versions of OpenGL seem to choke on the line. I thought I had fixed it for all machines before posting. The easiest thing to do is to disable glPoint distance attenuation. Open up the "lib" folder and find "main.py". Open it in a text editor and search for the following code segment and comment it out by adding pound signs before each line like so:
# Setup particles to resize properly in this frustum:
#atten = array([0.002,0.002,0],'f')
#glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION,atten)
#glPointParameterf(GL_POINT_SIZE_MAX,256.0)
#glPointParameterf(GL_POINT_SIZE_MIN,0.0)
Is there anything special about your setup that I should know? Do you have Python installed already, including an older version of the PyOpenGL library that the game is somehow finding and using? Win XP / Vista / 7? 32/64? Do you have a particularly low-end graphics card, like an integrated setup? I'd like to put a nail in the coffin of that bug if possible.
I'm using Win7 x86 (the public beta) and have Python 2.5 and 2.6 on the system as well as pygame (for 2.6). Don't think I've ever run an install for PyOpenGL though, but I guess something else could've installed it with a package...
[edit] Still getting errors
C:\Temp\platformer-alpha4-win\dist>Platformer.exe > log
Traceback (most recent call last):
File "Platformer.py", line 33, in <module>
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 354, in main
gameinfo = GameInfo()
File "C:\Temp\platformer-alpha4-win\lib\main.py", line 93, in __init__
self.hudicon = HUDIcon()
File "C:\Temp\platformer-alpha4-win\lib\HUD.py", line 121, in __init__
self.icon.append(create_list_from_file(os.path.join('data','interface',"go.p
ng"),centered=True)[0])
File "C:\Temp\platformer-alpha4-win\lib\Loaders.py", line 61, in create_list_f
rom_file
texture, rect = create_texture_from_file(filename)
File "C:\Temp\platformer-alpha4-win\lib\Loaders.py", line 72, in create_textur
e_from_file
return create_texture_from_surface(tile,clampx,clampy,mipmap,rect)
File "C:\Temp\platformer-alpha4-win\lib\Loaders.py", line 120, in create_textu
re_from_surface
glTexImage2D(GL_TEXTURE_2D, 0, 4, rect.width, rect.height , 0, GL_RGBA, GL_U
NSIGNED_BYTE, rgbadata)
File "OpenGL\wrapper.pyc", line 1284, in __call__
File "OpenGL\wrapper.pyc", line 681, in wrapperCall
OpenGL.error.GLError: GLError(
err = 1281,
description = 'invalid value',
baseOperation = glTexImage2D,
pyArgs = (
GL_TEXTURE_2D,
0,
4,
150,
150,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
"\xff\xff\xff\x00\xff\xff\xff\x00\xff...,
),
cArgs = (
GL_TEXTURE_2D,
0,
4,
150,
150,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
"\xff\xff\xff\x00\xff\xff\xff\x00\xff...,
),
cArguments = (
GL_TEXTURE_2D,
0,
4,
150,
150,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
c_void_p(38648764),
)
)
I'm on an XP system, and it is admittedly getting on in years. For me, my CPU is hitting 100% when those white spikes come on screen. Like Infidel says, the music continues to play normally.
Also, I found in the "Vida" level, if you land on top of the crushing piston, you get stuck. I imagine you didn't intend this.
I had the same issue as Zetx. Apparently OpenGL isn't included in the default display drivers in the Windows7 RC. Once I installed the proper drivers from ATI I was able to run the game fine after I remarked out the particle resize code.
I'm on an XP system, and it is admittedly getting on in years. For me, my CPU is hitting 100% when those white spikes come on screen. Like Infidel says, the music continues to play normally.
Also, I found in the "Vida" level, if you land on top of the crushing piston, you get stuck. I imagine you didn't intend this.
I fixed the problem with the white spikes. For some reason, making a very long and narrow quad and using a repeating texture absolutely chokes most systems. Not my Macbook through. I was able to reproduce the issue on a friend's machine. Building the long strip of spikes out of individual objects, each 100 pixels long, is infinitely faster. No CPU getting pegged at 100%. Actually, if I build the individual items and forget to take the texture off repeat, it STILL goes to hell even though nothing is really repeating. I am mystified by that one. By all means, it seems like it would be MORE work to draw each portion individually.
Vida is a testing ground, pure and simple. The top of the pillar was always meant to reside offscreen and out of reach. I figured making the top of it walkable was unnecessary. It'll never be like that in a real level.
Side note: how many people are experiencing a bug whereby the players arms and legs come out in sporadic bursts (or not at all) instead of in constant blue streams like they're supposed to? When the wooden platform breaks, do you see a shower of wooden splinters?
Something like 1600 units, 1600 pixels onscreen, 16 texture repeats. I fixed the issue for real just now, actually. I realized that my repeating backgrounds had no problem at all and they were WAY bigger, both in texture detail, dimensions, and number of repeats. So I looked for the one thing that was different: mipmapping!
I told the spikes to load their texture with mipmapping, reverted back to one long strip of spikes and all performance issues disappeared. They render a tiny bit fuzzy now but no problem. It looks fine and a solid frame rate is much more important.
I'm going to track down a few more bugs, then post an engine update (the 'lib' folder is the entire engine, it's maybe 500KB at most). Hopefully it'll fix some of the more pressing performance and crash bugs so I can get back to level design and new features.
I had the same issue as Zetx. Apparently OpenGL isn't included in the default display drivers in the Windows7 RC. Once I installed the proper drivers from ATI I was able to run the game fine after I remarked out the particle resize code.
Hah, I didn't know that. I'll look up my ATI drivers as well...
[edit] Okay, working now, without anything commented out.
Here's a replacement lib folder that should fix several issues, including missing particle effects and poor performance. If those of you having trouble would be so kind as to test it, I'd be grateful.
Posts
But yes, there are many pre-fab object that bring along their own sub-objects. The player, for example, brings along 4 particle jets. You can see in the first screenshot, the HUD box that previews the projectile shows just the base sprite of the player. But when you spawn it, it comes in with all the proper jets (which use additive blending, just like the lights). And that's no special code in the actual spawning, the player object does that on its own.
The factory level here is definitely unfinished, but it shows promise.
http://www.youtube.com/watch?v=xpU-euVqAlw
I also made a video of debug stuff, similar to the screenshots above. It shows invincibility, flying, and spawning stuff, including a giant tower of factory bosses. I'll post it later.
http://www.youtube.com/watch?v=0irKmJ1rcSE
Setting up an Orthographic projection matrix and specifying normal screen sizes (like 640x480) essentially gives you a 2D vector graphics system. ... if this isn't what you're doing already at any rate.
Oh, hey I'm making a game! Check it out: Dr. Weirdo!
Be wary about this, it might work if you do turn off the Z buffer (as Zach mentioned he did) but as a general rule, post projection Z values will vary non-linearly with your projection matrix, with the two matricies, a ortho Z value should look like:
(z - nearClip)/(farClip - nearClip)
which varies linearly across depth
perspective projection z values look something more like (DirectX and OpenGL do this slightly differently)
(z*farClip - farClip*nearClip)/((farClip-nearClip)*x)
which does not give a linear distribution of depth, meaning depth comparisons will be off in Z buffering while using an orthographic projection matrix and a perspective projection matrix, or even two perspective matrices with different near planes.
There's one here to spawn those little walking guys.
I'd like to award them for defeating a boss rather than just leaving them around. For now, I guess it'll have to do. It's easy enough to move around various puzzles and collectables from one level to another later. Once I play with them enough, I'll whittle them down to the powerups that are most fun and offer the best gameplay possibilities.
So Zack, if someone else were to Let's Make a Game, should it warrant it's own thread or would it be better to join forces with this one? :winky: It's the same topic and having otherwise independent games sharing a thread community may be neat and create kind of a PA game thinktank.
If you have stuff you want to show, feel free. Keep in mind that there's also a programming thread and an XNA thread, so if you want to post more general questions, those would be good places too. If this turns into a more general game development thread, I'll just change the title.
Yeah, I'm meaning specifically the "lifecycle of a game demo" that is going on here and not just general game coding.
Hooray, we've now got easy-to-use binary distributions for both Mac OS X and Windows! No installation required.
Downloads:
Download for Windows: http://dl-client.getdropbox.com/u/107712/gamepost/platformer-alpha4-win.zip
Download for Mac OS X: http://dl-client.getdropbox.com/u/107712/gamepost/platformer-alpha4-osx.zip
Service Pack 1 (cross platform): http://files.getdropbox.com/u/107712/gamepost/alpha4-sp1.zip
The service pack fixes a few OpenGL and performance issues. Simply replace your 'lib' folder with the one inside the SP1 zip.
Instructions:
Unzip the folder wherever and double click on Platformer.app (Mac OS X) or run_game.bat (Windows), The included read me contains a listing of controls and debug options.
Config options are in the data folder under "conf.txt" and "controls.txt". Please edit these with WordPad on Windows. TextEdit is fine for Mac OS X. Everything should be commented and self-explanatory. For best results, stick with game resolutions that are 16:10.
The Controls
Default Keyboard Controls
Start/Pause/Select - Enter (Return on Macs)
Move - Left/Right arrows
Jump - Up arrow
Duck/Look Down - Down arrow
Drop Down (from moving platform) - Down arrow (double tap)
Walk/Run - Left Shift
Punch - Z
Stomp - X
Throw Projectile - S
Choose Projectile - C
Debug/Cheats
Pause the game. Press and hold return to resume the game. While holding return, hold left shift, and down. With all three of these held, tap a fourth key to invoke a cheat.
Fourth keys:
Z - Full Infinite health
X - Flight
C - Spawn any object
Up arrow (jump) - Jump to next checkpoint
Moving the camera:
Pause the game. Press and hold return to resume the game. While holding return, use any of these keys to move the camera:
X - Zoom Out
A - Zoom In
Z - Rotate X axis
S - Rotate Y axis
I know a lot of people have downloaded the files, but no one has posted if there were problems or anything. I'd like to know if these binaries are solid since this is how I plan on distributing the final product.
Running Windows 7 64-bit fyi, no idea why it would be running like this.
As an aside, would it be possible to make the dude immune to damage a little longer after getting hit? Jumping between all those spikes in factory 2 was frustrating, especially since there only seems to be like a pixel of tolerance on each side of you before getting hit by a spike (when standing in between two of them). :P
Oh, also, I noticed that when I started a new game (after loosing all my lives on a previous game), I started off with the projectile I was carrying from my previous game. Is that supposed to happen, or are you supposed to start fresh with a new game?
I know about it but I can't figure out what the deal is. I handle quit events from the menubar menu and in-game menu similarly but one likes to crash. I consider it not too pressing a concern since the user wanted to quit anyway.
Invincibility frames:
You get a full 60 frames of invincibility after every hit and only maybe 20 stun frames. I might increase it more but you shouldn't need more. The time you get is plenty long enough to escape any hazard you might have fallen on. In that long run in Factory2 with the alternating spikes and guys, you're supposed to jump on them and hold jump to bounce to the next guy (just like in Mario). Landing and jumping again would be really dicey (but doable). I should formally introduce that mechanic somehow. It feels like platformer canon to me but maybe it's not so obvious to everyone.
Persistence of projectiles
Starting fresh with the projectiles you had? Yeah, that happens. The idea of continuity and progress isn't really coded in yet. The "lives" system is likely to go away and get replaced with something more modern and less annoying. I got tired of losing my projectiles every time I died so I hard-coded a system to keep them persistent. That code doesn't check for game overs, so it just sort of hangs on to them until you quit.
Running at 1fps under Windows 7 64bit:
That is worrying but I suppose not entirely unexpected. I haven't done any testing in Vista of Win 7. It's probably some issue with OpenGL using a legacy software renderer because the frameworks don't conform to this or that. As the frameworks that I use modernize to better support 64 bit and Windows 7, I'll switch over to them. I suspect the frame rate will improve then. I hope it does. One of the big worries writing an action-style game in python is always performance. I'm developing the game on a laptop with a Core2Duo 2.4GHz processor and an nVidia GeForce 8600M GT. I don't allow the frame rate to stutter from 60FPS on my machine, that's my only real performance target.
Different versions of OpenGL seem to choke on the line. I thought I had fixed it for all machines before posting. The easiest thing to do is to disable glPoint distance attenuation. Open up the "lib" folder and find "main.py". Open it in a text editor and search for the following code segment and comment it out by adding pound signs before each line like so:
Is there anything special about your setup that I should know? Do you have Python installed already, including an older version of the PyOpenGL library that the game is somehow finding and using? Win XP / Vista / 7? 32/64? Do you have a particularly low-end graphics card, like an integrated setup? I'd like to put a nail in the coffin of that bug if possible.
What I should really do is find a machine with Windows 7 64 bit and try to reproduce the issue. There's nothing like 1st hand debugging to spot a problem.
But if you want to try to help, I'd really appreciate it. In Mac OS X, you can press a button in the Activity Monitor to analyze a task and see where an app is spending all of its time and how much CPU time is used by individual function calls. I know Windows 7 has the "Resource and Performance Monitor", but I don't know anything about it. Is there a similar function to pick a process and monitor it? If so, launch the game, load a level, monitor the performance, save the results in a file. Then I could look through it and try to see where the issue is. If the app isn't using more than 20% of the CPU, it's likely something is wrong with the frame rate regulation, which is handled by SDL. If it's using 100% or close to that, some function could be hanging up or emulated in some way. The performance monitor logs might held me identify that.
Other than that though, this is a great start. The music and the background art are great.
Edit: Same problem as CJ, I think - it happens whenever the spikes are onscreen. Also, the character has no arms or legs.
The game is more CPU-intensive than it needs to be because it's python, but there's no reason a modern machine should be choking like this. Specs?
I'm using Win7 x86 (the public beta) and have Python 2.5 and 2.6 on the system as well as pygame (for 2.6). Don't think I've ever run an install for PyOpenGL though, but I guess something else could've installed it with a package...
[edit] Still getting errors
Also, I found in the "Vida" level, if you land on top of the crushing piston, you get stuck. I imagine you didn't intend this.
I fixed the problem with the white spikes. For some reason, making a very long and narrow quad and using a repeating texture absolutely chokes most systems. Not my Macbook through. I was able to reproduce the issue on a friend's machine. Building the long strip of spikes out of individual objects, each 100 pixels long, is infinitely faster. No CPU getting pegged at 100%. Actually, if I build the individual items and forget to take the texture off repeat, it STILL goes to hell even though nothing is really repeating. I am mystified by that one. By all means, it seems like it would be MORE work to draw each portion individually.
Vida is a testing ground, pure and simple. The top of the pillar was always meant to reside offscreen and out of reach. I figured making the top of it walkable was unnecessary. It'll never be like that in a real level.
Side note: how many people are experiencing a bug whereby the players arms and legs come out in sporadic bursts (or not at all) instead of in constant blue streams like they're supposed to? When the wooden platform breaks, do you see a shower of wooden splinters?
I told the spikes to load their texture with mipmapping, reverted back to one long strip of spikes and all performance issues disappeared. They render a tiny bit fuzzy now but no problem. It looks fine and a solid frame rate is much more important.
I'm going to track down a few more bugs, then post an engine update (the 'lib' folder is the entire engine, it's maybe 500KB at most). Hopefully it'll fix some of the more pressing performance and crash bugs so I can get back to level design and new features.
Hah, I didn't know that. I'll look up my ATI drivers as well...
[edit] Okay, working now, without anything commented out.
http://files.getdropbox.com/u/107712/gamepost/alpha4-sp1.zip