Home General Discussion

Kids vs. Zombies iPhone game

Been a long time visitor, first time poster. But I work in the games industry and my friend and I have been trying out the iPhone game field, and we were recently accepted.
I've seen a few comments about developing for an iPhone game so I'm more than happy to answer any questions about the entire process.
It took us about 5 months total. 2 months RnD, and another 2 months for full content and polish. Then surprisingly only a week to be accepted.
Check it out at www.kidsvszombies.com
Let me know what you think!

screenshot_mob.jpg

Replies

  • JasonLavoie
    Offline / Send Message
    JasonLavoie polycounter lvl 18
    Congrats man :)

    Did some work on an Iphone game that is just waiting for release as well, sounds like its pretty straight forward process from apple.

    Gonna be working on anymore Iphone games? Really interested to see more developers (or indie devs) working on the Iphone, it seems to be a good platform to work on.
  • fast1
    not too bad, thanks for the share.clear.gif
  • Mark Dygert
    Ha cool stuff.

    Reminds me of this awesome painting by Jason Chan, which sat on my desktop for months until I ordered a print heh.
  • Tumerboy
    Offline / Send Message
    Tumerboy polycounter lvl 17
    nice work dood!
  • Funky Bunnies
    Offline / Send Message
    Funky Bunnies polycounter lvl 17
    Awesome! congrats, man
  • rolfness
    Offline / Send Message
    rolfness polycounter lvl 18
    aww thats awful poor zombies..
  • Kevin Albers
    Offline / Send Message
    Kevin Albers polycounter lvl 18
    Grats! Has a nice cartoony look going on.
    Only a week to get accepted? I'm envious.
  • AbsintheRogue
    Thanks everyone! We appreciate the positive comments! The free version is up now too, just search for 'kids vs zombies lite'!
    We're taking a break for a few weeks to see how this one goes. But are already talking about updates and another game.
  • t4paN
    Offline / Send Message
    t4paN polycounter lvl 10
    Hey first of all, congrats on releasing the game, and hopefully all goes well! I was wondering, and hopefully this isn't a tacky question, but how much did development cost, if you can share this information? Also, did you do it on Unity?
  • AbsintheRogue
    I can't really comment on the development cost, but the main thing you need is the 100$ dev kit from Apple.
    My friend started with the Oolong engine, and heavily modified it from there.
  • TWilson
    Offline / Send Message
    TWilson polycounter lvl 18
    Nice job AbsintheRogue. Is this a full time operation for you guys or on the side?

    What did you do for audio?

    How have you been promoting it?
  • t4paN
    Offline / Send Message
    t4paN polycounter lvl 10
    Ok mate, thanks for the info!
  • StJoris
    Congrats man, very nicely done!

    Might I ask what modifications were done on oolong mainly?

    How did you do your level authoring?
  • mister echo
    Hi All,

    I'm the programming half of Monkey Wrench, and worked with AbsintheRogue on Kids vs. Zombies.

    Regarding Oolong modifications, we used these main Oolong components:
    - Math
    - ModelPOD
    - Texture (loading from PVR format files)
    - Sound Engine (originally from Crash Landing SDK demo)
    - Resource (file loading)

    We rolled our own timing and 2D UI code, as well as Open GL rendering utilities. Oolong's input code is one of its weak points.

    The most important modification was stripping down the ModelPOD animation code to not use caching and to pre-compute all bone parent transforms. iPhone turns out to be quite slow at Matrix multiplication, and so we essentially got rid of the bone parent tree on animation load.

    In the end, we were able to get about 8500 polygons onscreen at 18-25 FPS and 1 light source. We also squeeze in three light sources with fewer zombies (polys) onscreen.

    Level authoring was done in Excel (one row per wave of enemies) and exported to a data file.

    Hope that helps!
  • earamsey
    What do you mean by;
    1. rolled our own timing
    2. and 2D UI code
    3. as well as Open GL rendering utilities
    ????

    Thanks
    Hi All,

    I'm the programming half of Monkey Wrench, and worked with AbsintheRogue on Kids vs. Zombies.

    Regarding Oolong modifications, we used these main Oolong components:
    - Math
    - ModelPOD
    - Texture (loading from PVR format files)
    - Sound Engine (originally from Crash Landing SDK demo)
    - Resource (file loading)

    We rolled our own timing and 2D UI code, as well as Open GL rendering utilities. Oolong's input code is one of its weak points.

    The most important modification was stripping down the ModelPOD animation code to not use caching and to pre-compute all bone parent transforms. iPhone turns out to be quite slow at Matrix multiplication, and so we essentially got rid of the bone parent tree on animation load.

    In the end, we were able to get about 8500 polygons onscreen at 18-25 FPS and 1 light source. We also squeeze in three light sources with fewer zombies (polys) onscreen.

    Level authoring was done in Excel (one row per wave of enemies) and exported to a data file.

    Hope that helps!
  • earamsey
    Hi,

    I stepped through sample oolong code, namely;

    "Oolong Engine2\Examples\Renderer\Ported PowerVR Examples\01 POD Geometry"

    , and it appears that code is using neither glMultMatrixd nor glMultMatrixf methods. Have you already made these changes to in Oolong Engine (view link) source for iphone? I was thinking that I had to make these changes myself to code at link above?

    Could you please clarify?
  • mister echo
    As for matrix mults, see the matrix multiplication code in CPVRTModelPOD::GetWorldMatrix and related methods -- this is slow when multiplying against all parent transforms, especially when done for each joint, every frame.

    Regarding the other questions, we wrote our own user-interface code (buttons, sprites, HUD, etc), timing code (mainly for framerate calculation and the framerate-independent update loop), and lower-level OpenGL utilities (rendering circles and spheres, sprites, etc), which were not provided directly by OpenGL or Oolong.
  • earamsey
    Ok, they do call the void CPVRTModelPOD::GetWorldMatrixNoCache(MATRI &mOut, const SPODNode &node) const // (click to view code). Weird though, I would have thought that caching would have sped things up. I notice that glFrustum() is not used either but MatrixPerspectiveFovRH() is used instead. I any advantage to using glFrustum() instead of their MatrixPerspectiveFovRH() function? Also, MatrixPerspectiveFovRH() is using
    f = 1.0f / (float)tan(fFOVy * 0.5f);
    
    Does iPhone perform this operation acceptably fast or should one replace this with lookup table instead?

    Thanks
  • mister echo
    Caching may help, depending on the situation. We had multiple zombie characters sharing the same ModelPOD instance, so caching wasn't so helpful for us.
    Not sure about glFrustrum, we only called MatrixPerspectiveForRH once per frame, so it wasn't a performance bottleneck for us.
    And I noticed a big performance gain from using trig lookup tables.
  • earamsey
    Comment: Since trig lookup tables boosts performance calling glFrustum() may not be a good idea since I don't know if it implements tan() function or not; experimentation may be required to find best solution for this.

    Timing: In example project 01 POD Geometry the timing, I think, is implemented in AppController class
    - (void) applicationDidFinishLaunching:(UIApplication*)application
    {
         // ...
         [NSTimer 
             scheduledTimerWithTimeInterval:(1.0 / kFPS)
             target:self 
             selector:@selector(update)
             userInfo:nil 
             repeats:YES];
    } 
    

    Question1: Is there any documentation to aid me in writing framerate calculation code?

    Also, it is stated that a framerate-independent update loop was created; it seems natural to have framerate-dependent updates.

    Question2: Where else to place update code if not at end of framerate timer? Is this done because of iPhone peculiarities?

    Question3:How would this loop even get invoked via NSTimer or some other technique?

    By the way, I am using book [ame="http://www.amazon.com/gp/product/0123737273"]Mobile 3D Graphics: with OpenGL ES and M3G[/ame], and various tutorials (ie NEHE), as reference. I find documentation at apple to be a bit wanting :(

    Thanks!
  • earamsey
    Hi, this is what guys at apple developer forum say about matrix multiplication;

    <Removed because I don't think his comment applies to you>
Sign In or Register to comment.