PDA

View Full Version : OpenFire game: top-down shooter, bullet hell



eugeneloza
12-04-2016, 08:26 AM
Sometimes it's so hard to find motivation... OpenFire is a simple game I've written in 5 hours (one night) in Castle Game Engine (Lazarus/Free Pascal) + 1 hour for graphics and 3 more hours of testing, playing and having fun :) Still no sound&music, no menu (as usually :)) It's a game inspired by an ancient CrossFire (1981 by Jay Sullivan) game.


The goal of the game is to eliminate all enemy bots. Use arrow keys to move and WASD to fire at 4 directions (hold down the button for rapid fire). Player has 200 HP until death... and that's not much...
You can move only vertical or horizontal direction at the same time, and movement automatically stops at crossroads (you can invert the movement direction).
Enemies come in groups of 3+ starting from lazy easy form, after destroyed they transform in more healthy and powerful medium form and finally into tough, quick and rapid-firing hard form. Occasionaly hard form after being destroyed transforms into boss form (the name says it all).

http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1407&stc=1http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1405&stc=1http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1408&stc=1http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1404&stc=1http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1410&stc=1http://www.pascalgamedevelopment.com/attachment.php?attachmentid=1406&stc=1

video:

FireMadness walkthrough: Part 1 - Bedroom (hard)

https://www.youtube.com/watch?v=zmmAjvgzKJ4

FireMadness walkthrough: Part 2 - Living room (hard)

https://www.youtube.com/watch?v=R7ISGE4USbA

FireMadness walkthrough: Part 3 - Cellar (hard)

https://www.youtube.com/watch?v=pD1BE2xEmlY

FireMadness walkthrough: Part 4 - Kitchen (hard)

https://www.youtube.com/watch?v=hgSkMY-CcjM

FireMadness walkthrough: Part 5 - Attic (hard)

https://www.youtube.com/watch?v=c7kDvQ7R2sY

Code: https://github.com/eugeneloza/FireMadness
Release: https://github.com/eugeneloza/FireMadness/releases (Windows, Linux)

Ñuño Martínez
12-04-2016, 12:36 PM
Looks like those "sports" played in science-fiction by prisoners while it's transmitted by the global-entertainment-network...

Nice game. :)

SilverWarior
12-04-2016, 09:24 PM
Do enemies have any specific AI built for them or are they just randomly wandering around and shooting in random directions?

eugeneloza
13-04-2016, 08:06 AM
New betta release: Music, sound and explosions!
Updated video.

@SilverWarior
No, no serious AI. And I don't think it's needed.
If bot is inactive it has high chance to become active if "activebots<3" and random low chance to become active each frame.
If bot is active it tries to do one of 8 random actions: move in 4 directions if not already moving or shot in 4 directions. Movement are subject to additional random chance determined by bot mobility (i.e. random<mobility) - this is the chance that bot 'stops' at crossroads.

SilverWarior
13-04-2016, 05:22 PM
Here are few suggestions for improving of your game:
1. I would recommend you change the way how enemies shoot. It seems weird when player is on the left side of the enemy but the enemy is shooting toward right. So I would recommend implementing a simple check so that if players if left side of the enemy the enemy would actually be shooting toward left and if the player is right side of the enemy the enemy would be shooting toward right. Same goes for shooting up or down. This would make enemies a bit smarter and also increase the game difficulty a bit so you could implement this as a staring option for changing of game difficulty.
2. I would also suggest implementing the ability of enemy to go and fire a dense salvo of shots toward the player when player remains in the same line or same col for certain time. This would make destroying of enemies by firing a dense salvo of shots a bit more difficult. Right now you could risk of being hit by a few shots yourself while raging a shooting salvo at the enemy. This could also be as an starting option for changing of game difficulty.
3. Another suggestion of mine is implementing damage multiplier. When I'm watching of your video the game pace seems a bit slow. But if you add a damage multiplier with which players can chose that all shots deal more damage it could increase the game pace a bit.
4. You should definitely implement a hot seat multiplayer support. Fighting enemies with your friend in Co-OP mode would be more interesting.

That is it for now.

eugeneloza
14-04-2016, 10:02 AM
Uploaded a new release and code.


