First of, I wanted to give 1000 pixel KUDOS! to the GD challenge organizers and to all the entrants cheering each other and giving motivation to meet the deadline.
I joined GameDev Challenge to force myself to finish a playable prototype game out of my simple and heavily under development game engine sit on top of MonoGame; after leaving Irrlicht, XNA and Unity years back, I'm back again to my game development hobby specifically started again last year after I find out that MonoGame is very much alive and kicking and targeting multiple devices now, ( but I'm planning to use Unity again on it's current form) anyways, but what's the purpose of me making a game engine if I cannot make a playable prototype game from it? So I joined GD Challenge to make a collection of prototype game out of my engine.
Froggy Hop is my 3rd entries after joining Multiplayer PacMan and Tower Defense challenges and what do you know ^_^y I now have 3 working playable prototype that I can expand, revise, enhanced and maybe later release it on other platforms if ever the prototype becomes commercial grade. Here goes some of development incidents and it's implication on completing the project and meeting the deadline.
WHAT WENT RIGHT
1. Applying fake model animation tricks :
From the start I know I don't have much time to do all the characters modelling, rigging and doing all the skeletal animation stuff, it requires a lot of time and a very tedious process for a none 3D artist like me, but I think I can code some additional component much faster than rigging and animating a model. What I did was, create an additional entity component and called it Grow and Shrink Component, rather than creating a skeletal animation of snake with crawling action which will take some time and additional memory bandwidth of mesh frames on my content manager and I think it's a nice additional features of my engine.
FAKE SNAKE WALKING ANIMATION :
I've just created a static Sake Model and apply the Shrink and grow component to it's entity to mimic that it's walking by just applying minimum, maximum scaling and it's growth and shrink amount, What's cool about component is that it's an apply and forget on the game logic, but of course the system device engine will take care of it, assuming I'm just a user.
FAKE BEE WINGS FLAPPING :
Another fake animation again O.O, I Add rotation component on Bee wings and rotate it fast enough to mimic that it's flapping it's wings; and add it as a child entity to the bee's main body.
2. Using a grid base node path :
Using my existing grid node routine that I've used on my Multiplayer PacMan entry, PacMan is actually 3D but in 2D representation most of entity there are just a 3D Quad.
In this entry the Level map model is just a display and an eye candy it really has nothing to do with the game logic, the player is just repositioning on the grid node world position base on user's input just like what I did on Multiplayer PacMan.
3. Using simple collision detection:
Alright folks now let's hit the nail with a tank! 😄 and apply some cool and lovely physics engine like HAVOK, NEWTON, ODE or TOKAMAK that would be cool right ? WRONG! NO! WRONG! NO! ( speaking to self ) for this type of game I think I can implement a much simpler collision detection without using a heavy weight 3D physics engine.
Ok let's just use Bounding box or Bounding sphere since it's already available on my engine, upon applying the component it will automagically transform and recalculate it's bounding properties AAB or OOB for BBox when the entity orientation change sounds cool!? WRONG! NO! WRONG! NO! although it will suffice my needs for collision detection, but I think theres a much lighther and easier way to implement collision for this type of game.
Distance checking! Horrray! HepHep! Horray! : -D how about adding a minimum distance property for each entity and compare that to the player position, yep, I just use distance checking for the collision and I just created a collection of obstacle list per region, I dont have to check other obstacle that's too far away to collide on the player, if player is on region 1 in the map and theres only two entities over there; for example two bees it will only check collision for those two bees, I ended up using a very simple collision checking routine which I think did the job done. I hope I followed the KISS design principle in this entry, the code is not relevant to this post but wanted to share the code I've use is just a simple routine.
3. Using tools I'm more familiar and comfortable with the usage:
I use Bryce 5 the splash screen; MagicaVoxel, FragMotion, MilkShape and DeleD for modeling, rigging and animation; .Net paint and Gimp for any texture manipulations and Audacity for trimming and adjustment to background musik and sound effects.
WHAT WENT WRONG :
Aside from a month not playing Legend of Zelda Breath of the Wild to finally finish it and playing other games; really, nothing really went wrong :- D
Using features not yet available on my engine :
Initially I don't have plan on putting shadow on this entry, I just want to apply simple sobel filtering normal map shader on the level model and just using Basic effects on other entities, but my spider sense is tingling that it would be nice if it has a shadow, but my shadow map shader is still work in progress and has bugs and no TCF implementation or what so ever aside from that I'm using sobel normap map shader which I will need to incorporate with light sources with sobel normal mapping and shadow map! WHAT!!! It really causes heavy delay on the project, I posted my shader problem here and there, but eventually found a solution for the fix.
I almost gave up on this entry due to lack of time, but that's where the weakness lies in giving up not just on this entry but in general, one or more try will not hurt and see where it goes; More or less my experience on this challenge is awesome and it's the game I made that my GF wanted to try and play testing up to completion at least she knows why I'm busy after work ^_^y I just always get too tired when shes around LOL.