{"assets":[{"original":"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/fig.jpg","local":"\/data\/posts\/2013\/09\/4cdfdcc1f8b7fbad774632bb7537c4eb.jpg"}],"author_link":"author\/bytegrove\/","author_name":"bytegrove","cat":"LD #27","categories":["LD #27"],"comments":[],"epoch":1378568460,"event":"LD27","likes":18,"metadata":{"p_key":"80319","p_author":"bytegrove","p_authorkey":"0","p_urlkey":"289329","p_title":"Timey Wimey Stuff \u2013 Apotheosis Post Mortem","p_cat":"LD #27","p_event":"LD27","p_time":"1378568460","p_likes":"18","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1377216000","event_key":"18","event_name":"LD27"},"source_url":"2013\/09\/07\/timey-wimey-stuff-apotheosis-post-mortem\/","text":"<h3><\/h3>\n<h3><img alt=\"player_1\" class=\"aligncenter size-full wp-image-295428\" height=\"48\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/player_1.gif\" width=\"32\"\/><\/h3>\n<p>\u00a0<\/p>\n<h3><img alt=\"sad\" class=\"wp-image-295457 alignright\" height=\"90\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/sad1.png\" width=\"108\"\/><\/h3>\n<h3>Reaction to the theme<\/h3>\n<p dir=\"ltr\">When I woke up on day 1, the theme I most feared would win had won. \u201c10 seconds\u201d?! Too specific. .. Urgh. On the other hand, that\u2019s how I always react, I remembered.<\/p>\n<p dir=\"ltr\">This post mortem was written a little late, and pretty hastily. I filled it with as many pictures as I could, so that you\u2019ll have something to look at while enduring the ramblings.<\/p>\n<p dir=\"ltr\">Based on my previous entries, I was determined on a couple of things <strong>(do not regard this as general advice or anything):<\/strong><\/p>\n<ul>\n<li>Keep the scope clean and simple, center around one core game mechanic.<br\/>\nI do not consider myself a good game designer. I\u2019ve been programming for longer than I\u2019ve been \u201cproperly\u201d designing and evaluating gameplay. Thus, the lure of writing \u201ccool code\u201d is always there and gets in the way of making a fun game.<\/li>\n<li>Make it 2D.<br\/>\nAll of my previous entries were in 3D. I love programming 3D game logic. But 3D does add complexity in every stage of development. And I always spend too much time in Blender, modeling, animating and UV-mapping(I also wasn\u2019t really keen on pursuing the minimalism angle again).<\/li>\n<li>Make use of the freshest gamedev knowledge in your brain.<br\/>\nDuring the summer I\u2019ve been working on a 3D platformer, so all the platformer specific stuff was right there in my brain, unboxed and ready to be picked. I only needed to remove one dimension(and a boatload of quaternion math). Simplify, simplify!<\/li>\n<li>Make the game longer than 10 seconds.<\/li>\n<\/ul>\n<div class=\"wp-caption aligncenter\" id=\"attachment_288578\" style=\"width: 417px\"><img alt=\"apotheosis gameplay\" class=\"size-full wp-image-288578\" height=\"230\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/construct7.gif\" width=\"407\"\/><p class=\"wp-caption-text\">Rewind, Replay<\/p><\/div>\n<h3>Brainstorming<\/h3>\n<p dir=\"ltr\">I regret waiting this long for writing a post mortem. I\u2019ve forgotten a lot of my brainstormed ideas. There was something with duels and seconds, but I never could center a fun gameplay mechanic around it. Later on I\u2019ve seen several games using this interpretation, which is awesome!<\/p>\n<p dir=\"ltr\">There were also some clock ideas, with collecting the second marks of a clock as well as some idea of just making some arbitrary collectibles and refer to them as seconds(ugh).<\/p>\n<p>\u00a0<\/p>\n<div class=\"wp-caption aligncenter\" style=\"width: 494px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-27\/?action=preview&amp;uid=11939\"><img alt=\"\" class=\"\" height=\"272\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/compo2\/273708\/11939-shot4.png\" width=\"484\"\/><\/a><p class=\"wp-caption-text\">Screenshot of the finished game<\/p><\/div>\n<p>\u00a0<\/p>\n<h3>Braid+Mario Bros<\/h3>\n<p dir=\"ltr\">After some thinking I wondered if I could do something cool with a rewinding ability. There are of course a lot of games already with this kind of functionality(<a href=\"http:\/\/en.wikipedia.org\/wiki\/Blinx:_The_Time_Sweeper\">Blinx<\/a>, <a href=\"http:\/\/braid-game.com\/\">Braid<\/a>, <a href=\"http:\/\/www.insomniacgames.com\/games\/ratchet-clank-series\/ratchet-clank-future-a-crack-in-time\/\">Ratchet &amp; Clank<\/a>, <a href=\"http:\/\/supertimeforce.com\/\">Super Time Force<\/a>, to mention a few). I also wanted to keep the scope simple and by adding time rewinding (and possibly splitting timelines and paradoxes and gigawatts and what have you) I could risk ending up with something very bloated,unpolished and confusing.<\/p>\n<p dir=\"ltr\">So I thought about the very first Mario Bros and its single screen layout, and decided to make something similar to that.<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295431\" style=\"width: 194px\"><img alt=\"Classic\" class=\"wp-image-295431\" height=\"164\" sizes=\"(max-width: 184px) 100vw, 184px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/mario_brothers.jpg\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/mario_brothers-300x267.jpg 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/mario_brothers.jpg 307w\" width=\"184\"\/><p class=\"wp-caption-text\">Classic<\/p><\/div>\n<p>\u00a0<\/p>\n<p dir=\"ltr\">What I ended up with in the end is a game in which you have to defend a fragile artifact from invading monsters as well as guide said artifact to a vortex in the sky. To elevate the artifact you have to rewind time (let\u2019s call it a time defying magical artifact, mmkay?). Rewinding time also let\u2019s you try that rewinded section of time again while your \u201cold self\u201d replays itself. Easy peasy.<\/p>\n<p><iframe allowfullscreen=\"\" frameborder=\"0\" height=\"375\" src=\"http:\/\/www.youtube.com\/embed\/vY_Ry8J_jdw?feature=oembed\" width=\"500\"><\/iframe><\/p>\n<p>\u00a0<\/p>\n<p dir=\"ltr\">I later realized, to my horror, during a debug session, that this was very much like the \u2013 what I thought at the time \u2013 super confusing shadow levels in Braid. I think I should go back and replay them, maybe I\u2019ve learnt something.<\/p>\n<p dir=\"ltr\">Oh, and also, you can rewind a maximum of 10 seconds into the past and you have to wait the rewinded amount of seconds for the rewind functionality to reload. Which is a little too similar to what ended up being the premise of the very <a href=\"http:\/\/www.imdb.com\/title\/tt2005616\/\">last episode of Futurama<\/a>. Cool. Creepy.<\/p>\n<p dir=\"ltr\" style=\"text-align: center\"><img alt=\"\" class=\"alignnone\" height=\"138\" src=\"http:\/\/pool.theinfosphere.org\/images\/4\/4c\/Fry_meme.png\" width=\"184\"\/><img alt=\"\" class=\"alignnone\" height=\"138\" src=\"http:\/\/pool.theinfosphere.org\/images\/9\/95\/Time_button.png\" width=\"246\"\/><\/p>\n<p>Oh, and lasers.<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295470\" style=\"width: 494px\"><img alt=\"Lasers.\" class=\"size-large wp-image-295470\" height=\"272\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/lasers-550x295.png\" width=\"484\"\/><p class=\"wp-caption-text\">Lasers.<\/p><\/div>\n<h3>Step one, global timer + rewind<\/h3>\n<p dir=\"ltr\">My choice of working environment was my classic Unity setup. So the very first thing I set out to do was to make a rewindable replacement for the Unity engine\u2019s time stuff.<\/p>\n<p dir=\"ltr\">It was easy but fun, and I wasted a couple of minutes just watching the seconds ping-pong back and forth. The simple pleasures.<\/p>\n<p>\u00a0<\/p>\n<h3>Step two, transform buffer<\/h3>\n<p dir=\"ltr\">The second step was to make some kind of buffer system for Unity\u2019s transform component. With a 10 second restriction I could skip a lot of general stuff and make it explicitly for only 10 seconds. This buffer is read from while rewinding and replaying, and written to while playing. It was pretty cool the first time I saw it in motion. Ping-pong, ping-pong! xD<\/p>\n<p>\u00a0<\/p>\n<h3>Step three, thumbnailing of level<\/h3>\n<p dir=\"ltr\">Another thing I didn\u2019t want to do this time around was to shove all of the art creation onto the last day. I wanted some pretty stuff in the game asap! As I didn\u2019t really know what I wanted, I began by sketching out some rough thumbnails.<\/p>\n<p>\u00a0<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295442\" style=\"width: 454px\"><img alt=\"Thumbnail painting of level layout\" class=\"size-full wp-image-295442\" height=\"236\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/speedpaint_thumb.gif\" width=\"444\"\/><p class=\"wp-caption-text\">Thumbnail painting of level layout<\/p><\/div>\n<p><img alt=\"songs\" class=\"wp-image-295444 alignleft\" height=\"126\" sizes=\"(max-width: 126px) 100vw, 126px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/songs.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/songs-150x150.png 150w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/songs.png 300w\" width=\"126\"\/><\/p>\n<p dir=\"ltr\">My main source of inspiration for the art was the book cover of the awesome novel by Arthur C. Clarke: \u201cThe songs of distant earth\u201d. Which is also the inspiration for the awesome <a href=\"http:\/\/www.youtube.com\/watch?v=9LmajYqlVug&amp;feature=share&amp;list=PLMpFwWdLjZTh_4BsNz5iIwBa8S-GzcEhg\">album by Mike Oldfield<\/a>\u00a0going by the same name.<\/p>\n<p dir=\"ltr\">Another source of inspiration was the beautiful grass-, wood- and dirt art in <a href=\"http:\/\/www.mobygames.com\/images\/shots\/l\/553954-rayman-origins-windows-screenshot-the-2d-graphics-are-truly.jpg\">Rayman Origins<\/a>. Such a pretty game. Also, I wanted to add some red hues in all that green.<\/p>\n<h3>Rigidbody-based Player controller<\/h3>\n<p dir=\"ltr\">After having drawn for a while I got the urge to program some more. I began implementing the player controller. The already existing rigidbody system in Unity is pretty neat, and you can get some really nice results when using it for player controllers instead of the built-in \u201ccharacter controller\u201d-body. And you don\u2019t have to worry about collision bugs and explicit collision events later on. The workings of this was also fresh in my memory from just having implemented similar stuff in 3D, so its implementation went pretty smooth.<\/p>\n<p dir=\"ltr\">After I had it working I hooked the player object up to the time buffer component from before and added some state handling to switch off input and so on during replay.<\/p>\n<p>\u00a0<\/p>\n<h3>Level<\/h3>\n<p dir=\"ltr\">I then went back to working on the level. I began by blocking out all the platforms(based on the layout in the thumbnail), and then I began working on the final art for the platforms. I made several separate chunks with grass and rock formations which I could build up the level of.<\/p>\n<p>\u00a0<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295448\" style=\"width: 454px\"><img alt=\"Timelapse of painting level parts\" class=\"size-full wp-image-295448\" height=\"236\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/speedpaint_parts.gif\" width=\"444\"\/><p class=\"wp-caption-text\">Timelapse of painting level parts<\/p><\/div>\n<p dir=\"ltr\">Then I got determined on making a sprite shader with lightmaps and other stuff. Big mistake. I got completely stuck with some of Unity\u2019s weird sorting behaviours and spent too much time reading confused forum entries and lackluster documentation. I abandoned the idea after a couple of hours, and went for a simpler and built-in shader. By then my mood was at rock-bottom, but luckily this was the only real bump in the road this time around.<\/p>\n<p>\u00a0<\/p>\n<h3>More work on the player<\/h3>\n<p dir=\"ltr\">I then shifted my focus back to the player character. Based on the time I had left and not really determined on the art direction I wanted for the characters, I decided to make the player low-res and in black and white.<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295450\" style=\"width: 454px\"><img alt=\"Timelapse of drawing player sprite\" class=\"size-full wp-image-295450\" height=\"236\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/speedpaint_player.gif\" width=\"444\"\/><p class=\"wp-caption-text\">Timelapse of drawing player sprite<\/p><\/div>\n<p dir=\"ltr\">I figured the most importart part was to have the silhouettes there and if I got time to spare I could colour the characters. As I never got that time however, I\u2019ve gotten some critique of the kind of mish-mashed art style I ended up with. And I understand that critique. One could counter with that the mixture of monochrome characters and coloured landscapes are \u201ccool\u201d. However, as it wasn\u2019t my intention to make it that way, the result does not feel intentional, uniform or polished.<\/p>\n<p>\u00a0<\/p>\n<h3>Implemented duplication of player on rewind completion<\/h3>\n<p dir=\"ltr\">Another fun challenge was implementing the \u201cduplication\u201d effect after the player has performed a rewind. In the first iterations I got some hilarious recursion bugs filling the screen with player objects and crashing the game in milliseconds. \ud83d\ude00<\/p>\n<p dir=\"ltr\">When I had all that sorted out, the game looked like this:<\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_295449\" style=\"width: 340px\"><img alt=\"Progress after day one\" class=\"wp-image-295449\" height=\"246\" sizes=\"(max-width: 330px) 100vw, 330px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/screen_timetraveler-550x410.jpg\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/screen_timetraveler-550x410.jpg 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/screen_timetraveler.jpg 826w\" width=\"330\"\/><p class=\"wp-caption-text\">Progress after day one<\/p><\/div>\n<p>\u00a0<\/p>\n<h3>Music<\/h3>\n<p dir=\"ltr\">After I felt that the player controller and rewind-stuff was solid enough and the roadmap of permuting objects and components into the remaining game elements felt clear enough, I began working on the music.<\/p>\n<p><a href=\"https:\/\/soundcloud.com\/bytegrove\/h-st-main\">Apotheosis music (Soundcloud)<\/a><\/p>\n<div class=\"wp-caption alignleft\" id=\"attachment_295426\" style=\"width: 98px\"><a href=\"http:\/\/www.propellerheads.se\/products\/figure\/\"><img alt=\"Figure music creation app\" class=\"wp-image-295426\" height=\"132\" src=\"\/data\/posts\/2013\/09\/4cdfdcc1f8b7fbad774632bb7537c4eb.jpg\" width=\"88\"\/><\/a><p class=\"wp-caption-text\">Figure music creation app<\/p><\/div>\n<p dir=\"ltr\">Prior to the compo I had discovered a pretty neat music app for iOS with simple controls(perfect for a tone deaf audio noob like myself) but with enough depth to make relatively unique samples.<\/p>\n<p>It\u2019s called \u201cFigure\u201d and I really recommend it if you want to make some simple loops or just play around. I used Bfxr to make sound effects, I had planned to record some as well, but by the time I got around to start making sound effects I didn\u2019t feel like I had enough time to spend on recording and editing. Maybe next time I\u2019ll do it as (based on the critique I\u2019ve received on my entries so far) bleep-bloop effects aren\u2019t too well received in non-pixely games. And I can see why they might feel a little out of place.<\/p>\n<p>\u00a0<\/p>\n<h3><\/h3>\n<h3>Finale<\/h3>\n<p dir=\"ltr\">The last ten hours went by in a blur as usual and this time they involved GUI, particles, sprite animation, a rewindable animation system, enemies with their own animation, some super quick copypaste-magic for enemy AI as well as end-game conditions.<\/p>\n<p dir=\"ltr\"><strong>This is a video of the resulting gameplay:<\/strong><\/p>\n<p><iframe allowfullscreen=\"\" frameborder=\"0\" height=\"375\" src=\"http:\/\/www.youtube.com\/embed\/PmsSbY0Yj_8?feature=oembed\" width=\"500\"><\/iframe><\/p>\n<p>\u00a0<\/p>\n<p><strong>And a timelapse video based on the stream data:<\/strong><\/p>\n<p><iframe allowfullscreen=\"\" frameborder=\"0\" height=\"375\" src=\"http:\/\/www.youtube.com\/embed\/38kyt7Q0qpY?feature=oembed\" width=\"500\"><\/iframe><\/p>\n<p>\u00a0<\/p>\n<h3>Feedback and post-compo<\/h3>\n<p dir=\"ltr\">I was stunned by all the great feedback I received this time around! <strong>Thank you all once again!<\/strong><\/p>\n<p dir=\"ltr\">I got a lot of response of the gameplay itself, which spurred me to add some more depth to it. And I found out that when you understood the core concept of the game, the powers of the player didn\u2019t make much sense anymore and the game could be beaten with a one second hi-score without any effort. \ud83d\ude1b<\/p>\n<p dir=\"ltr\">So in the current post compo version I\u2019ve changed some of the enemy spawning behaviour, added extra difficulty levels and added a rewind punishment when touching enemies(instead of being invulnerable). I\u2019ve also made some changes to the weapon, making it less effective when rewinding far, and more effective the longer you do not rewind(adding some more depth and ways to strategize).<\/p>\n<p dir=\"ltr\">I\u2019m still open for more feedback though, so you\u2019re welcome to try the <strong><a href=\"http:\/\/dl.dropboxusercontent.com\/u\/2014021\/LD27\/postcompo\/Apotheosis.html\">post compo version<\/a><\/strong> if you\u2019ve rated the original!<\/p>\n<p dir=\"ltr\"><img alt=\"player_0\" class=\"aligncenter size-full wp-image-295430\" height=\"48\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/player_0.gif\" width=\"32\"\/><\/p>\n<h2>Good<\/h2>\n<ul>\n<li><strong>Prepared.<\/strong><br\/>\nI had bought all the food and snacks and made all the errands and downloaded all the tools beforehand. Development went smooth.<\/li>\n<li><strong>Location.<\/strong><br\/>\nWent to a friend that was also participating and worked there. A lot more fun when you\u2019re more than one. Also, it was a bigger apartment with more shade, haha.<\/li>\n<li><strong>Scope.<\/strong><br\/>\nKept it simple. One core mechanic, and a pair of sub gameplay mechanics. Kept the code and art modular, but didn\u2019t overdo it. Ugly code? Yes. Who cares.<\/li>\n<li><strong>Bugs.<\/strong><br\/>\nVery few of them. One nasty shader ordeal, threw it away.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h2>Bad<\/h2>\n<ul>\n<li><strong>Game logic depth.<\/strong><br\/>\nSome of the gameplay aspects confused me, so I didn\u2019t catch some pretty large flaws. Fixed some for post compo. I want to allocate more time for game testing next time around.<\/li>\n<li><strong>Stream.<\/strong><br\/>\nFirst time I streamed, I got some positive feedback on the music I played. But other than that I guess my showmanship is pretty lacking, as I had a maximum of five visitors at a time. Maybe I should post more links to the stream next time? I don\u2019t really know.<\/li>\n<li><strong>Controls.<\/strong><br\/>\nI think almost everyone was confused by the control scheme and the aiming system. I\u2019ve reworked it in the post compo version, but I\u2019m pretty sure what many wanted was soldat-like aiming, which I\u2019ll never add. \ud83d\ude1b<\/li>\n<li><strong>Mixed art styles.<\/strong><br\/>\nI would have liked to allocate more time for creating prettier character sprites more in tune with the environment.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<div class=\"wp-caption aligncenter\" style=\"width: 494px\"><img alt=\"\" class=\"\" height=\"272\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/compo2\/273708\/11939-shot0.png\" width=\"484\"\/><p class=\"wp-caption-text\">Another screenshot<\/p><\/div>\n<p>\u00a0<\/p>\n<h3>Conclusion<\/h3>\n<p>All in all, I had a blast making this game and it has better gameplay than my previous entries in my opinion. However, the core gameplay turned out to be yet another cool-code trap sorta. I did not pour hours upon hours on getting it to work though. Making some neat art during day 1 instead of postponing created a great morale boost. Making a 2D game made it easier to create polished art in the style that I\u2019m most fond of, and I got more content done in the 48 hour timeframe.<\/p>\n<p><strong>K.I.S.S. F.F.S. !<\/strong><\/p>\n<h2 style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-27\/?action=preview&amp;uid=11939\" title=\"Apotheosis\"><img alt=\"player_1\" height=\"48\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/player_1.gif\" width=\"32\"\/>Entry page<img alt=\"player_1\" height=\"48\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/09\/player_1.gif\" width=\"32\"\/><\/a><\/h2>\n<h2 style=\"text-align: center\"><\/h2>\n<p>\u00a0<\/p>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/10-seconds\/\" rel=\"tag\">10 seconds<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/apotheosis\/\" rel=\"tag\">apotheosis<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/post-mortem\/\" rel=\"tag\">post-mortem<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/rewind\/\" rel=\"tag\">rewind<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/time-travel\/\" rel=\"tag\">time travel<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/timelapse\/\" rel=\"tag\">timelapse<\/a><\/p>","time":"September 7th, 2013 3:41 pm","title":"Timey Wimey Stuff \u2013 Apotheosis Post Mortem","title_was_empty":false}