Post Jam Brain dump
This is a brain dump of developing Medusa - Bad Hair Day for the HAGJ4 (Historically Accurate Game Jam 4).
How I came up with the original Idea
In the weeks leading up to the start of the Jam, the organisers ran a voting system to choose the theme for the Jam. The topics were eventually reduced down to three:
Mythology, World War 2 and The Industrial Revolution.
At this point I starting thinking about game ideas for the three. I quickly came up with ideas for
World War 2 and Mythology, but was not keen on The Industrial Revolution at all (that era was not kind to Ireland)
so decided I probably would not participate if that was the chosen topic.
My idea for Mythology was a game based around Perseus trying to kill Medusa while dodging her gaze which
would reflect off mirrors etc. It would be sort of a puzzle game in a maze with the stone gaze as a beam
reflecting at 90 degree angles off mirrors etc.
Mythology was voted as the theme.
Being Irish I briefly considered doing one of the Celtic myths, but stuck with
Medusa as I had a new good idea and it would be stupid to change.
Meanwhile, having read up a bit, it seemed to me that Medusa was a version of the "demonization of powerful women" trope. So I decided to invert it and have a bit of fun! Let the player be Medusa - who essentially is misunderstood - and have her fight off the unwanted hordes of
annoying men.
So the puzzle game idea of sneaking up on Medusa while avoiding her gaze was thrown away before I even started!
1. Timeline
Saturday - Sunday
Now that I had the idea in place I made some decisions.
- Medusa would be in the middle of the screen and the enemies would come to her.
- There would be no map scrolling - too much effort to do in a week.
- I thought about the controls for a bit and decided on aiming with the mouse, with keyboard controls for movement.
- I would use sprite rotation which I had never done before, to display Medusa.
This meant the view would be top down. - I wanted the game playable without the need of being able to speak English.
(the speech samples and the title are the only English in the game)
Hard to remember the order of things now, but I believe by mid-Sunday I had Medusa drawn and placed in the background. The background was a picture I had previously taken of some rock and then doctored in my paint program to look more fantasy-ish.
I had a full week of work ahead in my day job so I made a list of all the ideas I had for the game and put them into an Excel spreadsheet.
I assigned the items to each day of the week, leaving the less critical stuff towards the end of the Jam.
Now I had a plan in place for the week. I also canceled everything else I normally do after work except
for my tennis on Tuesday. As it turned out this got canceled anyway for different reasons which freed up a
few more hours.
Monday - Thursday
I spent the four evenings working on the items I had listed in my plan.
I didn't stick entirely to the order but just cherry picked from the items depending on how tired I was after my work day. E.g. on Monday I was quite tired so I stole an easy item from Wednesday and did that instead of Monday's items.
When my brain started to fry, I worked on the pixel graphics which can actually be quite relaxing!
Because of the choice of top down and Medusa and the enemies being able to face in any direction, I had to work out the mathematics for colliding objects. I am strong in maths and I could also call on my wife and son for help when I needed to discuss things like how to calculate the angle when an arrow hits a column.
Another tricky problem was getting the shield bearing enemies to stop the arrows but only in the 90 degree in front where the shield is protecting. This involved sitting down and drawing angles and lines on sheets of paper to work it out.
Other tricky pieces to sort out were:
- Animation of the snakes on Medusa's head - this took quite a while to get right due to all the mathematics involved in getting them to grow in the right place. It's still not right but it's close. The snakes on the big head are actually the same snakes on the 'player' Medusa, just at different scales :).
- How to get the enemies to go around obstacles.
- Medusa's gaze. I wanted her to only turn enemies to stone in her field of view. The field of view is actually determined by how many snakes she currently has. So her gaze gets weaker as the snakes get fewer. More maths was involved to work out the direction of the stone gaze 'beam' - it needed to be centered on the way Medusa was facing.
Up to now, I thought the game was a bit like Asteroids. But once the gaze was added, and the statues became obstacles, my wife noted
that it now looked a bit like Centipede.
All of sudden some emergent game play appeared - as it was now possible to strategically build a wall of statues for protection.
However, if this went on forever, the game area would become too cluttered so I needed a way to get rid of the statues. It was also getting full of dead bodies so I implemented code to fade them out slowly.
I already had powerups listed as a feature to implement and it didn't take long to decide to put them on the on screen columns which forces Medusa to move out from the center.
The columns are all the same image rotated, and the shadow is also just one image.
I intended to given the enemies shadows also but it never happened.
Friday & Saturday
By Friday the game was almost complete, well, in a state where it could be submitted.
The four enemy types were all working and different (swordsman, shieldbearer, archer and cyclops).
I also got an extra enemy type kind of for free - a faster swordsman.
Circles were used for the 'hitboxes' for all objects which meant collision detection was the same for everything - more tricky maths code but one set of code did the job for all.
So I was effectively finished apart from one big piece - sound.
This was good because I got called for vaccination Friday morning which could have severely impacted my ability to continue over the weekend. Happily it didn't.
I had made a list of sound effects I wanted, and my wife volunteered to do the Medusa speech. She actually came up with some of the lines herself.
I did everything else - all the enemies, the arrow shot sound, the click noise, the 2 second "tantara" which I 'composed' in a music package.
Recording the sounds took about 2 hours.
I spent another few hours tying them into the game, during which I noticed we forgot 2 sounds.
Medusa dying and the snakes growing (they were supposed to say "mama" in a snakey voice), so these never made it in.
I was terrified all week of getting to Sunday unfinished, so I wrapped it up and submitted.
I had several ideas left on the cutting floor so to speak (e.g. Perseus was going to show up as a boss), but I was burned out from the full week of activity.
I submitted on Saturday and the only activity I did on deadline day was figure out how to produce Linux and OSX versions. (I had made the Windows version first).
2. Development environment
The game was written in C# using the .net core framework and the monogame development package.
If you are interested it's here: https://www.monogame.net/
This allows the game to be developed in Windows but built and run for multiple platforms
(Windows, Linux, OSX (used in Apple PCs))
3. Full disclosure
I am a software developer by profession. I have worked on lots of projects where the deadlines were really tight. So although this was my first jam I was aware of the pitfalls that were waiting for me to fall into. Unfortunately, I watched other contestants fall into them.
I have been programming games for a long time. I also have a published game on Steam so I have gone through that process of commercial release also.
4. Lessons Learned - take aways
I made a huge mistake in that I did not package the Microsoft .net core libraries with my game. This meant that anyone downloading who didn't have the libraries were prompted to install them. I probably lost plays due to that.
On the plus side, I now know how to package it all up, and also the package for Linux and OSX.
This is a big win for me.
The mathematics around sprite rotation was something that I wanted to investigate for a long time. It always seemed too daunting but of course when I finally tried it, it turned out to be easy enough.
I found that I game develop much faster when there is a deadline involved. I have many projects on the go that I have been working on for years which are not much more developed than Medusa - Bad Hair Day.
I burned out pretty fast though - after a week I wanted my life back.
Finally, I learned a lot about the other culture's myths from playing the games.
5. General thoughts about the Jam
Apologies if any of these come across a bit brutal.
1. The Jam is primarily an exercise in time management. You set your own goals at the start based on the time available and then spend the week trying to meet those goals. This is also how things are done in a professional software team. Estimates are made by the developers, developers do the work. Estimates turn out to be outrageously optimistic and deadlines are missed. Astute managers usually double or triple
the developer's estimate :).
I was watching the submissions late on Sunday - deadline day - the Jam expired at midnight in my time zone. The last submission came in 14 seconds before the deadline!!!!!! That is almost! a failure in time management. I think there were a couple that missed the deadline because their build took too long. This IS a failure in time management.
It's better to have time to waste at the end, that to waste time at the start! Get the heavy lifting out of the way as quickly as possible to take the pressure off. Then add the cool but non critical stuff ("slither! slither! slide!").
2. Teams slow you down.
Teams have to be managed so that all the pieces of work come together seamlessly. This is an extra workload. This needs to be factored in to the estimates above and extra time allowed for team meetings, working out which pieces depend on which (e.g. the coder depends on timely delivery of the art). You need someone to be the project manager to do all this annoying stuff.
The bigger the team, the bigger the slowdown. There is an established team size where working in a team becomes counterproductive - I think is is around 7.
3. Get someone to play your game. This is called testing :). You can test your own game, but you will ignore things that will annoy the Hades out of someone else. (See I did a Mythological reference there!).
I played a few games that looked like they hadn't been played by anyone!
And I'm including the developer in that!
If you can find one, get a malicious tester. As in one who believes their mission is to break your game.
I'm lucky. I have a wife that fulfills that role with glee.
Testers are very important. They are so important that you can actually have a career as a software tester.
Imagine that! Getting paid to just run games and find the bugs :).
3. Posting to the HAGJ Discord during the Jam is procrastination (spend an hour looking this up if you don't know what it means <---- this is a joke here :) ).
I forbade myself from even looking at discord but I couldn't resist taking a sneaky peak once or twice a day.
I was astonished to find people were spending time posting updates of how they were getting on!!!
Some people were posting stuff like "oh I'm busy today, I might start tomorrow".
Any time spent doing that is time lost in making your game better.
Worse still, by posting previews of your graphics etc you are
a) spoiling the big reveal for the player when they run your game
b) raising peoples' expectations for your game if the graphics are really good
c) lowering peoples' expectations for your game if the graphics are not so good
Even worse again is reading the posts and then ending up thinking your own game is a pile of Centaur dung because the other entrant's screen shot looks so much better. I fell into this trap.
4. Games are about Mathematics.
I you want to do games, you need to know maths (we say maths in Ireland not math).
Don't be scared of maths - the fact that you are the type of person that wants to make games means that you and maths are going to be the best of friends if you are willing to give the time.
And (*spoiler alert*), maths is filled to the brim with extremely cool stuff!
5. Running of the Jam
I feel there is some room for improvement here.
As it was my first Jam, I was coming in a bit clueless as to rules etc
I found it pretty difficult to find a source that stated all the rules of the Jam in full.
The itch.io page did not quite cover everything and I did not see any central posting on Discord.
It actually took me by surprise when I found out that all the contestants who submitted a game would actually be the judges for the contest as well! I also didn't know how long there was for voting, so I went at it immediately on Monday.
On Tuesday I noticed the count down timer on itch.io had changed to indicate the voting time left.
10 days! That made me feel like a fool, I have to admit.
Me being a judge was particularly surprising as there had been a long debate on Discord leading up to the final vote, on how Mythology games would be judged as historically accurate if they won. This was in effect a pointless discussion as it's the contestants who are the judges and there is no way to police the result of that debate. I think I ended up giving most of the entries a 5 in that category.
The contestants judging of course creates an immediate conflict of interest which led to one contestant commenting on every game with "nice game" and then asking to have their game played. Others were offering to rate contestants' games if it was reciprocated. You usually don't tend to end up with a valid winner when it is open to this type of horse trading activity.
Worst of all, contestants were openly saying they would not have time to play and rate all the games so they were cherry picking. This is perfectly understandable as everyone had just given up a week for the Jam.
I've thought about this a bit to see if there is a viable solution.
There are two issues to solve:
1. when you reach a certain threshold, the number of games becomes too high for a single person to rate.
2. it is in contestants' best interests to rank all other games with low scores or not rank them at all.
There is a possible solution that solves this:
We had 80 games this time.
Divide the 80 games into 4x20.
Each 20 games compete against each other in 4 different groups.
Each contestant is asked to rate 20 games in a group that does not contain their game.
The best 5 from each go into a final round of 20 where everyone else (60) vote on the games they didn't vote on already.
This reduces the number of games to rate to 20 + 15 = 35. (hey look it's our friend maths!).
Dividing into 8x10 and have the top 3 go through, gives 10+21 = 31.
Of course this only matters if you care about winning :) (which I don't, but I do care a lot about fairness).
There's also a flaw in my maths - did you spot it :)?
5. Final thoughts
This was my first Jam. It was the most fun developing I have had in a long time. So for me the Jam was a huge success.
I will almost certainly go again - probably the next HAGJ in six months, because I really like history.
- Define your own success criteria!
Did you have fun?
Was there anything you created that made you beam with satisfaction?
Did you finish with a hunger to have another go?
Did you make some cool new friends?
If you have answered yes to any of those then Congratulations! You're a winner!
Thank you for reading. These are just my opinions so you are at liberty to disagree with anything.
Get Medusa - Bad Hair Day!
Medusa - Bad Hair Day!
Defeat the hordes come to slay Medusa
Status | Released |
Author | jonathanmcc |
Genre | Shooter |
Tags | 2D, Singleplayer, Top-Down |
Comments
Log in with itch.io to leave a comment.
A incredibly thorough post-mortem! I really appreciated your insight as a software dev. You may be new to jams but your insight on speedy/pressured development rings with wisdom.
(great insights on the jam/scoring itself too)