Here are few suggestions for improving of your game
Thanks a lot for the ideas.
1. ---- I've been thinking of it and I thought that visual effect of 'screen full of bullets' would be better. But today I've tried this idea and it works perfectly. Implemented in today's code upload. (Only Linux32 release is 8-th version, others still shoot randomly).
2. ---- Seems to be fixed by pt.1. I may deliberately make such stuff like enemies cornering the player and acting in groups, but still doubt if this would be interesting - the game is hell hard even now :)
3. ---- I think it's better to increase fire rate (shots per secons), more fun :) Practically implementing pt.1 doubled the firing rate (in several cases 3.5x shooting speed) because bots don't shoot all directions and with the same firerate they fire 2x/4x bullets towards the player. There are many ways I can implement higher difficulty.
HOWEVER, the idea of a bot shooting much more powerful charges but not as often as others do might be a good way to increase diversity. I've got to model a few more enemies :) Thanks to Scorpio@opengameart construction set it's not very complex.
I have also an idea of an enemy capable of disabling player control for a short time if hits - (fire/movement) separately.

4. You should definitely implement a hot seat multiplayer support. ----- that's much harder :) Believe it or not I have never ever played a single multiplayer game either hot-seat or on LAN :)

I've also a question. How does the voice sound? I didn't include it in release (you may easily uncomment it in the code - there are two variants: hostile bot, reporting errors and a generic sound).
It seems that just a sound I've used previously sounds more... natural?
Voice fits fine heavy music, but when the music is calm I don't like it.
Or maybe I've just got my ears tired of it while recording?

https://www.youtube.com/watch?v=6RgkCIskOKE

SilverWarior
14-04-2016, 06:43 PM
that's much harder :) Believe it or not I have never ever played a single multiplayer game either hot-seat or on LAN :)

Actually implementing a hot-seat multiplayer in your game would not be that hard. All you would have to do is add new player bot and bind its controls to different keys or controller than your original player bot uses. And that is all.
Throwing a quick look at your code I guess you could do this in less than an hour due the fact that you are using OOP programing approach.


I've also a question. How does the voice sound? I didn't include it in release (you may easily uncomment it in the code - there are two variants: hostile bot, reporting errors and a generic sound).

I must admit that I haven't tried your game yet. Just watched the videos. I will probably try it out this weekend.


Voice fits fine heavy music, but when the music is calm I don't like it.

Listening to the music in your video I must say that I like it a lot.
Have you ever considered of using a semi-programmatically made music? Imagine for instance that you have several sound patterns and the ability to chose when and at what speed and volume each of them can be played. Using simple manipulation of speed, volume and which of these patterns is played you can make so that music that is being played is affected by game state. For instance when enemies are far away from you and thus you are in no danger the music is slow and easy but when you are surrounded by enemies and constantly under fire the music intensifies, gets a bit faster etc. That would definitely get you hart pumping.
If you have never played any game which would change the music based on the current game state then I strongly recommend you try Dune 2 (an old DOS based game) which was one of the first ones that was changing music based on game state. And its music is just wonderful.
And while its successors tried to recreate that they still can't beat the original one.

eugeneloza
15-04-2016, 08:50 AM
Uploaded new release (better AI, now it's wild hard!). Updated video.


Actually implementing a hot-seat multiplayer in your game would not be that hard. All you would have to do is add new player bot and bind its controls to different keys or controller than your original player bot uses. And that is all.
Well, at the moment I've already have 2 sets of keys assigned: up-down-left-right for movement, WASD for firing. In case of splitting the keyboard for two players I'll have to use <WASD>+<TFGH> for one player and <IJKL>(maybe <)PL;'> )+<cursor> for another... seems very short on physical space at the keyboard :)
The only trick is that I've already implemented mouse movement control (it's not as convenient as keyboard, but it's a step towards Android). That could release one quad of keys and then one player with <WASD>+<IJKL> and another <cursor>+<mouse> could do the job.


I must admit that I haven't tried your game yet. Just watched the videos. I will probably try it out this weekend.
The voice isn't in game. Only in video in this post (http://www.pascalgamedevelopment.com/showthread.php?32514-OpenFire-game-top-down-shooter-bullet-hell&p=147397&viewfull=1#post147397). Hovewer, the files are ready and to use it you need just to uncomment 3 lines of code and recompile. I think I'll make this as an option soon (or remove it for good:)).


