For a while now we have been close to being able to release a playable demo and I’ve been itching to get something online that shows the gameplay coming together since its really fun to play Franky here in the studio and videos don’t cut it anymore for an open, interactive project.

Chris made a small test level for playing Franky, with a range of asset that can be used as modules for making your own levels too!
Pablo (VenomGFX) is working on animations and characters and I have been learning blenders game logic to get Franky to a playable state as well as a few bugfixes and logic brick additions.

Download the OGG Video (13meg)
Download packed Blendfile (57meg, Incompatible with 2.46, see below)

Special thanks to Brecht for his amazing GLSL shader work and Benoit Bolsee for writing a new game logic state machine. Thanks also to Mataii for optimizing Franky’s mesh and removing ~1700 triangles .

The response from the last post was overwhelming, We wanted to include peoples wacky animations but I’m afraid this would have set us back yet another day so we will have them included by the next update.
If anyones interested in making their own levels, this is not so hard, just edit the existing terrain, or add a “ground” property to any mesh and use the existing blocks to jump on.

Playing the Game
For this test level you collect and throw nuts, climb up the ledge, glide and run around.
This demo requires a modern graphics card (for Nvidia, 6+ Series for GLSL to work), Blender Apricot-Branch revision 15389 or higher – grab one from www.graphicall.org

Keys

  • Up, Shift+Up to walk, Pressing Up while hanging climbs.
  • Left/Right – Turn or Shimmy when hanging.
  • Spacebar – Throw when you have collected a nut.
  • K – Kick (no kick objects in example level yet)
  • Z – Jump, Press twice to double-jump, hold to glide.
  • F10 – Reset

What We Have

  • Actions – Jump, DoubleJump, Run, Walk, Hang, Shimmy, Throw, Glide
  • Collecting items.
  • Armature driven ShapeKeys in the Game Engine (Thanks to Benoit)
  • Blenders Shaders in the GameEngine.
  • Game locic state machine to separate groups of logic into states (more on this later).
  • Linked Set Scenes from external files to manage game logic in one place.
  • Simple Camera system that detects obstacles.

Whats Missing

  • Loop the loop, Climbing tree’s
  • Enemies
  • Water
  • Interactive objects to jump on
  • Group Instances dont work in the game engine yet
  • HUD Has to be merged with the new state machine logic
  • Blenders Bullet physics library needs updating to get anisotropic friction with the ground to work right. Now were working around the problem but side effects are you can run through walls.
  • Optimizations, Level of Detail
  • Wont run the the Blender Player yet because its missing Blender.Mathutils module
  • Sounds haven’t been added into the game logic
  • Testing on different graphics cards and hardware.

Notes

  • the franky in this demo has rotated wrists, please use THIS rig for animations.
  • Their are reports of the game engine crashing with ATI cards, we need to look into this.
  • As of revision 15426 improvements made by Benoit break jumping. Next test demo will have modified gamelogic to support this.



