Allegro.cc - Online Community

Allegro.cc Forums » The Depot » [KrampusHack 2020] DragonWrath

This thread is locked; no one can reply to it. rss feed Print
[KrampusHack 2020] DragonWrath
Mark Oates
Member #1,146
March 2001
avatar

DragonWrath

About

This is my submission for KrampusHack 2020 (Gift for RmBeer who wanted a fury of dragons!! 🎉).

It's a shoot-em-up where you, a dragon protagonist, take on waves of dragon enemies in an attempt to restore peace and tranquility to your kingdom. There's currently 1 level (which you can actually edit! :)) and a boss.

Screen Shots

{"name":"612783","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/b\/0b21b37de4cf14100f780605c67a7a40.png","w":1920,"h":1124,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/b\/0b21b37de4cf14100f780605c67a7a40"}612783

{"name":"612781","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c8eec2d514c2b8da4033711ff5231269.png","w":1920,"h":1124,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c8eec2d514c2b8da4033711ff5231269"}612781

{"name":"612782","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/3\/73ba2fe0bb3c12e3d87671d28427f4fd.png","w":1920,"h":1124,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/3\/73ba2fe0bb3c12e3d87671d28427f4fd"}612782

Downloads

Instructions

  • Use the arrow keys to move the dragon up and down

  • Press the spacebar to shoot, and hold to repeat refire

With more time, I would have added a limitation that you can only refire at the set rate. Currently you can re-press the spacebar quickly to refire faster than the rate limit.

Giftee Wishes from RmBeer:

  1. DRAGONS!!! I love dragons and you can't miss it!!! IT CAN NEVER BE MISSING!!! \o/ (A horrible punishment awaits you by the worst art >:@ )

  2. Make your game exciting and overloaded, like Counter of Sega Genesis style, although it does not have to be action platform like in the game, all you need are fast movements, explosions, races, missiles and shots, whatever crazy chaos you may have it occurs to you, even if it's a quiet puzzle game take it out of its place.

  3. Write a funny story for the game. Apply animations, pixart, dialogues, or whatever seems most comfortable to you as long as you can add the story to the game.

Notes:

As far as the wishes, I managed to get in dragons and picked the most furious genre I know of, which is a classic arcade shooter. It's missing a compelling story and storyboards, but should have a decent flurry of classic side-scrolling fun.

What's missing most is the behavior for the last boss, which currently is just him staying there and taking damage if you shoot him. Hopefully you don't run into him and lose a life in the battle! :P

By the way, if you wanted to, you could modify the data/levels/level_1.generated.json file and make your own waves of dragons! The structure should be pretty clear what each of the elements represent, and you might take a look at the scripts/ folder which has the ruby scripts I use to generate the json for the first level :).

I hope you enjoy it!

Excuses / Pleas

  • My submission was submitted a little late, but I've provided the entry as-is without any post-deadline-added features.

  • If I had more time, I would have liked to expand the boss behavior which is what I was in the middle of doing before I crashed hard at the end of the day. The game is probably only about an hour's work away from having the final boss dragon being a compelling enemy.

  • I had hoped to work in animation on the player dragon and enemies. They are currently static, and the only animations at this point are the poof explosions.

  • I hoped to add a ton more explosions. I have the assets and sound effects for them, the engine should support a smooth install of any new animation frames/sequences, but I didn't get to it and preferred gameplay tweaks instead.

Celebrations / Achievements

  • I'm really excited about this architecture, which is one of my favourites so far and a culmination of a lot of hard work and attempts and iterations from years of past work, most notably previous KrampusHacks.

This time around, the system showed itself to be able to handle much more abstractions, and I feel like the next instalment might approach a development style that's more "game-out-of-a-box". I absolutely loved the workflow of switching between the different platforms to test builds.

Live Streaming

This year I did a lot of live streaming. What an amazing experience! It was challenging to talk as I coded, but it ended up being so much fun I got a sweet mic to level up the experience. I also managed to iterate over my setup several times each day (I tried to "pick one simple thing each day to improve the stream") and finally got an incredible setup where I could switch between development on MacOS and Windows, all while switching the streaming feed seamlessly. For what that was like, here's a clip I recorded from about day 7 ;D:

https://youtube.com/v/9SB8iDNoVws

Edit: For some reason allegro.cc is pruning my screenshots/attachments. I've re-uploaded the attachments and moved files to Google Drive so hopefully it works.

SiegeLord
Member #7,827
October 2006
avatar

I loved the intro and the art style, very polished. Kind of reminded me of Cave Story. Did you make the music/graphics? They were very good.

As for the game itself, it was pretty basic, but I see the potential. I liked the sampling of patterns.

I also tuned in a few times into the livestream, it was fascinating!

"For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18
[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]

RmBeer2
Member #16,660
April 2017
avatar

It's very good. I liked it. I like art and its style, it reminds me of arcades. You achieved the wish I most wanted, I'm already satisfied. xD

The game is very well done!! :D

He still has some problems. Since I'm unable to change the screen resolution, I have checked the source code and all the size values are scattered throughout the code. It's also slow, it even causes delays in events, I don't know what the problem is.

I would like to see it finished, with more levels, if you plan to continue working on it. :3

g++: error: unrecognized command-line option -ferror-limit=1

This error appear in linux, you need avoid this parameter also in this system.

🌈🌈🌈 🌟 C/C++ 🌟 GNU/Linux 🌟 IceCream/Cornet 🌟 🌈🌈🌈

Rm Beer for Emperor 2020!

Mark Oates
Member #1,146
March 2001
avatar

SiegeLord said:

Did you make the music/graphics?

I did not! This time around I got graphics, fonts, audio, music from itch.io, opengameart.org, and freemusicarchive.org. The music is from the artist sawsquarenoise of whom I am now a fan! :D

RmBeer2 said:

He still has some problems. Since I'm unable to change the screen resolution, I have checked the source code and all the size values are scattered throughout the code.

Yea true. A design decision was made to hard-code the resolution into the game. I don't have a good switcher yet, unfortunately. Is it too large or too small?

Quote:

g++: error: unrecognized command-line option -ferror-limit=1

This error appear in linux, you need avoid this parameter also in this system.

Ah interesting. I didn't run any compiles on Linux. I wonder if I could set that up with a PI.

Quote:

It's also slow, it even causes delays in events, I don't know what the problem is.

Can you give a little more detail on what kind of slowness you experience? It does run laggy when I've had a lot of programs running in the background, but runs smoothly on my MacMini and Windows laptop.

Quote:

I would like to see it finished, with more levels, if you plan to continue working on it. :3

One day perhaps. :). I've already spend a significant amount of time attempting to abstract the system entirely and have a pretty good map.

The system is very open for extension and you could make new enemy types by following the design pattern of any of the classes in DragonWrath::Entities::Enemies::* like the PurpleDragon and tracing it through the system (where it's spawned, built, spawn event emitted, etc).

If you wanted to experiment with enemy design, you could fuss around with the Enemies::SuperBoss and start the game with the "boss" level, which is listed in the initialization list of the DragonWrath::GameplayScreen.

Anyway, point being it's written to be flexible, so adding enemies, levels etc. should work without breaking anything.

GullRaDriel
Member #3,861
September 2003
avatar

Nice entry, liked it. Remind me of old NES/SNES games.
A few things:
-Had to build it myself because it's compiled for msvc but the dlls are not provided (not a big deal, thought it's giving a giga tons of warnings)
-Speed, power level and stuff got reset when I met the boss. I was having a super blaster/full shield/one speedup the instant before the end of the level, and then it went back to basic.
-The last boss was not moving at all nor throwing things. I just had to stay in line and wait for him to die

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

RmBeer2
Member #16,660
April 2017
avatar

I have forgotten my manners. Thank you so much by the gift!!! It's better than I expected! :D

I have also forgotten to say that the dragons are well drawn, although I said it in an indirect way, it has not been clear there.

🌈🌈🌈 🌟 C/C++ 🌟 GNU/Linux 🌟 IceCream/Cornet 🌟 🌈🌈🌈

Rm Beer for Emperor 2020!

Elias
Member #358
May 2000

The makefile did not work (and the .exe was missing DLLs so had to build myself):

compiling object file src/allegro_flare/path2d.cpp...g++: error: unrecognized command-line option ‘-ferror-limit=1’

However just removing that option fixed it!

The game is really nice, reminds me of Pegasus: https://www.youtube.com/watch?v=AJZPxw8nmkU

I wish there were more levels (and a way to resize the window to 2x the resolution).

--
"Either help out or stop whining" - Evert

Dizzy Egg
Member #10,824
March 2009
avatar

Get this error when running the binary:

{"name":"612805","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/1\/9105b44547df3cf1bfb69929c42d067d.png","w":546,"h":259,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/1\/9105b44547df3cf1bfb69929c42d067d"}612805

Will try and compile myself later.

----------------------------------------------------
Please check out my songs:
https://soundcloud.com/dont-rob-the-machina

Mark Oates
Member #1,146
March 2001
avatar

Elias said:

compiling object file src/allegro_flare/path2d.cpp...g++: error: unrecognized command-line option ‘-ferror-limit=1’

This appeared on Windows during compile, too. You're on Linux? That flag is used entirely for development and can be removed. Essentially it makes it so a single error doesn't spill out into the terminal as a cascade of error messages that I have to scroll up on.

Dizzy Egg said:

Get this error when running the binary:

Ah, I completely neglected to include the dll files :'(. I have a list somewhere. I may have some time after work today to fix it up.

On both of these, I actually had a "releaser" program that was designed to do all this work for me, dlls, cleanup Makefile. I should have leaned on that. I did write some documentation on it at some point.

RmBeer2 said:

I have forgotten my manners. Thank you so much by the gift!!! It's better than I expected! :D

Ah, thank you. I appreciate that. I definitely learned a lot this time around. Again, the architecture is designed to be maximally flexible. I was watching Contra: Hard Corps yesterday and was watching all the varieties of enemies and designs for bosses and backgrounds. In principle, DragonWrath should be able to handle those designs. The majority of the work is explicit design and programming work on those enemies, backgrounds, and environments directly, rather than "making it work" in the system :). Once I get past the hangover of the hackathon and starting back work again in 2021, I hope to have some time to really explore that and design some really compelling gameplay, which is a level of game programming I've never been able to get to :).

Elias said:

Pegasus

OMG it's the saame game!! :o:o:o 🤯🤯🤯

amarillion
Member #940
January 2001
avatar

This game looks and sounds great! I know you can't claim credit for the graphics, but still, when you put it all together it works. And yeah, the boss is a bit boring like this, I would love to see what you'll come up with in that extra hour...

Are the power-ups completely random? There doesn't seem to be a pattern to them. I really like to get a speed boost early, but sometimes you don't get one until the end. Most gradius-type shooters start with that.

On windows, after I put in place my own dlls, I get the same error as DizzyEgg. And for some reason, running "objdump -p DragonWrath.exe" comes up empty. I have no idea why that doesn't work. Building on linux was fine, I also had to remove the "-ferror-limit-1" bit.

It would be nice if you could make a windows binary bundle including dlls, so that I can include it in the binary pack.

--
Martijn van Iersel | My Blog | Sin & Cos | Food Chain Farm | Support TINS

Mark Oates
Member #1,146
March 2001
avatar

This game looks and sounds great! I know you can't claim credit for the graphics, but still, when you put it all together it works.

Thank you. My typical approach in the past has always been to do everything myself (graphics, music), but that is such a major time sync and that make it harder to have a birds-eye view. I've never "finished" a project, and I believe this is one of the major reasons why.

Also at work, when we talk about advancing in your career it usually comes with a discussion about delegating tasks to other people. So, I've tried to take that a little more seriously in order to get projects closer to completion.

I really liked the general design. I would love to have a small team (composer, graphic artist) who can dedicate their craft as I focus on the engine. Ironically, I don't find myself compelled as much with the gameplay design. So many different hats.

Quote:

Building on linux was fine, I also had to remove the "-ferror-limit-1" bit.

Cool. Maybe I could setup a Raspberry PI to run linux builds just to be sure there's not bumps on the platform.

Quote:

It would be nice if you could make a windows binary bundle including dlls, so that I can include it in the binary pack.

DLLS, yea I completely dropped the ball on that.

Ok, I can make a Windows binary bundle and will hopefully upload it in a few days. I do have a list of the needed DLLS in a text file somewhere.

amarillion
Member #940
January 2001
avatar

I actually managed to get the right DLL's together yesterday. They're included in my binary pack

The problems I was having earlier is that the binary you provided is 64 bit, whereas I still tend to target 32 bits for extra compatibility. I recompiled allegro with a 64 bits toolchain, recursively tracked further dll deps with objdump and presto.

Now if only somebody could help me with archdark's entry...

--
Martijn van Iersel | My Blog | Sin & Cos | Food Chain Farm | Support TINS

Niunio
Member #1,975
March 2002
avatar

Can't play it:

I'm using Windows 7. The window is massively big and part of it overfloods the destktop (the title, so I can't move it). Initially I presumed it was because I use two monitors, but I've deactivate the second one and it just returns a runtime error (Windows doesn't give any detail, you know, a "it just failed and Windows is looking for a solution" type of
dialog).