Have you ever considered of using a semi-programmatically made music?
Adaptive (or interactive) music is very powerful. Yes.
But the music in-game is the one composed by Gundatsch@opengameart.org and it is 'as is' under CC-BY license. And it has only one vertical-sync pair of tracks.
So there are 2 problems: I don't have the appropriate "vertical-reorchestrated" music and I don't know how to change that realtime in the Castle Game Engine yet. I just load the music file, assign it high priority and play.
I am an amateur musician myself, but it usually takes ~7 hours for me to compose a track. E.g. 10 tracks would take me to 70 hours of work. Moreover, my skill is much less than that of an experienced musician, so the result would look rather petty compared to e.g. Gundatsch's tracks - first of all from soundmastering point of view. And I have absolutely zero experience in composing music for games (I've written ~300 relatively simple accompaniments for our singing group). I'll definitely have to do it for my Project Helena and Decoherence games, but that'll be later.

At this point I'm using the simplest approach to adaptive music - I just calculate EnemyPower (each bot type "worth" something) and selects next track based on this value (music context varying in easy-normal-hard-boss). However, the next track might come in 5 more minutes :) I'll need to understand how TMusicPlayer works for at least to adjust volume or cross-fade them.

P.S. There is a small problem with the game name, as OpenFire already exists as a jabber client. I've been advised GridFire, but it's also exists as Crossfire-clone :) WildFire? FireMania? Any other ideas?

P.P.S. I've found a very strange bug. The game runs slower on Linux and slows down on frameskip. Why??? I sync all actions to SysUtils.now timer... it should work as expected dependlessly FPS and OS... (FIXED)

SilverWarior
16-04-2016, 04:14 AM
Well, at the moment I've already have 2 sets of keys assigned: up-down-left-right for movement, WASD for firing. In case of splitting the keyboard for two players I'll have to use <WASD>+<TFGH> for one player and <IJKL>(maybe <)PL;'> )+<cursor> for another... seems very short on physical space at the keyboard :)

Well if I would have tried your game I might have known that you have 8 keys per players which makes things a bit more difficult. But still it is possible to have two players using the keyboard at the same time.
For player one you can use WASD + IJKL or perhaps UHJK.
And for second player you can use Arrow keys plus numbers from numerical part of the keyboard (does require full sized keyboard).
I also wanted to suggest you to add game controller support but taking a quick look at Castle game Engine documentation I haven't seen any information for CGE to even have any controller support.


At this point I'm using the simplest approach to adaptive music - I just calculate EnemyPower (each bot type "worth" something) and selects next track based on this value (music context varying in easy-normal-hard-boss). However, the next track might come in 5 more minutes :) I'll need to understand how TMusicPlayer works for at least to adjust volume or cross-fade them.

This is almost the same approach that is used by Dune 2. So all you have to do is find shorter songs so you can switch between them more easily or mix them up using different channels.

eugeneloza
18-04-2016, 08:52 AM
Name of the game changed to FireMadness :)

Huge overhaul. Almost release :)
Many new bot types + 3 more bosses.
Map manager + unfinished story mode :)
Hot-seat player co-op mode
Difficulty level
And much much more

Video and download links updated :)


And for second player you can use Arrow keys plus numbers from numerical part of the keyboard (does require full sized keyboard).
Done in 5 hours :) Now "controls" are fixed, but I'll make them user-assignable eventually. Of course, only full-sized keyboard.


I also wanted to suggest you to add game controller support but taking a quick look at Castle game Engine documentation I haven't seen any information for CGE to even have any controller support.
As far as I remember a commit for controller/joystic is pending :). So soon it'll be available.


This is almost the same approach that is used by Dune 2. So all you have to do is find shorter songs so you can switch between them more easily or mix them up using different channels.
I've finally found out a way to fade out and stop the music. Implemented.
P.S. I was a huge fan of Dune2 in late 90s... Finished it a few dozens times :D Even written my own RTS those days... but it was lost in the old computer...

eugeneloza
19-04-2016, 08:08 AM
New betta-release: a few improvements: better interface, better music handilng, "crossfire" map, better co-op mode, and others.
A few more interface improvements to be able to port it to Android...

Added new screenshots.

P.S. I'd be very grateful if anybody could look through the game texts (spoilers! http://forum.freegamedev.net/images/smilies/icon_smile.png) for errors and suggestions: http://forum.freegamedev.net/download/file.php?id=9712 . English is not my native language http://forum.freegamedev.net/images/smilies/icon_smile.png
Also I use x1.5 difficulty multiplier for co-op mode. Could anybody test if it's not too difficult/too easy?