176 Responses to “First Playable Demo!”
  1. Hi Campbell,

    Have you considered the implementation of Hardware Occlusion culling in the BGE to increase the performance?

    Very very good work!!!!

    Thanks for all your efforts.

  2. 10-15 frames a second on amd dualcore 3800.. with an invidia dual gpu 6600.. plus I get weird stipey shadow errors now? they worked before..?

    [URL=http://img53.imageshack.us/my.php?image=blenderbuglv4.jpg][IMG]http://img53.imageshack.us/img53/6014/blenderbuglv4.th.jpg[/IMG][/URL]

  3. strange shadow error see blender artists forum pls.

    get about 10-15 frames per second,
    dual 3800 amd 2 gigs ram
    dual nvidia gpu 6600

    http://blenderartists.org/forum/showthread.php?t=128940

  4. Salvador says:

    I can play the demo, it says “no (correct) camera” when I start the simulation.

    I use blender 2.46 in windows xp

  5. Salvador says:

    sorry i menat I can not play the demo

  6. nice game, great work guys

    I found a bug, I jumped at a rock and then got stuck in it, like a cave

  7. That’s very good for the first demo, can’t wait to see the final version ๐Ÿ™‚

    keep it up

  8. Gr8 work!

  9. @Salvador, please read the text in this post, it says that it won’t work with official 2.46.

    @jedi1, thanks, we are aware of this bug, it have to do with something that is already fixed now.

  10. Marius S. Buertange says:

    Very nice. I suggest putting the game out as an exe file instead because that way:
    1. No one can steal your work (believe me someone will eventually do it)
    2. People do’t have to re install version 2.45.

    If you wonder how to make it exe file: make a folder, copy all dll’s from C:/program files/blender foundation/ blender into the folder. Then go to the blender project and do file > save runtime and save it to the folder. Then publish that folder instead. That way we can only play the game, but not steal it.

  11. Marius: I’m sorry to pull you from your cloud, but the .blend file is simply appended to the .exe and thus it is still trivial to steal your work.

  12. @Marius.. it is Opensource by the way!! In other words they want people to copy it, edit it, play with it and make their own versions (put not sell it as if it was your own or at all). People have certain usage rights under the various creative commons licences.

  13. Kirado: People are allowed to sell CC licensed work as long as NC (not commercial use) clause is not used.

    For instance in case of Project Orange or Peach all you need to do is to remember the attribution. There may be some exceptions related to music and DVD cover art though.

  14. Hey I found out what cause the weird shadow pattern. Just select the lamp and increase BIAS to 1.000 to the original blender default.

  15. Hey! with the new Build from SVN i got about 50-60 fps on geforce 8600GT!

    Greate work!

  16. and those are *small* optimizations, in brecht’s words! ๐Ÿ™‚

    but yeah testing here give me more than twice the framerate than before, just awesome

  17. Yes, very good work. But with the newer Versions there comes also a bug, that Franky jumps too high..

  18. yup, there have been some internal changes in the BGE. But now everything is back to normal, so for next demo will be all right.

  19. been testing it on with revision 15480, wow.. what a framerate increase.. shadows don’t work with alphas anymore..(15480).. and the jump height is huge.. but what FUN! see the blender artists forum we have going. ๐Ÿ˜‰

    http://blenderartists.org/forum/showthread.php?p=1159695&posted=1#post1159695

    wow now I can appreciate all the hard work.. can’t wait for the release.. going to be buying a DVD this week!

  20. I have too the error “no (correct) camera” ! And I use the last apricot build from graphicall.org !

    Have you a solution ?

  21. finally, i’ve tested this demo on my laptop with the “disable load UI” trick and without GLSL shaders. it runs fine at a steady 60 fps with the 15471 build ๐Ÿ™‚

    win XP
    ati radeon X1600
    core duo 1.8 Ghz

    i was really surprised how high poly the scene was (for example the butterflies wing are not simple plan with alpha, but fully modelled)
    and the new state machine looks really effective, i think i will drop my python stuff ๐Ÿ˜‰

    however some constructive criticisms :

    -maybe you could make this state machine system more visual like the node system with boxes (states)linked together…

    -the camera system is great but i found that the camera is too close to frankie at rest, and it would be cool if the user could orient the camera , so we can admire the landscape, or even frankie’s face

    -the frankie “stop animation” plays too often, its annoying when you have to make small displacements to catch nuts , it would be great if it only play after a certain running time.

    Anyway, its a great game, and i can’t wait this new GameEngine to be operationnal

  22. with the new build 15475 I get this message in the Consol window… Hope this helps and there will soon be a demo out there that I can play:

    =====
    46 void shade_add(vec4 param0, vec4 param1, out vec4 param2);
    47 void mix_div(float param0, vec4 param1, vec4 param2, out vec4 param3);
    48 void vec_math_dot(vec3 param0, vec3 param1, out vec3 param2, out float param
    3);
    49 void vcol_attribute(vec4 param0, out vec4 param1);
    50 void mtex_rgb_div(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    51 void mtex_har_divide(float param0, out float param1);
    52 void texture_blend_lin(vec3 param0, out float param1);
    53 void mtex_rgb_diff(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    54 void mix_sat(float param0, vec4 param1, vec4 param2, out vec4 param3);
    55 void math_multiply(float param0, float param1, out float param2);
    56 void math_add(float param0, float param1, out float param2);
    57 void mtex_alpha_to_col(vec4 param0, float param1, out vec4 param2);
    58 void shade_mul_value(float param0, vec4 param1, out vec4 param2);
    59 void shade_tangent_v_spec(vec3 param0, out vec3 param1);
    60 void shade_cubic(float param0, out float param1);
    61 void shade_is_no_diffuse(out float param0);
    62 void mtex_rgb_sat(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    63 void mix_overlay(float param0, vec4 param1, vec4 param2, out vec4 param3);
    64 void mapping(vec3 param0, mat4 param1, vec3 param2, vec3 param3, float param
    4, float param5, out vec3 param6);
    65 void mix_blend(float param0, vec4 param1, vec4 param2, out vec4 param3);
    66 void shade_cooktorr_spec(vec3 param0, vec3 param1, vec3 param2, float param3
    , out float param4);
    67 void shade_add_to_diffuse(float param0, vec3 param1, vec3 param2, out vec3 p
    aram3);
    68 void vec_math_average(vec3 param0, vec3 param1, out vec3 param2, out float p
    aram3);
    69 void mix_hue(float param0, vec4 param1, vec4 param2, out vec4 param3);
    70 void shade_add_spec(float param0, vec3 param1, vec3 param2, out vec3 param3)
    ;
    71 void shade_spec_area_inp(float param0, float param1, out float param2);
    72 void lamp_falloff_sliders(float param0, float param1, float param2, float pa
    ram3, out float param4);
    73 void math_subtract(float param0, float param1, out float param2);
    74 void mtex_rgb_hue(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    75 void mtex_rgb_screen(vec3 param0, vec3 param1, float param2, float param3, o
    ut vec3 param4);
    76 void set_value(float param0, out float param1);
    77 void lamp_falloff_invlinear(float param0, float param1, out float param2);
    78 void math_min(float param0, float param1, out float param2);
    79 void mtex_value_vars(inout float param0, float param1, out float param2, flo
    at param3);
    80 void hsv_to_rgb(vec4 param0, out vec4 param1);
    81 void shade_blinn_spec(vec3 param0, vec3 param1, vec3 param2, float param3, f
    loat param4, out float param5);
    82 void shade_inp(vec3 param0, vec3 param1, out float param2);
    83 void lamp_falloff_invsquare(float param0, float param1, out float param2);
    84 void vec_math_cross(vec3 param0, vec3 param1, out vec3 param2, out float par
    am3);
    85 void mtex_rgb_stencil(float param0, vec4 param1, out float param2, out vec4
    param3);
    86 void shade_spec_t(float param0, float param1, float param2, float param3, ou
    t float param4);
    87 void shade_diffuse_toon(vec3 param0, vec3 param1, vec3 param2, float param3,
    float param4, out float param5);
    88 void math_greater_than(float param0, float param1, out float param2);
    89 void normal(vec3 param0, vec3 param1, out vec3 param2, out float param3);
    90 void mtex_rgb_invert(vec4 param0, out vec4 param1);
    91 void mtex_nspace_tangent(vec3 param0, vec3 param1, vec3 param2, out vec3 par
    am3);
    92 void mix_val(float param0, vec4 param1, vec4 param2, out vec4 param3);
    93 void shade_wardiso_spec(vec3 param0, vec3 param1, vec3 param2, float param3,
    out float param4);
    94 void shade_is_hemi(float param0, out float param1);
    95 void lamp_visibility_spot_square(mat4 param0, mat4 param1, vec3 param2, mat4
    param3, vec3 param4, out float param5);
    96 void set_value_zero(out float param0);
    97 void shade_norm(vec3 param0, out vec3 param1);
    98 void mtex_rgb_val(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    99 void texco_norm(vec3 param0, out vec3 param1);
    100 void mtex_value_stencil(float param0, float param1, out float param2, out f
    loat param3);
    101 void separate_rgb(vec4 param0, out float param1, out float param2, out floa
    t param3);
    102 void mtex_rgb_dark(vec3 param0, vec3 param1, float param2, float param3, ou
    t vec3 param4);
    103 void math_asin(float param0, out float param1);
    104 void shade_madd(vec4 param0, vec4 param1, vec4 param2, out vec4 param3);
    105 void math_atan(float param0, out float param1);
    106 void shade_inp_area(vec3 param0, vec3 param1, vec3 param2, vec3 param3, mat
    4 param4, float param5, float param6, out float param7);
    107 void texco_orco(vec3 param0, out vec3 param1);
    108 void shade_only_shadow(float param0, float param1, float param2, vec3 param
    3, vec3 param4, vec4 param5, vec4 param6, out vec4 param7, out vec4 param8);
    109 void mix_light(float param0, vec4 param1, vec4 param2, out vec4 param3);
    110 void shade_tangent_v(vec3 param0, vec3 param1, out vec3 param2);
    111 void mtex_value_mul(float param0, float param1, float param2, float param3,
    float param4, out float param5);
    112 void mtex_negate_texnormal(vec3 param0, out vec3 param1);
    113 void uv_attribute(vec2 param0, out vec3 param1);
    114 void shade_diffuse_minnaert(float param0, vec3 param1, vec3 param2, float p
    aram3, out float param4);
    115 void mtex_rgb_blend(vec3 param0, vec3 param1, float param2, float param3, o
    ut vec3 param4);
    116 void camera(vec3 param0, out vec3 param1, out float param2, out float param
    3);
    117 void vec_math_add(vec3 param0, vec3 param1, out vec3 param2, out float para
    m3);
    118 void mtex_rgb_mul(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    119 void test_shadowbuf(mat4 param0, vec3 param1, sampler2D param2, mat4 param3
    , float param4, float param5, out float param6);
    120 void readshadowbuf(sampler2D param0, float param1, float param2, float para
    m3, float param4, out float param5);
    121 void mtex_rgbtoint(vec4 param0, out float param1);
    122 void mix_color(float param0, vec4 param1, vec4 param2, out vec4 param3);
    123 void mtex_value_blend(float param0, float param1, float param2, float param
    3, float param4, out float param5);
    124 void math_less_than(float param0, float param1, out float param2);
    125 void texco_global(mat4 param0, vec3 param1, out vec3 param2);
    126 void math_divide(float param0, float param1, out float param2);
    127 void mix_mult(float param0, vec4 param1, vec4 param2, out vec4 param3);
    128 void mtex_value_screen(float param0, float param1, float param2, float para
    m3, float param4, out float param5);
    129 void mtex_alpha_from_col(vec4 param0, out float param1);
    130 void texture_wood_sin(vec3 param0, out float param1, out vec4 param2, out v
    ec3 param3);
    131 void shade_toon_spec(vec3 param0, vec3 param1, vec3 param2, float param3, f
    loat param4, out float param5);
    132 void math_tangent(float param0, out float param1);
    133 void curves_vec(vec3 param0, sampler1D param1, out vec3 param2);
    134 void mtex_value_diff(float param0, float param1, float param2, float param3
    , float param4, out float param5);
    135 void mtex_mapping(vec3 param0, vec3 param1, vec3 param2, out vec3 param3);
    136 void lamp_visibility_clamp(float param0, out float param1);
    137 void lamp_visibility_sphere(float param0, float param1, float param2, out f
    loat param3);
    138 void mix_screen(float param0, vec4 param1, vec4 param2, out vec4 param3);
    139 void vec_math_sub(vec3 param0, vec3 param1, out vec3 param2, out float para
    m3);
    140 void mix_burn(float param0, vec4 param1, vec4 param2, out vec4 param3);
    141 void mtex_value_clamp_positive(float param0, out float param1);
    142 void mtex_2d_mapping(vec3 param0, out vec3 param1);
    143 void mtex_value_invert(float param0, out float param1);
    144 void set_rgb_zero(out vec3 param0);
    145 void invert(float param0, vec4 param1, out vec4 param2);
    146 void squeeze(float param0, float param1, float param2, out float param3);
    147 void texco_tangent(vec3 param0, out vec3 param1);
    148 void mtex_image(vec3 param0, sampler2D param1, out float param2, out vec4 p
    aram3, out vec3 param4);
    149 void mix_diff(float param0, vec4 param1, vec4 param2, out vec4 param3);
    150 void texco_uv(vec2 param0, out vec3 param1);
    151 void mtex_value_add(float param0, float param1, float param2, float param3,
    float param4, out float param5);
    152 void mtex_rgb_light(vec3 param0, vec3 param1, float param2, float param3, o
    ut vec3 param4);
    153 void hue_sat(float param0, float param1, float param2, float param3, vec4 p
    aram4, out vec4 param5);
    154 void shade_diffuse_oren_nayer(float param0, vec3 param1, vec3 param2, vec3
    param3, float param4, out float param5);
    155 void mix_add(float param0, vec4 param1, vec4 param2, out vec4 param3);
    156 void lamp_visibility_sun_hemi(mat4 param0, vec3 param1, out vec3 param2, ou
    t float param3, out float param4);
    157 void set_rgba(vec4 param0, out vec4 param1);
    158 void mtex_rgb_overlay(vec3 param0, vec3 param1, float param2, float param3,
    out vec3 param4);
    159 void shade_mul(vec4 param0, vec4 param1, out vec4 param2);
    160 void shade_hemi_spec(vec3 param0, vec3 param1, vec3 param2, float param3, f
    loat param4, float param5, out float param6);
    161 void mtex_rgb_add(vec3 param0, vec3 param1, float param2, float param3, out
    vec3 param4);
    162
    163 uniform vec3 unf1;
    164 uniform vec3 unf3;
    165 varying vec3 varnormal;
    166 uniform float unf7;
    167 uniform float unf9;
    168 uniform float unf11;
    169 uniform float unf13;
    170 varying vec3 varposition;
    171 uniform mat4 unfviewmat;
    172 uniform vec3 unf23;
    173 uniform float unf27;
    174 uniform vec3 unf31;
    175 uniform float unf34;
    176 uniform float unf35;
    177 uniform float unf48;
    178 uniform vec4 unf59;
    179 uniform vec3 unf66;
    180 uniform vec4 unf84;
    181 uniform float unf93;
    182 uniform vec3 unf98;
    183 uniform vec3 unf105;
    184 uniform vec4 unf123;
    185 uniform float unf132;
    186 uniform vec3 unf137;
    187
    188 void main(void)
    189 {
    190 vec3 tmp2;
    191 vec3 tmp4;
    192 vec3 tmp6;
    193 float tmp8;
    194 float tmp10;
    195 float tmp12;
    196 float tmp14;
    197 vec3 tmp16;
    198 vec4 tmp19;
    199 vec3 tmp20;
    200 vec3 tmp24;
    201 float tmp25;
    202 float tmp26;
    203 float tmp29;
    204 float tmp33;
    205 float tmp38;
    206 float tmp40;
    207 float tmp43;
    208 float tmp49;
    209 float tmp51;
    210 float tmp55;
    211 float tmp57;
    212 vec4 tmp60;
    213 vec4 tmp64;
    214 vec3 tmp67;
    215 float tmp68;
    216 float tmp69;
    217 float tmp72;
    218 float tmp74;
    219 float tmp76;
    220 float tmp80;
    221 float tmp82;
    222 vec4 tmp85;
    223 vec4 tmp89;
    224 float tmp96;
    225 vec3 tmp100;
    226 vec4 tmp103;
    227 vec3 tmp106;
    228 float tmp107;
    229 float tmp108;
    230 float tmp111;
    231 float tmp113;
    232 float tmp115;
    233 float tmp119;
    234 float tmp121;
    235 vec4 tmp124;
    236 vec4 tmp128;
    237 float tmp135;
    238 vec3 tmp139;
    239 vec4 tmp142;
    240 vec4 tmp145;
    241 vec4 tmp148;
    242
    243 set_rgb(unf1, tmp2);
    244 set_rgb(unf3, tmp4);
    245 shade_norm(varnormal, tmp6);
    246 set_value(unf7, tmp8);
    247 set_value(unf9, tmp10);
    248 set_value(unf11, tmp12);
    249 set_value(unf13, tmp14);
    250 shade_view(varposition, tmp16);
    251 shade_mul_value(tmp12, vec4(tmp2, 1.0), tmp19);
    252 set_rgb_zero(tmp20);
    253 lamp_visibility_other(unfviewmat, varposition, unf23, tmp24, tmp25, tmp2
    6);
    254 lamp_falloff_invlinear(unf27, tmp25, tmp29);
    255 lamp_visibility_spot_circle(unfviewmat, unf31, tmp24, tmp33);
    256 lamp_visibility_spot(unf34, unf35, tmp33, tmp29, tmp38);
    257 lamp_visibility_clamp(tmp38, tmp40);
    258 shade_inp(tmp6, tmp24, tmp43);
    259 shade_diffuse_oren_nayer(tmp43, tmp6, tmp24, tmp16, unf48, tmp49);
    260 shade_cubic(tmp49, tmp51);
    261 shade_visifac(tmp51, tmp40, tmp10, tmp55);
    262 mtex_value_clamp_positive(tmp55, tmp57);
    263 shade_mul_value(tmp57, unf59, tmp60);
    264 shade_madd(tmp19, tmp60, vec4(tmp2, 1.0), tmp64);
    265 lamp_visibility_sun_hemi(unfviewmat, unf66, tmp67, tmp68, tmp69);
    266 shade_inp(tmp6, tmp67, tmp72);
    267 shade_is_hemi(tmp72, tmp74);
    268 shade_cubic(tmp74, tmp76);
    269 shade_visifac(tmp76, tmp69, tmp10, tmp80);
    270 mtex_value_clamp_positive(tmp80, tmp82);
    271 shade_mul_value(tmp82, unf84, tmp85);
    272 shade_madd(tmp64, tmp85, vec4(tmp2, 1.0), tmp89);
    273 shade_hemi_spec(tmp6, tmp67, tmp16, unf93, tmp14, tmp69, tmp96);
    274 shade_add_spec(tmp96, unf98, tmp4, tmp100);
    275 shade_add(vec4(tmp20, 1.0), vec4(tmp100, 1.0), tmp103);
    276 lamp_visibility_sun_hemi(unfviewmat, unf105, tmp106, tmp107, tmp108);
    277 shade_inp(tmp6, tmp106, tmp111);
    278 shade_is_hemi(tmp111, tmp113);
    279 shade_cubic(tmp113, tmp115);
    280 shade_visifac(tmp115, tmp108, tmp10, tmp119);
    281 mtex_value_clamp_positive(tmp119, tmp121);
    282 shade_mul_value(tmp121, unf123, tmp124);
    283 shade_madd(tmp89, tmp124, vec4(tmp2, 1.0), tmp128);
    284 shade_hemi_spec(tmp6, tmp106, tmp16, unf132, tmp14, tmp108, tmp135);
    285 shade_add_spec(tmp135, unf137, tmp4, tmp139);
    286 shade_add(tmp103, vec4(tmp139, 1.0), tmp142);
    287 shade_add(tmp128, tmp142, tmp145);
    288 mtex_alpha_to_col(tmp145, tmp8, tmp148);
    289
    290 gl_FragColor = tmp148;
    291 }
    Link failed.
    ========

  23. I played around with the .blend File a little bit and voila A Blend File that will work on ATI Graphic cards is what came out…
    Until they Release a next update All the ATI Guys that could not play the Demo so far can now download a Playable Demo at:
    http://www.mediafire.com/?x9valo3xwrn

    I have some Problems to download the Files from SVN
    http://apricot.blender.org/?p=234
    If someone can give me a normal download link for the 2 Levels the have there I will do the same whit them and all the ATI People can enjoy them…

    Have Fun
    Old Jim

  24. Sorry File was not Packedโ€ฆ (POST 190)
    New File can be downloadet here:

    http://www.mediafire.com/?qlgtjttlabc

  25. Nice work, it looks great ๐Ÿ˜€

    Is the game in the future also for linux 86×64 available?

  26. @ augler, yes! the game will be multiplatform, Linux (we are developing the game on linux computers :), Windows, and Mac.