tag:blogger.com,1999:blog-69011122739551275652024-03-04T20:31:11.230-08:00drinkdecaf makes a gamedrinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-6901112273955127565.post-63407137567230102282012-12-21T13:00:00.002-08:002012-12-21T13:00:31.715-08:00Video Update #4<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/vyWg6vx8BMc?feature=player_embedded' frameborder='0'></iframe></div>
<br />drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-70481860272390615112012-10-05T14:23:00.001-07:002012-10-05T14:23:34.326-07:00Video Update #3<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/ryK5VRCWve4?feature=player_embedded' frameborder='0'></iframe></div>
<br />drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-29847719608070437342012-08-18T14:13:00.001-07:002012-08-18T14:13:25.018-07:00Video Update #2<div class="separator" style="clear: both; text-align: center;">
<object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/a5epavmEC_s/0.jpg"><param name="movie" value="http://www.youtube.com/v/a5epavmEC_s?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://www.youtube.com/v/a5epavmEC_s?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-91459365039717581092012-08-10T15:47:00.000-07:002012-08-10T15:47:00.754-07:00Video Update #1<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/pAaaPrRRnH4?feature=player_embedded' frameborder='0'></iframe></div>
<br />drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-20103890963252765722012-04-06T16:20:00.002-07:002012-04-06T16:20:47.308-07:00Tile SizesToday was spent playing with tile sizes, as I continue to try and nail down an art style for the game. Although the original graphics were 16px based, I debated using 32px sprites so I could have the characters look the way I was drawing them. This produced a whole slew of problems -- formost among them using 32px tiles completely threw off my scale. I either lost the pixelated look entirely (something I'd like to keep), or my game window had to be HUGE to accommodate the larger graphics scale.<br />
<br />
In the end, I decided I wanted to keep the 16px tiles, *and* my 640 by 800 game screen, *and* my 2x zoom. I've grown accustomed to them, and if the settings are good enough for <a href="http://www.cavestory.org/" target="_blank">Cave Story</a>, they're good enough for my game. But what about larger entities?<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP-w1vEWZ6NdRKc9zwpFW29eo2xEMK21i5jHN_766_e687mKvwsZHB2_Ap0t0BaGnWc5L4vmOWUacFaZuZL80g0qybGrvhEShPIVjH5s6Sb6HtQGKh_xulS482fAPfQ9oYUmeNJMb10Xzu/s1600/crocomire.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP-w1vEWZ6NdRKc9zwpFW29eo2xEMK21i5jHN_766_e687mKvwsZHB2_Ap0t0BaGnWc5L4vmOWUacFaZuZL80g0qybGrvhEShPIVjH5s6Sb6HtQGKh_xulS482fAPfQ9oYUmeNJMb10Xzu/s320/crocomire.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="text-align: -webkit-auto;"><span style="font-size: x-small;">Crocomire. He's big, ugly and mean, but you kind of feel sorry for him.</span></span></td></tr>
</tbody></table>
<br />
I still wanted my new, better looking 24px characters. The solution? Something I've been needing to work on anyways - a tile system that can grab different sized tiles. This is essential if I'm going to have bosses (or any characters) that are larger than 16px. One of my favorite parts of Super Metroid is how big most of the bosses are. It gives a great sense of peril and scale, and completely changes how you approach them as enemies. This is not something I want to skip over - sometimes enemies need to be BIG!<br />
<div>
<br /></div>
With this system in place, I'm currently in the process of re-working my graphics that no longer fit my desired scale - most notably the player sprite. It's a lot of work, but I'm pleased at how things are looking.<div>
<div>
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-5IaHMZl1SWg7vjuZgtv929ZZdctcgLRf7GrbO7s4zBJoJpWsYMT2g04bjP6qBBu-f711Qu8JKO9qc5C2ZfZ1LNIozQUweQjjgsvz-QLlGHkdKyTqZvQazW-bEmLYd9HFYeb6P43hXqq/s1600/bob.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-5IaHMZl1SWg7vjuZgtv929ZZdctcgLRf7GrbO7s4zBJoJpWsYMT2g04bjP6qBBu-f711Qu8JKO9qc5C2ZfZ1LNIozQUweQjjgsvz-QLlGHkdKyTqZvQazW-bEmLYd9HFYeb6P43hXqq/s1600/bob.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Bob is all grows up.</td></tr>
</tbody></table>
<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I'll have the graphics for the player done soon. After that comes NPCs!</div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-7214258418069621652012-03-02T11:31:00.001-08:002012-03-02T11:31:17.484-08:00Some Concept Art<div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizCjrtaxPleoTiDyGFL4wxk95_RGWadmUoEkbxti8qIQoNj6PpcBnR3XALVYHAWuTez7Yj0wOsmBWwtM0OUg8yU378swBswgSHnNgXoQua6Z38eXDQbRrTjhjKE7LG6crprSm0TdxCgRdE/s1600/Red-Sands.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizCjrtaxPleoTiDyGFL4wxk95_RGWadmUoEkbxti8qIQoNj6PpcBnR3XALVYHAWuTez7Yj0wOsmBWwtM0OUg8yU378swBswgSHnNgXoQua6Z38eXDQbRrTjhjKE7LG6crprSm0TdxCgRdE/s400/Red-Sands.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption">Red Sands</td></tr>
</tbody></table>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-86985349522689514862012-02-26T18:15:00.000-08:002012-02-26T18:15:26.333-08:00UpdatesHere we go. I've made some good progress in the last few weeks, getting several key systems in place. Most of the graphical systems are in place, though not finalized. I can switch levels, create and destroy effects and sprites, and my little guy can even shout at dragons (or bats).<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRzuajUrisD4XuosRzlRFScz9WqNwducaLd_-TAGArMP2t2pAJ5t_fSSxDOTzVk-Wuh8r_kfJEg6wYeNCJGeriLaoKn0KD1-DFCKIYs7N_A49s5Nw6T5lxqAQs018owJVgEOajci4bchGU/s1600/fusrodah.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRzuajUrisD4XuosRzlRFScz9WqNwducaLd_-TAGArMP2t2pAJ5t_fSSxDOTzVk-Wuh8r_kfJEg6wYeNCJGeriLaoKn0KD1-DFCKIYs7N_A49s5Nw6T5lxqAQs018owJVgEOajci4bchGU/s320/fusrodah.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Sprites, Items, Enemies, Text and Meme systems all working well.</td></tr>
</tbody></table>I'm getting to the phase where I have enough systems in place that I actually need to start building the game proper, rather than just the systems for the game. Which means I'm delving into the world of game design - something I've never formally studied. The two books I'm working through right now are <a href="http://www.amazon.com/Art-Game-Design-book-lenses/dp/0123694965/ref=sr_1_1?ie=UTF8&qid=1330308279&sr=8-1" target="_blank">The Art of Game Design</a> and <a href="http://www.amazon.com/Rules-Play-Game-Design-Fundamentals/dp/0262240459/ref=sr_1_1?ie=UTF8&qid=1330308387&sr=8-1" target="_blank">Rules of Play</a>, as recommended by the always wonderful <a href="http://penny-arcade.com/patv/show/extra-credits" target="_blank">Extra Credits</a> crew. Pretty different stuff than programming.<br />
<br />
Once I work through those books and put together a little more art, I should be ready to get a demo together.drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-56369669509196666592012-01-16T21:20:00.000-08:002012-01-16T21:20:52.547-08:00Office SpaceThe ball is rolling! It's moving slow but has gained momentum this month. My python build of v.0 of the engine is just about as far as I was in Lua before restarting, and I have a music composer and writer on board. Good things. I've also gotten set up with some sweet office space, courtesy of my lovely wife. I'm organized, I'm motivated, and I've got a great start on a platform engine that isn't using a bunch of stuff I don't want to include in a game. Good times.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-8equ1cm9NFoqjZ3kARPkFkQGVSE5fi1_UjN5YhfqMAPJ2lBRnyPRrwf9IpC0InFQnsAbkVEj16pQ9iesfYOygFLMZDYHbLBd4DCZdXGo-TwIULM0yuq8zmiskV4q-c77aMWiRxYEBqeW/s1600/milton.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-8equ1cm9NFoqjZ3kARPkFkQGVSE5fi1_UjN5YhfqMAPJ2lBRnyPRrwf9IpC0InFQnsAbkVEj16pQ9iesfYOygFLMZDYHbLBd4DCZdXGo-TwIULM0yuq8zmiskV4q-c77aMWiRxYEBqeW/s320/milton.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Office Space: important for getting work done.</td></tr>
</tbody></table>Best of all, I've been able to re-arrange my work week to spend a day a week working on game development all day. Almost like a job. Yess! There's enough to do in building a game from scratch that approaching it like a hobby isn't going to work, at least not at producing anything I'll be proud of. I'm taking time out of my week to start approaching game development like it is something I can make money doing. Maybe someday it will be.<div><br />
</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78Qs_egYezZIb8j__lwBcK2rwIEESHYDlYKeLyU3iqRmU8ibzcYWRyj8bzdUxKUkERudbll3RtpwDOzqoMJwwOl2NzRtub5B4A0kO7ZnwbEQ-B-AxLeLxaoI39WrmkNZUdxjb2LR6ccoV/s1600/officespace.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78Qs_egYezZIb8j__lwBcK2rwIEESHYDlYKeLyU3iqRmU8ibzcYWRyj8bzdUxKUkERudbll3RtpwDOzqoMJwwOl2NzRtub5B4A0kO7ZnwbEQ-B-AxLeLxaoI39WrmkNZUdxjb2LR6ccoV/s320/officespace.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Hey Kids! Can you find: Chair, Pillow, Lamp, Desk, Tablet, Machete, <br />
Konoha Headband, Skyrim Banner, and Cat? Have your parents help! </td></tr>
</tbody></table><div><br />
Game build is at 0.16 - Bob the skeleton jumps bobs and weaves, collides with ground, and even handles running up slopes like a champ. More posts about the game coming soon :)<br />
<br />
Oh! Also. Game development! <a href="http://www.sauropodstudio.com/">http://www.sauropodstudio.com</a> - this is great. I want go there.</div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-41189167693702707032011-08-23T22:07:00.000-07:002011-08-23T22:07:06.899-07:00Total RecallOr total rewrite, I suppose. I've been gone from here awhile, huh? Chalk it up to completely rewriting my engine from scratch in a new language I didn't know.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMOxrgzGb5yAA_hR8x-9Dc5KVXQ9KJdh6y0_ExP7QlvOTZYIUPXWFeygRLFTDOPffMBTUB33ND9LtEEGfakemnJVmRwhWw1BKUU26K9FQJgsEdD_NtsipYwDrW5dX_5lvmaEI5VsWoV8t/s1600/arhhhnold.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMOxrgzGb5yAA_hR8x-9Dc5KVXQ9KJdh6y0_ExP7QlvOTZYIUPXWFeygRLFTDOPffMBTUB33ND9LtEEGfakemnJVmRwhWw1BKUU26K9FQJgsEdD_NtsipYwDrW5dX_5lvmaEI5VsWoV8t/s320/arhhhnold.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">It hurts my brain.</td></tr>
</tbody></table>The longer I went on with the love engine, the more writing the code in lua was bothering me. And not just because it was killing my street cred (of which I have little). Writing the code in lua didn't afford me much in the way of flexibility when I ran into a problem the love engine wasn't able to handle. Writing my own code quickly became a mess, and as much as its been a pain in the ass to learn, OOP is definetly the way to go when writing games, from what I can tell. I also wasn't entirely sure how I was going to compile an actual executable without including the love engine framework - its probably easy, but it never sat well with me.<br />
<br />
So, dumping several thousand lines of code in the bin, I jumped in on a language I'd never used before, but was recommended as being a good one for games: Python.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixIpWNsI8Ltr24foYJRdOzFSK0WYUNVKa2m7kxSppMz-qS8pgjWbwObgw4gtHczwhhbWu51yZWMm58_nDal7ymJ6QGuQO9ljGkflMuazvj5Q3ET1iCAK4t864FK497Et2ZxJQqEloaXCgJ/s1600/python.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixIpWNsI8Ltr24foYJRdOzFSK0WYUNVKa2m7kxSppMz-qS8pgjWbwObgw4gtHczwhhbWu51yZWMm58_nDal7ymJ6QGuQO9ljGkflMuazvj5Q3ET1iCAK4t864FK497Et2ZxJQqEloaXCgJ/s1600/python.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Will eat your face.</td></tr>
</tbody></table><br />
The last few month's free time has been spent relearning how OOP works - I do Drupal development for a day job, so I'm great with MVC, but objects and inheritance are still a bit of a stretch for me. That was the bad news - the good news is I'm using a great library called <a href="http://www.pygame.org/news.html">Pygame</a> that's been totally great the more I learn how to properly use it.<br />
<br />
...Which leads us to my latest update, which is actually several steps back from my previous post months ago. I've managed to load my maps into the game using a neat xml utility (that I didn't have to roll myself - joy!) and output to layers, which I can move and deform now. I've added back in my skelly sprite as of today, and as you can see, he's moving (if not animating or erasing):<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA3Tr4Mrvqc4ioU3fCFjspvf207vsVK6p_smciNapemy6huk-jNfB1G9zyOqYo6s4ALRrUL6AKPa0zBKEk2hM8F8ieYr2-cbIk3BvDUQMxE6Qk6RDijzoyDDwO9rH3Z0aSvPDV2AgBI3jr/s1600/ugly_but_functional.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA3Tr4Mrvqc4ioU3fCFjspvf207vsVK6p_smciNapemy6huk-jNfB1G9zyOqYo6s4ALRrUL6AKPa0zBKEk2hM8F8ieYr2-cbIk3BvDUQMxE6Qk6RDijzoyDDwO9rH3Z0aSvPDV2AgBI3jr/s320/ugly_but_functional.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">He's like a blur.</td></tr>
</tbody></table><div>This is huge for me, as I now am back on track to making a game, this time with a platform I feel confident will be able to take anything I can throw at it, and one that looks a whole lot more feasible for eventual distribution. There have been some more exciting developments in the game's progress in the last few months, but I'm gonna save those for future posts. Version 0.1 here I come.</div><div><br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
</div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-29370230451012161182010-11-24T14:57:00.000-08:002010-11-24T14:57:14.556-08:00Wall JumpYep. Wall jumping.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIqUU5xeNKQlMIqUOTc6uTpSEG2_6M5wXlsrice2RwuDfiX3Zsp2b2BRzUnbB_w5XiwuO5zRaz3bhEhy02M9RnZ9fbi9v2ruJVehsVtgbbMD-AqodeDDrr8lXIl7fWgccuiOqfhyphenhyphenEfQTdW/s1600/Super+Metroid+-+Wall+Jump2-550x.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIqUU5xeNKQlMIqUOTc6uTpSEG2_6M5wXlsrice2RwuDfiX3Zsp2b2BRzUnbB_w5XiwuO5zRaz3bhEhy02M9RnZ9fbi9v2ruJVehsVtgbbMD-AqodeDDrr8lXIl7fWgccuiOqfhyphenhyphenEfQTdW/s200/Super+Metroid+-+Wall+Jump2-550x.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Samus, you make it look easy.</td></tr>
</tbody></table><br />
The code, while not completely re-factored, is running smoother than ever. Got rid of a lot of inefficient functions and combined a lot of work. The whole project needs a lot more optimisations, but I want to get back to actual gameplay improvements, as there are plenty more of those to go. This week, I added and finally decided to remove camera zooming (it was cool, but lost the 16 bit look I was going for), fixed camera scrolling, added player looking and wall slides and jumping.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxTKsVDUqS0bRHqy6wdQk-avdiCL6odzxD9HrIVr2VMaasUPMqn753JqLF-Z9RFWk2QuuPCR_zO3F7ZzKkTD_8V80CkWZwlBaCYUdL2B3zO3jbm9w61NO8g16NIrhSYKvTBG14D55GpcG/s1600/walljump.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxTKsVDUqS0bRHqy6wdQk-avdiCL6odzxD9HrIVr2VMaasUPMqn753JqLF-Z9RFWk2QuuPCR_zO3F7ZzKkTD_8V80CkWZwlBaCYUdL2B3zO3jbm9w61NO8g16NIrhSYKvTBG14D55GpcG/s1600/walljump.png" /></a></div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-65549293033364462292010-10-21T10:41:00.000-07:002010-10-21T10:41:51.542-07:00RefactoringWhere have I been!?<br />
<br />
The main.lua file for my game has gotten a bit... bloated. 1500 lines isn't that big really, but its big enough and dense enough that I'm feeling the wear of searching through it for a particular line. It's time to re-write, and split some of it up into seperate files. <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgWJAUVHGcBe_mWeipOsijc_wQR5rBTrcZN92Jbr9wk0pgzrY2nhRFG4rpZ_4HfKTy4KfGEM3FpY9UTpX-Ycv3QX-wQAjS4kccObfStOK3H8k3scF1lb3fRKtqq4cCH3dQ-ejC2CiPUcvj/s200/truffle-shuffle.jpg" style="margin-left: auto; margin-right: auto;" width="138" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Time to work off some of that baby fat.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgWJAUVHGcBe_mWeipOsijc_wQR5rBTrcZN92Jbr9wk0pgzrY2nhRFG4rpZ_4HfKTy4KfGEM3FpY9UTpX-Ycv3QX-wQAjS4kccObfStOK3H8k3scF1lb3fRKtqq4cCH3dQ-ejC2CiPUcvj/s1600/truffle-shuffle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><br />
<br />
That's where I've been. Progress has been good, but I still have a ways to go before I'll have more "actual" updates on the game. I did add a (very) simple enemy AI system before I started on this project, so when the refactoring is finished, we should have some baddies pretty quickly.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuDYsYbZDr4I7N4-sOe7GYljrEB3AnLJ_JHOpdyJq0_PqXT9XOkqfnHMd7SeuDVZ-opviqUN38qNYFAJL8xro7NDZyUnYqsozSPhJYxcNTEQWDJQqoRxb0ApUYpzGGnNSax2EO5rcyPMFB/s1600/5.png" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This winter: attacking a skeleton near you.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuDYsYbZDr4I7N4-sOe7GYljrEB3AnLJ_JHOpdyJq0_PqXT9XOkqfnHMd7SeuDVZ-opviqUN38qNYFAJL8xro7NDZyUnYqsozSPhJYxcNTEQWDJQqoRxb0ApUYpzGGnNSax2EO5rcyPMFB/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-15155796378231762062010-10-15T22:07:00.000-07:002010-10-15T22:07:06.422-07:00Solutions to Boring ProblemsDone! Managed to work through some boring, boring debugging, and the character movement is working better than ever. Besides special moves, like wall jumping or edge climbing, my little guy has everything he needs for now to move efficiently though a level. Think I'm ready to proceed to adding some enemies.<br />
<br />
Today I worked for a few hours on composing some music using Pixel's <a href="http://www.cavestory.org/downloads_6.php">Org Maker 2</a>. Made good progress, but I'm having a serious problem with an excess of happiness in my tunes. Think it comes from only using major chords. I need to figure out how to get some <i>spooky</i> in there.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtMSkYh7IQLNlSR2eI6fMqaFrQ9h5a3gxISzxiYJznI0seYbWcU5uO4aAw-STvEFAraKLA90J7Np56XPo-7CUNwJReAkqLk_RQTej42GC0JjpAcGjKPK3ngUX1IcC2RAg3TLycxxclEJPp/s1600/dracula.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtMSkYh7IQLNlSR2eI6fMqaFrQ9h5a3gxISzxiYJznI0seYbWcU5uO4aAw-STvEFAraKLA90J7Np56XPo-7CUNwJReAkqLk_RQTej42GC0JjpAcGjKPK3ngUX1IcC2RAg3TLycxxclEJPp/s200/dracula.jpg" width="158" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This. I need more of this. <br />
Spooky, son.</td></tr>
</tbody></table>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-67266076543332833892010-10-14T12:11:00.000-07:002010-10-14T12:17:28.299-07:00Boring Problems + SoundsI've hit a lull, and am trying to power through. I have some boring as dirt problems to solve, engine wise, before I can do much else. Making the art, sound and levels is fun and glamorous. This is not. Gonna beat it though.<br />
<br />
Problems:<br />
<ul><li>1) Hesitation when running from a flat surface to a slope</li>
<ul><li>FIXED - the program thought that the slope was a tiny, tiny wall until horizontal momentum was 0 - fixed this by checking that the wall size was > a pixel before killing horizontal momentum. </li>
</ul><li>2) Jumping while running up a slope: jumping straight up instead of up and forward, and only jumping half height</li>
<ul><li>IN PROGRESS - think the character is hitting the slope, and getting slowed.</li>
</ul><li>3) Jumping while running down a slope / touching ground inconsistancy</li>
<ul><li>Think the problem is that I only have one variable for touching the ground. Need seperate checks: one for wheter character should be allowed to jump, which is more forgiving, and one for whether the character is actually, physically, touching the ground, which should be tougher. Probably need to make the character somehow "stick" to the ground while running down slopes. Right now he runs faster than the slope, so he's constantly falling, and unable to jump. HMMMM... ):|</li>
</ul></ul>In less boring-as-hell news, I've started making sounds for the game. Well. "Making" might be a stretch. "Randomly generating using <a href="http://thirdcog.eu/apps/cfxr">CXFR</a>" would probably be more accurate. At any rate:<br />
<br />
<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6082002%3Fsecret_token%3Ds-Fud9S&secret_url=false"></param><param name="allowscriptaccess" value="always"></param><embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6082002%3Fsecret_token%3Ds-Fud9S&secret_url=false" type="application/x-shockwave-flash" width="100%"></embed> </object> <span><a href="http://soundcloud.com/drinkdecaf/jump">Jump</a> by <a href="http://soundcloud.com/drinkdecaf">drinkdecaf</a></span> <br />
<br />
<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6082043%3Fsecret_token%3Ds-l16hx&secret_url=false"></param><param name="allowscriptaccess" value="always"></param><embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F6082043%3Fsecret_token%3Ds-l16hx&secret_url=false" type="application/x-shockwave-flash" width="100%"></embed> </object> <span><a href="http://soundcloud.com/drinkdecaf/slide">Slide</a> by <a href="http://soundcloud.com/drinkdecaf">drinkdecaf</a></span> <br />
<br />
Next up: Music! If I can, I'll use Pixel's <a href="http://www.miraigamer.net/cavestory/downloads_6.php">Org Maker</a>. Not sure if I can turn that into a .wav though. We'll see, Margaret. We'll see.drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-67715290986322864702010-10-11T16:39:00.000-07:002010-10-11T16:39:34.674-07:00SpritesSprite system is a go!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyGUwiwru8aLuM0AEi82cSP7do95bGe_zC44NN3nb3zgaWwNG3LOLMvpxvwLr9ehz0wHWh0NOGIVFwVQgegP7kYLPMZAi-sr_8ayavsZXFTS0zV7dADdX27NEd_3aG-uPFLrrMQAc6nP-g/s1600/4.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyGUwiwru8aLuM0AEi82cSP7do95bGe_zC44NN3nb3zgaWwNG3LOLMvpxvwLr9ehz0wHWh0NOGIVFwVQgegP7kYLPMZAi-sr_8ayavsZXFTS0zV7dADdX27NEd_3aG-uPFLrrMQAc6nP-g/s1600/4.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Careful there, sparky.</td></tr>
</tbody></table>It's funny how much time I'm spending on the little parts of this game. A tile-system took almost no time to implement. Character movement was done in 30 minutes. But making sure the character wouldn't continuously jump by holding down the jump key took about 3 hours (there are a surprising number of ways this scenario can happen), and adding dirt clods that fly when you jump or slide that are visible for all of 5 frames (less than half a second) has taken me two days.<div><br />
</div><div>I'd be worried about this except 1) I'm having a blast, and 2) I really think the little details are what separate a <a href="http://en.wikipedia.org/wiki/Prey_(video_game)">mediocre game</a> from a <a href="http://en.wikipedia.org/wiki/Portal_(video_game)">truly excellent one</a>. Thats not saying much, I know, except that maybe people can tell when you loved what you were working on.</div><div><br />
</div><div>To do:</div><div><div><ul><li>smoother climb hills </li>
<ul><li>- Still having a problem with character hesitating at transition between flat and sloped tiles.</li>
</ul><li>background tile layer</li>
<ul><li>- Think I may implement this as a whole new tile layer. Maybe?</li>
</ul><li>char animation</li>
<ul><li> - So many more frames than I ever realized!</li>
</ul><li>death</li>
<li>enemies</li>
<li>shooting</li>
<li>swimming</li>
<li>scripting movies / camera</li>
</ul></div><br />
</div>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-39986513212240200372010-10-10T23:19:00.000-07:002010-10-10T23:19:08.396-07:00Weekend UpdateJust a short update, I've been working on a sprite system over the weekend, and am getting close to having it working. One of the hardest things about writing an engine, I'm discovering, is anticipating what needs I might have in the future for making a game. For now I just need small animations, like water, or e plosions, but later I'm sure I'll need particles, bullets and more. Learning to think ahead is definitely one of the biggest challenges of a project like this. <br />
<br />
The character movement function is getting pretty refined. I still have a few bugs to work out, but my little skelly guy is moving pretty well. I think I need to do some "research" tommorow on some of my favorite sidescrollers, to make sure I'm not forgetting anything. Did someone say walljump?drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-48832961824919844022010-10-08T10:33:00.000-07:002010-10-08T10:40:30.034-07:00Tiled .tmx loader for Love Engine (Lua)After several hours of work, my .tmx loader for my game is working! This will speed things up considerably!<br />
<br />
I'm posting the source in case anyone wants it, but be warned that it makes some assumptions:<br />
<br />
<ul><li>that tilewidth and tileheight are the same across the map, and all the tilesheets</li>
<li>that we've saved file under the csv method</li>
<li>this snippet only loads the variables from the file, and doesn't do anything with them - loading the info into tiles is another several hundred lines of code I'm not including here</li>
</ul><br />
Here it is: it's ugly, but its working.<br />
<br />
<pre class="brush: plain; collapse: true; ">function getTileArg(stringVal, argVal)
--gets argument value from the string in the form argument="value"
mySearchBegin, mySearchEnd = string.find(stringVal, ' ' .. argVal .. '="')
if mySearchBegin then
--find closing quote (")
openQuote = mySearchEnd
closeQuote, closeQuoteEnd = string.find(stringVal, '"', openQuote + 1)
return string.sub(stringVal, openQuote + 1, closeQuote - 1)
else
return -1
end
end
function explodeNumeric(div,str)
if (div=='') then return false end
local pos,arr = 0,{}
-- for each divider found
for st,sp in function() return string.find(str,div,pos,true) end do
table.insert(arr,tonumber(string.sub(str,pos,st-1))) -- Attach chars left of current divider
pos = sp + 1 -- Jump past current divider
end
table.insert(arr,string.sub(str,pos)) -- Attach chars right of last divider
return arr
end
function setupLevel(levelfile)
lines = {}
for line in love.filesystem.lines(levelfile .. ".tmx") do
table.insert(lines, line)
end
--find <map> line, get arguments
mapWidth = -1
mapHeight = -1
tileSize = -1
collideMapFirstLine = -1
collideMapWidth = -1
collideMapHeight = -1
spritesMapFirstLine = -1
spritesMapWidth = -1
spritesMapHeight = -1
collideFirstTile = -1
collideFile = -1
spritesFirstTile = -1
spriteFile = -1
for i,v in ipairs(lines) do
--main map line
if string.find(v, "<map ") then
--get mapWidth, mapHeight, tileSize
mapWidth = tonumber(getTileArg(v, "width"))
mapHeight = tonumber(getTileArg(v, "height"))
tileWidth = tonumber(getTileArg(v, "tilewidth"))
tileHeight = tonumber(getTileArg(v, "tileheight"))
if tileWidth == tileHeight then tileSize = tileWidth end
end
--tilesets
if string.find(v, "<tileset ") then
--get which map this is
whichMap = getTileArg(v, "name")
if whichMap == "collide" then
collideFirstTile = tonumber(getTileArg(v, "firstgid"))
collideTileWidth = tonumber(getTileArg(v, "tilewidth"))
collideTileHeight = tonumber(getTileArg(v, "tileheight"))
collideFile = getTileArg(lines[i + 1], "source")
elseif whichMap == "sprites" then
spritesFirstTile = tonumber(getTileArg(v, "firstgid"))
spritesTileWidth = tonumber(getTileArg(v, "tilewidth"))
spritesTileHeight = tonumber(getTileArg(v, "tileheight"))
spriteFile = getTileArg(lines[i + 1], "source")
end
end
--layers
if string.find(v, "<layer ") then
--get which layer this is
whichLayer = getTileArg(v, "name")
if whichLayer == "Collision" then
collideMapWidth = tonumber(getTileArg(v, "width"))
collideMapHeight = tonumber(getTileArg(v, "height"))
collideMapFirstLine = i + 2
elseif whichLayer == "Sprites" then
spritesMapWidth = tonumber(getTileArg(v, "width"))
spritesMapHeight = tonumber(getTileArg(v, "height"))
spritesMapFirstLine = i + 2
end
end
end
if mapWidth == -1 or mapHeight == -1 or tileSize == -1 then
error("Error Loading .tmx File (1)")
end
if collideFirstTile == -1 or collideFile == -1 or collideTileHeight ~= collideTileWidth or collideTileHeight ~= tileSize then
error("Error Loading .tmx File (1)")
end
if spritesFirstTile == -1 or spriteFile == -1 or spritesTileHeight ~= spritesTileWidth or spritesTileHeight ~= tileSize then
error("Error Loading .tmx File (1)")
end
if collideMapWidth == -1 or spritesMapWidth == -1 or collideMapWidth ~= spritesMapWidth or collideMapHeight == -1 or spritesMapHeight == -1 or collideMapHeight ~= spritesMapHeight or collideMapFirstLine == -1 or spritesMapFirstLine == -1 or collideMapWidth ~= mapWidth or collideMapHeight ~= mapHeight
then
error("Error Loading .tmx File (1)")
end
end
</pre>Next up is some glitch fixes - my character won't jump while running downhill - I need to tweak the touchingGround check somehow. Yay for bug fixes!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGIYdBhYBrCn3IMYNV0XhFGKeMVhf2T3Tr3UpXpbMfwHtZnQlEkXctKULg93yU9WxOUloNCiLAStRsSOBew77fqSu6e5MN3mPldRkzXc3xFV2uPDOUIm0g9o6tl3a8361CD9bSOnCmUOOg/s1600/3.png" imageanchor="1"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGIYdBhYBrCn3IMYNV0XhFGKeMVhf2T3Tr3UpXpbMfwHtZnQlEkXctKULg93yU9WxOUloNCiLAStRsSOBew77fqSu6e5MN3mPldRkzXc3xFV2uPDOUIm0g9o6tl3a8361CD9bSOnCmUOOg/s1600/3.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Thanks to the tilemap loader, I can now create nice looking levels<br />
... er... nicer looking levels than before, at any rate.</td></tr>
</tbody></table>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0tag:blogger.com,1999:blog-6901112273955127565.post-38910858121459308992010-10-07T10:54:00.000-07:002010-10-07T10:54:59.474-07:00Hello WorldHere we go.<br />
<br />
My name is Rick, and I go by drinkdecaf. I'm 29, and realizing that if I want to do the things I've always wanted to do, I'd better start actually doing them.<br />
<br />
I've always wanted to make games. <i>So I'm doing that</i>.<br />
<br />
My first project is a 2-D tile-based platformer engine / game. I'm writing it using the <a href="http://love2d.org/">love engine,</a> which is cheating, I'm pretty sure. Programming in Lua wont grow hair on your chest, but it will get you started, which is what I'm after right now -- gotta crawl before I can run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6BxTkKrlB1oFcDNGldOPmYEnbV4bKof1zh67oX-oVHZiLyZtzyomGxyai0FKLYtUIs9dxqqIb1ub1LBqv-0TR90KaHI3I8W8ge3tUyvF6IyTQj1tqoi2nIhT4kmIjvLCzx8M5j26Pqttf/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6BxTkKrlB1oFcDNGldOPmYEnbV4bKof1zh67oX-oVHZiLyZtzyomGxyai0FKLYtUIs9dxqqIb1ub1LBqv-0TR90KaHI3I8W8ge3tUyvF6IyTQj1tqoi2nIhT4kmIjvLCzx8M5j26Pqttf/s320/2.png" width="320" /></a></div>I've made some good progress so far on the engine - it loads a collision sheet and a sprite sheet, has collision detection I wrote that actually works pretty well, and has pretty good physics for the player character. It's nowhere near being a "game" yet, but its been fun working on it a little each day and getting closer to something that might be fun to play.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNUPBiKF7d8B39KbU4x2x5PMzvsih1kZq776Jvc0pWnzAgR3kczkOvWH9TwjVLuATuzhU-Hp5NMxIay8L72T97rJJSz_AhDMKMLEvSM1MpYxTI8G9WDyCaHoiC3Y38-pzFhhWBMtadTBzH/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNUPBiKF7d8B39KbU4x2x5PMzvsih1kZq776Jvc0pWnzAgR3kczkOvWH9TwjVLuATuzhU-Hp5NMxIay8L72T97rJJSz_AhDMKMLEvSM1MpYxTI8G9WDyCaHoiC3Y38-pzFhhWBMtadTBzH/s320/1.png" width="320" /></a></div><br />
Right now, I'm using <a href="http://www.mapeditor.org/">Tiled</a> to create the level / colision maps, so my next step, boring though it may be, is to write a parser that reads the .tmx Tiled files into my game automatically - I've checked, but no one seems to have written one of these for Lua, so its up to me, it seems.<br />
<br />
Other to-do items:<br />
<ul><li>character start point loads from collision map</li>
<li>camera start point loads from collision map</li>
<li>character run animation</li>
<li>death</li>
<li>enemies</li>
<li>shooting</li>
<li>swimming</li>
</ul>drinkdecafhttp://www.blogger.com/profile/07002252248642893188noreply@blogger.com0