TFernando

LD17

Done.

Submitted.

The start of a sound handling system is in the source code, but I’ve decided not to implement it. I’m starting to break code while tinkering, so I think it’s time to call it a wrap and get some sleep. From version 0.6, many bugfixes of varying severity. No major gameplay changes.

Good luck to everyone still working!
-TF

SubScreenshot

I came here to rate games and chew bubblegum

And I’m all out of games. Anyone got bubblegum? :)

So, since the compo ended I played and rated 172 games. Basically I started with the web games, then went through people I recognized from one or another site… then I started in on my assigned games, and when I finished those I just kinda kept rating…

If I didn’t rate your game it was because:

  • Your game crashed before the title screen, or in the first few seconds after the title screen
  • Your game caused a Blue Screen of Death.
  • Your entry didn’t provide a web version or windows binary when I checked.
  • Your installer failed (XNA only, though most were fine)
  • You required hardware I don’t own. (eg, a gamepad)
  • Your download link was broken/shut down (I checked each of these more than once, sorry I missed you)
  • Some stuff I want to say:

  • Don’t play 172 games in 2.5 days. They start to blend together, and there are some which I probably did not give the time they needed in order to be assessed. (Not -YOURS- dear reader, yours was unique and captivated me ;))
  • XNA guys– I know XNA has dependencies, so it makes sense to use installers. Please stop having those installers put stuff on my desktop and in my start menu. It’s not -difficult- to remove them, it’s just annoying. And I know you don’t HAVE to, because not all the XNA entries did.
  • Flash– You need to have at least a basic preloader. I might think your page just isn’t loading.
  • Flash– Don’t link directly to your swf. Make a dummy html page, and use the embed tag. Or have the game hosted on swfcabin or similar. If you link direct to the swf, there are occasionally scaling issues.
  • Flash– Don’t distribute your swf and call it a windows binary. Or if you do, include an html page that embeds it. Not everybody has a debug/standalone player.
  • Everybody– It’s probably not a great idea to call your .zip archive LD17.zip…
  • Everybody– Please DO indicate on your title screen how to get to the main menu. And if you include a line that says ‘Press the Any-Key to continue’, please make sure the left arrow works. :)
  • (I pick on Flash, because I do Flash.)

    I thought the over all quality of the submissions was really high! I enjoyed making my game, I enjoyed playing all yours! I’m looking forward to doing this again in August!

    -TF

    Comments

    28. Apr 2010 · 03:46 UTC
    Wow, good job! I haven’t even started rating the games yet. Just played a few interesting looking ones.

    I guess you didn’t leave comments for many games. Comments are always nice!
    28. Apr 2010 · 04:16 UTC
    You’re right, of course. But generally, I don’t like to comment if someone else has already said what I was going to say. That goes for games, blog posts, etc..
    28. Apr 2010 · 04:36 UTC
    Awesome job, and thanks for the tips! I always intend to name my zip something sensible – ideally with my name and the game name in there, but this time I just did turtleferry.zip. You’re a credit to the community, thanks so much for supporting everyone!
    snowyowl
    28. Apr 2010 · 05:12 UTC
    I think I’m going to comment on this even though Dock just said everything I wanted to say 😉

    Somebody get this man a trophy!
    smn
    28. Apr 2010 · 12:15 UTC
    My game seems to have fallen into the no-preloader-problem category, then 😀
    28. Apr 2010 · 12:29 UTC
    Quote – “XNA guys- I know XNA has dependencies, so it makes sense to use installers. Please stop having those installers put stuff on my desktop and in my start menu. It’s not -difficult- to remove them, it’s just annoying. And I know you don’t HAVE to, because not all the XNA entries did.”
    28. Apr 2010 · 16:43 UTC
    I also refuse to install games. Time has nothing to do with it. The ease of use of your installer also has nothing to do with it. Installers have gotten a bad reputation in my eyes and that’s why I won’t use them. Would it be so difficult for you to include the game along with your installer? No it wouldn’t, so why not give us both options?
    28. Apr 2010 · 16:44 UTC
    Codexus has pretty much stated my position.
    Osgeld
    28. Apr 2010 · 21:15 UTC
    course if everyone has an installer thats only 3 and a half hours just for installing and uninstalling (for this compo)

    Postmortem

    A few days have passed, so its time for me to write a postmortem before I forget everything I did with Invasive.

    First: Thanks to everyone who played my game!

    This is long, and possibly of little interest so I’ll hide it behind a read-more tag.

    What went right/techniques learned…

    – Hybrid blitting engine

    I didn’t implement a full-redraw-each-frame blitting engine, so I’m calling it a hybrid. The main viewing area of the game consists of three “zoom” classes extending Flash’s native Sprite class, which in turn each have a terrain, flora, fauna, and artifact layer. Those layers are 500×480 transparent bitmaps to which I draw almost every frame. (The zoom class tracks a camera, and if it hasn’t been moved the terrain layer doesn’t refresh. The other layers get fed model data, and get cleared and repainted every frame.) At any given time, only one zoom class is visible, the others are .visible=false and aren’t fed model data.

    Performance isn’t earth shattering, but up till now to do this project I would have added sprites to the display list for every movable object. Having a Flash display list several thousand items long just doesn’t really work well. :) So I was happy with this.

    -Bitmaps for storing data

    There are several cases in the game where I need to know if two things are in the same place. (A kiwi and a tree, a glomper and a kiwi, etc..) Since I had divorced the model from the view, I couldn’t do use either Gilbert’s bitmap collision class as I had planned , or Flash’s bitmap.hitTest[method]s. I was storing every objects locations in their own arrays. (Ie: Kiwi:Array, Glomper:Array, etc) Each object had it’s own class, but all of them had public GlobalX and GlobalY properties.) I’m sure there are faster ways of finding all intersections between two lists than a nested loop, but unfortunately I don’t know them (yet). In pseudo-code:

    FOR EACH Kiwi:

    FOR EACH Tree:

    if the Kiwi's location == the Tree's location:

    Do Stuff;

    On the other hand, most of the objects weren’t colliding at any given time. So, rather than checking -every- Kiwi against -every- tree, I did the following (in pseudo-code):

    PLOT EACH tree on an off screen bitmap

    FOR EACH Kiwi:

    Look at bitmap and see if there is a tree, IF there is a tree:

    FOR EACH Tree:

    IF the Kiwi's location == Tree's location:

    Do Stuff;

    Even though I added an if operation to the nest, and even though there’s an extra loop outside the nest (to do the plot), the second pseudo-code snippet runs faster because it cuts out a nested for loop in a large percentage of cases. Since in the cases of the Kiwi/Glomper interactions the arrays could have literally thousands of members, this made the game possible. (Though I think the second snippet is still O(n^2)? I don’t have enough of a CS background to assess that.)

    I also used a bitmap for initially storing map information (to set terrain tiles during initialization). This worked beautifully vs using an xml, just in terms of my own convenience.

    What went wrong:

    The zoom wasn’t intuitive

    I was pretty happy/comfortable with my pan and zoom, but i had written it in the first place and knew how it was going to operate. I -should- have provided mouse-wheel zoom, mouse-edge panning, etc. And the zoom levels I provided were poorly chosen; for my convenience, rather than the player’s. Several commenters noted this and they’re right.

    – On the outermost level of zoom, animals should have been more than 1×1 pixel. And their colors could have been better.

    It’s very hard to tell the difference between glompers and kiwis, because they’re represented at this level by single pixels– and those pixels are red and brown, two colors which don’t really show up well against the terrain. I think 2×2 pixels might have been more visible, and I could have given more thought to contrast. (Also noted by commenters)

    – I spent most of my time on displaying a model, and didn’t spend time on gameplay or interface.

    In the versions up to 0.6, walls stop glompers but don’t stop Kiwis. Since I cowardly shrank from the challenge of pathfinding several thousand animals at once, the movement is decided at random. As a result I was afraid there was no win condition. So at the last minute I changed it so that walls stop everything… this meant there was an easy but possibly tedious way to win, hurting the fun value of the game. I didn’t really tune things I should have, such as the number of kiwis each glomper needed to eat before reproducing. Ultimately, this comes down to me failing to test sufficiently.

    Likewise, several commenters noted that it would have been nice to have click-drag to place walls (which after all, are useless if just single blocks!). They’re right.. in fact I knew this before I released it, but-

    – Time management/motivation

    I stopped with several hours left because I was dead tired, and probably should have tried to take a nap rather than calling it a day. The major casualty of this is a sound effects engine, but there were others.

    For the present:

    I had fun building the game, and I think I improved my technical skills by dealing with the movement of large numbers of objects– a task I just wouldn’t have attempted in my usual projects.

    For the future:

    – I’ve now done two LDs where I tried to pull off something with more complexity than I was able to do properly. Next time I’m going to try to do something small, and polish it until I gotta wear shades.

    – The general setup seems ok, and I like the idea of doing a game about invasive species. I may revisit this and try to implement a better ecosystem model (along with the interface improvements), and come up with a better game. There are other projects I need to finish first though.

    -TF

    Comments

    30. Apr 2010 · 14:48 UTC
    Interesting post mortem.
    04. May 2010 · 15:57 UTC
    I don’t worry about quitting early… I’m an old man, and about halfway through Sunday (in my timezone, LD ends at 7pm on Sunday), I always decide that’s good enough and just polish up a couple of loose ends, zip it up and go for a walk. I always find that by that point, I’m just completely burned. I could get more done, but why smash yourself when the actual work week is starting the next morning? Of course, I also take it really easy on that next work day too. LD is a mentally draining experience!

    I’m in … I need to bughunt anyways

    I was going to skip this mini-LD, I really was. But I ran into an impossible bug on my current project sooo…

    I’m going to build some type of multiplayer industrial simulation. From scratch except:

    – I’ll use the playerio multiplayer API

    Basically I’m hoping that by being forced to quickly do a message handler from scratch, I’ll either not cause my bug (in which case I can compare the MLD game code to my main project code and fix it) or I’ll manifest the bug with more understandable symptoms because the message handler will be simpler (and then be able to compare to the project code and fix it).

    (If the consensus is that this in unallowable middleware, I won’t enter the game for voting. It meets the criteria of LD16 for inclusion though (free, no NDA, I’m allowed to release my source, etc))

    Regardless, watch this space for news on the development of Power Plant Operator vs Ninja! (Actually, I probably won’t do very many blog updates this time, since there’s quite a bit of work to do…)

    My start time is 7:00PM Fri, AKDT (UTC -8). Current time is 9PM… Current status… the design document is done ‘enough’. :)

    12hrs and I have…

    … managed to get my lobby working, and synced two clients. (The price and demand are changing in real time, though you wouldn’t know from the screenshot.)

    MLDss1

    Next up… a building selector, placement of buildings, switching between players’ power plants, a thermodynamics model (!), and sabotage. :) Also sprites, sounds and music. And a context sensitive menu. And help popups. And an AI that can play the game.

    Yeah. The likelyhood that I’ll finish this is pretty low. But I’ll keep working and get as far as I can. Hopefully I’ll be able to duplicate the bug I’m looking for.

    Comments

    snowyowl
    12. Jun 2010 · 14:35 UTC
    Looks impressive. I hope you get it finished, even if it’s after the deadline.
    13. Jun 2010 · 04:24 UTC
    Thanks… I’m bowing out of the Mini-LD with this comment. (I just don’t want to stay up all night!) But I’m going to keep working on this.

    LD19

    LD19- Intent to Enter

    I was up in the air on LD19… I participated in LD15 and 17, so this was going to fit in the series. But I’m working on an entry for another competition which had a deadline of Dec 15th. That deadline got extended to the 19th, which would have conflicted. But that entry (BW16) is very close to complete, so I’ll be able to participate in the compo.

    Using-

    FlashDevelop/FlexSDK

    GiMP

    I’d plan on using sfxr, but I want to play a little more with FlashPlayer 10’s on the fly sound generation… I haven’t decided yet whether to release/declare the sound & music managers from BW16 or write new & better ones from scratch. One way or another though, this will be my first LD with sound.