The new forums will be named Coin Return (based on the most recent vote)! You can check on the status and timeline of the transition to the new forums here.
Please vote in the Forum Structure Poll. Polling will close at 2PM EST on January 21, 2025.
Let's Make a Game: Platformer Edition [Playable Alpha (Win/Mac)! See page 8]
I think it's a kid in a giant soup can, and I think it looks amazing - sort of like a mech without anime-baggage.
Also, how do you handle moving platforms? Do they exert a force on the player object, or is the player somehow rooted to the while stationary? In my platformer the player is moved the distance between the platform's last and current position, but that would never work for rotating platforms.
In the physics engine, all characters capable of walking run a routine called "seek ground" that looks 10 pixels in each direction from the bottom edge of their hitbox. If it finds ground, it aligns the bottom of the hitbox to the highest point. This allows characters that walk on arbitrary ground shapes. The amount of vertical adjustment is recorded but not factored into real velocities. That way, the player doesn't become unglued from the ground so easily but when another object needs to inherit your velocity, such as a projectile you're throwing, that object can inherit the Y velocity and the ground adjustment for proper behavior.
This means that vertically moving platforms, no code changes are necessary. I just change the collision mask on the ground and the objects notice they've become embedded and shoot to the top. For horizontal movement of platforms, I added a variable to the basic PhysicsObject that allows for an external horizontal velocity.
Moving platforms have attached a hitbox that when entered by any object, set this variable. It's recalculated every frame, so I just read off the velocity of the platform object directly and push it to any objects in the platform's influence.
The rotating platforms are a cheat. I create an object that appears to be a moving platform, but I override the physics methods that would normally add up accelerations into velocities into positions, so they remain stationary. The hitbox that would normally keep the player fixed in place by matching velocities then pushes the player to the left or right, depending on what I set the velocity to. I don't bother calculating the real rotational velocity because I don't have to. The seek ground code keeps the player moving on a circular path and the steady horizontal velocity looks good enough.
I cannot help myself from continuing to tweak the limbs to look better. I made a case for sprites using additive blending (so I could make lights, basically), but then I realized that I could make limbs look a bit more like TripWire's picture and less like a cloud of squares. The latest look:
I've designed hybrid enemy/platforms and made the second boss into one. Here I am getting totally fucked up by it. Seriously. I'm determined not to make this easier, but I've yet to legitimately beat him once in testing. Not one time. It is possible, if I ramp up my attacks to do quadruple damage or lower his health, but screw that.
The camera needs to respect the walls in boss fights. That always bothers me in games where you can't see the boss cause the camera is off somewhere else.
The ability to add camera restrictions in the engine, I just hadn't added them to that particular room, since I'm still coding that boss. They're actually easy to implement.
Here's the level code for that particular room:
def triggers(self, gameinfo):
playerrect = gameinfo.player.envhitbox.move(gameinfo.player.positionx,gameinfo.player.positiony)
if playerrect.clip(Rect(1175,1050,250,100)) and self.boss_spawn:
gameinfo.spawnobj(self.boss_actor)
self.boss_spawn = False
gameinfo.camera.setblock(Rect(1163, 0, 880, 2000))
if self.boss_actor.dead == 1 and self.boss_not_dead:
gameinfo.spawnobj(create("MovingObjectWrapper", [(1960,1860),(1960,860)], ANI_BOUNCE, 2, "Platform",(1960,1200),style=1))
self.boss_not_dead = False
gameinfo.camera.clearblock()
Right now, such camera hints are simplistic and are pretty much limited to a box that the camera will consider to be the playable area. I hope to add additional camera features, like intelligent framing, but at this point, I think I'm ok with simple "always centered unless near the edge of the playable area" behavior I have now. It's less distracting.
It says: Tell the engineto spawn ina new objectthat movesback and forthon a pre-defined pathat a speed of two pixels per frame and make that object a walkable platform. Place it initially at (1960,1200) and take on visual style #1 (I ran out of good colors).
Because the MovingObjectWrapper can be applied to any object at all, I can make platforms move, affix enemies and other hazards to spinning poles, and create irregular paths for platforms (like in 2D Marios). It's yet another way to leverage object orientation.
This game is going to be hard as shit. Nintendo hard.
You should really think hard about this. "Nintendo hard" gets tossed around a lot by indie devs, and it usually just means frustrating. Most Nintendo games were hard because of cruddy controls or bad design. Simon Belmont couldn't alter his direction during a jump. Samus started new games with 30 life no matter how many e-tanks she had. Ninja Gaiden had those goddamned birds.
A lot of rom hacks are "Nintendo hard", and it's usually an excuse for the developer to put pixel precise jumps, poorly placed enemies, and bad level design. These are the reasons I never finished Eternal Daughter, Super Metroid Redesign, or most of the Megaman rom hacks.
Basically, if your fight is challenging for x reason, it should be beatable with y skill.
Pattern : memorization, tell recognition, quick reflexes
ie: most platformers
Attrition : Stat grinding, luck
ie: RPGs, later castlevanias
Puzzle : game hint recognition
ie: 3d Marios/Zeldas/Metroids
I guess I'm just saying don't make it hard just for the sake of being hard.
This game is going to be hard as shit. Nintendo hard.
You should really think hard about this. "Nintendo hard" gets tossed around a lot by indie devs, and it usually just means frustrating. Most Nintendo games were hard because of cruddy controls or bad design. Simon Belmont couldn't alter his direction during a jump. Samus started new games with 30 life no matter how many e-tanks she had. Ninja Gaiden had those goddamned birds.
A lot of rom hacks are "Nintendo hard", and it's usually an excuse for the developer to put pixel precise jumps, poorly placed enemies, and bad level design. These are the reasons I never finished Eternal Daughter, Super Metroid Redesign, or most of the Megaman rom hacks.
Basically, if your fight is challenging for x reason, it should be beatable with y skill.
Pattern : memorization, tell recognition, quick reflexes
ie: most platformers
Attrition : Stat grinding, luck
ie: RPGs, later castlevanias
Puzzle : game hint recognition
ie: 3d Marios/Zeldas/Metroids
I guess I'm just saying don't make it hard just for the sake of being hard.
I hear you, and since this is just a casual project and I've never made a game before, I'm playing it by ear.
One boss, the cloud of bouncing spike balls, is a bitch until you realize that you can round them up by running back and forth underneath them, lure them to a cliff edge, and punch them off in a group. That's more of a puzzle-type boss. If you dive in, it's close to impossible to win. Stepping back and developing a strategy allows you to win every time, easily. Hard at first, but fun and rewarding.
This boss, the spike cannon on booster rockets, is still under construction. Beating it will depend more on pattern recognition and quick reflexes. Each move either happens at a regular rate or is signaled by a tell. There are no unavoidable attacks. The biggest challenge comes from the fact that ranged attacks barely scratch it but melee attacks put you dangerously close to the hazardous fire and flying projectiles. It also speeds up as its health gets low, so you have less and less time to get away.
I can't find the right strategy to beat it quite yet, but if I can't figure it out in this incarnation, I'll make it weaker, slower, or change up the terrain to offer some safer places to attack from. I want the game to be hard but definitely not frustrating or stupid.
Also, if anyone has any ideas for bosses, artistic, attack patterns, premises, or just plain cool ideas, post them in here. For the longest time, I thought I had this wealth of ideas for every aspect of a game, but now that it's time to start putting those things into play, I'm getting game designer's block. I want to get a cool demo together to drum up some interest.
Sure. My current order of business is putting out a demo of the first 5 stages. They are: Factory, Forest, Hills, Mountaintop, and City Entrance.
I need music for Forest, Hills, and part of Factory. The level design is about 50% done on Factory, 40% on mountaintop, and essentially 0% on the others. I need music for Factory
I'm actually using your Tema_#1 for the factory boss battle so let's start with that. It would be perfect if you could revise it so that it works well for a video game, then get it to me either uncompressed or in OGG format so I can program the revised music system around it. Right now, the music system consists entirely of me telling the SDL framework to play a file located at a path. I'm revising it to work with chopped up bits of music that loop and fade. I'd like a song to use while programming and testing. Here's the sections I'd need of Tema:
Bare into with piano -> Loopable with symbol beat for level -> Bridge (if needed) -> Loopable intense beat for boss battle -> Outtro for boss defeat
[b]Music Segment[/b]:
Filename: "file name"
Repeat: #, Inf.
Segue out: On loop, Immediate, Nearest-break
Breaks: [time, in, milliseconds]
Rhythm Cues (future rhythm use): [time, in, milliseconds]
So each segment of music gets this set of properties. Segments can transition to other segments either immediately, whenever they have finished a loop, or at set breakpoints, defined as a list of times in milliseconds. Each level will be able to queue up segments at load time (or live as play goes on) and then use game conditions to tell the music when to change from one segment to the next.
That way, I can use wave data rather than MIDI or MOD music and still retain some properties of dynamic video game music. In the future, each segment will have rhythm cues (maybe two or 3 tracks of them if needed), defined just like the breakpoints, as lists of times in milliseconds into the sample when beats occur. That will form the foundation of the rhythm gameplay.
I have a suggestion for another possible factory track here. This one was actually made yesterday while thinking about your game. It would also be a lot easier to rework for use in the game, since I don't actually have the project files for Tema_#1 anymore, so I would have to try and replicate it with different instruments.
That's ok, this is really cool and more inline with my original idea. I was just working with what I had. Let me listen to it in a bit and I'll get back to you.
I like it a lot. I'm getting started coding this new music system. Any chance I could get a version of this cut up for looping? I noticed at least 3 distinct sections that could loop with little bridges between. I'd just like some music to code against to get going on this demo.
Hey man, I just wanted to add my two cents and say that this game looks pretty damn kick-ass. It's really interesting to watch the various iterations of the game throughout the thread as you make changes and updates.
Also, I loved the kid-in-a-tomato-can concept art.
Chopping this up now. How do you want to handle the looping? Say something like this:
// Intro
// First loop / After three bars random fill from three possible
// bridge 1
// Second loop / After three bars random fill from three possible
// Third loop / After three bars random fill from three possible
// Outro
Would that be too ambitious? It wouldn't be a problem on my part. Also, how long would you preferably have each loop?
Edit: Done! Right now it is chopped into ten parts with no fills. Uploading now.
Chopping this up now. How do you want to handle the looping? Say something like this:
// Intro
// First loop / After three bars random fill from three possible
// bridge 1
// Second loop / After three bars random fill from three possible
// Third loop / After three bars random fill from three possible
// Outro
Would that be too ambitious? It wouldn't be a problem on my part. Also, how long would you preferably have each loop?
Absolutely not too ambitious. I wrote up the gapless looping stuff this morning. It works well, no skipping or jittery music. It supports an arbitrary number of music sections, both looping and one-shot, in any order. Any type of music section can lead into any other type. There's no randomization, but I could either pre-calculate it or add it in.
I'd like to keep individual files in the music under 2:00 the the sake of the rhythm sync code, which reevaluates once per loop or section change (much longer and errors seem to accumulate, throwing the rhythm track and audio out of sync).
Here you go, Zack: http://testinggrounds.bandcamp.com/ - Just click "Download Album" and you can have your choice of .wav, .flac or .ogg in a neat zip-file.
They should all be loopable except the outro. Which is also loopable, it just doesn't make any sense to do that.
The loops are working great, it's really cool to have more dynamic music.
One problem: the "First Loop Bridge To Second Loop" doesn't bridge the first and second loops. I checked it in Audacity to make sure it wasn't the game misbehaving. On investigation it seems like maybe you swapped the labels on loops 2 and 3. I'll look at it in more depth later. I've got to go for now.
Thanks again. I'll post a video once the factory level is finished and the playable demo is just around the corner.
Alright - listening to the uploaded stuff, I scewed up at least a few things. Second_loop starts with the last bar and then goes through 1-3. The First to second bridge is the correct one, but it is cut very short. I'll fix it.
This is much better. Yeah, you're right on the alternative loops. I need to find a way to work them in.
I know that the SDL mixer, my sound API, is capable of doing everything I want it to do. It can loop sound files, fade them out, keep synced to a timer, and push two files together in a gapless fashion. I just need to build a class to control it better.
I need to revise my implementation of this music system to allow for more flexibility and better RAM usage. Right now, the game is caching the same loop 3 or 4 times because it's used by multiple levels. This will be a great data set to program off of.
Sorry to keep bothering you about this, but the second loop does not transition properly into the third, the third doesn't transition into the fourth, and the fourth doesn't transition into its bridge to outro. The bridge to outro skips a bit but nothing big.
The beginning (Intro->Bridge1->Loop1->Loop1Buildup->Bridge2->Loop2) is perfect, however. It's all good enough to use in development, but eventually those last 4 will need to flow also. Don't worry about it for now.
I've got all the pieces now, thanks. Some are slightly off but I'll trim them myself to make the loops cleaner. I have a system for alternate loops now. I've also allowed 2-way communication between the music and level code.
For example, originally, the factory boss would enter the screen when the player stepped into a certain space in the level. That trigger would also tell the music: "At the next possible moment, break out of your current loop and head to music section 5." Where section 5 would be the bridge into the more intense portion of the music. Bridges auto-advance.
Now when the player crosses that invisible line I tell the music the same thing, but I tell the level to check on the music and make sure not to spawn the boss until that transition happens. The music is just as dynamic, but the level triggers can read off when the dynamic cues actually happen, so at times when events need to sync with a certain sting in the music, for example, that can happen. You'll see it all in action when this segment is done.
Now to finish Factory 1, create Factory 2, and polish Factory 3. Then I've got my first level completed, dynamic music and all!
I finally checked out these videos, I've been meaning to for a bit, and I gotta say, I'm impressed as hell. Most people don't have the balls to get as far as you have, best of luck to you finding some sweet artists and making some fun content.
If I may offer a suggestion however, it appears you are using additive-transparency particles now (good move, it looks much better) but in your last screenshots, the particles were still quads, albeit transparent quads, have you given any thought to using an alpha mask to soften out the particles?
Here's some simple examples of simple softer looking particles, one is just a standard softer particle and the other was just me messing around. Just texture the particles using a texture with an alpha channel, and you'll get a lot better results. You can of course also animate those particles to get more fun results, and there's a million other tricks you can do with particles to make them look effing sweet, that should be an easy one if you haven't done it yet though. I suspect you have, but anyway, keep up the good work, I'd love to play a build, even if unfinished!
I finally checked out these videos, I've been meaning to for a bit, and I gotta say, I'm impressed as hell. Most people don't have the balls to get as far as you have, best of luck to you finding some sweet artists and making some fun content.
If I may offer a suggestion however, it appears you are using additive-transparency particles now (good move, it looks much better) but in your last screenshots, the particles were still quads, albeit transparent quads, have you given any thought to using an alpha mask to soften out the particles?
Here's some simple examples of simple softer looking particles, one is just a standard softer particle and the other was just me messing around. Just texture the particles using a texture with an alpha channel, and you'll get a lot better results. You can of course also animate those particles to get more fun results, and there's a million other tricks you can do with particles to make them look effing sweet, that should be an easy one if you haven't done it yet though. I suspect you have, but anyway, keep up the good work, I'd love to play a build, even if unfinished!
How would I go about texturing the particles? Here's the draw code for the ParticleJet object, the basis for the player's limbs, the blue fire coming off the blue spike balls, and the jets on the factory boss:
def draw(self):
if self.visible:
# Push the data to the graphics card
glBindBuffer( GL_ARRAY_BUFFER, self.verbuffer )
glBufferData(GL_ARRAY_BUFFER , self.particles, GL_STREAM_DRAW_ARB )
glVertexPointer(2, GL_FLOAT, 20, None)
glEnableClientState(GL_VERTEX_ARRAY)
glDisable(GL_TEXTURE_2D)
glPointSize( 10 )
# Draw once in translucent black to mask the background (creates a glow on light and dark backdrops)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glColor4f(0,0,0,0.02)
glDrawArrays( GL_POINTS , 0 , self.numparticles)
# Draw a second time with additive blending for cool effects.
glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glColor4f(self.color[0],self.color[1],self.color[2],self.color[3])
glDrawArrays( GL_POINTS , 0 , self.numparticles)
# Set the drawing state back up the way it should be.
glColor4f(1,1,1,1)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glDisableClientState( GL_VERTEX_ARRAY )
glEnable(GL_TEXTURE_2D)
Can I still use glPoints or will I have to figure out a way to generate an array to use with quads and triangle strips? I've done it before, but a lot of the efficiency (in python, not OpenGL) on the particles comes from the fact that I'm using glPoints.
If I do have to convert to quads or something, I will eventually, because you're right, it'll make the particles look much better. If not, please let me know. I asked around for a while but no one seemed to know how to do it with points.
def draw(self):
if self.visible:
# Bind the point sprite texture
glBindTexture(GL_TEXTURE_2D, self.texture)
# Push the vertex data to the graphics card
glBindBuffer( GL_ARRAY_BUFFER, self.verbuffer )
glBufferData(GL_ARRAY_BUFFER , self.particles, GL_STREAM_DRAW_ARB )
glVertexPointer(2, GL_FLOAT, 20, None)
# Setup the drawing for VBO, Point Sprite, Texture-mapped points
glEnableClientState(GL_VERTEX_ARRAY)
glEnable(GL_POINT_SPRITE)
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE)
glPointSize( 12 )
# Draw once normally to mask the background.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
#glColor4f(0.13,0.42,1.0,0.4)
glColor4f(0,0,0,0.02)
#glColor4f(1,1,1,1)
glDrawArrays( GL_POINTS , 0 , self.numparticles)
# Draw a second time with additive blending for cool effects.
glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glColor4f(self.color[0],self.color[1],self.color[2],self.color[3])
glDrawArrays( GL_POINTS , 0 , self.numparticles)
# Set the drawing state back up the way it should be.
glColor4f(1,1,1,1)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glDisableClientState( GL_VERTEX_ARRAY )
glDisable(GL_POINT_SPRITE)
I honestly don't use point sprite for a number of reasons, and I havent done GL programming in two years, I'm using DirectX right now, they do the same thing(with some differences in how they get there), but I can't give you function names unfortunately : (. Eventually, however, if you want a *lot* of particles it will be more advantageous to draw them as quads and use hardware instancing to draw as many copies of the same particle as you can at the same time. I really want to see what they look like now, its pretty fun to make shapes for your alpha cutouts, GIMP + Gaussian blur + contrast + whatever you want to draw is pretty much all you need.
It's more important that I deal with fewer coordinates for the sake of Python than it is I use the GPU hardware to its fullest. I might have a few thousand particles at once at worst in this 2D game.
The cutout I made (I load up a 32x32 version of this for the game):
How it looks:
What happens when you put your face in the fire too many times trying to get a screenshot:
Much nicer. Thanks for the push to fix this now.
I got tired of tedious testing so I made some cheat codes for the game. There are 4 cheats:
Warp to next checkpoint (helps a lot in testing)
Infinite Health (again, helps a lot)
Infinite Jump frames + air jump (really, really fun, especially the way the game looks)
A Sonic the Hedgehog-style debug mode where you can insert almost any object in the game
The debug mode is the coolest. You punch in a code and instead of just being able to cycle through the allowed projectiles, you can cycle through all in-game objects. That includes things like enemies, platforms, various animations, and even additional player characters, which can either be hooked to your controller object, an AI controller object, or nothing. I like spawning the factory boss in the middle of other levels.
Dude, that sounds awesome as hell. Give us that demo, you tease. Or at least more videos.
Also, did anyone else chime in with some music (see what I did there?)? I could take a look at some of the other scenes, since I've just finished exams.
"I have an actual factual engine" would be a far cry from the usual "I have a comic book idea, but no skill" posts these guys usually suffer. And there's some real talent there. I don't remember if CGtalk has a similar subforum, but some of the non-pros there are also golden.
I'm working really hard on finishing the demo. The hardest part is coming up with good level design ideas and creating more in-game objects. I want the demo to include the Factory and Mountain segments. Right now it takes me just about 8 minutes to finish everything and a lot of parts in the levels are empty.
Visti, your music is great in the factory level. It's working great, the loops are a good length, and even the shortest segments aren't grating or repetitive. I implemented an ambient noise track too, and it sounds good with the storm sounds I have going in the back.
The screens are of a debug mode, where I just started throwing in-game objects everywhere, including a boss character, who would fly around and get himself blown up by the spike cannons I spawned in there. The actual game isn't like that. The busy background doesn't help either.
Just asking, does your editor support pre-fabricated objects? For instance, in the second screenshot did you have to place the light post sprite and the sprite for the light it casts separately, or do can you place a light object in the world and it includes both the light post sprite and the light ray sprite?
Posts
In the physics engine, all characters capable of walking run a routine called "seek ground" that looks 10 pixels in each direction from the bottom edge of their hitbox. If it finds ground, it aligns the bottom of the hitbox to the highest point. This allows characters that walk on arbitrary ground shapes. The amount of vertical adjustment is recorded but not factored into real velocities. That way, the player doesn't become unglued from the ground so easily but when another object needs to inherit your velocity, such as a projectile you're throwing, that object can inherit the Y velocity and the ground adjustment for proper behavior.
This means that vertically moving platforms, no code changes are necessary. I just change the collision mask on the ground and the objects notice they've become embedded and shoot to the top. For horizontal movement of platforms, I added a variable to the basic PhysicsObject that allows for an external horizontal velocity.
Moving platforms have attached a hitbox that when entered by any object, set this variable. It's recalculated every frame, so I just read off the velocity of the platform object directly and push it to any objects in the platform's influence.
The rotating platforms are a cheat. I create an object that appears to be a moving platform, but I override the physics methods that would normally add up accelerations into velocities into positions, so they remain stationary. The hitbox that would normally keep the player fixed in place by matching velocities then pushes the player to the left or right, depending on what I set the velocity to. I don't bother calculating the real rotational velocity because I don't have to. The seek ground code keeps the player moving on a circular path and the steady horizontal velocity looks good enough.
http://www.youtube.com/watch?v=RQ4k722iNRo
This game is going to be hard as shit. Nintendo hard.
SC2 NA: exoplasm.519 | PA SC2 Mumble Server | My Website | My Stream
Here's the level code for that particular room:
Right now, such camera hints are simplistic and are pretty much limited to a box that the camera will consider to be the playable area. I hope to add additional camera features, like intelligent framing, but at this point, I think I'm ok with simple "always centered unless near the edge of the playable area" behavior I have now. It's less distracting.
My favorite piece of code is this baby:
It says: Tell the engine to spawn in a new object that moves back and forth on a pre-defined path at a speed of two pixels per frame and make that object a walkable platform. Place it initially at (1960,1200) and take on visual style #1 (I ran out of good colors).
Because the MovingObjectWrapper can be applied to any object at all, I can make platforms move, affix enemies and other hazards to spinning poles, and create irregular paths for platforms (like in 2D Marios). It's yet another way to leverage object orientation.
You should really think hard about this. "Nintendo hard" gets tossed around a lot by indie devs, and it usually just means frustrating. Most Nintendo games were hard because of cruddy controls or bad design. Simon Belmont couldn't alter his direction during a jump. Samus started new games with 30 life no matter how many e-tanks she had. Ninja Gaiden had those goddamned birds.
A lot of rom hacks are "Nintendo hard", and it's usually an excuse for the developer to put pixel precise jumps, poorly placed enemies, and bad level design. These are the reasons I never finished Eternal Daughter, Super Metroid Redesign, or most of the Megaman rom hacks.
Basically, if your fight is challenging for x reason, it should be beatable with y skill.
Pattern : memorization, tell recognition, quick reflexes
ie: most platformers
Attrition : Stat grinding, luck
ie: RPGs, later castlevanias
Puzzle : game hint recognition
ie: 3d Marios/Zeldas/Metroids
I guess I'm just saying don't make it hard just for the sake of being hard.
I hear you, and since this is just a casual project and I've never made a game before, I'm playing it by ear.
One boss, the cloud of bouncing spike balls, is a bitch until you realize that you can round them up by running back and forth underneath them, lure them to a cliff edge, and punch them off in a group. That's more of a puzzle-type boss. If you dive in, it's close to impossible to win. Stepping back and developing a strategy allows you to win every time, easily. Hard at first, but fun and rewarding.
This boss, the spike cannon on booster rockets, is still under construction. Beating it will depend more on pattern recognition and quick reflexes. Each move either happens at a regular rate or is signaled by a tell. There are no unavoidable attacks. The biggest challenge comes from the fact that ranged attacks barely scratch it but melee attacks put you dangerously close to the hazardous fire and flying projectiles. It also speeds up as its health gets low, so you have less and less time to get away.
I can't find the right strategy to beat it quite yet, but if I can't figure it out in this incarnation, I'll make it weaker, slower, or change up the terrain to offer some safer places to attack from. I want the game to be hard but definitely not frustrating or stupid.
Also, if anyone has any ideas for bosses, artistic, attack patterns, premises, or just plain cool ideas, post them in here. For the longest time, I thought I had this wealth of ideas for every aspect of a game, but now that it's time to start putting those things into play, I'm getting game designer's block. I want to get a cool demo together to drum up some interest.
I need music for Forest, Hills, and part of Factory. The level design is about 50% done on Factory, 40% on mountaintop, and essentially 0% on the others. I need music for Factory
I'm actually using your Tema_#1 for the factory boss battle so let's start with that. It would be perfect if you could revise it so that it works well for a video game, then get it to me either uncompressed or in OGG format so I can program the revised music system around it. Right now, the music system consists entirely of me telling the SDL framework to play a file located at a path. I'm revising it to work with chopped up bits of music that loop and fade. I'd like a song to use while programming and testing. Here's the sections I'd need of Tema:
Bare into with piano -> Loopable with symbol beat for level -> Bridge (if needed) -> Loopable intense beat for boss battle -> Outtro for boss defeat
So each segment of music gets this set of properties. Segments can transition to other segments either immediately, whenever they have finished a loop, or at set breakpoints, defined as a list of times in milliseconds. Each level will be able to queue up segments at load time (or live as play goes on) and then use game conditions to tell the music when to change from one segment to the next.
That way, I can use wave data rather than MIDI or MOD music and still retain some properties of dynamic video game music. In the future, each segment will have rhythm cues (maybe two or 3 tracks of them if needed), defined just like the breakpoints, as lists of times in milliseconds into the sample when beats occur. That will form the foundation of the rhythm gameplay.
Also, I loved the kid-in-a-tomato-can concept art.
Would that be too ambitious? It wouldn't be a problem on my part. Also, how long would you preferably have each loop?
Edit: Done! Right now it is chopped into ten parts with no fills. Uploading now.
Absolutely not too ambitious. I wrote up the gapless looping stuff this morning. It works well, no skipping or jittery music. It supports an arbitrary number of music sections, both looping and one-shot, in any order. Any type of music section can lead into any other type. There's no randomization, but I could either pre-calculate it or add it in.
I'd like to keep individual files in the music under 2:00 the the sake of the rhythm sync code, which reevaluates once per loop or section change (much longer and errors seem to accumulate, throwing the rhythm track and audio out of sync).
They should all be loopable except the outro. Which is also loopable, it just doesn't make any sense to do that.
One problem: the "First Loop Bridge To Second Loop" doesn't bridge the first and second loops. I checked it in Audacity to make sure it wasn't the game misbehaving. On investigation it seems like maybe you swapped the labels on loops 2 and 3. I'll look at it in more depth later. I've got to go for now.
Thanks again. I'll post a video once the factory level is finished and the playable demo is just around the corner.
Alright - listening to the uploaded stuff, I scewed up at least a few things. Second_loop starts with the last bar and then goes through 1-3. The First to second bridge is the correct one, but it is cut very short. I'll fix it.
I know that the SDL mixer, my sound API, is capable of doing everything I want it to do. It can loop sound files, fade them out, keep synced to a timer, and push two files together in a gapless fashion. I just need to build a class to control it better.
I need to revise my implementation of this music system to allow for more flexibility and better RAM usage. Right now, the game is caching the same loop 3 or 4 times because it's used by multiple levels. This will be a great data set to program off of.
The beginning (Intro->Bridge1->Loop1->Loop1Buildup->Bridge2->Loop2) is perfect, however. It's all good enough to use in development, but eventually those last 4 will need to flow also. Don't worry about it for now.
They were a little quickly done, but I think they'll work.
Edit: gah! I still missed the fourth transitioning into the bridge..
For example, originally, the factory boss would enter the screen when the player stepped into a certain space in the level. That trigger would also tell the music: "At the next possible moment, break out of your current loop and head to music section 5." Where section 5 would be the bridge into the more intense portion of the music. Bridges auto-advance.
Now when the player crosses that invisible line I tell the music the same thing, but I tell the level to check on the music and make sure not to spawn the boss until that transition happens. The music is just as dynamic, but the level triggers can read off when the dynamic cues actually happen, so at times when events need to sync with a certain sting in the music, for example, that can happen. You'll see it all in action when this segment is done.
Now to finish Factory 1, create Factory 2, and polish Factory 3. Then I've got my first level completed, dynamic music and all!
If I may offer a suggestion however, it appears you are using additive-transparency particles now (good move, it looks much better) but in your last screenshots, the particles were still quads, albeit transparent quads, have you given any thought to using an alpha mask to soften out the particles?
Here's some simple examples of simple softer looking particles, one is just a standard softer particle and the other was just me messing around. Just texture the particles using a texture with an alpha channel, and you'll get a lot better results. You can of course also animate those particles to get more fun results, and there's a million other tricks you can do with particles to make them look effing sweet, that should be an easy one if you haven't done it yet though. I suspect you have, but anyway, keep up the good work, I'd love to play a build, even if unfinished!
How would I go about texturing the particles? Here's the draw code for the ParticleJet object, the basis for the player's limbs, the blue fire coming off the blue spike balls, and the jets on the factory boss:
Can I still use glPoints or will I have to figure out a way to generate an array to use with quads and triangle strips? I've done it before, but a lot of the efficiency (in python, not OpenGL) on the particles comes from the fact that I'm using glPoints.
If I do have to convert to quads or something, I will eventually, because you're right, it'll make the particles look much better. If not, please let me know. I asked around for a while but no one seemed to know how to do it with points.
The cutout I made (I load up a 32x32 version of this for the game):
How it looks:
What happens when you put your face in the fire too many times trying to get a screenshot:
Much nicer. Thanks for the push to fix this now.
Warp to next checkpoint (helps a lot in testing)
Infinite Health (again, helps a lot)
Infinite Jump frames + air jump (really, really fun, especially the way the game looks)
A Sonic the Hedgehog-style debug mode where you can insert almost any object in the game
The debug mode is the coolest. You punch in a code and instead of just being able to cycle through the allowed projectiles, you can cycle through all in-game objects. That includes things like enemies, platforms, various animations, and even additional player characters, which can either be hooked to your controller object, an AI controller object, or nothing. I like spawning the factory boss in the middle of other levels.
The Factory Boss:
Moments later...
Also, did anyone else chime in with some music (see what I did there?)? I could take a look at some of the other scenes, since I've just finished exams.
Also acquire some kickass artists!
I can't remember if I mentioned it before, but:
http://conceptart.org/forums/forumdisplay.php?f=44
"I have an actual factual engine" would be a far cry from the usual "I have a comic book idea, but no skill" posts these guys usually suffer. And there's some real talent there. I don't remember if CGtalk has a similar subforum, but some of the non-pros there are also golden.
Visti, your music is great in the factory level. It's working great, the loops are a good length, and even the shortest segments aren't grating or repetitive. I implemented an ambient noise track too, and it sounds good with the storm sounds I have going in the back.