Epilogue - A Post-Mortem
[indent=2]"That chilling moment when I have learned the truth,
[indent=2]and suddenly, my car became nothing more than a toy.
[indent=2]I had lost innocence on that day,
[indent=2]and I fought tooth and nail to get it back"
[indent=2]- Phillip Morris
About the game (SPOILERS, you have been warned!)
[spoiler]
[indent=1]"The Life of Phillip Morris" is a game developed exclusively for "the Week Of Awesome II" gamejam event (#gdnjam).
The player is prompted to play the "live" car of Phillip Morris and experience important events in Phillip's life which he isn't willing to live through himself just yet. The car is empowered by the kid with "sentience" to act on his behalf as a form of sanity shield. It helps him process through events that have been happening in his life as of late, and the car becomes the catalyst of this process by indirect cuasality (his dad gave him the car as a response to these events).
Throughout the game, the player experiences challenges (a figment of Phillip's mind) which serve as a visual representation of Phillip's struggle. The player is also confronted to a few notes that help connect the dots regarding the events that surround Phillip's life. Also beware the clutch of insanity (depicted by growing darkness) as it could leave Phillip scarred for life...
[indent=1]Ultimately, after several obstacles and a good deal of grief (projected on his teacher, miss Ferguson), Phillip comes to terms with these events and learns to deal with them headfirst, and no longer needs to believe that the car "lives" of its own accord. The player is left with an immobile car and the events that justify this game are unraveled.
[/spoiler]
What a week that was!
[indent=1]I'd like to preface this epilogue by thanking Slicer4Ever. Organizing this event was no small feat, and he's gone above and beyond to do more. Furthermore, he reached out to me so I would be part of the judge panel after I declared I wanted to participate, so I get to thank him for not winning any prizes if I make it to top 5!
More importantly perhaps, I'd like to thank everyone that has joined the competition and congratulate those of you that ended up submitting a game. Given that I was on the other side of the fence myself, I realize how tough this has been on our own lives.
Today is the "go-back-to-normal-life" day, where my soon-to-be-wife and two children realize they have me in their lives again, and I'm thankful for that. Holding your breath for so long makes you appreciate these moments even more.
But we're not here to discuss how fun it can be to spend time with family and friends, so let's go back to business shall we?
Motive
[indent=1]Up to about 2 months ago, I was developing two games. I was using Dart Language (A google language heavily influenced by C# that actually outputs as HTML5) to produce two different web-based games. One of them, a larger project that hoped to be the next 4X game, was left in indefinite hiatus, whereas the other, a smaller scope arcade game, was put on temporary hold.
For the better part of 2013 and 2014, a developer friend of mine (along with a lot of peer pressure) forced me to consider Unity as a reliable means to produce games in a timely manner. Given I wasn't entirely sure of how it compared to Dart, I was hesitant to switch gears (it's hardly ever a good idea to start the same idea from scratch with a new tech when it is said to be supposedly faster and more efficient: the sheer amount of work you've lost usually compensates for whatever gain you earn in the end). I was obviously hesitant to drop everything and move to Unity, and doing so would've been incredibly reckless.
That's about when I read about Week of Awesome II. The timing could not have been any better: On the one hand, I wanted to test Unity, yet I did not want to take huge risks. A small scale project (time-boxed to 1 week) would give me just the right feel of the engine all the while not endangering any ongoing development I had elsewhere. It sounded perfect, and was the exact thing I needed to achieve in order to get a better feel of Unity.
A week or two before the competition actually started, I browsed a few of Unity's tutorials to get a feel of how things were done in Unity. I've discussed with a few colleagues / friends about what to expect, etc. But as far as developing in Unity is concerned, I had never done anything in the editor until Day 1 (for me, Sept 22 evening).
While my primary objective was to test out Unity before migrating my projects, I had another secondary goal, one I did not realize until much later. In 2002, I participated in an event known as the "Magnus Sequel Marathon". This was my first game jam (and it became a yearly thing afterwards but I did not participate in any subsequent edition). Therefore, WoAII was my 2nd serious game jam ever, 12 years later. Part of me wanted to compare how far I have come in the last 12 years, whether I became a better developer, etc. I was seeking some form of feedback to confirm that I had grown in experience.
I won't show you what my Magnus game looked like (although, googling it up this morning, it seems I've managed to find a dusty copy on one of the old OHRRPGCE repositories!), but I can safely say it looked like what any first game should look like: absolutely fugly. The scenario was pretty random, and the last level was thrown together by lack of time. Essentially, it was a crappy game hardly deserving to be in that competition.
Part of me wanted to right this wrong, and deliver something that felt right: a game that at least deserved to be entered and looked like it had a complete arc working as intended. These are the two main reasons why I chose to join, and also why I wanted to be a one-man-team.
[indent=1]That's also why I went ahead and did everything from scratch (art, sound, music, design and programming).
What went right
[indent=1]Unity - Editor
[indent=2]Unity is a powerful engine. It is an editor. I wasn't particularly fond of the concept of editor (I like to control everything by code if possible), but there's an undeniable advantage in dealing with visual elements and setting properties independently from code.
[indent=2]Given my previous experience of editors was Visual Basic, I wasn't too keen on using Unity at first, but the prefabs are used in such a way that allowed me a lot of freedom and I'm grateful for that.
[indent=1]Unity - Physics
[indent=2]Coming in, I knew I had to do a physics-based game. Everyone I know praised how effective they were, especially at getting prototypes out of the door. Without minimizing the effort I've put into this game, let's just say that without the built-in physics (thank you rigidbody!) I wouldn't have delivered half of what I did. It allowed me to quickly pitch together an idea and run from there.
[indent=1]Development Process / Inception
[indent=2]I started by laying the foundations for a top-down game movement. This was my very first task in this project, and it went a long way. As soon as I had basic movements into place, I had something I could reliably test and build upon. I've always prioritized the Minimum Viable Product, which insured that by Day 5 I had a complete game flow, and 2 days to add wish list items. It was amazing as it allowed me to focus more on adding quality into the game (which is a big morale boost) and dwell less on the fear of not completing the project (as I'm sure others have had a hard time dealing with).
[indent=2]Prioritization is something I've undeniably have learned from my time in the industry and I'm grateful for that.
[indent=1]Test soon, Test often
[indent=2]Another thing I've learned from my earlier days in the industry (once upon a time, when I was a QA) is to test often and test as soon as possible. This allowed me to validate whether there was anything fun about what I was doing instead of falling into production-silo-mode.
[indent=1]Theme
[indent=2]I really appreciated the theme because this is something I would've never done on my own and is entirely out of my comfort zone and areas of interest for the most part. Following in that trend, I chose a type of gameplay I also tend to dislike (Racing Games) and decided to take my stab at it: if I can find the fun in something I generally don't like, then perhaps that means I've made something original enough.
[indent=2]I ended up making a single player racing game (which really goes to show how weird my concept is) based around a linear progression reminiscent of platformers. There's even a boss! I doubt there are a lot of racing games boasting this feature set!
[indent=2]At least, survival is time-limited (depicted by how light seems to eat away at the world).
[indent=2]I felt this was some kind of top-down design that really suited the theme in the end. I was also careful to be subtle with it as much as possible (I had put "blood" in the game originally and decided to remove it afterwards to insure I didn't strike at my fragile equilibrium with regards to the very fragile theme).
[indent=2]Overall, despite a very slow design process, I feel I was very inspired by the theme (especially how I'd break apart the wording of the theme and put it back together into something that made sense to me). I like how I've ended the game from a flavor standpoint; I think the game conveys the message very well.
[indent=1]Time and Support
[indent=2]I tend to consider myself a busy person. I have a wife and two kids, a demanding day job, my own business (mostly consulting) and I also have my own game development projects. Choosing to put everything in limbo while I was participating to this event was really reality-bending.
[indent=2]However, because of the strong support from my family, and a sheer amount of luck, I was able to sink more hours into this than I had thought possible (though, mind you, sleep suffered quite a bit starting on day 1!).
[indent=2]Also, as I pointed out in public threads, I had mistakenly assumed the competition would last 5 days, which meant I would've liked to have everything nailed down after 3 days. I initially scoped for a much more simplistic game, and it allowed me some extra room to expand on the mechanics as soon as I found out the 'extra time' I had.
[indent=2]That being said, though I had a lot of time, I did not read about the theme until 3/4 into day 1, but still managed to turn up a reasonable idea by then.
[indent=1]Blogs
[indent=2]The interaction amongst participants, particulaly through gamedev journals, was awesome. We really felt like this was a friendly competition and that we were all in for the fun of delivery a game at the end. That was awesome and very motivating. It was good knowing other people were having a tough time too, not just me. When developing on my own, I don't get that kind of support from other indies nearly as often as I'd like. It happens, but you need to look for it (go out for a beer where other devs might lurk, tweet about it). The problem in other circumstances is that the feedback is not immediate, and you can't capitalize on the boost it gives.
[indent=2]I used journals before, but never quite like this. I'm pretty sure I'll do a more thorough usage from here on.
What went wrong
[indent=1]MonoDevelop
[indent=2]Up until 7 days ago, MonoDevelop rants were part of the subculture around me, and I always figured these were just casual small-talk amongst programmers that sought to "belong" to the same elitist crew by sharing personal experiences. Little did I know how bad of a code editor this could be. In fact, little did I know that a code editor COULD be bad until I saw MonoDevelop. It made me look back at all of the editors I've used in the past (namely Dart's, Visual Basic's, Eclypse's and even notepad++) in awe.
[indent=2]I'll say this again: MonoDevelop is the devil incarnate.
[indent=2]Now, to be fair, most people complain about it's user-friendliness, but I'm used to very raw tools, so I will only complain about 3 very specific issues:
[indent=3]On 17 separate occasions during day 1, I saved a script in MonoDevelop, and it did NOT compile back to Unity (for some strange reason), leading me to believe my code was flawed when I knew for a fact that it wasn't. Problem is, I was learning a new tech: when learning something new, always assume the problem origins from your noobness (NOT the editor!). This has resulted in me losing over 3 hours attempting to fix physics/trigonometry issues that simply didn't exist. GRRRRR!
[indent=3]Worst yet, the only fix was to close and reopen Unity!
[indent=3]When double-clicking a script in Unity, MonoDevelop will open, but that script won't necessarily have focus. Though not extremely damaging, this HAS led to a few important mistakes on my part. For example, I double-clicked my carControl Script simply to add 2 public variables at the top to make them accessible from the editor for fine-tuning, but ended up putting them in the clock class because, well, for some reason, MonoDevelop felt I REALLY needed to see the clock at that time. Arguably, it might have been telling me to go to sleep, but I didn't quite catch that ;)
[indent=3]IntelliSense is simply terrible. I'd rather have it turned off... At some point, it wanted me to access this: object.transform.position.transform.position... for some reason, it felt like it was a good thing to access a transform's position's transform! (and we all know that makes perfect sense).
[indent=2]So, put simply, MonoDevelop is one of the biggest time wasters I've faced during this project. I will investigate whether there's any way to modify this, but I suspect there isn't.
[indent=1]Choosing 2d over 3d
[indent=2]Rookie mistake here... On day one, I started using 2D physics based on my theme (see below for more info on why) but the prototype differed from that theme very quickly. I never stopped to consider or refactor after figuring out it was going to be a top-down racing game. Additionally, I never imagined I would need the 3rd dimension in a car game... that is, until day 2, when I realized I was going to have HOLES in the game
[indent=2]On day 2, I ended up starting to code my own abstract reference to a third dimension, a piece of crappy logic I've looked at with disdain ever since, especially when looking at the top-right of my Unity editor where each object's Z coordinate shows up (but somehow, in my game, it is only used for draw order!) I knew then I could've started from scratch to leverage the 3rd axis, but I was afraid of the amount of work lost doing so, choosing instead to limit my usage of the third dimension.
[indent=2]The end result is that the collisions in my game are heavily flawed: the car doesn't necessarily looks like it's falling at the right place.
[indent=2]I've also had to do a lot of custom work unnecessarily.
[indent=2]More importantly though, I've had to scratch a wish list feature I really wanted to develop that would've been very easy in 3d: I wanted the player to be able to push collision objects into the "holes" and use them to reach optional areas (extra save points for example). This was a neat mechanic which I felt really added to the game, but was simply unsustainable with stupid hand-made 3rd dimension mechanics...
[indent=1]Unity - Level Editor
[indent=2]There's a lot good to be said of Unity as an engine, but the level (scene) editor isn't great. Lining up the floor was a pain because of the pixel to ratio (somehow turning a 200X200 sprite into 20.75 X 20.75, because, well, dividing by 10 was too hardcore?). Granted, I could've shifted the pixel to ratio, but I found out about actual in-game measurements too late for this. I wish it had a 1:1 ratio by default.
[indent=2]At certain points, I felt like I should have made the level in Tiled, as I had initially decided, and looking back now, I think it would've been a wiser idea, especially for a larger scope game.
[indent=1]
Theme
[indent=2]For those that have read my original blog posts on the project, this shouldn't come as a surprise:
[indent=2]On the one hand, it wasn't a theme I would've picked. Mind you, I'm not saying the theme was bad, but it didn't play into my strengths, and to a degree, I would've liked to do something more along the lines of what I "like". That being said, once the theme was out, I came up with a complex idea of what I wanted my game to be like: a top-down roguelike where a person interacts with the environment to explore his own insanity and escape: toys would start moving, etc. That was a cool concept...
[indent=2]But it turned out I went a totally different way with my prototype. After implementing the controls for what felt more like a racing game, I realized I would have a tough time reconciling my original idea with the prototype I was building. Though the end-result is an original blend, and that it might make for a better game, I feel like I went close to disaster by miscommunicating my intentions in the original prototype and this is something I'm a bit concerned with. Regardless of the positive outcome, I feel I should do a better job at following my own plan in the future.
[indent=1]Art
[indent=2]I am no artist, and if you've played my game, you should now be convinced of this. I don't draw well. For the most part, I've managed to keep working with my strengths and avoid my weaknesses, but ultimately, I didn't have a choice but to do art.
[indent=2]While I think most of the objects are decent (the style I went for allowed me to be extremely minimalist and play with outlines/gradients a lot), I feel that I can't draw characters.
[indent=2]I had to resort to making the boss a damn "ball" (which is something I absolutely loathe in games! damn eye-shaped cloned bosses!). I really wanted to introduce at least another toy ("the toyS are alive"), possibly a teddy bear, but I couldn't pull it off, especially on the last day. So I went with a temporary visual for the boss and it stuck there to the end. It looks ok, but it's not what I wanted.
[indent=2]There are several ways in which my artistic abilities have limited the scope of this game. I felt I had to make a lot of decisions based around what I was able to do from an art standpoint, instead of reaching for the sky. Possibly, having a strong artistic partner could've helped with that, but because of my original goals, I really wanted to complete this on my own.
[indent=1]Sounds
[indent=2]I'm generally good with sounds. For starters, I've been playing music since age 5, and have learned a variety of instruments. I was also part of the MOD community in the late 90s (using primarily Impulse Tracker during my peak) and had a few bands afterwards (one of which actually went all the way to record a demo). I've always scored my own games, and took pleasure in doing so.
[indent=2]The last few years, my apetite for music has calmed down, due to the necessity of life. I had to prioritize the things I really wanted to do (family/friends + making games) over other activities I could no longer dedicate myself to, short of time. Music sure took a lot of axing, and though I did get to play occasionally, and compose a few songs here and there, it was mostly absent.
[indent=2]I did manage to put something together (a .mid file) but I didn't have a lot of time to dedicate to this, leaving me short for SFX.
[indent=2]Another contestant (0sok) suggested using JFXR which produced decent results for me in a timely manner.
[indent=2]Overall, I think I've let the audio part down a lot (there's no song for the actual game, just a victory one) and all of the sfx are very simplistic designs which sound a lot less polished than the rest of the game.
Closing words (and a full walkthrough!)
[indent=1]All in all, I had a serious blast. This was an exhilirating experience and it really put me in a state of flow. I'm very happy with what I've delivered (When I stop looking at all the defects I keep seeing) and I'm satisfied I decided to jump into this.
[indent=1]Before closing this article, I'd like to remain true to my word and add a full walkthrough. As some have stated, this can be a tough game to beat, and I believe the conclusion deserves to be seen by all.
[indent=1]SPOILER ALERT
[indent=1]
[indent=1]Greatest Pride: Completing a MVP on day 5.
[indent=1]Walk of Shame: Choosing to build the game using 2D Physics on Day 1.
[indent=1]Cheers!
Awesome project, as for MonoDevelop, I agree, it's quite a piece of work, luckily if you have the Visual studios pro, you can use that instead on windows, you can choose it from 'preferences'