-----------------
Current projects: Allegro.pas | MinGRo

amarillion
Member #940
January 2001
avatar

DoctorCop was having the same problem with my game. You can make a window resizable, but you can't make sure it fits from the start. Is there a way to get the screen size before you create a display?

--
Martijn van Iersel | My Blog | Sin & Cos | Food Chain Farm | Support TINS

Mark Oates
Member #1,146
March 2001
avatar

Niunio said:

The window is massively big and part of it overfloods the destktop

The window should be a standard 1920x1080. What kind of monitor do you have? Is it a retina? I've had some issues with other programs creating windows that are way too large, but I don't believe that should apply in this case.

Peter Hull
Member #1,136
March 2001

Is there a way to get the screen size before you create a display?

Does al_get_monitor_info work here?

Elias
Member #358
May 2000

This is what my krampushack game uses:

ALLEGRO_MONITOR_INFO info;
al_get_monitor_info(0, &info);
int w = info.x2 - info.x1;
int h = info.y2 - info.y1;
al_create_display(w * 3 / 4, w * 3 / 4 * 9 / 16, ALLEGRO_RESIZABLE);

My game itself uses a fixed 1280 x 720 resolution but I call al_set_clipping_rectangle() to limit drawing to the largest 16:9 ratio area in the center and create a transform with al_scale_transform() and al_translate_transform() to map any coordinates from 0/0 to 1280/720 into that area. For drawing I use it with al_use_transform() and for mouse coordinates I apply the reverse transform.

Of course I'm not using any pixel art so that makes it easy to just transform coordinates :)

--
"Either help out or stop whining" - Evert

amarillion
Member #940
January 2001
avatar

Good idea! I've added it to my code as well.

--
Martijn van Iersel | My Blog | Sin & Cos | Food Chain Farm | Support TINS

Niunio
Member #1,975
March 2002
avatar

The window should be a standard 1920x1080. What kind of monitor do you have?

1366x768 ::)

-----------------
Current projects: Allegro.pas | MinGRo

amarillion
Member #940
January 2001
avatar

At my day job, we target 1280x768 as minimum screen size. There are some customers out there who use that.

I'm afraid you're living in a Mac-infused techno bubble Mark :)

--
Martijn van Iersel | My Blog | Sin & Cos | Food Chain Farm | Support TINS

Mark Oates
Member #1,146
March 2001
avatar

I'm afraid you're living in a Mac-infused techno bubble Mark :)

I think this is true. ;D

At my work we have a "sympathy station" where we have a "typical customer"'s computer so we can understand what their day-to-day is like.

Go to: