Maybe its because of movies like Avatar, How to Train Your Dragon and Neverending story, there's just something pretty darn cool about the idea of flying a dragon. I've always had this idea at the back of my mind for a game where you are a flying dragon and you controlled the wings manually, rather than just another schmup with easy controls. So I'm real happy that I got the chance to turn this idea into a real life prototype.
Due to starting late, I chickened out of rigging my own dragon model and went ahead with an existing rigged dragon model. The first draft involved just using blendtrees to control the rotation of the wings. I mapped the vertical mouse movements to the flapping of the wings.
Next, the challenging bit - tuning the movement. This took a long while as either gravity took over, or the thrust provided by flapping wings was too much. I set it such that downward changes in mouse position caused a thrust proportionate to the amount of change made.
The wings were still looking a little awkward and flat, so I tried to make the animation for the wing joints a little more physics based, where the edges of the wings would curve more in the direction that the wings were moved in. One solution would have been to make the wing edge a hinge joint, but I settled for another set of blend trees on a separate layer of the wing tips.
The mouse movement being directly mapped to the wing flapping looked odd as well, so I added another intermediate vertical speed variable to the wings so that mouse movements would accelerate based on the mouse movement - which made the wing flapping feel more weighty and deliberate.
I also added the central mechanic of being a big, bad dragon: lighting things on fire. Particle systems with collision did the job pretty well, although I had to cut the light effect as that had a huge on performance. First time exploring the particle system in depth as well, and discovered the pre-warm effect which was instrumental in indicating a building was on fire immediately (as buildings were zooming by and I had to make it clear that the building was on fire, and wasn't a fan of just changing the material color immediately)
There was the issue of the dragon's pose being in a stand position, so I added subtle flying animations for the body and the tail. One thing lead to another and I added the barrel roll/aileron roll/dodge move, as burnings buildings meant that I needed to get up close to buildings, and I needed to have a way to quickly dodge out of danger. I think it doesn't feel that right at the moment as it rolls if in a 80 degree tilt, however a quick move of the mouse also triggers the barrel roll which is what I needed.
Then it was time to add collision, which was a pain - ended up placing box colliders all over the wings and hoping that it doesn't make the game too unfair. I experimented with destructible meshes but felt that it wasn't that ideal if I had to make all sorts of meshes and I didn't want the player to just go on a collision spree. So I settled on trees being able to fall while hit and spew out a rustling of leaves, while buildings stayed strong after colliding. Then I decided: why not put customized particle systems on all the obstacles in game? (Polish = more particles!)
There's a nice motion blur and depth of field effect added here but it was ultimately discarded as performance quite a hit and the motion blur looked odd in areas. Ended up using the unity fire effect rather than the custom effect as it was not very performant. Might see if I can optimize the use of these in the future.
I would say that this is the game that I applied the most polish to, even before I completed a single level. This is also a game of many firsts for me:
- first time doing a 3D user interface (although I forgot to turn off shadows cast by them!)
- first time applying EZ cam shake which was really much better than my usual random.range screenshake!
- first time using the audio mixer snapshot to cause flange effects when hit and a high pass filter upon death - that added much needed juice!
- first time polishing an end level screen to include some sort of scoring/ranking
- first time using blender to design a level (and had to make many, many edits!)
- first time using blender to make an airship, windmill - the rotor looks wonky, but it looks serviceable!
- first time with a truly interactive intro screen (should have snuck in a tutorial here!)
Stuff that didn't go so well
- Tutorial! I always thought that doing a good tutorial is hard, and its doubly hard given the novel controls in this game. The tutorial level was inadequate for explaining the mechanics of the mouse movement. Next time: I should publish an early build and seek help from some testers and really focus more effort on this if the game is more unconventional.
- Camera - I thought the camera was cool at conveying the scale of the dragon, the dizzying feeling of flying and falling, and indicating the bounds of the play area, but it does result in some possibly unfair moments where the dragon bumps into objects that are off-screen. Maybe I should do away with the scrolling camera movement, or at least make it more subtle.
- Controls - the controls still need fine tuning as apparently mouse sensitivity is an issue for players. I'm also not happy with the barrel roll being accidentally triggered sometimes, and hoping to work pitching of the dragon.
- Screen resolutions - I didn't test the game on screens of different aspect ratios and apparently players with 2 screens or a 3:4 ratio would have issues.
- Prefabs - started copying stuff like trees before realizing that I should've converted them to prefabs. I really need to organize my stuff beforehand!
- HTML5 - Issues with mouse control on HTML5. Didn't realize that was an issue until it was submitted!
- I ran out of time to do a boss level (oh well)
I'm keen to develop this idea more though, maybe to even scrap the format of a linear level, and make it an entirely freeform level to roam around. Wonder how the game would be if it looked like this:
Get How To Fly Like A Dragon
Leave a comment
Log in with itch.io to leave a comment.