eugeneloza
30-04-2016, 09:56 AM
Release candidate :D
Everything is up and working as expected.

I'd be very thankful if anybody could test the game against story and other maps being too hard. Especially multiplayer, as far as I have no-one to play with :)

Ñuño Martínez
05-05-2016, 06:45 PM
Unfortunately I have almost no free time lately. I would like to test it... :(

eugeneloza
08-05-2016, 06:29 AM
I've made a complete walkthrough on hard. Video is in the first post of the topic.

Still struggling with Android cross-compillation setup :)

eugeneloza
02-06-2016, 08:43 AM
Today Android - tomorrow the World!

Finally I've made an Android release. Still very buggy and huge in size (some problems with audiolibrary require uncompressed music storage... I hope it'll be fixed soon :))

Practically after successfully setting up FPC cross-compillation to Android (that was the hardest part), Castle Game Engine compiles Android apps like a charm without any need to make some platform-specific code!

Android overhaul.
Joystick / gamepad support thanks to Tomasz Wojtyś
Interface improvements
Speed improvements
And more!

SilverWarior
03-06-2016, 12:08 PM
Nice!
Keep up with the good work

Rodrigo Robles
04-06-2016, 02:24 PM
Hei Eunege, I tested the game right now, It is very good!

I liked the fun story, the graphics are good, music and sound effects nice, playability is fun too.

The performance is good, It runs ok in an old 9 year desktop.

I missed a score counter (Am I too old school?)

I played it at medium dificulty, and even for my standards (I finished a dozen megamans decades ago) is hard.

For the nowadays game design patterns, it would be good to have finishable stages with a limited number of enemies, that would slowly becoming harder in the next stages. Finishable stages provide a reward for the player.

Excellent work, keep it up.

eugeneloza
16-06-2016, 07:37 AM
Hei Eunege, I tested the game right now, It is very good!
Thanks a lot for your feedback, Rodrigo!

When I've started this project I was just thinking of "endless" gameplay with score and ever-increasing difficulty each stage like the 1981 prototype. But finally I ended up with just surviving overwhelming enemy fire is much more fun :) But, maybe I'm wrong?

You think it'd be a good idea to implement "endless" mode with hig scores? It's not too difficult to do. I'll just have to make room not only for 'constant' maps but for dynamic-generated and check that there is no conflict with custom maps start/end.


I played it at medium dificulty, and even for my standards (I finished a dozen megamans decades ago) is hard.
Yeah... the controls are relatively complex (many new-school players couldn't get hang of that at all) and it takes some time to get used to.
I've found that different controls styles provide significantly different difficulty level. E.g. Android controls are much more difficult (I can hardly beat all maps on 'easy', while even 'hard' level is easier on PC).
Should the difficulty of Normal be lowered a bit?

I've been designing difficulties from the following ideas:
Insane - I can hardly beat that one myself.
Difficult - challenging for me, but usually I eliminate every map in one try.
Normal - I end the map with over 30% hitpoints left.
Easy - easier than Normal.


Finishable stages provide a reward for the player.
Well... practically story maps are progressively becoming ever difficult.
E.g. beating bedroom is no problem as soon as player gets used to controls and understands strategy for killing disablers.
Livingroom is relatively harder and more concentration is needed, but it's still easy to beat it.
Cellar is hard due to shielders working very efficiently in narrow passages and heavy bots. I had to reduce amount of enemy bots a few times to be able to beat it. Most problematic is the boss - Miner avoids fire and spawns bombs that can be taken out easily but do a lot of damage and distract from attacking the boss. And if there is heavy support it's a disaster.
Kitchen is nearly the same difficulty as Cellar, but the fact that healer bots are less effective but more annoying than shielders. And Carrier boss is a hard nut, because there is no way to resist the damage of the fighters like player could with mines.
And attic is the most problematic map because it is highly influenced by random. Sometimes it's impossible to beat, and sometimes it's relatively easy. I couldn't balance it right even by bringing in pre-defined spawn patters for Fi-Wi... And practically it became more an epilogue than a really hard map. It tests more reaction than manuvering and tolerates max 1-2 mistakes at Hard. So... the battle became epic, but not very interesting from gameplay point of view.

Any suggestions are highly welcome :)